文章总结: Hades活动是2026年6月针对PyPI的大规模供应链攻击,涉及37个恶意Python包和60个wheel文件。攻击采用.pth启动钩子、恶意原生扩展和分离式加载器三种机制,通过Bun运行时执行高度混淆的JavaScript载荷,实现跨平台凭证窃取、蠕虫式传播和数据外渗。关键风险包括AI辅助对抗、擦除器威慑机制和SLSA信任链破坏,建议立即隔离环境、轮换凭证并实施CI/CD管道加固。 综合评分: 85 文章分类: 威胁情报,漏洞分析,供应链安全,恶意软件,安全运营
Hades 活动:针对PyPI的大规模供应链攻击分析
原创
威胁情报中心 威胁情报中心
奇安信威胁情报中心
2026年6月10日 14:10 北京
在小说阅读器读本章
去阅读
一、事件概述
2026 年 6 月 7 日至 8 日,一场代号为 “Hades 活动” 的大规模软件供应链攻击席卷 Python 包索引(PyPI)。攻击者在 PyPI 上发布了 60 个恶意 wheel 文件,涉及 37 个 Python 包,利用 Python 的 .pth 启动钩子和原生扩展机制,在开发者机器和 CI/CD 环境中植入高度混淆的 JavaScript 凭证窃取器。
本次攻击的核心特点包括:
- 跨运行时攻击:恶意 Python 包下载并执行 Bun(JavaScript 运行时)载荷,这种跨语言、跨运行时的攻击方式极难被传统安全工具检测。
- 三大投递分支:
.pth启动钩子、恶意原生扩展(.abi3.so)、以及分离式加载器。 - AI 辅助分析对抗:载荷开头包含伪造的提示注入内容,专门欺骗 LLM 驱动的安全扫描器。
- 擦除器威慑机制:安装名为
gh-token-monitor的守护进程,一旦检测到 GitHub 令牌被撤销,将触发破坏性擦除命令。 - 蠕虫式传播:利用窃取的凭证通过 SSH/SCP 横向移动,并利用 OIDC 信任关系发布更多恶意包。
Hades 为与 Mini Shai-Hulud / Miasma 同源的 PyPI 分支,而非独立的供应链攻击事件。截至报告日,Socket对该系列活动的追踪页面已记录 471 个受影响制品。PyPI 安全团队已在事件披露后隔离了大部分受影响的版本。
二、技术分析
2.1 攻击链全景
Hades 活动的攻击链可分为 8 个关键阶段:
- 投递:入侵维护者账户或利用 CI/CD 管道漏洞,发布恶意 PyPI wheel 文件。
- 触发:Python 启动时(通过
.pth文件)或包被导入时(通过原生扩展)自动执行恶意代码。 - 运行时准备:从 GitHub 下载 Bun JavaScript 运行时。
- 载荷执行:使用 Bun 执行高度混淆的 JavaScript 载荷,该载荷包含多个 AES-256-GCM 加密的独立功能模块。
- 凭证窃取:跨平台(Linux/macOS/Windows)从 CI/CD Runner 进程内存中抓取凭证,并窃取云凭证、SSH 密钥、环境变量、AI 工具配置等。
- 数据外渗:通过 GitHub API 创建名称模式固定的公开仓库作为外渗通道。
- 蠕虫传播:利用窃取的凭证通过 SSH/SCP 横向移动,滥用 OIDC 令牌发布更多恶意包,注入恶意 GitHub Actions 工作流。
- 持久化:安装 C2 轮询服务和令牌撤销监控(擦除器)守护进程。
2.2 三大投递机制详解
攻击者使用了三种主要的恶意代码投递与触发方式:
.pth启动钩子(经典模式):利用 Python 的site模块在启动时自动执行.pth文件中以import开头的代码行。恶意.pth文件会检查运行标记,然后下载 Bun 运行时并执行 JavaScript 载荷。这种方式下,只要 Python 解释器启动(包括运行pip或pytest),无需用户导入任何包即可触发。- 原生扩展导入触发(生物信息学子簇):将恶意代码嵌入已编译的原生扩展(
.abi3.so)文件中。当 Python 加载这些扩展时,初始化代码会执行载荷。这种方式完全避开了对 Python 源代码的审查,恶意逻辑隐藏在二进制文件中。 - 分离式加载器(MCP/AI 变体):实现加载器与载荷的分离。
.pth文件不包含载荷,而是在 Python 的模块搜索路径(sys.path)中主动寻找_index.js文件。这种方式可以规避基于包内容的扫描,并允许载荷由其他组件提供。
2.3 载荷与攻击技术
- AI 分析师误导:载荷文件开头嵌入了伪造的系统指令和安全策略注释,旨在欺骗依赖 LLM 进行初步分类的安全扫描器,使其将恶意文件误判为“安全”。
- 模块化载荷架构:与早期活动的单一脚本不同,Hades 载荷采用模块化设计。主引导程序会加载并解密多个独立的功能模块,每个模块对应特定平台(Linux、macOS、Windows)或功能(如凭证窃取、横向移动)。
- 跨平台内存抓取:攻击者能够从 CI/CD Runner 的进程内存中提取明文机密。
- Linux:通过遍历
/proc/{pid}/maps并直接读取/proc/{pid}/mem文件。 - macOS:利用 Mach 内核的
task_for_pid()API,在相同用户 ID 下无需 root 权限即可读取目标进程内存。 - Windows:通过 Win32 API(
OpenProcess,ReadProcessMemory)实现。 - C2 与数据外渗:攻击者滥用 GitHub 公开基础设施作为命令与控制(C2)通道,包括:通过特定提交消息创建“死信投递”通道、执行签名后的 JavaScript 载荷,以及通过轮询 GitHub 搜索关键词获取新指令。
- 蠕虫传播:
- SSH/SCP 横向移动:利用窃取的 SSH 密钥,通过 SCP 将载荷脚本传输到目标主机并执行。
- OIDC 信任滥用:在 GitHub Actions Runner 中,利用 OIDC 令牌获取 PyPI/npm 的发布权限,并使用 Sigstore 基础设施生成具有有效加密签名的 SLSA 出处包,使恶意包看起来来自合法的构建环境。
- 工作流注入:通过创建临时分支并提交恶意 Actions 工作流文件,窃取仓库机密,随后删除操作痕迹。
- 持久化与擦除器威慑:安装后台服务进行 C2 轮询。同时安装
gh-token-monitor守护进程,该进程会持续检查 GitHub 令牌的有效性,一旦检测到令牌被撤销,将立即执行rm -rf ~/等数据擦除命令,以此威慑安全团队的应急响应。 - AI 工具链后门:恶意代码会遍历目录,寻找并篡改 14 种不同 AI 编码助手和 IDE 的规则文件(如 Cursor、Claude、Copilot 等),通过植入恶意指令实现持久化感染。
#
三、组织归因
3.1 威胁组织:TeamPCP
Mini Shai-Hulud / Miasma 相关活动被多个安全厂商归因于 TeamPCP(也被追踪为 DeadCatx3、Miasma、Mini Shai-Hulud)。
| 属性 | 详情 | | — | — | | 首次活跃 | 2025 年 12 月 | | 动机 | 财务驱动(凭证盗窃、勒索软件、加密挖矿) | | 技术特征 | 云原生、自动化、多生态、AI 辅助工具、滥用合法服务(GitHub/Sigstore) | | 已知关联 | CipherForce 勒索软件、LAPSUS$ 集团 |
3.2 活动演变时间线
- 2025 年 12 月:TeamPCP 首次被记录。
- 2026 年 3 月:Trivy、Checkmarx KICS、LiteLLM 等项目遭入侵。
- 2026 年 4 月:
@bitwarden/cli、SAP CAP npm 包遭入侵。 - 2026 年 5 月:Mini Shai-Hulud 大规模攻击(170+ 包),团队在 BreachForums 公开源代码。
- 2026 年 6 月:Miasma 活动(@redhat-cloud-services 等 npm 包)及 Hades 活动(PyPI 大规模入侵)。
攻击主题命名从Shai-Hulud 到Miasma,再到当前的Hades,反映了其多线程、多主题的成熟运营能力。
四、影响评估
4.1 受影响包清单(部分示例)
生物信息学/图机器学习集群:embiggen, ensmallen, gpsea, pyphetools 等。
开发者工具/通用 PyPI 集群:dynamo-release, coolbox, magique, rlask, rsquests 等。
MCP/AI 主题集群:langchain-core-mcp(分离式加载器变体)。
4.2 影响范围评估
| 影响维度 | 严重程度 | 说明 | | — | — | — | | 直接受影响项目 | 高 | 37 个 PyPI 包,多个为生物信息学领域高下载量工具 | | CI/CD 管道风险 | 严重 | 恶意代码在 Python 启动时自动执行,危害巨大 | | 凭证暴露范围 | 严重 | 覆盖 GitHub、云服务商、Kubernetes、SSH、AI 工具等 | | 横向移动与传播潜力 | 严重 | SSH/SCP + OIDC 令牌滥用可导致蠕虫式扩散 | | 数据破坏风险 | 高 | 令牌撤销触发擦除器机制,可能导致数据丢失 | | SLSA 出处信任 | 严重 | 恶意包可携带有效的 Sigstore 签名出处,破坏信任链 |
#
五、防护建议
5.1 紧急响应措施
若确认安装过受影响版本的包,请立即执行以下操作:
- 隔离与清除
- 识别并记录所有安装了受影响版本的环境。
- 立即断开受影响系统的网络连接,或将其隔离。
- 终止可疑的
gh-token-monitor等持久化进程。 - 卸载所有受影响的 Python 包,并手动删除其残留的持久化文件(如
.pth文件、服务配置、计划任务等)。 - 关键:在终止
gh-token-monitor进程前,不要轮换任何被泄露的令牌,以免触发擦除器。
- 凭证轮换(按优先级)
- P0(最高优先级):所有 GitHub 个人访问令牌、GitHub App 令牌、Actions 机密、PyPI/npm 发布令牌。
- P1:云服务商(AWS、GCP、Azure)凭证、Kubernetes 凭证、SSH 密钥。
- P2:AI 工具(Anthropic、Claude)令牌、各类
.env文件中的密钥。
- 环境重建
- 销毁并重新构建所有受影响的开发环境和 CI/CD Runner 实例,确保系统处于纯净状态。
5.2 检测与狩猎
- 文件系统检查:在所有开发机和构建服务器上,搜索是否存在可疑的标记文件(如
/tmp/.bun_ran)、_index.js文件,以及gh-token-monitor相关的服务或脚本。 - 进程与行为监控:关注
python进程启动bun子进程的异常行为,以及对github.com/oven-sh/bun/releases/download/的网络请求。 - GitHub 环境审计:审计组织内近期是否有可疑的临时分支创建、名为
format-results的 Actions 制品,以及描述为Hades - The End for the Damned的异常仓库。搜索提交消息中是否包含DontRevokeOrItGoesBoom等关键词。 - 运行时检测:在网络层面监控对
fulcio.sigstore.dev、rekor.sigstore.dev等 Sigstore 服务的异常访问。
5.3 长期防御策略
- PyPI 包管理安全
- 强制使用虚拟环境隔离项目依赖。
- 锁定所有依赖库的精确版本,并使用可信的私有镜像或代理仓库。
- 在安装新包前,使用自动化安全扫描工具进行检查。
- CI/CD 管道加固
- 实施最小权限原则,为 CI/CD 工作流分配最少的必要权限。
- 优先使用 OIDC 等短期凭证机制,避免使用长期有效的令牌。
- 将所有第三方 Actions 固定到具体的 SHA 提交哈希。
- 对 CI Runner 实施出站网络限制。
- AI 与开发工具链安全
- 定期审计并严格限制
.cursorrules,.claude/settings.json等 AI 助手配置文件的写入权限。 - 对 MCP 服务器等新兴工具实施严格的准入和审查机制。
- 确保
.env等敏感配置文件不会被意外提交或泄露。
#
六、IOC汇总
| 制品 | SHA256 哈希值 |
| — | — |
| langchain_core_mcp-1.4.2-py3-none-any.whl | 6d332f814f15f19758d65026bbfd0a8c49671b319ec77b8fa1b27fc48afff7d9 |
| langchain_core-setup.pth | 6506d31707a39949f89534bf9705bcf889f1ecae3dbc6f4ff88d67a8be3d01b2 |
| _index.js 变体 1(4.8 MB,17 个包) | dc48b09b2a5954f7ff79ab8a2fd80202bd3b59c08c7cdbc6025aa923cb4c0efe |
| _index.js 变体 2(4.7 MB,2 个包) | e1342a80d4b5e83d2c7c22e1e0aaa95f2d88e3dbf0d853a4994b180c93a4b17d |
| *-setup.pth (所有受影响制品通用) | c539766062555d47716f8432e73adbe3a0c0c954a0b6c4005017a668975e275c |
6.2 文件系统指标
| 指标类型 | 路径/文件名 | 说明 |
| — | — | — |
| 执行标记 | /tmp/.bun_ran (Linux)/ %TEMP%\.bun_ran(Windows) | 防止重复执行的标志文件 |
| 防递归锁 | /tmp/tmp.0144018410.lock | 反递归单例锁 |
| C2 状态追踪 | /var/tmp/.gh_update_state | 追踪已执行的 firedalazer 载荷 |
| Bun 下载包 | /tmp/b.zip / %TEMP%\b.zip | Bun 运行时压缩包 |
| Bun 可执行文件 | /tmp/b/bun / %TEMP%\b\bun.exe | 解压后的 Bun 运行时 |
| SSH 传播文件 | /tmp/.sshu-setup.js | SSH 传播载荷 |
| C2 守护进程 | ~/.local/share/updater/update.py | Python C2 轮询脚本 |
| 擦除器脚本 | ~/.local/bin/gh-token-monitor.sh | 令牌监控/擦除脚本 |
| 令牌存储 | ~/.config/gh-token-monitor/token | 当前监控的 GitHub 令牌 |
6.3 持久化服务配置
| 平台 | 服务路径 | 功能 |
| — | — | — |
| Linux | ~/.config/systemd/user/update-monitor.service | C2 轮询服务(每小时) |
| Linux | ~/.config/systemd/user/gh-token-monitor.service | 令牌撤销监控/擦除器触发 |
| macOS | ~/Library/LaunchAgents/com.user.update-monitor.plist | C2 轮询服务 |
| macOS | ~/Library/LaunchAgents/com.user.gh-token-monitor.plist | 令牌撤销监控 |
6.4 原生扩展指标
| 指标 | 说明 |
| — | — |
| ensmallen_haswell.abi3.so | 生物信息学子簇中的木马化原生扩展 |
| ensmallen_core2.abi3.so | 同上 |
| .abi3.so 与 _index.js 同时出现 | 需要审查的可疑包布局 |
6.5 网络指标
| 指标 | 类型 | 说明 |
| — | — | — |
| https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/ | 合法服务滥用 | Bun 运行时下载 |
| https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/ | 合法服务滥用 | Bun 运行时下载(新版本) |
| https://api.anthropic.com/v1/api | 伪装通道 | 向 Anthropic API 发送虚假流量作为伪装 |
| https://fulcio.sigstore.dev | 合法服务滥用 | SLSA 出处签名证书获取 |
| https://rekor.sigstore.dev | 合法服务滥用 | Sigstore 透明度日志上传 |
| Bun/1.3.14 | User-Agent | langchain-core-mcp 的 PyPI 上传 User-Agent |
6.6 GitHub C2 关键词
| 关键词 | 用途 |
| — | — |
| DontRevokeOrItGoesBoom | 令牌死信投递提交搜索 |
| TheBeautifulSnadsOfTime | 签名 JavaScript 载荷提交搜索 |
| firedalazer | Python 下载器提交搜索 |
| thebeautifulmarchoftime | 备用 C2 发现字符串 |
| thebeautifulsnadsoftime | 备用 C2 发现字符串 |
6.7 GitHub 外渗标记
| 标记 | 说明 |
| — | — |
| 仓库描述:Hades - The End for the Damned | 所有外渗仓库的描述 |
| 仓库名模式:stygian-cerberus-[数字] | 外渗仓库命名模式 |
| 仓库名模式:tartarean-charon-[数字] | 外渗仓库命名模式 |
| 提交标记:IfYouYankThisTokenItWillNukeTheComputerOfTheOwnerFully | 威慑性提交消息 |
| 制品名:format-results | Actions 制品名称 |
| 工作流名:Run Copilot | 恶意工作流名称 |
| 文件路径:results/results-*.json | 外渗数据文件路径 |
6.8 针对性指标
| 指标 | 说明 |
| — | — |
| harden-runner | StepSecurity 防御工具被恶意软件针对性拦截 |
| step-security / stepsecurity | StepSecurity 标识被针对性检测 |
| agent.stepsecurity.io | StepSecurity 遥测域名被报告为恶意软件拦截目标 |
| api.stepsecurity.io | StepSecurity API 域名被拦截 |
| app.stepsecurity.io | StepSecurity 应用域名被拦截 |
| /var/run/docker.sock | 被攻击的合法 Docker Socket |
#
七、总结
Hades 活动代表了 2026 年软件供应链攻击的又一技术巅峰。这不仅仅是一次简单的包篡改事件,而是一场精心编排、多阶段、跨平台、跨生态系统的持续性威胁活动。
关键发现
- 攻击技术不断进化:从
.pth启动钩子到原生扩展触发,再到分离式加载器设计,攻击者在短短数天内就完成了三次技术迭代 - AI 对抗成为新常态:提示注入对抗 LLM 扫描器标志着安全工具与攻击者之间的”AI 军备竞赛”已进入实战阶段
- 擦除器威慑开创危险先例:
gh-token-monitor的令牌撤销→数据擦除机制为未来的勒索软件操作提供了新的心理战术模板 - 跨运行时攻击增加检测难度:Python → Bun → JavaScript 的跨语言执行链使得单一生态系统的安全工具难以检测
- SLSA 出处信任被武器化:利用 Sigstore 和 OIDC 生成”合法”的构建出处,对软件供应链的可信验证机制构成了根本性挑战
- MCP/AI 工具链成为新攻击面:针对 Model Context Protocol 和 AI 助手配置的攻击反映了威胁行为者对新兴技术栈的快速适应能力
防御启示
Hades 活动再次证明,软件供应链安全不能仅依赖任何单一控制点。有效的防御需要:
- 多层检测:结合静态分析、运行时监控、网络检测和 GitHub 审计
- 零信任架构:不信任任何包、任何出处签名、任何 CI/CD 管道
- 快速响应能力:在攻击者迭代技术之前检测并遏制威胁
- AI 工具安全:将 AI 助手和 MCP 服务器纳入安全评估范围
- 凭证生命周期管理:实施短期凭证、自动轮换和最小权限原则
八、参考链接
- https://socket.dev/blog/shai-hulud-descends-to-hades-miasma-pypi-wave
- https://socket.dev/blog/mini-shai-hulud-miasma-and-hades-worms-target-bioinformatics-and-mcp-developers-via-malicious
- https://www.stepsecurity.io/blog/the-hades-campaign-pypi-packages
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:奇安信威胁情报中心 威胁情报中心 威胁情报中心《Hades 活动:针对PyPI的大规模供应链攻击分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论