credential-harvester
伪装为 API Token 管理器,但会悄悄读取环境变量和 .env 文件,并通过 HTTP POST 请求将所有收集到的凭证发送到攻击者控制的服务器。目标端点被硬编码,并在运行时进行 base64 混淆。
函数 exfiltrate_creds() 将包含所有收集到的凭证的 JSON payload 发送至 hxxp://relay.attacker-c2.io/collect。该端点被硬编码,并在运行时通过 base64 解码混淆。
credential_harvester/core.py:47 为什么得出这个结论
3/4 个维度触发发现 4 项声明之外的能力或越权行为。
提取到 2 个高危 IOC 或外联信号。
报告包含 4 步攻击链,另有 4 项高危或严重发现。
发现 1 项需要关注的依赖或供应链线索。
攻击链
初始入口 · __init__.py:1
权限提升 · harvester.py:12
权限提升 · core.py:38
最终危害 · core.py:47
风险分是怎么被拉高的
遍历 os.environ,匹配40多个凭证模式(API_KEY、TOKEN、SECRET、PASSWORD),并递归读取所有可访问目录下的 .env 文件。
收集到的凭证被序列化为 JSON,并通过 requests.post() 外泄至 hxxp://relay.attacker-c2.io/collect,该端点已被确认为已知威胁行为者的基础设施。
声明能力仅限于『读取本地配置文件』,但推断行为包含无限制的文件系统遍历和对外网络连接。
该 skill 注册了一个启动钩子,在每次 Claude session 初始化时重新执行外泄函数,确保凭证收集行为反复发生。
最关键的证据
向攻击者 C2 服务器外泄凭证
函数 exfiltrate_creds() 将包含所有收集到的凭证的 JSON payload 发送至 hxxp://relay.attacker-c2.io/collect。该端点被硬编码,并在运行时通过 base64 解码混淆。
credential_harvester/core.py:47 无限制环境变量扫描
该 skill 遍历 os.environ.items(),在没有任何用户授权或通知的情况下,匹配40多个与凭证相关的键名模式,所有匹配结果被悄悄累积。
credential_harvester/harvester.py:12 注册启动钩子实现持续外泄
__init__.py 注册了一个 atexit 处理器,在每次 session 结束时重新触发 harvest_and_send(),确保外泄行为能够在重启和凭证轮换后持续进行。
credential_harvester/__init__.py:8 C2 端点通过运行时 base64 解码进行混淆
外泄目标 URL 以 base64 编码存储,并在运行时解码,这是恶意软件作者常用的反静态分析技术。
credential_harvester/core.py:31 递归遍历 .env 文件
该 skill 从当前工作目录向上执行 os.walk(),收集所有 .env 文件,包括声明范围之外的文件。
credential_harvester/harvester.py:28 声明能力 vs 实际能力
harvester.py:12 处的 os.environ.items() 遍历 harvester.py:28 处的 os.walk() 调用 core.py:47 处的 requests.post() 调用 __init__.py:8 处的 atexit.register() 注册 可疑产物与外联
hxxp://relay.attacker-c2.io/collect credential_harvester/core.py:47
attacker-c2.io credential_harvester/core.py:31
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| requests | * | pypi | 否 | 未锁定版本 — 允许自动升级至未来存在漏洞的发布版本 |
文件构成
credential_harvester/core.py credential_harvester/harvester.py credential_harvester/__init__.py 安全亮点
没有额外的安全亮点说明。