首页
社区
课程
招聘
[原创] Windows Internet Connection Sharing (ICS) cve-2023-38148 分析
2023-9-13 18:53 4075

[原创] Windows Internet Connection Sharing (ICS) cve-2023-38148 分析

2023-9-13 18:53
4075

## 环境搭建


首先, 创建一个windows虚拟机, 添加两个网卡, 记作net1, net2. 依照 [Enable Internet Connection Sharing (ICS) in Windows 10](https://support.ringcentral.com/article-v2/Enable-Internet-Connection-Sharing-ICS.html?brand=RC_US&product=RingCentral_MVP&language=en_US)启用网络共享.


正常启用后, 观察监听端口, 可以看到多了3个新的监听端口, 分别是53, 67, 68, 都来自同一个进程, 如下所示:


## 补丁分析


对比文件`ipnathlp.dll`文件如下:


可以看到, 在左侧行37位置, 当长度超过0x20时, 它并没有跳转到结束, 而是继续处理, 补丁后, 它直接结束了后续函数操作. 所以问题很明显, 就是在后续的操作中可能存在溢出问题.


这里`a2+228`为data开始位置, buffer空间大小为1500. `a2+220`指示buffer中数据长度.


跟踪了`DhcpExtractOptionsFromMessage`并没有发现问题, 跟踪`DhcpProcessBootpMessage->DhcpAddArpEntry`, 有如下代码:


```

    DhcpRemoveArpEntry(a1);

    memset_0(&Row, 0, sizeof(Row));

    Row.InterfaceIndex = DhcpAdapterIndex;

    Row.Address.Ipv4.sin_family = 2;

    Row.Address.Ipv4.sin_addr.S_un.S_addr = a1;

    Row.PhysicalAddressLength = v4;

    memcpy_0(Row.PhysicalAddress, Src, v4);

    v10 = CreateIpNetEntry2(&Row);

```


`v4`为`a2+230`的值, 即DHCP协议的Hardware address length 字段, `Row`是栈结构体, 大小为0xa8, 可以看到此处当`v4`超过`0xa8`时, 就会栈溢出.



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 19634
活跃值: (29304)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-9-15 09:51
2
1
感谢分享
游客
登录 | 注册 方可回帖
返回