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

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

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. 在Salesforce中处理Email的发送
  2. Mac上运行第一个Hadoop实例
  3. 据说这是全世界最最最权威、最准的爱情测试
  4. php 主观题判分,司法考试改革后多少分通过,客观题主观题分数怎么算?
  5. Tiling Challenge
  6. 简单的Gradle Web应用程序
  7. C语言的格式控制符问题
  8. springboot dubbo引入包_spring boot 集成 dubbo 企业完整版
  9. 16、React Native实战之TextInput组件
  10. MeteoInfoLab脚本示例:MODIS Sinusoidal投影HDF数据
  11. 如何才能通过一线互联网公司面试?全网疯传
  12. js与jquery对象的互转
  13. 博为峰Java技术文章 ——JavaSE Swing焦点事件的处理
  14. 定时器2用做uart的波特率发生器
  15. 【工具使用】apizza和postman中post请求下form-data、x-www-form-urlencoded、raw、binary的区别
  16. 图书整理系统(1)-创建图书分类文件夹
  17. [HCIP] 04 - 路由控制之策略路由
  18. 教你如何定位不合理的SQL?并优化之
  19. restTemplate请求设置请求头信息
  20. LM7805的特殊使用方法

热门文章

  1. jboss7体验及配置入门
  2. js中export的问题
  3. 【转载】分层开发思想与小笼包
  4. Puppet 笔记 模板
  5. iOS逆向之自动化重签名
  6. 服务注册中心,Eureka与Zookeeper比较
  7. 织梦轻量级mvc框架笔记
  8. linux看请求报文发送的ip,Linux C 实现最简单的ICMP_ECHO请求报文发送
  9. python的平方运算符_python入门之与用户交互、运算符
  10. linux wait函数头文件_第五十八章、linux中的3种正常结束进程的方式你都了解么...