Lucene search

K
seebugRootSSV:1173
HistoryJan 13, 2007 - 12:00 a.m.

Snort GRE报文解码整数溢出漏洞

2007-01-1300:00:00
Root
www.seebug.org
27

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数据结构的内存部分。

Snort Project Snort 2.6.1.2
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

<a href=“http://www.snort.org/” target=“_blank”>http://www.snort.org/</a>