一個(gè)隱藏SQLite數(shù)據(jù)庫長(zhǎng)達(dá)22年的漏洞

發(fā)布時(shí)間 2022-10-27

安全專家Andreas Kellas詳細(xì)介紹了2000年10月推出的SQLite數(shù)據(jù)庫中的一個(gè)高嚴(yán)重性漏洞,被追蹤為CVE-2022-35737(CVSS評(píng)分:7.5)。

1666848358_635a1666c269cec4151a9.png

CVE-2022-35737漏洞是一個(gè)整數(shù)溢出問題,影響到SQLite 1.0.12至3.39.1版本。該漏洞已在2022年7月21日發(fā)布的3.39.2版本中得到解決。此前,如果在C API的字符串參數(shù)中使用了數(shù)十億字節(jié),則有時(shí)會(huì)允許數(shù)組邊界溢出。攻擊者可以觸發(fā)這個(gè)問題,在受影響的系統(tǒng)上執(zhí)行任意代碼。

CVE-2022-35737在64位系統(tǒng)上可被利用,可利用性取決于程序的編譯方式。在沒有堆棧金絲雀的情況下編譯庫時(shí)確認(rèn)任意代碼執(zhí)行,存在堆棧金絲雀時(shí)未確認(rèn),并且在所有情況下都確認(rèn)拒絕服務(wù)。

所以,為了利用CVE-2022-35737漏洞,攻擊者必須將大字符串輸入傳遞給printf函數(shù)的 SQLite 實(shí)現(xiàn),并且格式字符串包含 %Q、%q 或 %w 格式替換類型。該漏洞與printf調(diào)用的名為“ sqlite3_str_vappendf ”的函數(shù)處理字符串格式的方式有關(guān)。

當(dāng)sqlite3_str_vappendf函數(shù)收到一個(gè)大字符串,并且格式替換類型為%q、%Q或%w時(shí),就會(huì)觸發(fā)有符號(hào)的整數(shù)溢出。

研究人員還發(fā)現(xiàn),如果啟用 unicode 字符掃描的特殊字符,那么在最壞的情況下有可能實(shí)現(xiàn)任意代碼執(zhí)行,或者導(dǎo)致 DoSS 條件。

最后,安全專家Andreas Kellas總結(jié)說道:"這是一個(gè)在編寫時(shí)可能并不像錯(cuò)誤的錯(cuò)誤”。因?yàn)樽匪莸?000年的SQLite源代碼,當(dāng)時(shí)系統(tǒng)主要是32位架構(gòu)"。