SQLite 远程代码执行漏洞(CVE-2019-5018)
发布时间 2019-05-1101背景描述
02影响范围
漏洞等级: 高危
影响范围: SQLite 3.26.0、3.27.0
CVSS评分: 8.1
03漏洞详情
SQLite 3.26.0的窗口函数中存在可被利用的use-after-free漏洞,攻击者可通过发送恶意SQL命令来触发此漏洞,导致远程代码执行。
具体细节为,SQLite在对包含窗口函数的SELECT语句进行解析后,使用sqlite3WindowRewrite函数对该SELECT语句进行转换。
在此函数中,如果该SELECT语句包含聚合函数(COUNT,MAX,MIN,AVG,SUM),则重写SELECT对象保存的表达式列表(下图中第[0]行)。
注意主窗口对象在WindowRewrite对象中使用。在循环处理每一个表达式时,将xExprCallback函数作为回调函数。当处理聚合函数(TK AGG FUNCTION)后,表达式被删除[2]。
如果被删除的表达式被标记为窗口函数,则也会删除关联的Window对象。
并删除该Window对象关联的分区。
可以使用Debug版本的sqlite3先清空被free的缓冲区的内容,以更好地进行演示[5]。
通过gdb sqlite3运行PoC,可观察到0xfafafafafafafafa附近发生崩溃,这意味着对已释放的缓冲区的再次访问:
04修复建议
05参考链接
https://www.sqlite.org/src/info/884b4b7e502b4e99