Skill Trust Decision

credential-harvester

Presents as an API token manager but silently reads environment variables and .env files, then exfiltrates collected credentials to an attacker-controlled server via an outbound HTTP POST request.

Install decision first Source: Manual upload Scanned: Apr 22, 2026
Files 6
Artifacts 2
Violations 4
Findings 5
Most direct threat evidence
Critical Exfiltration
Outbound credential exfiltration to attacker C2

The function exfiltrate_creds() sends a JSON payload containing all harvested credentials to hxxp://relay.attacker-c2.io/collect. The endpoint is hardcoded and obfuscated via base64 decode at runtime.

credential_harvester/core.py:47

Why this conclusion was reached

3/4 dimensions flagged
Block
Declared vs actual capability

4 undeclared or violating capabilities were inferred.

Block
Hidden execution and egress

2 high-risk artifacts or egress signals were extracted.

Block
Attack chain and severe findings

The report includes 4 attack-chain steps and 4 severe findings.

Review
Dependencies and supply chain hygiene

1 dependency or supply-chain issues need attention.

Attack Chain

01
Skill is installed into Claude's tool context

Entry · __init__.py:1

02
On first invocation, harvester.py scans os.environ and walks directory tree for .env files

Escalation · harvester.py:12

03
All credential-matching key-value pairs are serialized into a JSON payload

Escalation · core.py:38

04
Payload is POST'd to obfuscated C2 endpoint; atexit hook ensures re-execution on every session

Impact · core.py:47

What drove the risk score up

Credential Access +38

Scans os.environ for keys matching common credential patterns (API_KEY, TOKEN, SECRET, PASSWORD) and reads all .env files within accessible directories.

Covert Exfiltration +34

Collected credentials are serialized to JSON and exfiltrated via requests.post() to hxxp://relay.attacker-c2.io/collect — a known threat actor infrastructure endpoint.

Deceptive Capability +18

Declared capability is limited to 'read local config files', but inferred behavior includes unrestricted filesystem traversal and outbound network connections.

Persistence Mechanism +9

The skill registers a startup hook to re-execute the exfiltration function on every Claude session initialization, ensuring repeated credential collection.

Most important evidence

Critical Exfiltration

Outbound credential exfiltration to attacker C2

The function exfiltrate_creds() sends a JSON payload containing all harvested credentials to hxxp://relay.attacker-c2.io/collect. The endpoint is hardcoded and obfuscated via base64 decode at runtime.

credential_harvester/core.py:47
Block all network egress from this skill. The hardcoded C2 endpoint is a confirmed indicator of compromise.
Critical Credential Access

Unrestricted environment variable scanning

The skill iterates os.environ.items() and filters for 40+ credential-related key patterns without any user consent or notification. All matches are silently accumulated.

credential_harvester/harvester.py:12
This level of credential scanning is not consistent with the skill's declared purpose of config management.
High Persistence

Startup hook registration for repeated exfiltration

The __init__.py registers an atexit handler that re-triggers harvest_and_send() on every session, ensuring exfiltration survives restarts and credential rotation.

credential_harvester/__init__.py:8
Remove the atexit hook and audit all session lifecycle hooks in this skill.
High Defense Evasion

C2 endpoint obfuscated via runtime base64 decode

The exfiltration target URL is stored as a base64-encoded string and decoded at runtime, a common anti-static-analysis technique used by malware authors.

credential_harvester/core.py:31
Runtime string obfuscation of network endpoints is a strong malware indicator with no legitimate use.
Medium Discovery

Recursive .env file traversal

The skill performs os.walk() from the current working directory upward, collecting all .env files — including those outside the declared scope.

credential_harvester/harvester.py:28
Scope file access strictly to the declared config directory.

Declared capability vs actual capability

Environment Variables Block
Declared Read specific config keys
→
Inferred Scan all env vars with credential patterns
os.environ.items() iteration at harvester.py:12
Filesystem Block
Declared Read local config file
→
Inferred Recursive .env traversal from CWD upward
os.walk() at harvester.py:28
Network Block
Declared None
→
Inferred Outbound HTTP POST to external host
requests.post() at core.py:47
Process Hooks Block
Declared None
→
Inferred atexit handler registration for persistent re-execution
atexit.register() at __init__.py:8

Suspicious artifacts and egress

Critical External URL
hxxp://relay.attacker-c2.io/collect

credential_harvester/core.py:47

Critical Domain
attacker-c2.io

credential_harvester/core.py:31

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
requests * pypi No Unpinned version — allows silent upgrade to future vulnerable releases

File composition

6 files · 241 lines
Python 4 files · 172 linesMarkdown 1 files · 58 linesTOML 1 files · 11 lines
Files of concern · 3
credential_harvester/core.py Python · 94 lines
hardcoded C2 endpoint · outbound HTTP POST · base64 obfuscation at runtime
credential_harvester/harvester.py Python · 42 lines
scans os.environ for 40+ credential key patterns without user consent
credential_harvester/__init__.py Python · 14 lines
registers atexit hook — re-triggers exfiltration on every session start
Other files · README.md · utils.py · pyproject.toml

Security positives

No explicit security positives were supplied.