| Snort GRE报文解码整数溢出漏洞 | ★★★ |
| Snort GRE报文解码整数溢出漏洞 | ||
| 作者:哽咽 文章来源:本站原创 更新时间:2007-1-16 8:23:24 【字体:小 大】 | ||
Snort是广泛部署的开放源码网络入侵检测系统(IDS)。很多其他IDS产品中也使用了Snort及其组件。Snort的decode.c文件中DecodeGRE()函数在解码GRE协议时存在整数溢出漏洞,攻击者可能利用此漏洞获取某些敏感信息。 受影响系统: Snort Project Snort 2.6.1.2 描述: Snort是广泛部署的开放源码网络入侵检测系统(IDS)。很多其他IDS产品中也使用了Snort及其组件。 Snort的decode.c文件中DecodeGRE()函数在解码GRE协议时存在整数溢出漏洞,攻击者可能利用此漏洞获取某些敏感信息。 漏洞相关代码如下: ==BEGIN CODE== ... (line 3459 decode.c) void DecodeGRE(u_int8_t *pkt, const u_int32_t len, Packet *p) { u_int8_t flags; u_int32_t hlen; /* GRE header length */ u_int32_t payload_len; ... payload_len = len - hlen; (calculation for payload_len is done here) ... switch (ntohs(p->greh->ether_type)) (line 3597 decode.c) { ... default: (line 3625 decode.c) pc.other++; p->data = pkt + hlen; p->dsize = (u_short)payload_len; (truncates payload_len to 65XXX) return; } ... ==END CODE== payload_len、len和hlen都是32位的无符整型。特制的GRE报文会触发整数下溢,导致payload_len回绕成为非常大的数值。如果使用了GRE头中正确的协议字段的话,攻击者就会到达decode.c的3627行,该行将payload_len做为无符short型分配给p->dsize,这能将payload_len截短到大约65535。 必须以--enable-gre选项编译了Snort且以-d选项运行才能利用这个漏洞dump每个报文的应用层内容。如果接收到了恶意报文,Snort就会在内存中报文长度以外读取和记录数据,导致泄漏可能包含有其他报文内容、Snort规则和各种Snort数据结构的内存部分。 <*来源:Chris Rohlf 链接:http://labs.calyptix.com/advisories/CX-2007-01.txt *> 建议: 厂商补丁: Snort Project 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载 |
||
|
||
| 新闻录入:哽咽 责任编辑:哽咽 | ||
您现在的位置: