LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭
信不信我Ping死你

前言:

近期爆出一个非常给力的漏洞-CVE-2018-4407

这是一个针对于ios和macOS的漏洞。只需要构造特殊的数据包,就能让处于同一网络下的所有“苹果”瞬间瘫痪毫无还手之力

从此之后,Ping死你不再是“黑阔们”的玩笑话。

正文:

CVE-2018-4407漏洞是一个XNU系统内核中网络部分堆缓冲区溢出,因此会同时影响macOS和iOS。目前Apple将其归为了远程执行漏洞

目前所有的杀毒软件都无法防御这种攻击,只有开启macOS防火墙设置中的拒绝全部连接才能做到防御。

漏洞存在于icmp代码模块中(bsd/netinet/ip_icmp.c:339)

m_copydata(n, 0, icmplen, (caddr_t)&icp->icmp_ip);

这段代码处于icmp_error函数中,注释中可以看到它是为了在收到损坏数据包时生成一个报错数据包,并通过ICMP协议返回。上文函数目的是将损坏数据包的报头复制到ICMP消息中,但报头如果过大的话,就会导致缓冲区mbuf出现问题。(mbuf是存储出入站数据包的数据类型)。在这部分代码中,n为入站数据包,m为出站ICMP数据包,而m在294-296行进行内存分配。

if (MHLEN > (sizeof(struct ip) + ICMP_MINLEN + icmplen))  m = m_gethdr(M_DONTWAIT, MT_HEADER);  /* MAC-OK */else  m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);

接着在314行通过mtod得到m数据指针

icp = mtod(m, struct icmp *);

mtod是宏命令,因此不会检查mbuf大小是否合适,数据也并未复制到icp,而是到了&icp->icmp_ip,即icp + 8 bytes。

不过作者没再继续单步调试,基于源码的分析,作者认为m_gethdr创建mbuf可容纳88字节,并通过实验发现触发缓冲区溢出时icmplen大于等于84即可。

附上作者的漏洞利用演示视频

https://rs-beijing.oss.yunpan.360.cn/Object.getFile/anquanke/VmlkZW8gb2YgbXkgUG9DIGZvciBDVkUtMjAxOC00NDA3LiBJdCBjcmFzaGVzIGFueSBtYWNPUyBIaWdoIFNpZXJyYSBvciBpT1MgMTEgZGV2aWNlIHRoYXQgLm1wNA==




推荐文章
评论(0)
分享到
转载我的主页