一、漏洞概述
5月16日,PHP官方收到了來(lái)自c dot fol at ambionics dot io的一份報(bào)告,報(bào)告中提出關(guān)于PHP8.1.6版本,存在遠(yuǎn)程代碼執(zhí)行漏洞。經(jīng)PHP官方確認(rèn),于6月9日,PHP官網(wǎng)發(fā)布了該漏洞的修復(fù)方案。
CVE-2022-31625
CVE-2022-31626
二、漏洞等級(jí)
CVE-2022-31625:PHP遠(yuǎn)程代碼執(zhí)行漏洞
高危
漏洞POC:公開(kāi)
CVE-2022-31626:PHP遠(yuǎn)程代碼執(zhí)行漏洞
高危
漏洞POC:公開(kāi)
CVSSv3評(píng)分為9.8
三、漏洞影響
四、漏洞分析
CVE-2022-31625
在pg_query_params()中,由于數(shù)組沒(méi)有被初始化,因此可以釋放以前請(qǐng)求中的延遲值,最終可導(dǎo)致遠(yuǎn)程代碼執(zhí)行。
PHP_FUNCTION(pg_query_params)函數(shù)中,使用zval_try_get_string進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換,如果數(shù)據(jù)類(lèi)型轉(zhuǎn)換錯(cuò)誤就會(huì)調(diào)用_php_pgsql_free_params釋放掉的數(shù)組前部分值i,但由于錯(cuò)誤傳遞參數(shù),傳遞了整個(gè)數(shù)組的大小值num_params,導(dǎo)致釋放了整個(gè)數(shù)組,進(jìn)而導(dǎo)致釋放了之前請(qǐng)求的值。
CVE-2022-31626
該漏洞在驗(yàn)證時(shí)會(huì)將mysql查詢到的auth_data數(shù)據(jù)復(fù)制到內(nèi)存數(shù)組p,申請(qǐng)p內(nèi)存時(shí),只申請(qǐng)了驗(yàn)證數(shù)據(jù)的buffer部分(長(zhǎng)度為packet->auth_data_len)。而實(shí)際的auth_data是packet->auth_data_len+MYSQLND_HEADER_SIZE,所以導(dǎo)致復(fù)制時(shí)將大的數(shù)據(jù)復(fù)制到的小的空間發(fā)生了溢出。
五、修復(fù)建議
目前官方已發(fā)布修復(fù)版本,用戶可升級(jí)至以下安全版本:
PHP 8.1.7
PHP 8.0.20
PHP 7.4.30
注:CVE-2022-31625影響的PHP 5.x官方已結(jié)束維護(hù),請(qǐng)用戶升級(jí)到上述安全版本。
參考資料
[1]https://bugs.php.net/bug.php?id=81719
[2]https://bugs.php.net/bug.php?id=81720
六、產(chǎn)品支持
目前聚銘網(wǎng)絡(luò)脆弱性掃描系統(tǒng)(CSV)已經(jīng)支持該漏洞的檢測(cè),用戶可以到官網(wǎng)http://emrijsm.cn/index.php?catid=51下載最新漏掃插件,來(lái)檢測(cè)是否存在該漏洞。