CVE-2019-5018:Sqlite3 远程代码执行漏洞

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

研究人员在SQLite 3.26.0和3.27.0版本上进行了测试。

CVSSv3评分为8.1分,漏洞类型为UAF。

漏洞详情

SQLite是实现SQL数据库引擎的常用库函数,被广泛应用于移动设备、浏览器、硬件设备、用户应用中。也是小型、快速、可靠数据库解决方案的常用选择。

SQLite实现了SQL的Window Functions特征,允许对行的子集(Subset、window)进行查询。通过分析含有Window函数的SELECT语句,SELECT语句就会使用sqlite3WindowRewrite函数进行转化。

CVE-2019-5018:Sqlite3 远程代码执行漏洞

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

CVE-2019-5018:Sqlite3 远程代码执行漏洞

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

CVE-2019-5018:Sqlite3 远程代码执行漏洞

Master window对象是在WindowRewrite对象中使用的。在处理每个表达式过程中,xExprCallback函数会用作处理的回调函数。在处理聚合函数(TKAGGFUNCTION)和添加到表达式列表中后,表达式就会被删除。

CVE-2019-5018:Sqlite3 远程代码执行漏洞

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

CVE-2019-5018:Sqlite3 远程代码执行漏洞

在 Window删除期间,与Window相关的部分都被删除了。

CVE-2019-5018:Sqlite3 远程代码执行漏洞

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

CVE-2019-5018:Sqlite3 远程代码执行漏洞

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

调试信息

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

CVE-2019-5018:Sqlite3 远程代码执行漏洞

通过gdb sqlite3运行POC:

CVE-2019-5018:Sqlite3 远程代码执行漏洞

CVE-2019-5018:Sqlite3 远程代码执行漏洞

PoC利用

可以使用sqlite3 shell运行POC:

./sqlite3 -init poc
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值