hacktricks/src/pentesting-web/dependency-confusion.md

44 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 依赖混淆
{{#include ../banners/hacktricks-training.md}}
## 基本信息
总之,依赖混淆漏洞发生在项目使用了一个**拼写错误**、**不存在**或**未指定版本**的库,并且所使用的依赖库仓库允许从**公共**仓库**获取更新版本**。
- **拼写错误**:导入**`reqests`**而不是`requests`
- **不存在**:导入`company-logging`,一个**不再存在**的内部库
- **未指定版本**:导入一个**内部**的**存在**的`company-requests`库,但仓库检查**公共仓库**以查看是否有**更高版本**。
## 利用
> [!WARNING]
> 在所有情况下,攻击者只需发布一个**恶意包,名称**与受害公司使用的库相同。
### 拼写错误与不存在
如果您的公司试图**导入一个不是内部的库**,那么库的仓库很可能会在**公共仓库**中搜索它。如果攻击者创建了它,您的代码和运行的机器很可能会被攻陷。
### 未指定版本
开发人员**不指定任何版本**的库,或仅指定一个**主要版本**是非常常见的。然后,解释器将尝试下载符合这些要求的**最新版本**。\
如果库是一个**已知的外部库**如python的`requests`),攻击者**无法做太多**,因为他无法创建一个名为`requests`的库(除非他是原作者)。\
然而,如果库是**内部的**,如本例中的`requests-company`,如果**库仓库**允许**检查新版本也来自外部**,它将搜索一个公开可用的更新版本。\
因此,如果一个**攻击者知道**公司正在使用`requests-company`库的**版本1.0.1**(允许小版本更新)。他可以**发布**库`requests-company`的**版本1.0.2**,而公司将**使用该库而不是**内部库。
## AWS修复
此漏洞在AWS的**CodeArtifact**中被发现(阅读[**此博客文章中的详细信息**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d))。\
AWS通过允许指定库是内部还是外部来修复此问题以避免从外部仓库下载内部依赖。
## 查找易受攻击的库
在[**关于依赖混淆的原始帖子**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)中作者搜索了数千个暴露的package.json文件这些文件包含JavaScript项目的依赖项。
## 参考
- [https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)
- [https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)
{{#include ../banners/hacktricks-training.md}}