arow 您现在的位置: Yes!黑客联盟 >> 新闻 >> 安全公告 >> 正文
专题栏目
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

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


友情提示:如果您对本文章的内容存在疑问请到点此进入论坛进行讨论

新闻录入:哽咽    责任编辑:哽咽 
  • 上一个新闻:

  • 下一个新闻:
  •