HackerNews 编译,转载请注明出处:
近日,Ubuntu 22.04 打印子系统中的一个漏洞被发现,该漏洞位于 “ippusbxd” 包中,可能允许攻击者在锁定的笔记本电脑上执行任意代码。
不过,现代编译器的功能缓解了这一风险,防止了漏洞被利用到系统崩溃之外的程度。该漏洞是在对 macOS 打印子系统的代码审计中发现的,macOS 的打印子系统与开源的 CUPS 包有共同的基础。
Talos 研究人员将注意力转向了 IPP-USB 协议,该协议通过互联网打印协议(IPP)为通过 USB 连接的打印机启用网络打印。Ubuntu 22.04 中负责处理 IPP-USB 功能的 “ippusbxd” 包成为了调查的重点。
在检查代码时,由 “-Wstringop-overflow” 标志触发的编译器警告显示,get_format_paper 函数可能存在缓冲区溢出漏洞。该函数解析打印机在初始化时报告的纸张尺寸信息,漏洞源于使用了以源操作数的长度而不是目标缓冲区的大小为长度参数的 strncpy。
攻击者可以通过连接一个报告超大媒体尺寸的恶意打印机来利用这一漏洞,从而导致缓冲区溢出。Talos 情报的 Aleksandar Nikolich 通过分析代码上下文确认了该漏洞,揭示了一个精心设计的 “media-size-supported” 负载可以覆盖堆栈缓冲区。在锁定的笔记本电脑上利用这一漏洞,攻击者可以以提升的权限执行任意代码。
研究人员开发了一个概念验证(PoC)漏洞利用,使用 Raspberry Pi Zero 模拟 USB 打印机来展示该漏洞的潜在危害。通过修改 PAPPL 打印机小工具,模拟的打印机被配置为使用名为 “EXPLOIT_STRING” 的环境变量报告恶意媒体尺寸。当将 Raspberry Pi Zero 连接到目标 Ubuntu 机器时,ippusbxd 守护进程因段错误而崩溃,确认了漏洞的触发。
然而,进一步分析崩溃情况发现,由于编译器功能 “FORTIFY_SOURCE” 的存在,预期的内存损坏和潜在的代码执行被阻止。该功能会自动将潜在不安全的函数替换为更安全的替代品,并在缓冲区溢出发生之前检测到该条件。因此,该漏洞的影响仅限于导致系统崩溃,因为程序会在检测到溢出时明确终止。
研究人员强调,这一事件凸显了现代编译器功能(如静态分析)以及强大的缓解技术(如 “FORTIFY_SOURCE”)的重要性。当默认启用这些功能时,它们可以有效防止漏洞的利用。此外,该事件也强调了在开发过程中积极解决编译器警告的重要性。
在这一特定案例中,该漏洞的潜在影响进一步被削弱,因为 “ippusbxd” 包已被 “ipp-usb” 包取代。新包是用内存安全语言实现的,消除了缓冲区溢出的风险。尽管 Ubuntu 22.04 作为长期支持版本是一个例外,但较新的版本已转向使用 “ipp-usb”。
用户建议
- Ubuntu 22.04 LTS 用户:确保安装了 ipp-usb,并在存在时移除 ippusbxd。所有系统:通过运行 sudo apt update && sudo apt upgrade 应用更新,并重启打印服务。物理安全:限制 USB 设备的访问,以防止未经授权的硬件连接。
消息来源:Cyber Security News, 编译:zhongx;
本文由 HackerNews.cc 翻译整理,封面来源于网络;
转载请注明“转自 HackerNews.cc”并附上原文