Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

hex-encode-utilsnpm

hex-encode-utils is a confirmed malicious npm package (MAL-2026-13695) that steals credentials and exfiltrates sensitive data (malicious versions 1.0.0, 1.0.1, 1.0.2…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in hex-encode-utils (npm)

MAL-2026-13695
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall hex-encode-utils

What this malware does

hex-encode-utils is a purpose-built npm trojan that masquerades as a zero-dependency hex encoding/decoding utility (published by the npm account devroolx under the repo github.com/stdlib-utils/hex-encode-utils). It is a multi-stage downloader/loader that runs automatically on install via a postinstall hook (node runtime.js).

runtime.js first gates execution to real developer machines: it only proceeds if the user home directory contains a Desktop, Documents, or Downloads folder, and caches a timestamp at ~/.cache/hex-encode-utils/.runtime_check to run at most once every 24 hours (sandbox/CI evasion and low-noise persistence). It then exfiltrates host reconnaissance (hostname, username, platform and architecture, Node.js version, OS release, package version, and timestamp) via an HTTPS POST to /report on the attacker-controlled Cloudflare Worker steel-mere-4155.ricardorichp.workers.dev.

It next downloads an AES-256-GCM encrypted blob from /e on the same host, decrypts it with a key derived as the SHA-256 of a hardcoded seed string that is disguised as a Bitcoin "BIP-0174 PSBT version 2 signing specification for hardware wallets" reference (indicating cryptocurrency-wallet targeting), and validates that the decrypted payload is Python source containing a TelemetrySender class. It locates a Python interpreter (python3/python and version-specific fallbacks), writes the decrypted payload to ~/.cache/hex-encode-utils/modules/runtime.py, builds an exec_runtime.py wrapper that invokes TelemetrySender.send(TelemetrySender.load()), and spawns it as a detached, output-suppressed background Python process (detached: true, stdio: 'ignore', .unref()). All C2 traffic disables TLS certificate validation (rejectUnauthorized: false).

The second-stage Python payload is fetched at runtime from attacker infrastructure and was not available for static analysis; based on the wallet/PSBT-signing themed key seed it most likely targets cryptocurrency wallet material. Any host that installed this package should be treated as compromised: remove ~/.cache/hex-encode-utils, hunt for the spawned Python process, and rotate any wallet keys and secrets reachable from the affected machine.

On npm install, scripts/compat.js runs as a postinstall hook and fetches an AES-256-GCM-encrypted blob over HTTPS from two hardcoded Cloudflare Workers hosts (steel-mere-4155.ricardorichp.workers.dev, cold-peak-7969.0x0gnx0.workers.dev) with TLS verification disabled (rejectUnauthorized: false), decrypts it with a hardcoded key derived from a 'BIP-0174' decoy string, writes the plaintext to ~/.cache/hex-encode-utils/modules/exec_runtime.py, and spawns a detached, stdio-ignored Python process to execute it. Before dropping the payload the script POSTs an install beacon to /r on the same Workers host carrying the installer's hostname (os.hostname()), username (os.userInfo()), platform/arch (os.platform()), Node version, and package version, formatted as an HTML Telegram message with chat_id 6087129674 for relay to a Telegram bot. Execution is gated by sandbox-evasion checks that abort in CI/container environments (CI, GITHUB_ACTIONS, DOCKER_CONTAINER, KUBERNETES_SERVICE_HOST) and require Desktop/Documents/Downloads directories under $HOME to confirm a developer workstation. Comments frame the code as a next.js/nuxt-style compatibility shim. The package's stated purpose (hex encode/decode) has no legitimate need for postinstall network I/O, encrypted-payload fetch, Python execution, or host reconnaissance to a Telegram relay.

Malicious versions

6 flagged
1.0.01.0.11.0.21.0.31.0.41.0.5

Indicators of compromise (SHA-256)

5f2d407531e2365d184a55a8457451c8fe4e95a4181d5113fd6cb5f42a5eb2c8
71be420849511d910d53e782914e7459aeb10ab2b918490bc4510bb826f8e591
999c0a7bda643ce11c335436392aac35c2eca53dc92225dd86cbc01cc9015f8c
a5ee374bbc350a4ff5134187bf877eeb6eda711eaf637038879758660ba2a8eb
f6f08ac30311e76d83f9324c8b2bafa74dc2060723f2d61cf49a28fe3575066f
6eacbd1bc6c316b9778956c576d93f7c0ec5a3f537c7a22c5d0eb260826478dc

Detection & response playbook

Credential / info stealer
  1. Find it

    Scan your lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock, etc.) and build artifacts for hex-encode-utils (6 malicious versions). O3 Security's supply-chain scanner checks every dependency against known-malicious package intelligence at install time and in CI, flagging hex-encode-utils across your stack and pipelines.

  2. If you installed it — respond

    hex-encode-utils is built to steal secrets, so assume every credential the build or runtime could read is compromised. Remove it from your project and lockfile, then rotate ALL exposed secrets — npm/registry tokens, cloud keys, CI/CD secrets, SSH keys, and any .env values — from a known-clean machine. Audit logs for unauthorized use of those credentials.

  3. Did it already run?

    If hex-encode-utils was ever installed, its post-install/runtime payload may have already executed. O3's L7 egress monitoring and runtime eBPF sensors detect the credential exfiltration or command-and-control callback after install and block the malicious outbound channel, so you catch and contain the actual compromise — not just the presence of the package.

  4. How O3 protects you

    O3 blocks hex-encode-utils before install through its supply-chain scanner, and if it has already run, detects and severs the exfiltration or C2 callback at runtime through L7 egress monitoring and eBPF.

Frequently asked questions

No. hex-encode-utils on npm has been identified as a malicious package (versions 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5 flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-017248IN-MAL-2026-017245IN-MAL-2026-017250IN-MAL-2026-017247IN-MAL-2026-017251IN-MAL-2026-017249

References

Credits

  • Amazon Inspector · finder
  • SafeDep · finder

Detect & block this

O3 blocks hex-encode-utils-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the credential exfiltration and severs the channel.

Explore

hex-encode-utils (npm) malicious package — MAL-2026-13695 | O3 Security