Ostorlab 可检测依赖混淆漏洞
依赖混淆(Dependency Confusion)是一种影响严重的新型攻击。本文概述了该漏洞以及其他供应链攻击。

Alex Birsen 发布了一项新颖的研究,展示了他如何利用泄露的私有包名称,攻陷构建环境、CI/D 流水线以及 开发人员的工作站。
这一新漏洞是另一种供应链攻击,通常被称为依赖混淆(Dependency Confusion)或替换攻击(Substitution Attack)。
其根本原因与外部包管理系统有关:这些系统通常允许部署私有 仓库,用于托管仅供内部使用的包。
在构建过程中,包管理器并不会优先选择私有仓库,而是选择版本号 最高的包。
攻击者可以利用这一行为:在公共仓库中创建一个恶意包,并使用足够高的 版本号,以确保构建时使用的正是该恶意包。
Sonatype 报告称,在该漏洞公布后的短短几天内,利用该漏洞并携带恶意载荷的新包数量 增长了 430%。
依赖劫持影响所有软件,移动应用尤其如此,因为它们经常泄露私有 包名称。
Ostorlab 已新增对泄露依赖名称的检测支持,并会报告 NPM 上易受依赖混淆攻击的 包名称。
Ostorlab 团队正在研究其他包管理器的可利用性和可检测性,即 Cocoapods、Maven、 Gradle、Cordova、Xamarin Nuget 和 Flutter。
我受到影响了,该怎么办?
NPM 包支持为包设置作用域(scope)。公共 npm 注册表上的作用域包只能 由与该作用域关联的用户或组织发布,并且该作用域内的包可以设为私有。此外, 作用域名称还可以与指定的注册表关联。
{
"name": "@ostorlab/dep1",
"version": "1.2.3",
"description": "Scoped dependency 1",
"dependencies": {
"@ostorlab/dep2": "1.2.3"
}
}
所使用的作用域必须事先创建,以确保攻击者无法抢占它。要创建公共作用域,请按照 以下说明操作:
可以在 .npmrc 文件中加入类似下面的一行来配置作用域注册表:
@ostorlab:registry = https://reg.ostorlab.internal/
依赖越多,漏洞越多
Ostorlab 还能检测其他形式的供应链和依赖漏洞。
它会列出来自 Gradle、Maven、Cocoapods、Xamarin、Cordova 和 Javascript 的已编译依赖。列出已编译 依赖可以弥补源代码依赖分析的局限,例如识别传递依赖:即依赖的依赖,其中有些版本并未明确指定, 只有在构建时才能确定。

Ostorlab 能检测静态编译的依赖,这类依赖常常受到内存 破坏等高危漏洞的影响。对于移动应用而言,常见的依赖是图像解析和图像压缩库,例如 libpng、libjpeg 和 libtiff。Ostorlab 还能检测 70 多个原生库,例如 libxslt、zlib、openssl、libcurl 等等。
Ostorlab 能检测影响这些包的已知漏洞,并维护着自己精心整理的 未公开漏洞数据库。Ostorlab 漏洞数据库包含 1.3 Million 条记录,并在持续 更新中。

这些类别的漏洞均已被社区版扫描器覆盖。