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语句举行转换。


尊龙凯时·(中国区)人生就是搏!


在此函数中 ,若是该SELECT语句包括聚合函数(COUNT ,MAX ,MIN ,AVG ,SUM) ,则重写SELECT工具生涯的表达式列表(下图中第[0]行)。


尊龙凯时·(中国区)人生就是搏!


主窗口工具pMWin取自SELECT工具 ,并在重写时代被使用[1]。遍历SELECT工具的表达式列表 ,重写窗口函数以便于处置惩罚。


尊龙凯时·(中国区)人生就是搏!


注重主窗口工具在WindowRewrite工具中使用。在循环处置惩罚每一个表达式时 ,将xExprCallback函数作为回调函数。当处置惩罚聚合函数(TK AGG FUNCTION)后 ,表达式被删除[2]。


尊龙凯时·(中国区)人生就是搏!


若是被删除的表达式被标记为窗口函数 ,则也会删除关联的Window工具。


尊龙凯时·(中国区)人生就是搏!


并删除该Window工具关联的分区。


尊龙凯时·(中国区)人生就是搏!


回首初始的sqlite3WindowRewrite函数 ,发明该函数在重写表达式列表[4]之后通过exprListAppendList重用这个被删除的分区[5] ,从而导致use-after-free和拒绝服务。若是攻击者可以控制free后的内存 ,则可能破损更大都据 ,从而导致代码执行。


尊龙凯时·(中国区)人生就是搏!


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


尊龙凯时·(中国区)人生就是搏!


通过gdb sqlite3运行PoC ,可视察到0xfafafafafafafafa周围爆发瓦解 ,这意味着对已释放的缓冲区的再次会见:


尊龙凯时·(中国区)人生就是搏!


使用sqlite3 shell运行PoC:


尊龙凯时·(中国区)人生就是搏!


修复建议


现在SQLite厂商针对该误差宣布了误差补丁 ,请更新至SQLite3 3.28.0:https://www.sqlite.org/src/info/69bad9257f8db6a2。


参考链接


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