中国站

OpenBSD IPv6报文处理远程内核结构破坏指令执行漏洞

CNNVD-ID编号 CNNVD-200703-308 CVE编号 CVE-2007-1365
发布时间 2007-03-10 更新时间 2007-08-02
漏洞类型 缓冲区溢出 漏洞来源 Alfredo Ortega Mario Vilas Gerardo Richarte
危险等级 超危 威胁类型 远程
厂商 openbsd

漏洞介绍

OpenBSD是一款开放源代码Unix类操作系统。 OpenBSD在处理畸形IPv6协议报文时存在漏洞,远程攻击者可能利用此漏洞导致拒绝服务或执行任意指令。 如果远程攻击者向OpenBSD发送了特制的碎片ICMPv6报文的话,就可以触发mbuf内核内存管理结构中的堆溢出,导致执行任意内核态代码或拒绝服务。被溢出的结构在/sys/mbuf.h中定义如下: struct mbuf { struct m_hdr m_hdr; union { struct { struct pkthdr MH_pkthdr; /* M_PKTHDR set */ union { struct m_ext MH_ext; /* M_EXT set */ char MH_databuf[MHLEN]; } MH_dat; } MH; char M_databuf[MLEN]; /* !M_PKTHDR, !M_EXT */ } M_dat; }; 可见mbuf包含有另一个m_ext类型结构(/sys/mbuf.h): /* description of external storage mapped into mbuf, valid if M_EXT set */ struct m_ext { caddr_t ext_buf; /* start of buffer */ /* free routine if not the usual */ void (*ext_free)(caddr_t, u_int, void *); void *ext_arg; /* argument for ext_free */ u_int ext_size; /* size of buffer, for ext_free */ int ext_type; struct mbuf *ext_nextref; struct mbuf *ext_prevref; #ifdef DEBUG const char *ext_ofile; const char *ext_nfile; int ext_oline; int ext_nline; #endif }; 第二个结构中包含有ext_free变量,这是在释放mbuf时所调用的函数指针。如果使用特制的精心构造的分片IPv6报文覆盖了mbuf的话,攻击者就可以在系统调用m_freem()函数时控制OpenBSD内核的执行流。 此外,由于mbuf存储在了链表中,另一种攻击方式就是覆盖ext_nextref和ext_prevref指针,导致向内核内存的可控制区写入32位数据,类似于用户态堆覆盖攻击。

漏洞补丁

目前厂商已经发布了升级补丁以修复这个安全问题,补丁下载链接: 临时解决方法: * 使用OpenBSD的防火墙阻断所有入站的IPv6报文。向/etc/pf.conf文件中添加以下行:

参考网址

受影响实体

信息来源

查询漏洞

    • 漏洞名称
    • CVE编号
    • CNNVD编号
  • 开始时间

  • 结束时间