首页 网络安全 安全学院 查看内容

PHP 5 php_sprintf_appendstring()函数整数溢出漏洞

2009-2-4 15:11 467 0

摘要: 发布日期:2008-03-21更新日期:2008-03-24 受影响系统:PHP PHP 5.2.5描述:----------------------------------------------...
关键词: nbsp formatted print size width PHP int start len appendstring

发布日期:2008-03-21更新日期:2008-03-24 受影响系统:PHP PHP 5.2.5描述:--------------------------------------------------------------------------------BUGTRAQ  ID: 28392CVE(CAN) ID: CVE-2008-1384 PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。 PHP formatted_print.c文件的*printf()函数存在整数溢出漏洞,能够执行PHP脚本的攻击者可能利用此漏洞提升权限。 在formatted_print.c文件的php_sprintf_appendstring()函数中: - ---formatted_print.c-start---inline static voidphp_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,                           int min_width, int max_width, char padding,                           int alignment, int len, int neg, int expprec, int always_sign)- ---formatted_print.c-end--- 主变量为npad。 - ---formatted_print.c-start---    copy_len = (expprec ? MIN(max_width, len) : len);    npad = min_width - copy_len;- ---formatted_print.c-end--- 这里npad为2147483646。 - ---formatted_print.c-start---    req_size = *pos + MAX(min_width, copy_len) + 1;- ---formatted_print.c-end---     req_size overflow - ---formatted_print.c-start---    if (req_size > *size) {        while (req_size > *size) {            *size <<= 1;        }        PRINTF_DEBUG(("sprintf ereallocing buffer to %d bytes\n", *size));        *buffer = erealloc(*buffer, *size);    }- ---formatted_print.c-end--- (req_size > *size)为False,(alignment == ALIGN_RIGHT)为True,因此 - ---formatted_print.c-start---        while (npad-- > 0) {            (*buffer)[(*pos)++] = padding;        }- ---formatted_print.c-end--- gdb调试结果如下: - --- Debug ---0x08295ba5 in php_sprintf_appendstring (buffer=0xbfbfd318, pos=0xbfbfd31c,     size=0xbfbfd324, add=0x28f20404 'A' <repeats 200 times>...,     min_width=2147483646, max_width=0, padding=65 'A', alignment=1, len=1,     neg=0, expprec=0, always_sign=0) ... 0x290fff0c:      'A' <repeats 200 times>...0x290fffd4:      'A' <repeats 44 times> <Error reading address 0x29100000: Bad \                address>0x29100000:      <Error reading address 0x29100000: Bad address>- --- Debug --- 脚本会向内存分配大量数据,导致拒绝服务或执行任意指令。 <*来源:Maksymilian Arciemowicz ([email protected])    链接:http://marc.info/?l=bugtraq&m=120612720417307&w=2*> 建议:--------------------------------------------------------------------------------厂商补丁: PHP---目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: http://cvs.php.net/viewvc.cgi/php-src/NEWS?revision=1.2027.2.547.2.1120&view=markup  
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部