PHP ibase_gen_id()函数单字节溢出漏洞


PHP ibase_gen_id()函数单字节溢出漏洞

发布日期:2010-08-18
更新日期:2010-08-19

受影响系统:
PHP PHP 5.3.3
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 42516

PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。

PHP的ibase_gen_id()函数将用户所提供的generator变量拷贝到了128字节的query变量大小的缓冲区,这可能触发单字节溢出。[1]处是对query变量的snprintf拷贝语句。  

/* {{{ proto int ibase_gen_id(string generator [, int increment [, 

resource link_identifier ]]) 

   Increments the named generator and returns its new value */ 

PHP_FUNCTION(ibase_gen_id) 

    zval *link = NULL; 

    char query[128], *generator; 

    int gen_len; 

    long inc = 1; 

    ibase_db_link *ib_link; 

    ibase_trans *trans = NULL; 

    XSQLDA out_sqlda; 

    ISC_INT64 result; 

  

    RESET_ERRMSG; 

  

    if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 

"s|lr", &generator, &gen_len, 

            &inc, &link)) { 

        RETURN_FALSE; 

    } 

  

    PHP_IBASE_LINK_TRANS(link, ib_link, trans); 

      

    [1] snprintf(query, sizeof(query), "SELECT GEN_ID(%s,%ld) FROM 

rdb$database", generator, inc); 

... 

}

<*来源:Canberk BOLAT
 
  链接:http://www.exploit-db.com/exploits/14678/
*>

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

警 告

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

http://www.exploit-db.com/sploits/ibase_gen_id_poc.zip

建议:
--------------------------------------------------------------------------------
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 使用[2]替换[1]    

    --- [1] snprintf(query, sizeof(query), "SELECT GEN_ID(%s,%ld) FROM 

rdb$database", generator, inc); 

    +++ [2] snprintf(query, sizeof(query) - 1  "SELECT GEN_ID(%s,%ld) 

FROM rdb$database", generator, inc);

厂商补丁:

PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.php.net

相关内容