---
title: "GHSA-v6wj-c83f-v46x: @profullstack/mcp-server vulnerable to OS Command Injection in domain_lookup Module"
url: https://erroneo.us/security/ghsa/GHSA-v6wj-c83f-v46x/
description: "GHSA-v6wj-c83f-v46x (critical, npm): @profullstack/mcp-server vulnerable to OS Command Injection in domainlookup Module. Security Advisory: OS Command…"
type: advisory
section: "Security Digest"
date_published: 2026-05-09
date_modified: 2026-05-09
publisher: erroneo.us
author: erroneo.us Security Desk
ghsa: "GHSA-v6wj-c83f-v46x"
license: All rights reserved. Quote with attribution and a link.
---

# GHSA-v6wj-c83f-v46x: @profullstack/mcp-server vulnerable to OS Command Injection in domain_lookup Module

## Affected packages

- npm `@profullstack/mcp-server` <= 1.4.12 → fixed: none listed

## Details

Security Advisory: OS Command Injection in profullstack/mcp-server domainlookup Module Field | Value -- | -- Project | profullstack/mcp-server Repository | https://github.com/profullstack/mcp-server Affected Commit | 2e8ea913573610667ad54e31dba2e8198ebf7cf9 Affected Module | mcpmodules/domainlookup Affected Endpoints | POST /domain-lookup/check, POST /domain-lookup/bulk Vulnerability Type | CWE-78: OS Command Injection CVSS 3.1 Score | 9.8 (Critical) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Authentication Required | None Default Network Exposure | Bind address 0.0.0.0, no global authentication middleware Validated | 2026-04-21 (initial), 2026-04-28 (re-confirmed) Summary The domainlookup module assembles a shell command string by concatenating user-controlled input ( domains / keywords ) and passes it to execAsync() . Both HTTP endpoints reach the same sink. Because there is no argument quoting, escaping, or allowlist — and no authentication on the server — an unauthenticated remote attacker can execute arbitrary OS commands as the server process. Affected Code index.js:27 — server binds to 0.0.0.0 , no global auth middleware. mcpmodules/domainlookup/index.js:52 — registers POST /domain-lookup/check . mcpmodules/domainlookup/index.js:55 — registers POST /domain-lookup/bulk . mcpmodules/domainlookup/src/service.js:19, :20 — buildTldxCommand() concatenates user input into the shell string. mcpmodules/domainlookup/src/service.js:114, :115, :142 — execAsync(command) sink reached from both routes. Vulnerable Code File: mcpmodules/domainlookup/src/service.js Step 1 — User input concatenated directly into a shell string: buildTldxCommand(keywords, options = {}) { let command = tldx ${keywords.join(' ')}; if (options.prefixes?.length) { command += --prefixes ${options.prefixes.join(',')}; } } Step 2 — That shell string is executed…

## Sources

- [GitHub Advisory GHSA-v6wj-c83f-v46x](https://github.com/advisories/GHSA-v6wj-c83f-v46x)
- [github.com](https://github.com/profullstack/mcp-server/security/advisories/GHSA-v6wj-c83f-v46x)

---
Source page: https://erroneo.us/security/ghsa/GHSA-v6wj-c83f-v46x/ · Security Digest: https://erroneo.us/security/ · More: https://erroneo.us/llms.txt
