聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

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

  • ChromiumOS

https://bugs.chromium.org/p/chromium/issues/detail?id=372525

  • FreeBSD

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) {/* Read control data */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);};/* Sanity-check */if(newpos+ctrl[0]>newsize)errx(1,"Corrupt patch\n");/* Read diff string */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。

在满足一定的利用条件时,攻击者如能交付特殊构造的补丁文件,则能够获得远程代码执行能力。

PoC 地址:

https://github.com/x41sec/advisories/blob/master/X41-2020-006/x41-2020-006-bspatch-poc.patch

修复方案

修复方案参见:

  • https://www.freebsd.org/security/advisories/FreeBSD-SA-16:25.bspatch.asc

  • https://www.freebsd.org/security/advisories/FreeBSD-SA-16:29.bspatch.asc

目前不存在任何缓解措施。

时间线

  • 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:漏洞公开

推荐阅读

Linux 和 FreeBSD 被曝多个 DoS 漏洞

开源操作系统FreeBSD修复缓冲溢出漏洞

原文链接

https://www.x41-dsec.de/lab/advisories/x41-2020-006-bspatch/

题图:Pixabay License

本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

 点个 “在看” ,加油鸭~

FreeBSD BSDiff 被曝高危内存损坏漏洞,时隔4年终修复相关推荐

  1. 热门开源多媒体库 PJSIP 被爆5个内存损坏漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

  2. CVE-2013-3346Adobe Reader和Acrobat 内存损坏漏洞分析

    [CNNVD]Adobe Reader和Acrobat 内存损坏漏洞(CNNVD-201308-479) Adobe Reader和Acrobat都是美国奥多比(Adobe)公司的产品.Adobe R ...

  3. CVE-2019-1367 | 脚本引擎内存损坏漏洞

    CVE-2019-1367 | 脚本引擎内存损坏漏洞 安全漏洞 发布时间: 2019-09-23 MITRE CVE-2019-1367 本页内容 执行摘要 利用指数评估 软件更新 缓解 变通方法 常 ...

  4. Windows Server中的 WINS 服务器远程内存损坏漏洞分析

    本文讲的是Windows Server中的 WINS 服务器远程内存损坏漏洞分析, 漏洞概要 在2016年12月,FortiGuard Labs发现并报告了Microsoft Windows Serv ...

  5. 速修复!这个严重的Zlib内存损坏漏洞已存在17年!

     聚焦源代码安全,网罗国内外最新资讯! 作者:Jessica Lyons Hardcastle 编译:代码卫士团队 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人&qu ...

  6. 预警| WebLogic Server再曝高危0 day漏洞

    6月11日,阿里云安全团队发现WebLogic CVE-2019-2725补丁绕过的0day漏洞,并第一时间上报Oracle官方, 6月12日获得Oracle官方确认.由于Oracle尚未发布官方补丁 ...

  7. 开源OS FreeBSD 中 ftpd chroot 本地提权漏洞 (CVE-2020-7468) 的技术分析

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 7月份,一名匿名研究员向 ZDI 报告了 FreeBSD 中的一个本地提权漏洞.它位于 FreeBSD 的文件传输协议守护进程 (ft ...

  8. 固件安全性—防止内存损坏和注入攻击

    固件安全性-防止内存损坏和注入攻击 Firmware Security – Preventing memory corruption and injection attacks 构成物联网(IoT)主 ...

  9. Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍

    本文讲的是Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍, 前言 建议阅读本文之前,你对ARM组件的有个基本了解,本文会先为你介绍32位Linux环境中进程的内存布局,然后再介绍堆栈和堆 ...

最新文章

  1. [视频]youku与56客户端DLL却持
  2. mongodb查询不带表名_原创 | MongoDB常用指令
  3. win10桌面倒计时插件_win10 桌面如何做到清爽好看?这篇教程给你答案
  4. poj2586 Y2K Accounting Bug(贪心)
  5. Biztalk2009安装全过程截图,x64平台需要手动更改运行模式
  6. C#读写SQLSERVER中Image类型图片
  7. Ajax学习札记(前言)
  8. latex中怎么设置每一行文字都对齐_LaTeX技巧870:Latex如何在设置行距后让字体垂直居中?...
  9. origin指数拟合
  10. 蓉叶云库——简单介绍seo技术
  11. 以太坊之dapp例子
  12. FireShot在windows2000上安装的问题
  13. Python爬虫(一)——58同城租房信息
  14. 斯巴达手杖Skytail(加密)
  15. 存储、计算、分布式知识点思维导图(收集整理适合小白)
  16. easyui datagrid-detailview 嵌套高度自适应
  17. 了解痘痘起因才能彻底告别痘痘烦恼
  18. 【java】115-Java经典
  19. 2020.07.24日自编译L大源码openwrt固件x86软路由精简版
  20. C#绘图工具之Redim

热门文章

  1. 程序猿,是如何逆袭的
  2. QT制作全屏播放器以及出现的问题
  3. 转贴:从现在电力短缺看今后劳动力短缺和高校破产
  4. iOS 中UITableViewController 中tableView 会被状态栏覆盖的问题
  5. mysql 取消密码警告
  6. LAMP+LNMP视频教程
  7. DB2计划三招“破甲” IBM在华能否得偿所愿
  8. 入门篇:函数计算中角色和访问策略的讲解
  9. MJRefresh的使用
  10. 第七篇 ScrollView控件