需要云计算吗? 即刻开始体验

有关近期 libwebp 和 libvpx 重大漏洞的指南

对于防御者而言,关键举措是确定其网络中工作负载的漏洞。

背景

过去几周中,Google 发布了数项 Google Chrome 更新 ,其中包括针对 CVE-2023-4863CVE-2023-5217的修复。这两个漏洞在发现时都属于已被广泛利用的零日漏洞,CVE 条目已经更新,从原本仅限 Google Chrome 拓展到其底层库——libwebp 和 libvpx。两个 CVE 均已列入 CISA 的 已知被利用的漏洞目录

在这篇博文中,我们分享了这两个漏洞的细节,并就如何检测您网络中存在相关漏洞的应用程序提供了一些建议。由于针对这些漏洞的研究仍在进行之中,本文可能会基于后续相关见解和指南进行更新。

CVE-2023-4863——libwebp

此漏洞由 Apple 的安全工程和架构 (SEAR) 团队和 The Citizen Lab 报告。根据这份报告,研究人员将该漏洞与 BLASTPASS 攻击 联系在一起,这是 NSO Group 发起的一种针对 iPhone 的零点击、零日漏洞利用攻击。

该漏洞本身就是 libwebp 中的堆溢出,存在于无损格式 webp 图像的解码过程中。Ben Hawkes 为此撰写了一篇有关该漏洞的详尽 技术分析 文章。

Libwebp 是 Google 开发的一个库,用来编码和解码 WebP 格式(同样由 Google 开发)的图像。该漏洞存在于该库对无损压缩图像(使用 霍夫曼表)的解析过程中。基本上,攻击者可以操纵这个霍夫曼表,导致库向表分配小于其实际大小的内存;由此造成堆溢出和超出边界的写入。

有许多方法和配置都能实现这样的结果,因此不存在可涵盖所有情景的概念验证 (PoC),但您可以查看 @mistymntncop概念验证 ,了解漏洞利用实现的一个示例。

CVE-2023-5217——libvpx

此漏洞是 Google 威胁分析组的 Clément Lecigne 发现的。还有一家商业监控供应商 也利用了 此漏洞。

Libvpx 也属于 WebP 项目的一部分。具体来说,该库处理 VP8 和 VP9 视频格式的编解码。有关这个漏洞的细节相对较少,但根据已知信息,这也是一个堆损坏漏洞。

有哪些应用程序存在漏洞?

最初报告存在这些漏洞的应用程序仅有浏览器,因为它们存在于 Chromium 之中。但由于该漏洞位于底层库 libwebp 和 libvpx 中,实际影响范围要更广: 使用 libwebp 0.5.0 到 1.3.1 的应用程序和使用 libvpx 1.13.1 之前的版本的应用程序都在受影响之列。

我们整理了一份清单,列举了公开报告的信息中提及依靠这两个库之一的应用程序。此外还添加了我们通过 Insight 查询检测到使用相应库的程序。 这并不代表清单中的应用程序一定存在这些漏洞。

一个程序存在相应漏洞的前提是使用 libwebp 库的 WebP 无损功能,或者 libvpx 库的 V8 或 V9 编解码功能。但除此之外,这些库还有可能用于截然不同的功能,因此即便使用这两个库,也不代表程序一定就存在漏洞。

我们知道多款网络浏览器使用了这些功能,但至于是否使用了这些功能,我们完全依靠其他程序供应商提供的信息进行判断。我们已发现,以下浏览器和其他应用程序使用了受影响的库:

  • Fedora (37–39)
  • Debian (10–12)
  • Google Chrome
  • Firefox
  • Microsoft Edge
  • Opera
  • Tor
  • Brave
  • Vivaldi
  • Telegram
  • Discord
  • 1Password
  • Electron
  • GIMP
  • Slack
  • LibreOffice
  • Skype
  • Grafana
  • KeePassXC
  • VLC

除此之外,还有一位匿名人士分析了 Ubuntu 的程序包存储库,并 上传了一份清单 ,其中列出了依赖于 libvpx7 的所有程序包。

漏洞暴露——OSquery

由于许多不同的地方都用到了该库,而产品需要依靠软件供应商进行更新,因此检测您网络内设备的漏洞影响范围和暴露率至关重要。为了帮您完成这一检测,我们开发了一些 OSquery 查询。Akamai Guardicore Segmentation 客户可使用 Insight 功能,在其网络中运行这些查询。

内存中加载的 libweb 和 libvpx

任何应用程序都可能使用这些库,所以在硬盘上查找这些库不切实际。不过我们可以使用 OSquery 表 process_memory_map 检查每一个运行中进程内已加载的模块(DLL 或 SO 文件),并尝试使用 file 表获取版本。

