MAL-2026-13933
Malicious code in cc-skills-helper (npm)
Details
The npm package `cc-skills-helper` is a Windows-only supply-chain dropper published as seven versions (1.0.0 through 1.0.6) in a single 8-hour burst on 2026-04-25 by npm user `betatester44676` (`mayukh.halder02@gmail.com`), then abandoned. `dist-tags.latest` points at 1.0.6.
All seven versions share the same postinstall behaviour. `scripts/postinstall.js` invokes `activateTool()` in `lib/index.js`, which:
1. Fetches a JSON config from the hard-coded C2 `https://kiro-cheap.pro/api/config` (rotatable via the `MY_TOOL_SERVER` env var); the config returns `{ archiveUrl, password, version }`. 2. Downloads a password-protected ZIP from `archiveUrl` (attacker-controlled, size-capped at 500 MiB). 3. Decrypts the ZIP with the returned `password` to recover a Windows PE (`MZ`/`PE` header-verified). 4. Stages the payload under `%LOCALAPPDATA%\cc-skills-helper\bin\helper-<8-hex>.exe` — the install directory is chosen with a comment (in the shipped source) explaining that `%LOCALAPPDATA%` is scanned less aggressively by Windows Defender than `%TEMP%`. 5. Writes the payload as `.dat` first and atomic-renames to `.exe` right before spawn — commented as an evasion for Defender's real-time scanner ("skips .dat extensions"). 6. Best-effort issues PowerShell `Add-MpPreference -ExclusionPath` on the install directory to add a Defender exclusion (works if the npm install is run from an elevated shell). 7. Spawns the `.exe`; on `UNKNOWN`/`EACCES`/`EPERM` from `CreateProcess` ("Defender scanner-lock on freshly-written file"), falls back to launching through `cmd.exe /d /s /c`. 8. The user-facing error message literally instructs the victim on how to add a Defender exclusion themselves.
Because the archive is password-protected, static analysis of the published npm tarball cannot see the payload — only the loader. The payload URL and password are fetched from the C2 at install time, so the same package version can serve different payloads to different victims or different times.
Version 1.0.6 (currently tagged `latest`) is obfuscator.io-hardened (`_0x<hex>` string-array + accessor-function scheme). 1.0.0-1.0.5 ship clear-code variants of the same logic. The `package.json` description is a legitimacy masquerade — it claims the design mirrors `esbuild`, `swc`, `sharp`, and `@parcel/watcher` native-companion distribution, but those all ship code-signed multi-platform binaries via npm tarballs and well-known CDNs; `cc-skills-helper` is Windows-only, hosted on an ad-hoc third-party domain, and encrypted.
At the time of this report, the C2 host `kiro-cheap.pro` is intercepted by Cloudflare with a `Suspected Phishing` interstitial (primary distribution path neutralised), but any Windows host that ran `npm install cc-skills-helper` between 2026-04-25 and the Cloudflare block executed attacker-supplied native code. Detected and classified independently by codelake Research on 2026-08-12; at the time of reporting no `MAL-*` record for this package existed in OSV or GHSA (a first-catch).
Are you affected?
Enter the version of the package you're using.
Affected packages
No fixed version published yet for cc-skills-helper (npm). Pin to a known-safe version or switch to an alternative.