Sqlite3 Window function函数远程代码执行漏洞 CVE-2019-5018

  • 发表于
  • Vulndb

研究人员发现在Sqlite3 3.26.0的Windows函数功能中存在UAF漏洞。通过特殊伪造的SQL命令可以产生该UAF漏洞,导致远程代码执行。攻击者可以发送恶意SQL命令来触发该漏洞。

Sqlite3 Window function函数远程代码执行漏洞 CVE-2019-5018

漏洞详情

SQLite是实现SQL数据库引擎的常用库函数,被广泛应用于移动设备、浏览器、硬件设备、用户应用中。也是小型、快速、可靠数据库解决方案的常用选择。
SQLite实现了SQL的 Window Functions 特征,允许对行的子集( Subset、window )进行查询。通过分析含有Window函数的 SELECT 语句, SELECT 语句就会使用 sqlite3WindowRewrite 函数进行转化。

在该函数中,如果使用了聚合函数( COUNT, MAX, MIN, AVG, SUM ),SELECT对象的表达式列表就会被重写。

Master Window对象 pMWin 是从SELECT对象中取出的,在重写过程中也用到了。这一过程是为了使其处理window函数进行容易。

在表达式删除期间,如果表达式被标记为 window function ,相关的window对象也会被删除。

可以看一下原始的 sqlite3WindowRewrite 函数,删除的部分在表达式列表被重写后重用了。

这部分被删除后,会在 exprListAppendList 中被重用,导致UAF漏洞,最终引发DOS。如果攻击者可以控制释放后的内存,那么就可以破坏更多的数据,有可能导致代码执行。

奔溃信息

使用sqlite3 debug版本来破坏释放的缓存的内容可以证明该漏洞的存在。监控 0xfafafafafafafafa 附近的奔溃可以说明释放的缓存正在被再次访问。

PoC利用

可以使用sqlite3 shell运行POC


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