TC-2026-0048 · NPM · MCP
@iflow-mcp/[email protected]
Second GlassWorm cluster MCP server using invisible Unicode Variation Selectors (U+FE00..U+FE0F) to conceal an eval() loader inside a cloned Firecrawl MCP wrapper.
Signed ledger verdict
TC-2026-0048
Known bad (exit 2)
npm:@iflow-mcp/[email protected]
IOC & scope: npm:@iflow-mcp/[email protected] (GlassWorm cluster). Verified by human review and signed into the CC-BY 4.0 OSV v1.6.0 feed.
Run live in Counter Workbench
Signed in /feed.json (.sig).
Deterministic capability profile and taxonomy mapping.
Every artifact in the threat.cafe ledger is profiled across eight execution vectors and mapped to the OWASP Top 10 for Agentic Applications (ASI01-ASI10) and Agentic Skills & Tools (AST01-AST10).
8-Vector Capability X-Ray (ABOM)
-
1. Filesystem
Sensitive paths touched:
~/.cursor/mcp.json, ~/.claude.json -
2. Environment
Variables harvested:
FIRECRAWL_API_KEY, OPENAI_API_KEY -
3. Network
Outbound egress domains:
api.mainnet-beta.solana.com:443 -
4. Subprocess
Process execution primitives:
eval(Buffer.from(...)) -
5. Lifecycle
Install / startup hooks:
None observed -
6. OAuth / MCP
Declared scopes:
None observed -
7. Obfuscation
Encoding / steganography:
unicode_variation_selectors_fe00_fe0f -
8. Provenance
Attestation status:
glassworm_actor_iflow_mcp
Governance & detector mapping
- OWASP Agentic ASI (2026): ASI02 (Tool Misuse & Exploitation), ASI04 (Agentic Supply Chain Vulnerabilities), ASI05 (Unexpected Code Execution (RCE))
- OWASP Agentic AST (2026): AST01 (Malicious MCP Servers), AST04 (Covert Channel Exfiltration)
- Deterministic rules matched:
RULE_01_GLASSWORM_UNICODE, RULE_05_PROMPT_EXFIL_SHELL
Version scoping & related records
- No other versions of this package are currently listed on the board. Unlisted versions evaluate to
unknownunder localpolicy.yml.
Local CLI verification
$ threat-cafe-hook check "npm:@iflow-mcp/[email protected]" [threat.cafe] known_bad: npm:@iflow-mcp/[email protected] (TC-2026-0048) Reason: Second GlassWorm cluster MCP server using invisible Unicode Variation Selectors (U+FE00..U Source: https://thehackernews.com/2026/03/glassworm-malware-uses-solana-dead.html (credited to Koi Security)
OSV v1.6.0 machine-readable record
Included in /feed.json under CC-BY 4.0 license and verified by /feed.json.sig.
{
"schema_version": "1.6.0",
"id": "TC-2026-0048",
"modified": "2026-03-20T09:10:00Z",
"published": "2026-03-20T09:10:00Z",
"summary": "Second GlassWorm cluster MCP server using invisible Unicode Variation Selectors (U+FE00..U+FE0F) to conceal an eval() loader inside a cloned Firecrawl MCP wrapper.",
"affected": [
{
"package": {
"ecosystem": "npm",
"name": "@iflow-mcp/firecrawl-mcp-server"
},
"versions": [
"1.0.8"
]
}
],
"credits": [
{
"name": "Koi Security",
"type": "FINDER"
}
],
"references": [
{
"type": "ADVISORY",
"url": "https://thehackernews.com/2026/03/glassworm-malware-uses-solana-dead.html"
},
{
"type": "WEB",
"url": "https://threat.cafe/incidents/tc-2026-0048/"
}
],
"database_specific": {
"target": "npm:@iflow-mcp/[email protected]",
"kind": "mcp",
"verdict": "known_bad",
"ioc": "npm:@iflow-mcp/[email protected] (GlassWorm cluster)",
"artifact_sha256": "c36f39e88e14d299834ad29f69702bac406395a6a9e05cf2a66c71a9343931d6",
"owasp_asi": [
"ASI02",
"ASI04",
"ASI05"
],
"owasp_ast": [
"AST01",
"AST04"
],
"rules_matched": [
"RULE_01_GLASSWORM_UNICODE",
"RULE_05_PROMPT_EXFIL_SHELL"
],
"abom": {
"fs_sensitive": [
"~/.cursor/mcp.json",
"~/.claude.json"
],
"env_harvest": [
"FIRECRAWL_API_KEY",
"OPENAI_API_KEY"
],
"net_egress": [
"api.mainnet-beta.solana.com:443"
],
"proc_exec": [
"eval(Buffer.from(...))"
],
"install_hooks": [],
"oauth_scopes": [],
"obfuscation": [
"unicode_variation_selectors_fe00_fe0f"
],
"provenance": "glassworm_actor_iflow_mcp"
},
"license": "CC-BY-4.0",
"record_digest": "sha256:c82b8a5f1f59fed77c8b32085004a851156b0f89a78081a03990e03519be413c",
"release_signature_url": "https://threat.cafe/feed.json.sig"
}
}
Have additional IOCs or a maintainer remediation update for TC-2026-0048?
Maintainer disputes and version-scoping updates are reviewed by a human within our 48-hour dispute SLA.