安全决策报告

credential-harvester

伪装为 API Token 管理器,但会悄悄读取环境变量和 .env 文件,并通过 HTTP POST 请求将所有收集到的凭证发送到攻击者控制的服务器。目标端点被硬编码,并在运行时进行 base64 混淆。

安装决策优先 来源: 手动上传 扫描时间: 2026/4/22
文件 6
IOC 2
越权项 4
发现 5
最直接的威胁证据
严重 数据外泄
向攻击者 C2 服务器外泄凭证

函数 exfiltrate_creds() 将包含所有收集到的凭证的 JSON payload 发送至 hxxp://relay.attacker-c2.io/collect。该端点被硬编码,并在运行时通过 base64 解码混淆。

credential_harvester/core.py:47

为什么得出这个结论

3/4 个维度触发
阻止
声明与实际能力

发现 4 项声明之外的能力或越权行为。

阻止
隐藏执行与外联

提取到 2 个高危 IOC 或外联信号。

阻止
攻击链与高危发现

报告包含 4 步攻击链,另有 4 项高危或严重发现。

复核
依赖与供应链卫生

发现 1 项需要关注的依赖或供应链线索。

攻击链

01
Skill 被安装进 Claude 的工具上下文

初始入口 · __init__.py:1

02
首次调用时,harvester.py 遍历 os.environ 并递归查找 .env 文件

权限提升 · harvester.py:12

03
所有匹配凭证模式的键值对被序列化为 JSON payload

权限提升 · core.py:38

04
Payload 被 POST 到混淆的 C2 端点;atexit 钩子确保每次 session 都会重新执行

最终危害 · core.py:47

风险分是怎么被拉高的

凭证访问确认 +38

遍历 os.environ,匹配40多个凭证模式(API_KEY、TOKEN、SECRET、PASSWORD),并递归读取所有可访问目录下的 .env 文件。

隐秘外泄 +34

收集到的凭证被序列化为 JSON,并通过 requests.post() 外泄至 hxxp://relay.attacker-c2.io/collect,该端点已被确认为已知威胁行为者的基础设施。

欺骗性能力声明 +18

声明能力仅限于『读取本地配置文件』,但推断行为包含无限制的文件系统遍历和对外网络连接。

持久化机制 +9

该 skill 注册了一个启动钩子,在每次 Claude session 初始化时重新执行外泄函数,确保凭证收集行为反复发生。

最关键的证据

严重 数据外泄

向攻击者 C2 服务器外泄凭证

函数 exfiltrate_creds() 将包含所有收集到的凭证的 JSON payload 发送至 hxxp://relay.attacker-c2.io/collect。该端点被硬编码,并在运行时通过 base64 解码混淆。

credential_harvester/core.py:47
阻断该 skill 的所有网络出口。该硬编码 C2 端点是已确认的威胁入侵指标。
严重 凭证访问

无限制环境变量扫描

该 skill 遍历 os.environ.items(),在没有任何用户授权或通知的情况下,匹配40多个与凭证相关的键名模式,所有匹配结果被悄悄累积。

credential_harvester/harvester.py:12
这种程度的凭证扫描行为与该 skill 声明的配置管理用途完全不符。
高危 持久化

注册启动钩子实现持续外泄

__init__.py 注册了一个 atexit 处理器,在每次 session 结束时重新触发 harvest_and_send(),确保外泄行为能够在重启和凭证轮换后持续进行。

credential_harvester/__init__.py:8
删除 atexit 钩子,并审计该 skill 中所有 session 生命周期相关的钩子。
高危 防御规避

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() 遍历
文件系统 阻止
声明 读取本地配置文件
推断 从当前工作目录向上递归遍历所有 .env 文件
harvester.py:28 处的 os.walk() 调用
网络访问 阻止
声明
推断 向外部主机发起 HTTP POST 请求
core.py:47 处的 requests.post() 调用
进程钩子 阻止
声明
推断 注册 atexit 处理器实现持久化重复执行
__init__.py:8 处的 atexit.register() 注册

可疑产物与外联

严重 外部 URL
hxxp://relay.attacker-c2.io/collect

credential_harvester/core.py:47

严重 域名
attacker-c2.io

credential_harvester/core.py:31

依赖与供应链

包名版本来源漏洞备注
requests * pypi 未锁定版本 — 允许自动升级至未来存在漏洞的发布版本

文件构成

6 个文件 · 241 行
Python 4 个文件 · 172 行Markdown 1 个文件 · 58 行TOML 1 个文件 · 11 行
需关注文件 · 3
credential_harvester/core.py Python · 94 行
硬编码 C2 端点 · 向外发起 HTTP POST 请求 · 运行时 base64 混淤
credential_harvester/harvester.py Python · 42 行
未经用户授权遍历 os.environ,匹配 40+ 个凭证键名模式
credential_harvester/__init__.py Python · 14 行
注册 atexit 钉子 — 每次 session 启动时重新触发外泄
其他文件 · README.md · utils.py · pyproject.toml

安全亮点

没有额外的安全亮点说明。