watercrawl-mcp hid Glassworm payload
Part of the Glassworm hid credential theft in Unicode campaign
The Glassworm threat actor published malicious versions of @iflow-mcp/watercrawl-watercrawl-mcp with payloads hidden by invisible Unicode characters.
Story
On March 12, 2026, five consecutive versions of an npm package called @iflow-mcp/watercrawl-watercrawl-mcp (1.3.0 through 1.3.4) were pushed to the registry with hidden payloads, researchers at Aikido reported the following day. The unwieldy package name was the kind of thing a casual reviewer would skim past; the malicious code was, by design, the kind a careful reviewer could not see at all.
The payload was encoded into Unicode variation selectors, invisible code points that render as nothing in editors and diff views. A small runtime decoder reassembled the hidden bytes and passed them to eval(). The technique, infrastructure, and timing matched the GlassWorm samples Aikido was tracking the same week across GitHub repositories and a VS Code extension.
This record covers the npm artifact. The broader Glassworm wave is tracked at [[glassworm-march-2026]].
For defenders, the package versions were the cleanest handle. Any lockfile, package cache, or CI install that resolved to 1.3.0 through 1.3.4 needed review for hidden Unicode payloads and credential exposure, even if the visible JavaScript looked empty.
Affected Artifacts
- Observed
- 2026-03-12 to 2026-03-13
- Fixed
- Not listed
- Evidence
- distribution: npmjs.com/package/@iflow-mcp/watercrawl-watercrawl-mcp, technique: invisible_unicode_loader, function: eval
Incident Context
- Motive
- Credential Theft
- Attribution
- Group
- Cause
- Malicious Injection
- Transitive
- No
- Actor
- Third Party
External References
Source record: oss/attacks/watercrawl-mcp/meta.yaml