聚焦源代码安全,网罗国内外最新资讯!
Bsdiff 和 bspatch 分别是构建二进制文件和响应的打补丁工具,它们能够有效地为应用程序更新机制应用二进制补丁。
Colin Percival 公司的 bsdiff 工具版本4.3中的 bspatch 被指含有一个高危的内存损坏漏洞 (CVE-2020-14315)。因处理外部输入时检查不足,导致攻击者绕过完整性检查,写出动态分配的缓冲区边界。
尽管打补丁的流程通常和完整性以及真实性检查相关联,但如果真实性检查是在打好补丁后发生的,那么攻击者如能传播恶意补丁,则可在运行 bspatch 代码的进程中引起堆损坏。根据攻击者在恶意补丁文件处理之前和处理过程中控制和调整堆状态的能力,可以实现远程代码执行的后果。一名匿名作者已经在2016年发布关于 FreeBSD bspatch 在32位架构实现的 PoC 视频中进行了演示:https://gist.github.com/anonymous/e48209b03f1dd9625a992717e7b89c4f#file-freebsd-txt-L1192。
这个问题 (CVE-2014-9862) 最初是由一名匿名研究人员报告的,存在于“Apple OS X 10.11.6 之前版本和其它产品”中的 bsdiff bspatch 中,多个项目已在2016年解决这个问题,包括:
https://android.googlesource.com/platform/external/bsdiff/+/4d054795b673855e3a7556c6f2f7ab99ca509998%5E%21/#F0
https://bugs.chromium.org/p/chromium/issues/detail?id=372525
https://www.freebsd.org/security/advisories/FreeBSD-SA-16:25.bspatch.asc
但可造成整数溢出并造成攻击者界外写入的庞大的控制值问题并未修复。FreeBSD 随后发布补丁,通过其它安全加固措施修复了余下的问题。遗憾的是,多数 bspatch 副本中并未导入该修复方案。
值得注意的是,托管在bsdiff 网站 (https://www.daemonology.net/bsdiff/)上 bsdiff 4.3 版本仍然提供了bspatch.c 的副本,该副本仍因负控制值和庞大的控制值易受攻击。我们检查过的所有 bsdiff 的发行版都基于 Linux 发行版,其中一些应用了最初发布的部分修复方案。
在计算缓冲区差值和写操作的大小时检查不充分,导致堆缓冲溢出问题。
while(newpos<newsize) { for(i=0;i<=2;i++) { lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8); if ((lenread < 8) || ((cbz2err != BZ_OK) && (cbz2err != BZ_STREAM_END))) errx(1, "Corrupt patch\n"); ctrl[i]=offtin(buf); };
if(newpos+ctrl[0]>newsize) errx(1,"Corrupt patch\n"); lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]);
当ctrl [0]取负值或者取值足够大到能溢出newpos+ctrl[0] 时,将会通过完整性检查,允许操作通过BZ2_bzRead()溢出new缓冲区边界。值得注意的是BZ2_bzRead() 会将ctrl[0]从64位的off_t 截断为32位int。
在满足一定的利用条件时,攻击者如能交付特殊构造的补丁文件,则能够获得远程代码执行能力。
https://github.com/x41sec/advisories/blob/master/X41-2020-006/x41-2020-006-bspatch-poc.patch
2016-07-21:CVE-2014-9862 发布
2016-07-25:FreeBSD-SA-16:25.bspatch 发布部分补丁
2016-10-10:FreeBSD-SA-16:29.bspatch 发布完整补丁
2020-07-02:X41 团队发未在上游或代码的重要分支中修复该漏洞,或者未正确修复该漏洞。
2020-07-06:Colin Percival 和 distros@ 收到通知
2020-07-09:漏洞公开
https://www.x41-dsec.de/lab/advisories/x41-2020-006-bspatch/
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。
点个 “在看” ,加油鸭~