hacktricks/pentesting-web/dependency-confusion.md
2023-08-03 19:12:22 +00:00

5.6 KiB
Raw Blame History

依赖混淆

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本信息

简而言之,当一个项目使用一个拼写错误的不存在的或者未指定版本的库,并且所使用的依赖库允许从公共仓库中获取更新版本时,就会发生依赖混淆漏洞。

  • 拼写错误:导入**reqests**而不是requests
  • 不存在的:导入一个不再存在的内部库company-logging
  • 未指定版本:导入一个内部存在的company-requests库,但是仓库检查公共仓库以查看是否有更高版本

攻击利用

{% hint style="warning" %} 在所有情况下,攻击者只需要发布一个与受害公司使用的库的名称相同的恶意包。 {% endhint %}

拼写错误和不存在的库

如果你的公司试图导入一个不是内部的库,很可能库的仓库会在公共仓库中搜索它。如果攻击者已经创建了这个库,你的代码和运行的机器很可能会被入侵。

未指定版本

开发人员很常见地不指定库的任何版本,或者只指定一个主要版本。然后,解释器将尝试下载符合这些要求的最新版本
如果库是一个已知的外部库(比如 Python 的 requests攻击者无法做太多事情,因为他无法创建一个名为 requests 的库(除非他是原始作者)。
然而,如果库是内部的,比如这个例子中的 requests-company,如果库仓库允许外部检查新版本,它将搜索公开可用的更新版本。
因此,如果攻击者知道公司正在使用 requests-company 库的1.0.1 版本(允许次要更新),他可以发布requests-company1.0.2 版本,公司将使用这个库而不是内部的库。

AWS 修复

这个漏洞在 AWS 的 CodeArtifact 中被发现(详细信息请阅读这篇博客文章)。
AWS 通过允许指定库是内部还是外部来修复了这个问题,以避免从外部仓库下载内部依赖。

查找受漏洞影响的库

关于依赖混淆的原始文章中,作者搜索了数千个包含 JavaScript 项目依赖的 package.json 文件。

参考资料

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