DO NOT INSTALL / RUN · CONFIDENCE HIGH

A fake take-home that told you to install first

Real report from /interview-repo-safety. The project was not installed or started. This is the live trap on branch original.

In plain English

The README said npm install && npm run dev. That was enough. An animation plugin the assignment did not need pulled in a second package. That package talks to a raw IP address and runs the reply as code. There was also an npm login token sitting in the repo. The skill said do not install, before anything ran.

How it was caught

Confirmed before any install. The assignment asked for on-chain reputation scoring. The animation plugin is not part of that story.

  1. Committed .npmrc with an npm auth token Lets npm install fetch a restricted package. Token value redacted.
  2. Decoy in devDependencies: animatecss-tailwind-adapter@2.0.6 Required from apps/web/tailwind.config.ts. Unrelated to the take-home.
  3. Dropper: @aaron205whitmore/postcss-animate-utils@1.0.2 Unexpected private scope. publishConfig.access: restricted.
  4. C2 on a raw IP POST http://153.75.81.2:1224/debugCheck — do not fetch this payload.
  5. new Function('require', …)(require) Import-time / Tailwind plugin evaluation. No install lifecycle script required. npm run dev is enough.

Summary

Audited branch original (tracks antfarm-original/main) as a static-only review. Known Antfarm / fake take-home supply-chain trap. Install or npm run dev is enough to trigger the chain. Do not install, run, or Phase-2 sandbox this tree.

Assignment context

Presented as “Proof of Dev” — on-chain developer reputation (Next.js, wallet/RainbowKit, Alchemy/Etherscan, scoring worker, optional NFT/EAS). README tells candidates to npm install && npm run dev.

Packages

Lockfile has 1251 packages (lockfileVersion 3). Transitives are lockfile-verified for the malware path. Remaining ~1200 packages were not fully reputation-scored (Sonatype unavailable). The malware path alone is decisive.

Package Version Direct / transitive Assessment
animatecss-tailwind-adapter 2.0.6 Direct (devDep, apps/web) SUSPICIOUS / HIGH RISK
@aaron205whitmore/postcss-animate-utils 1.0.2 Transitive (via decoy) SUSPICIOUS / HIGH RISK
next / react / react-dom 16.2.4 / 19.2.4 Direct COMMON
wagmi / viem / rainbowkit / ethers various Direct COMMON
@ethereum-attestation-service/eas-sdk 2.9.0 Direct COMMON
@alch/alchemy-sdk ^1.1.1 Direct COMMON
@x402/* ^2.19.0 Direct ESTABLISHED BUT NICHE
express / mongodb / zeromq analysis service Direct COMMON
Rust indexer Cargo.toml Direct COMMON — do not build either

Unusual dependencies

Typosquat / package confusion

Our static analysis found: decoy resembles legitimate Animate.css / Tailwind plugin ecosystems; private scope @aaron205whitmore looks like a personal/org package used for package-confusion / gated malware. Sonatype typosquat intel: not verified (MCP unavailable).

Git hooks / editor auto-run

Risk is npm install / dev, not Git hooks or IDE folderOpen tasks.

Lifecycle scripts

No preinstall / install / postinstall / prepare on the malware packages in the lockfile (hasInstallScript absent). Payload is import-time / Tailwind-plugin evaluation — still RCE on a normal CSS build.

Hidden code that would have run

CRITICAL (our static analysis found; also confirmed from a disclosure-sample config.js matching this lockfile version):

App-local child_process in monorepo launchers and tests is expected for this assignment shape — not the C2 chain.

Network / remote execution

Do not fetch the C2 payload.

Credentials / secrets

Values redacted. Never reuse this npm token.

Type File Location Severity
npm _authToken (npm_ prefix) .npmrc (working tree) line 1 //registry.npmjs.org/:_authToken= CRITICAL
Same class of npm token Git history commit 3c6624c (.npmrc added) CRITICAL
Placeholder API / wallet keys .env.example documented placeholders only LOW / informational

Git history findings

Sonatype findings

not verified / unavailable — Sonatype MCP namespace in error state; auth timed out. No CVE/trust scores claimed.

Opsera findings

not verified / incomplete — Opsera authenticated; secrets scan requires gitleaks, which was missing on the audit host. Static findings above stand independently.

Static analysis findings

  1. Confirmed Antfarm-style chain before any install: obscure animation devDep → private scoped dep → malicious JS → hardcoded IP HTTP → base64 → new Function.
  2. Attacker .npmrc present so install can fetch the restricted package.
  3. Lockfile pins exact malware versions and integrity hashes.
  4. tailwind.config.ts actively requires the decoy plugin.
  5. No IDE folderOpen auto-exec; hooks clean.
  6. apps/web/.next artifacts exist; node_modules was absent — do not install to “finish” a prior build.
  7. Current branch original is the malicious assignment. Report reflects that HEAD.

Suspicious addresses

Limitations

Recommendation: DO NOT RUN

Phase 2 sandboxed install/run is refused for this verdict. If you already installed or ran the original assignment elsewhere, treat that machine as compromised and rotate credentials from a clean device.

For a cleaned disclosure archive (malware removed, install blocked), re-run this audit on that specific commit/branch only after confirming HEAD.