网络安全 频道

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

    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

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

0
相关文章