⛔ Malware Advisory Detected 2026-07-16 · codelake behaviour pipeline
Confirmed malicious. codelake independently detected this at 2026-07-16 · codelake behaviour pipeline — codelake detected and classified @across-toolkit/typescript-config independently from the live npm feed via its install-hook behaviour pipeline (postinstall → reads AWS/SSH/npm credentials → exfil to webhook.site). It was not present in OSV or GHSA at detection time (verified live) — codelake is the source of record (novel first-catch). An npm takedown report has been filed and an OpenSSF malicious-packages submission opened. Now published in the OSV/OpenSSF malicious-packages database as MAL-2026-10704 (from the codelake report, merged 2026-07-24) — codelake remains the source of record.. Not yet in any public advisory database at detection time — codelake is the source of record. Reported to npm for takedown; OpenSSF malicious-packages submission opened crediting codelake Research as finder.
Advisory · CLR-2026-3036

Dependency-confusion package that steals AWS, SSH and npm credentials from Across Protocol developers

The npm package @across-toolkit/[email protected] is a dependency-confusion attack aimed at developers of Across Protocol (across.to). It masquerades as an internal “ESLint/TypeScript config for the across.to toolkit,” and publishes an absurdly high version (99.0.0) so a misconfigured install resolves it from the public registry instead of the private one. Its postinstall hook then reads the host’s AWS credentials, SSH private key, npm token and environment and POSTs them to a hardcoded webhook.site endpoint — a straight credential grab on any developer machine or CI runner that installs it.

CriticalConfirmed maliciousDependency confusionCredential stealerNovel first-catch
Summary

The npm package @across-toolkit/typescript-config (version 99.0.0) describes itself as an “ESLint configuration for the across.to toolkit.” The @across-toolkit scope and that description are the lure: this is a dependency-confusion package aimed squarely at Across Protocol (a real cross-chain bridge, across.to), betting that one of their internal build tools resolves a shared-config name from the public npm registry.

The 99.0.0 version is the tell: publishing an implausibly high version is the standard dependency-confusion trick to win npm’s version resolution over a legitimate private package of the same name.

Its package.json declares postinstall: node postinstall.js, so the payload runs automatically on npm install, before any code is imported — including in CI, containers and developer machines. codelake surfaced it from the live npm feed via its install-hook behaviour pipeline; it was verified as absent from OSV and GHSA at detection — a novel first-catch.

What the postinstall payload does

1 · Harvests credentials. Using os.homedir(), it reads the host’s AWS credentials (~/.aws/credentials), SSH private key (~/.ssh/id_rsa) and npm token (~/.npmrc), and collects process.env.

2 · Exfiltrates to webhook.site. It POSTs the collected data to a hardcoded https://webhook.site/… endpoint — a free request-capture service used here as a disposable, low-effort collector.

3 · Runs on install. Both the root postinstall.js and a nested eslint-config/postinstall.js carry the payload; it executes on npm install via the postinstall hook and uses child_process.

Why it matters. A single npm install — on a developer laptop or, worse, a CI runner with cloud roles — hands the operator AWS credentials, an SSH key and an npm publish token: enough to reach cloud infrastructure, move laterally and publish further malicious packages.

Indicators & characteristics
PKG@across-toolkit/[email protected] (npm) — fake "across.to toolkit" config, no repository
SHA256396023e88ed887f45495ab2fc1d6f2ce91186e4f888136d0f7000639ca758511 (tarball)
HOOKpackage.json: "postinstall": "node postinstall.js" — runs on install, before import
C2https://webhook.site/a585f4ec-20f7-4bd1-bac7-f3e53799dc5f (POST exfil)
CREDSreads ~/.aws/credentials, ~/.ssh/id_rsa, ~/.npmrc, process.env (via os.homedir)
TTPdependency confusion — version 99.0.0 to win resolution; targets the @across-toolkit scope
Response & guidance
#ActionPriority
01 Do not install it. If it appeared in a build or on a developer machine, treat the AWS credentials, SSH key and npm token on that host as compromised. Critical
02 Rotate immediately: AWS access keys, the affected SSH key, and the npm token in ~/.npmrc. Review AWS/CloudTrail and npm publish activity for misuse. Critical
03 Fix the resolution gap. Pin/scope internal packages, configure the private registry for the @across-toolkit scope, and consider npm install --ignore-scripts in CI. Block egress to webhook.site from build agents. High
04 Reported to npm for takedown; OpenSSF malicious-packages submission opened crediting codelake Research. Treat freshly-published packages with a postinstall hook — especially high-version scoped configs — as suspect. Done

Detected + classified independently by codelake Research via its install-hook behaviour pipeline · deterministic structural analysis of the packed tarball (package.json postinstall hook, os.homedir credential reads, webhook.site POST exfil). Verified absent from OSV/GHSA at detection (novel first-catch); npm takedown filed and OpenSSF malicious-packages submission opened crediting codelake Research as finder.

This is a confirmed-malware advisory. No working payload or reproduction is published — the behaviour is described from structural analysis, and the exfil endpoint is named as a defensive indicator only. The original artifact is preserved in the codelake archive and available to verified security researchers on request.