SQLite 远程代码执行缝隙安全公告

颁布功夫 2019-05-13

缝隙编号和级别


CVE编号:CVE-2019-5018,,,, ,,危险级别:高级,,,, ,,CVSS分值:厂商自评:8.1,,,, ,,官方未评定


影响版本

SQLite 3.26.0、3.27.0


缝隙概述


SQLite是一款盛行的SQL数据库引擎,,,, ,,拥有幼型,,,, ,,急剧,,,, ,,靠得住的特点,,,, ,,宽泛用于移动设备,,,, ,,浏览器,,,, ,,硬件设备以及用户利用法式。。。。。。。。


SQLite的窗口函数中存在可被利用的use-after-free缝隙,,,, ,,攻击者可通过发送恶意SQL号令来触发此缝隙,,,, ,,导致远程代码执行。。。。。。。。


缝隙验证


具体细节为,,,, ,,SQLite在对蕴含窗口函数的SELECT语句进行解析后,,,, ,,使用sqlite3WindowRewrite函数对该SELECT语句进行转换。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


在此函数中,,,, ,,若是该SELECT语句蕴含聚合函数(COUNT,,,, ,,MAX,,,, ,,MIN,,,, ,,AVG,,,, ,,SUM),,,, ,,则沉写SELECT对象保留的表白式列表(下图中第[0]行)。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


主窗口对象pMWin取自SELECT对象,,,, ,,并在沉写期间被使用[1]。。。。。。。。遍历SELECT对象的表白式列表,,,, ,,沉写窗口函数以便于处置。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


把稳主窗口对象在WindowRewrite对象中使用。。。。。。。。在循环处置每一个表白式时,,,, ,,将xExprCallback函数作为回调函数。。。。。。。。当处置聚合函数(TK AGG FUNCTION)后,,,, ,,表白式被删除[2]。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


若是被删除的表白式被象征为窗口函数,,,, ,,则也会删除关联的Window对象。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


并删除该Window对象关联的分区。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


回首初始的sqlite3WindowRewrite函数,,,, ,,发现该函数在沉写表白式列表[4]之后通过exprListAppendList沉用这个被删除的分区[5],,,, ,,从而导致use-after-free和回绝服务。。。。。。。。若是攻击者能够节造free后的内存,,,, ,,则可能粉碎更无数据,,,, ,,从而导致代码执行。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


能够使用Debug版本的sqlite3先清空被free的缓冲区的内容,,,, ,,以更好地进行演示[5]。。。。。。。。


8827太阳集团(Macau)股份有限公司-Official website


通过gdb sqlite3运行PoC,,,, ,,可观察到0xfafafafafafafafa左近产生崩溃,,,, ,,这意味着对已开释的缓冲区的再次接见:


8827太阳集团(Macau)股份有限公司-Official website


使用sqlite3 shell运行PoC:


8827太阳集团(Macau)股份有限公司-Official website


建复建议


目前SQLite厂商针对该缝隙颁布了缝隙补丁,,,, ,,请更新至SQLite3 3.28.0:https://www.sqlite.org/src/info/69bad9257f8db6a2。。。。。。。。


参考链接


https://www.talosintelligence.com/vulnerability_reports/TALOS-2019-0777/