Mastra npm Supply Chain Compromise: easy-day-js Typosquat Dropper
Source report →On June 17th, 2026, Sapphire Sleet, a North Korean state-sponsored threat actor, compromised the @mastra npm organization, the publishing scope behind a widely used open-source TypeScript framework for building AI agents and retrieval pipelines, and republished more than 140 packages with a single hidden malicious dependency. The foothold was a stale maintainer account whose scope access had never been revoked, not a flaw in Mastra's own code, which the maintainers later confirmed was untouched. Because Mastra packages are routinely installed in environments that hold LLM API keys, cloud credentials, and CI/CD tokens, and because the affected packages carry tens of millions of downloads a month, the compromise put some of the most sensitive secrets in modern development pipelines at risk.
The malicious dependency, easy-day-js, is a typosquat of the popular dayjs date library. The attacker first published a clean, near-identical lookalike to pass casual review, then added it across the Mastra scope under a caret version range so that a later malicious patch release would resolve automatically on the next install. Execution runs entirely from the package install lifecycle: a postinstall hook launches an obfuscated dropper using the Node.js runtime already on the host, so no external tooling is needed. The dropper disables TLS certificate validation, writes install beacon markers to map infected hosts, fetches a second-stage payload from an attacker server addressed by raw IP, launches it as a detached background process, and then deletes itself to remove the primary forensic artifact.
The second stage is a cross-platform cryptocurrency wallet stealer paired with a remote access trojan. It enumerates browser profiles for wallet extensions, collects host and environment data including credentials and tokens, and beacons to a separate command and control address while establishing persistence disguised as Node tooling through a LaunchAgent on macOS, a systemd user service on Linux, or a staging directory on Windows. Any developer workstation, CI runner, or build agent that resolved a malicious version during the exposure window should be treated as a credential and wallet exposure event, with endpoint and network telemetry around the install, rather than package scanning alone, being the most reliable place to catch it.
IOCs (20)
Scan your environment for IOCs →SHA256 FILE HASH 7
b122a9873bedf145ae2a7fd024b5f309007dbb025149f4dc4ac3f7e4f32a36a4221c45a790dec2a296af57969e1165a16f8f49733aeab64c0bbd768d9943badfae70dd4f6bc0d1c8c2848e4e6b51934626c4818dcb5af99d080ddbd7dc3371854a8860240e4231c3a74c81949be655a28e096a7d72f38fbe84e5b37636b98417b73de25c053c3225a077738a1fcbd9ca6966d7b3cd6f5494a30f0aa0eae55c7e50eae63d3e24be9ca8803f4b5a0408aef97ee3fab7af018d8c2dde7c359edd651d1bf5e8c1539d2f05b1429235b8f4990f87036774be95157b315a7803dd5526FILE NAME 4
.pkg_history.pkg_logssystem.batprotocal.cjsIP ADDRESS 2
23.254.164.9223.254.164.123DOMAIN 2
teams.onweblive.orgmaskasd.comURL 3
https://23.254.164.92:8000/update/49890878https://teams.onweblive.org/api/update/8555575039/4https://maskasd.com/8555575039Detections (9)
Enable detections →Connect your environment for suggestions and queries personalized to your security telemetry.
- Node Supply Chain Payload Persistence via LaunchAgent systemd or ProgramData
- Node Install Script Self-Deletion After Spawn
- npm postinstall Hook Spawning node on a Bundled .cjs Dropper
- node Process Disabling TLS Verification Before an Outbound Fetch
- Install-Time Process Beaconing to a Raw IPv4 Literal on a Non-Standard Port
- Resolution of the easy-day-js dayjs Typosquat at Install Time
- Outbound Connection to Mastra Campaign C2 Infrastructure
- Stage-Two Credential Collection: node Copying Browser History or Reading Wallet-Extension Profiles