⛔ Malware Advisory cc-skills-helper · npm · 1.0.0-1.0.6 Detected 2026-08-12
Confirmed malicious. codelake independently detected this at 2026-08-12 — codelake is the source of record — not present in OSV or GHSA at detection (novel first-catch). Now published in the OSV/OpenSSF malicious-packages database as MAL-2026-13933 (from the codelake report, merged 2026-08-13) — codelake remains the source of record and sole finder.. Not yet in any public advisory database at detection time — codelake is the source of record. The C2 domain kiro-cheap.pro is currently intercepted by Cloudflare with a 'Suspected Phishing' interstitial — Cloudflare Trust & Safety independently flagged the domain but did not flag the npm packages that use it.
Advisory · CLR-2026-3044

Password-protected remote-fetch-and-execute dropper in the npm package cc-skills-helper (all 7 releases)

cc-skills-helper (npm, versions 1.0.0-1.0.6, published in a single 8-hour burst on 2026-04-25 by betatester44676) ships a Windows-only postinstall hook that fetches a JSON config from https://kiro-cheap.pro/api/config, downloads a password-protected ZIP whose URL and password the config returns, decrypts the ZIP to recover a .exe, and spawns it as a child process. Runtime path implements a full Windows Defender evasion stack — documented in the shipped source comments themselves. Version 1.0.6 (currently tagged latest) is obfuscator.io-hardened. Novel first-catch: no MAL-* record exists for this package upstream.

CriticalConfirmed maliciousRemote fetch-and-execute dropperAll 7 versions affectedAI + IOC verifiedNovel — not in OSV
Summary

The npm package cc-skills-helper was published in a single 8-hour burst on 2026-04-25 by betatester44676 ([email protected]). Seven versions shipped in that window (1.0.0-1.0.6), all Windows-only, all carrying the same postinstall behaviour. dist-tags.latest points at 1.0.6.

The postinstall hook fetches a JSON config from a hardcoded C2 (https://kiro-cheap.pro/api/config), downloads a password-protected ZIP whose URL and password the config returns, decrypts the ZIP to recover a Windows .exe, and spawns it as a child process. Because the archive is password-protected, static analysis of the published tarball cannot see the payload — only the loader. The package.json compares the design to esbuild, swc, sharp, @parcel/watcher — all of which ship code-signed multi-platform binaries via npm-hosted tarballs, never encrypted, never from a rotating third-party host. This is a legitimacy masquerade.

codelake Research surfaced this on 2026-08-12; at the time of writing no MAL-* record exists in the OpenSSF ossf/malicious-packages database. The C2 host kiro-cheap.pro is currently intercepted by Cloudflare with a 'Suspected Phishing' interstitial (primary distribution path neutralised), but any Windows host that installed the package between 2026-04-25 and the Cloudflare block ran attacker-supplied native code.

Technique / kill-chain

1 · Install-time trigger. package.json declares scripts.postinstall = "node scripts/postinstall.js". Running npm install cc-skills-helper executes the hook as the user, before any code review, dependency scan or npm audit can see the tree.

2 · Fetch encrypted payload. The postinstall invokes activateTool() in lib/index.js, which GETs https://kiro-cheap.pro/api/config (rotatable via MY_TOOL_SERVER env). The server returns JSON {archiveUrl, password, version}. Both archiveUrl and password are attacker-rotatable — the same package version can serve different payloads to different victims at different times.

3 · Decrypt + verify PE. The dropper downloads the ZIP from archiveUrl, calls zip.getData(password) to decrypt an .exe entry, verifies the recovered buffer has the Windows MZ/PE headers, and stages it under %LOCALAPPDATA%\cc-skills-helper\bin\helper-<8-hex>.exe.

4 · Defender evasion — documented in the shipped source comments. The install path is %LOCALAPPDATA% (author comment: "Defender real-time scans it less aggressively than %TEMP%"). The payload is written as .dat first, then atomic-renamed to .exe right before spawn (author comment: "Defender's real-time scanner often skips .dat extensions"). Best-effort PowerShell Add-MpPreference -ExclusionPath on the install dir. Fallback to cmd.exe /d /s /c when direct CreateProcess is refused (author comment: "Defender scanner-lock on freshly-written file"). User-facing error messages tell the victim how to add a Defender exclusion themselves.

5 · Version rotation. Versions 1.0.0-1.0.5 ship the dropper in clear code; version 1.0.6 (currently tagged latest) is obfuscator.io-hardened (_0x<hex> string-array + accessor-function scheme). Same-day publish burst, actively rotated hardening.

Indicators of Compromise
📦npm publisher: betatester44676 / [email protected]
📅Publish window: 2026-04-25 12:54-20:34 UTC (7 versions in 8h burst, then abandoned)
🌐C2 host: kiro-cheap[.]pro (defanged; currently CF-blocked as phishing)
🔗Config URL: https://kiro-cheap[.]pro/api/config (returns JSON {archiveUrl, password})
📁Install dir: %LOCALAPPDATA%\cc-skills-helper\bin\helper-<8-hex>.exe
🚫Defender manipulation: PowerShell Add-MpPreference -ExclusionPath on install dir
🎯Request User-Agent: cc-skills-helper/1.0.1
🔑Tarball SHA-256: 1.0.0=4337a6ef…5079e, 1.0.1=167a367b…faec2, 1.0.2=4adc7eee…40b0aa, 1.0.3=e563eb21…f168e, 1.0.4=580b9ae5…294c7, 1.0.5=919f86a0…02852, 1.0.6=f5c85460…4ab71
Remediation
#ActionPriority
1 Do not install cc-skills-helper. If a package or lockfile references it, remove that dependency and pin the removal in the lockfile. immediate
2 Treat any Windows host that ran npm install cc-skills-helper as compromised. The postinstall runs before npm audit or any package-scanning tool sees the tree. immediate
3 Search for %LOCALAPPDATA%\cc-skills-helper\bin\ on affected hosts. Presence of helper-<8-hex>.exe = the postinstall ran. high
4 Check + clean Microsoft Defender exclusion list: Get-MpPreference | Select-Object -ExpandProperty ExclusionPath, then Remove-MpPreference -ExclusionPath <path> for any cc-skills-helper entries. high
5 Rotate credentials + secrets that were accessible to the user account that ran the install (env vars, browser stores, SSH keys, cloud tokens). high
6 Block outbound to kiro-cheap.pro at the perimeter — the domain is currently Cloudflare-flagged but the block does not cover DNS-only or non-Cloudflare routes. high
7 Watch for republish under a new package name or C2 domain by the same publisher (betatester44676 / [email protected]) or the same dropper shape. medium

codelake Research surfaces novel supply-chain malware via a multi-signal pipeline (behavioural static analysis + AI triage + manual verification), and publishes confirmed findings against the archived shipped artefact.

Detection credit: codelake Research (novel first-catch — no MAL-* record existed at publication; submission to ossf/malicious-packages concurrent).