Mend.io Vulnerability Database
The largest open source vulnerability database
What is a Vulnerability ID?
New vulnerability? Tell us about it!
CVE-2026-47708
Published:June 05, 2026
Updated:June 16, 2026
Summary The "log_file_name" parameter in the "stata_do" API and CLI is directly interpolated into a Stata command string without sanitization. The security guard ("GuardValidator") only scans the do-file content but does not validate this parameter. An attacker can inject arbitrary Stata commands (including "shell", "python", "erase", etc.) by crafting a malicious "log_file_name" containing quotes, newlines, or Stata command separators. Details In "src/stata_mcp/stata/stata_do/do.py", both "_execute_unix_like" and "_execute_windows" construct a Stata command string using Python f-strings: commands = f""" capture log close {self.generate_log_command(log_file, is_replace)} ... do "{dofile_path}" ... """ The "generate_log_command" method returns: log_cmd = f'log using "{log_file.as_posix()}", {replace_clause} {log_type} name({log_type}_log)' Where "log_file" is constructed from user-supplied "log_name": def generate_log_file(self, log_name: str, extension='log'): return self.log_file_path / f"{log_name}.{extension}" The "log_name" parameter comes directly from user input (via MCP tool "stata_do" or CLI "stata-mcp tool do") without any validation. Since the path is embedded inside double quotes in a Stata command string, an attacker can break out of the string context and inject arbitrary commands. Additionally, "generate_log_file" does not prevent path traversal via "log_name", allowing arbitrary file write outside the intended log directory. Proof of Concept When calling "stata_do" via MCP tool with: { "dofile_path": "test.do", "log_file_name": "'; shell echo pwned > /tmp/pwned.txt; '" } The generated Stata commands become: log using "<log_dir>/'; shell echo pwned > /tmp/pwned.txt; '.log", replace text name(text_log) Stata interprets this as multiple commands, with "shell echo pwned > /tmp/pwned.txt;" executed as an arbitrary shell command. Impact - Remote Code Execution via "shell" command injection - Arbitrary file write/overwrite via path traversal in "log_name" - Complete bypass of the security guard, as the guard only validates do-file content, not wrapper parameters Remediation / Fix 1. Apply strict allowlist validation to "log_name" (only alphanumeric, underscore, dot, hyphen; max 128 chars) 2. Resolve and verify the constructed log path remains within the intended log directory 3. Consider generating safe internal filenames (e.g., UUIDs) instead of accepting user-defined log names for command construction 4. Apply similar sanitization to "dofile_path" before embedding it into Stata command strings References - Issue: #74 - Fix commit: https://github.com/SepineTam/stata-mcp/commit/e6f945941ae0c7cf5e74a428e0b3dc82b396382f
Affected Packages
https://github.com/SepineTam/mcp-for-stata.git (GITHUB):
Affected version(s) >=v1.3.2 <v1.17.3
Fix Suggestion:
Update to version v1.17.3
stata-mcp (PYTHON):
Affected version(s) >=0.1.0 <1.17.3
Fix Suggestion:
Update to version 1.17.3
Do you need more information?
Contact Us
CVSS v4
Base Score:
9.3
Attack Vector
NETWORK
Attack Complexity
LOW
Attack Requirements
NONE
Privileges Required
NONE
User Interaction
NONE
Vulnerable System Confidentiality
HIGH
Vulnerable System Integrity
HIGH
Vulnerable System Availability
HIGH
Subsequent System Confidentiality
NONE
Subsequent System Integrity
NONE
Subsequent System Availability
NONE
CVSS v3
Base Score:
9.8
Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
HIGH
Integrity
HIGH
Availability
HIGH
Weakness Type (CWE)
Improper Neutralization of Special Elements used in a Command ('Command Injection')