
Introduction
The Panther Threat Research Team has been tracking a sustained npm supply chain attack campaign impersonating the device insurance provider Asurion and its subsidiaries. The campaign, active from April 1 through April 8, 2026, published at least 15 malicious package versions across four scoped npm namespaces using dependency confusion and typosquatting to distribute a multi-stage credential harvester. All packages masquerade as internal React UI component libraries or e2e testing utilities. The malware extracts AWS/GCP/Azure credentials, SSH private keys, Kubernetes service account tokens, npm auth tokens, CI/CD pipeline secrets, Docker registry credentials, cloud IMDS metadata, and sensitive system files including /etc/shadow. The payload includes one of the most comprehensive sandbox evasion suites we have observed in npm malware, fingerprinting at least eight named analysis platforms. At its peak, the @sbxapps package recorded 814 weekly downloads. The C2 infrastructure evolved from a Slack webhook to an XOR-obfuscated AWS API Gateway endpoint over the course of a single week.
Campaign Overview
The attack was identified through our automated npm scanning pipeline and every package version received a unanimous malicious verdict with confidence scores between 0.98 and 1.0. Two throwaway npm accounts, both 0-day-old at time of first publication, were used to target four organizational scopes:
npm Scope | Impersonated Entity | Versions | Maintainer |
|---|---|---|---|
| Asurion field service tools | v45.0.0 – v50.0.1 (8+ versions) |
|
| Asurion hub web platform | v96.0.1, v98.0.1 |
|
| Soluto (Asurion subsidiary) | v200.0.1, v205.0.1 |
|
| Asurion core libraries | eventualize-react- and -b v99.0.1 |
|
Technical Analysis
Execution chain
The package.json defines preinstall/postinstall hooks that run a decoy script performing legitimate-looking dist file checks before silently calling the actual payload, preflight-check.js, inside a bare try/catch.
Starting with v46.0.0, the campaign introduced a second execution path. The package's dist/index.js entry point includes a require('./utils/analytics') call disguised as usage telemetry, which asynchronously loads the malware payload via setImmediate(). This means the malware fires at runtime when application code imports the package, regardless of whether --ignore-scripts was used during installation.
Payload stages
The payload implements a six-stage collection pipeline preceded by comprehensive anti-analysis. Annotated backup files (.bak) accidentally included in later versions confirmed the staged architecture with.
Stage 0 — Sandbox evasion. Detects 11+ analysis environments by specific fingerprints (debugger attachment, environment variable keywords, INetSim DNS entries, SupplySec/Diffend/Firecracker/Sunaba/Tencent artifacts, and others). If detected, calls process.abort(). For borderline cases, adds 60–180 second delays with jitter to outlast sandbox timeouts.
Stages 1–6 — Data collection.
Stage 1 — Systematically collects host info and CI/CD environment classification.
Stage 2 — Environment variables matching 27+ cloud/secret patterns, plus
.envfiles,.npmrctokens, and shell configs.Stage 3 — AWS/GCP/Azure credential files, SSH private keys, Docker config, and git credentials.
Stage 4 —
/etc/passwd,/etc/shadow, and container socket enumeration.Stage 5 — Kubernetes service account tokens and active K8s API queries for secrets and configmaps.
Stage 6 — Live IMDS credential theft from AWS, GCP, Azure, and ECS metadata endpoints.
Exfiltration
All sensitive strings are stored as numeric byte arrays and decoded at runtime; the C2 URL is additionally XOR-encoded with key 90. Collected data is transmitted via HTTPS POST in 2,800-byte chunks with DJB2 hash deduplication, randomized jitter, and retry logic. A lock file prevents duplicate execution across multiple installs. Early versions (April 1–2) exfiltrated to a Slack webhook; by April 6 the actor migrated to an AWS API Gateway endpoint, and by April 7 had wrapped the URL in XOR encoding.
Who is Affected
The primary targets are presumably developers and CI/CD systems within Asurion and its subsidiaries. Any organization whose internal dependency resolution could fall back to the public npm registry, a classic dependency confusion scenario, was at risk of pulling one of these packages during a routine npm install.
Beyond the direct target, independent developers as well as any environment that happened to install one of these typosquatted packages, could also be affected. Given that the malware harvests a wide range of credentials (AWS, GCP, Azure, Kubernetes, SSH, Docker, npm tokens, and CI/CD secrets), the blast radius extends well beyond the initially compromised host to any infrastructure reachable by the stolen credentials. \
Organizations that installed any version of the @sbxapps, @asurion-hub-web, @soluto-home-web, or @asurion-core scoped packages from the public npm registry between April 1 and April 8, 2026 should consider those systems fully compromised.
Conclusion
This campaign represents a well-resourced supply chain attack with a narrow organizational target and broad credential collection scope. The actor iterated rapidly, evolving evasion and infrastructure within hours of likely detection events. The introduction of a runtime execution path through analytics.js is particularly notable: it renders --ignore-scripts, the most common developer mitigation against npm supply chain attacks, ineffective. Any system that installed these packages should be treated as fully compromised. All credentials accessible from those environments should be rotated immediately.
See it in action
Most AI closes the alert. Panther closes the loop.

Detection
IoCs
Host-Based Indicators
Type | Value | Description |
|---|---|---|
Payload |
| Primary malware |
Decoy |
| Chains to payload |
Bypass |
| Runtime |
Lock file |
| Prevents duplicate execution |
XOR key |
| C2 URL decoding key |
Internal version |
| Payload version tracker |
Opt-out env |
| Deceptive kill switches |
Network Indicators
Type | Value | Description |
|---|---|---|
Domain (C2) |
| AWS API Gateway relay (Phase 2–3) |
Domain (C2) |
| Slack webhook (Phase 1) |
Slack IDs |
| Attacker Slack workspace and channel |
IP |
| Cloud IMDS (queried by malware) |
Hostname |
| GCP metadata (queried by malware) |
Share:
RESOURCES






