總機(jī):020-87516161 傳真:020-87516161-8040
地址:廣州市天河北路898號(hào)信源大廈3206-3211室 郵編:510660
安全服務(wù) > 安全公告 > 正文
2018年12月10日,國家信息安全漏洞共享平臺(tái)(CNVD)收錄了由騰訊安全平臺(tái)部Tencent Blade團(tuán)隊(duì)發(fā)現(xiàn)并報(bào)告的SQLite遠(yuǎn)程代碼執(zhí)行漏洞(CNVD-2018-24855)。攻擊者利用該漏洞,可在未授權(quán)的情況下遠(yuǎn)程執(zhí)行代碼。目前漏洞利用細(xì)節(jié)尚未公開。
一、漏洞情況分析
SQLite作為嵌入式數(shù)據(jù)庫,支持大多數(shù)SQL標(biāo)準(zhǔn),實(shí)現(xiàn)了無服務(wù)器、零配置、事務(wù)性的SQL數(shù)據(jù)庫引擎,在網(wǎng)頁瀏覽器、操作系統(tǒng)、嵌入式系統(tǒng)中使用較為廣泛。Web SQL數(shù)據(jù)庫是引入了一套使用SQL操作客戶端數(shù)據(jù)庫的API,以SQLite作為底層實(shí)現(xiàn),可在最新版的Chrome/Chromium瀏覽器運(yùn)行。
Chromium官方發(fā)布了11月份安全漏洞公告,其中包含SQLite遠(yuǎn)程代碼執(zhí)行漏洞。該漏洞通過調(diào)用Web SQL API,臨時(shí)創(chuàng)建數(shù)據(jù)庫,并惡意修改SQLite數(shù)據(jù)庫內(nèi)部表,使代碼運(yùn)行至錯(cuò)誤分支。之后,攻擊者就可通過調(diào)用SQLite的數(shù)據(jù)庫索引操作觸發(fā)漏洞,實(shí)現(xiàn)對(duì)瀏覽器的遠(yuǎn)程攻擊,在瀏覽器的渲染器(Render)進(jìn)程執(zhí)行任意代碼。
同時(shí),作為基礎(chǔ)組件庫的SQLite也作為擴(kuò)展庫被許多程序使用,例如PHP、Python等等,攻擊者可通過同樣的攻擊代碼,在這些進(jìn)程的上下文中本地或遠(yuǎn)程任意執(zhí)行代碼,或?qū)е萝浖芙^服務(wù)。
CNVD對(duì)該漏洞的綜合評(píng)級(jí)為“高危”。
二、漏洞影響范圍
根據(jù)官方公告情況,該漏洞的影響版本如下:
(1)Chrome瀏覽器71.0.3578.80以下版本
(2)使用Chromium內(nèi)核的瀏覽器軟件
(3)Android手機(jī)WebView組件及使用WebView組件的第三方App
(4)使用SQLite組件和SQLite庫的程序(尤其是可能接收外部惡意輸入執(zhí)行SQL語句的程序,例如PHP SQLite3組件)
三、漏洞處置建議
1、谷歌/SQLite官方修補(bǔ)方案
Chromium產(chǎn)品需更新至官方穩(wěn)定版71.0.3578.80,或同步更新至代碼版本Commit c368e30ae55600a1c3c9cb1710a54f9c55de786e及以上(https://chromium.googlesource.com/chromium/src/+/c368e30ae55600a1c3c9cb1710a54f9c55de786e)。
SQLite及SQLite庫產(chǎn)品需更新至3.26.0版本,該版本為目前的官方穩(wěn)定版(https://www.sqlite.org/releaselog/3_26_0.html)。
2、臨時(shí)解決方案:
(1)禁用WebSQL:編譯時(shí)不編譯third-party的sqlite組件
由于WebSQL沒有任何規(guī)范,目前僅有Chrome、Safari支持。但是Safari也已經(jīng)閹割了大部分sqlite功能。如果關(guān)閉此功能不影響產(chǎn)品,可禁用WebSQL。
驗(yàn)證方法:重新編譯后的內(nèi)核,應(yīng)無法在控制臺(tái)調(diào)用openDatabase函數(shù)。
(2)關(guān)閉SQLite中的fts3功能
如關(guān)閉此功能不影響產(chǎn)品,可禁用該功能。Safari在Webkit中關(guān)閉fts3的方案,請(qǐng)參考https://github.com/WebKit/webkit/commit/36ce0a5e2dc2def273c011bef04e58da8129a7d6。
驗(yàn)證方法:執(zhí)行如下JavaScript代碼時(shí),不返回{a:1}則表示已關(guān)閉該功能:
var db = openDatabase('xxxxx'+parseInt(Math.random()*10000).toString(),1, 'fts_demo', 5000000);
db.transaction(function(tx) {
?????tx.executeSql('create virtual table x using fts3(a,b);');
?????tx.executeSql('insert into x values (1,2);');
?????tx.executeSql('select a from x;', [], function (tx, results) {?
console.log(results.rows[0]);
?????});
});
(3)使用騰訊QQ瀏覽器提供的瀏覽服務(wù)(https://x5.tencent.com/)
目前騰訊X5 SDK(v3.6.0.1371)已修復(fù)此漏洞,第三方Android APP可由Webview切換到X5內(nèi)核,修復(fù)此漏洞。
附:參考鏈接:
(1)谷歌安全公告:
https://chromereleases.googleblog.com/2018/12/stable-channel-update-for-desktop.htm
(2)SQLite更新公告:
https://www.sqlite.org/releaselog/3_26_0.html
(3)SQLite漏洞詳情頁面: