高端的二进制0day挖掘,往往只需要从1day的分析开始

💡 原文中文,约24300字,阅读约需58分钟。
📝

内容提要

本文介绍了sudo中的堆溢出漏洞,可实现本地提权。漏洞影响范围广泛,从1.8.2到1.8.31p2的所有旧版本和从1.9.0到1.9.5p1的所有稳定版本都受影响。文章还提供了漏洞复现和修改sudo源码的方法。

🔎

延伸解读

漏洞影响范围与平台风险

该堆溢出漏洞影响sudo 1.8.2至1.8.31p2的所有旧版本,以及1.9.0至1.9.5p1的所有稳定版本,默认配置下即可被利用。除Linux发行版外,macOS、AIX和Solaris也被报告可能受影响,但Qualys尚未独立证实。这意味着大量类Unix系统面临本地提权风险,管理员需尽快排查sudo版本并更新。

漏洞触发机制解析

漏洞位于set_cmnd函数中,当处理命令行参数时,若遇到反斜杠后跟非空白字符,循环会跳过空字符并多复制一次数据,导致堆溢出。攻击者可通过构造特定参数(如sudoedit -i '\' 加长字符串)触发,造成malloc错误或内存破坏。理解这一机制有助于分析类似漏洞。

复现与模糊测试要点

复现需编译特定版本sudo,并修改源码以适配AFL的argv模糊测试。关键修改包括引入argv-fuzz-inl.h、固定argv[0]为sudoedit、跳过密码验证,以及调整initprogname以使用argv[0]。这些修改需确保不影响核心逻辑,否则可能无法触发漏洞。使用AFL配合ASAN可有效检测堆溢出。

❓

Q&A

sudo中的堆溢出漏洞是如何影响系统安全的?

该漏洞允许任何非特权用户在易受攻击的主机上获得root权限,从而实现本地提权。

哪些版本的sudo受到堆溢出漏洞的影响?

受影响的版本包括1.8.2到1.8.31p2的所有旧版本和1.9.0到1.9.5p1的所有稳定版本。

如何复现sudo中的堆溢出漏洞?

复现该漏洞需要编译特定版本的sudo,并进行源码修改以便进行模糊测试,使用AFL工具进行测试。

Qualys团队是如何发现sudo中的堆溢出漏洞的?

Qualys团队通过分析sudo的源码,发现了set_cmnd函数中的内存分配和复制过程存在问题,导致堆溢出。

堆溢出漏洞的根本原因是什么?

根本原因在于set_cmnd函数中的内存分配和复制过程存在缺陷,导致在特定条件下发生堆溢出。

该漏洞在不同平台上的影响如何?

该漏洞不仅影响Linux,还可能在macOS、AIX和Solaris等平台上存在,其他平台也可能同样脆弱。

🏷️

标签

➡️

继续阅读