版本元数据是在编译过程中添加的,而这些数据并非编译库的必要条件,因此不一定能获得这些数据。即便可以获得版本源数据,它可能也并不准确,供应商有可能在其中附加自家软件的版本。建议用户保持谨慎,以免出现误报或漏报。

  SELECT DISTINCT
    procs.name AS process_name,
    pmm.path AS lib_path,
    file.file_version,
    CASE
        WHEN file_version = '' THEN 'unknown version, potentially vulnerable'
        WHEN pmm.path LIKE '%libwebp%' AND file_version < '1.3.2' THEN 'vulnerable version'
        WHEN pmm.path LIKE '%libwebp%' AND file_version >= '1.3.2' THEN 'not vulnerable version'
        WHEN pmm.path LIKE '%libvpx%' AND file_version <= '1.13.1' THEN 'vulnerable version'
        WHEN pmm.path LIKE '%libvpx%' AND file_version > '1.13.1' THEN 'not vulnerable version'
        ELSE 'unknown version, potentially vulnerable'
    END is_vulnerable
  FROM process_memory_map AS pmm
  JOIN processes AS procs USING(pid)
  JOIN FILE ON file.path = pmm.path
  WHERE pmm.path LIKE '%libwebp%' OR pmm.path LIKE '%libvpx%'

定位网络浏览器

考虑到这些 CVE 的初始报告及其应用场景来自 Chromium,我们包含了一条检测已安装浏览器的查询。此查询可帮您定位网络中运行浏览器的资产,您可能需要对这些资产进行进一步的调查。随后,您可以将所安装的版本与 美国国家漏洞数据库 (NVD) 中存在漏洞的浏览器版本清单进行对照比较。

  SELECT name, version FROM programs
  WHERE LOWER(name) LIKE "%chrome%" 
  OR LOWER(name) LIKE "%firefox%" 
  OR LOWER(name) LIKE "%microsoft edge%"
  OR LOWER(name) LIKE "%thunderbird%" 
  OR LOWER(name) LIKE "%brave%" 
  OR LOWER(name) LIKE "%opera%"

定位已安装的程序

若要检查您是否安装了上述清单中的某个程序,请使用以下查询,并将program_name替换为实际程序名称。

  SELECT name, version FROM programs
  WHERE name LIKE "%<program_name>%"

抵御措施

找到存在漏洞的应用程序和资产 

您可以对照本文中分享的应用程序清单和 Osquery 查询,找到网络中可能存在漏洞的应用程序,并获得一份可能存在漏洞的资产清单。

Akamai Hunt 客户已收到一份报告,其中详细分析了其环境中存在这些漏洞的风险。相应的 Hunt 报告基于与本文所述相似的查询,并且已在事件发生后的几小时内发送给客户。在全球范围内,这些查询检测到了数千个存在漏洞的资产。

补丁

在试着评估一个应用程序是否存在漏洞时,需要考虑许多影响因素:它加载的 libwebp 或 libvpx 是什么版本?该应用程序是否使用了 WebP 无损压缩或 VP8/VP9 编解码功能?可能存在的组合形式较多,因此许多应用程序都有存在漏洞的风险,影响可能相当广泛。

遗憾的是,没有单独一款补丁能修复这些漏洞。此外,我们还要依靠软件供应商发布器程序的对应补丁程序,但这可能需要一定的时间。在一段时间内,企业需要评估有哪些工作负载存在漏洞并且仍未修补。

威胁告警的敏感度 

目前并非所有受影响程序均已有可用补丁程序,所以比较谨慎的一种做法或许是提高有关可能存在漏洞且尚未修补的工作负载的告警敏感度。这样即便漏洞被不法分子利用且仍未检测到,您仍然可以在一定程度上了解其后果。

但这可能会加剧告警疲劳。所以我们的建议是:根据受影响工作负载对网络的重要性或其影响力来调整告警敏感度。

总结

在这篇博文中,我们根据现有信息分析了 libwebp 和 libvpx 库的重大漏洞,这些漏洞目前得到了广泛的利用。

对于防御者而言,关键举措是确定其网络中工作负载的漏洞。我们提供了可检测使用这些库的程序的 OSquery 查询,希望能帮您分忧。我们还讨论了在补丁尚未发布的情况下,应该采取哪些行动来缓解部分风险(如调整威胁告警的敏感度)。

本文根据可用信息,简要说明了我们当前的理解并提供了相应建议。我们的审查还在持续进行中,本文的任何信息都可能发生更改。您也可以关注我们的 公众号 以获取更多实时更新。