PHP Mysqlnd扩展php_mysqlnd_read_error_from_line()函数堆溢出漏洞
发布日期:2010-05-31
更新日期:2010-06-01
受影响系统:PHP PHP <= 5.3.2
描述:
BUGTRAQ ID:
40461
CVE(CAN) ID:
CVE-2010-3063
PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。
PHP所使用的Mysqlnd扩展用于处理与mysql服务器的通讯和实现mysql协议。该扩展的php_mysqlnd_read_error_from_line()函数中存在堆溢出漏洞:
if (buf_len > 2) {
*error_no = uint2korr(p);
p+= 2;
/* sqlstate is following */
if (*p == '#') {
memcpy(sqlstate, ++p, MYSQLND_SQLSTATE_LENGTH);
p+= MYSQLND_SQLSTATE_LENGTH;
}
error_msg_len = buf_len - (p - buf);
error_msg_len = MIN(error_msg_len, error_buf_len - 1);
memcpy(error, p, error_msg_len);
} else {
*error_no = CR_UNKNOWN_ERROR;
memcpy(sqlstate, unknown_sqlstate, MYSQLND_SQLSTATE_LENGTH);
}
上述代码确保buf_len大于2,但没有考虑SQLSTATE,因此对于buf_len > 2且buf_len < 2 + MYSQLND_SQLSTATE_LENGTH + 1可能出现堆溢出。在这种情况下error_msg_len为负数,导致4G数据的memcpy()操作。
<*来源:Stefan Esser (
s.esser@ematters.de)
链接:
http://php-security.org/2010/05/31/mops-2010-058-php-php_mysqlnd_read_error_from_line-buffer-overflow-vulnerability/index.html
*>
建议:
厂商补丁:
PHP
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://svn.php.net/viewvc?view=revision&revision=298703浏览次数:4153
严重程度:0(网友投票)