CVE-2026-49988
Repomix: attach_packed_output can bypass file-read secret scanning for supported local files
Repomix is a tool that packs repositories into AI-friendly files. Prior to 1.14.1, the Repomix MCP server attach_packed_output and read_repomix_output flow can register and read arbitrary local .json, .txt, .md, or .xml files without the file_system_read_file runSecretLint() safety check or Repomix packed-output validation, allowing MCP callers to bypass the local file-read secret-scanning boundary. This issue is fixed in version 1.14.1.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.8
Repomix: attach_packed_output can bypass file-read secret scanning for supported local files
Repomix is a tool that packs repositories into AI-friendly files. Prior to 1.14.1, the Repomix MCP server attach_packed_output and read_repomix_output flow can register and read arbitrary local .json, .txt, .md, or .xml files without the file_system_read_file runSecretLint() safety check or Repomix packed-output validation, allowing MCP callers to bypass the local file-read secret-scanning boundary. This issue is fixed in version 1.14.1.
- Record
CVE-2026-49988- CVSS 4.0
- 6.8 Medium
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-200
- Updated
- 2026-11-02
EUVDEUVD-2026-44757
6.8
Repomix is a tool that packs repositories into AI-friendly files. Prior to 1.14.1, the Repomix MCP server attach_packed_output and read_repomix_output flow can register and read arbitrary local .json, .txt, .md, or .xml files without the file_system_read_file runSecretLint() safety check or Repomix packed-output validation, allowing MCP callers to bypass the local file-read secret-scanning boundary. This issue is fixed in version 1.14.1.
- Record
EUVD-2026-44757- CVSS 4.0
- 6.8 Medium
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-hwpp-h97w-2h3j
6.9
repomix: attach_packed_output can bypass file-read secret scanning for supported local files
attach_packed_output can register arbitrary .json/.txt/.md/.xml files and bypass the MCP file-read safety check
Summary
Repomix's MCP server exposes a normal file_system_read_file tool that reads absolute paths only after running the project's secret check. However, the attach_packed_output plus read_repomix_output flow can read arbitrary local .json, .txt, .md, or .xml files without the same safety check and without verifying that the file is actually a Repomix packed output.
This is a medium-severity local MCP file-read boundary issue. The affected deployment is the documented repomix --mcp stdio server used by AI assistants. A prompt or lower-trust model action that can invoke MCP tools can use attach_packed_output on a local JSON/text file, receive an outputId, then call read_repomix_output to retrieve the full file content.
Affected target
- Repository:
yamadashy/repomix - Commit reviewed:
adf5a12f2211a7fabf24ee11a21734adccee5143 - Component: MCP server tools
- Package version reviewed:
[email protected]
Root cause
The file-read safety boundary is implemented per tool rather than per local-file capability. file_system_read_file reads the file and runs runSecretLint() before returning content. attach_packed_output reads and registers local files through a separate path, but only checks file extension and parsing format. It does not verify a Repomix output header/schema and does not run the secret check before registering the path.
Vulnerability chain
attach_packed_outputaccepts a direct file path, not only a directory.resolveOutputFilePath()allows any file whose extension matches.xml,.md,.txt, or.json.- The tool reads that file with
fs.readFile(outputFilePath, 'utf8'). - It extracts metrics, but malformed or non-Repomix JSON simply produces empty metrics rather than rejection.
formatPackToolResponse()registers the original file path under a generatedoutputId.read_repomix_outputresolves theoutputIdand returns the full file content.
Auth boundary violated
The respected boundary is the explicit local file-read guard: file_system_read_file blocks files that fail the secret scan.
The ignored boundary is the alternate packed-output path. A caller can register a supported-extension file as an output and read it through read_repomix_output without passing through runSecretLint() or a packed-output validation step.
Source trace
src/mcp/tools/fileSystemReadFileTool.ts:72-83: direct file reads runrunSecretLint()and return an error if the scan finds sensitive content.src/mcp/tools/attachPackedOutputTool.ts:76-87: direct file input is accepted based only on extension.src/mcp/tools/attachPackedOutputTool.ts:111-120:.json,.txt,.md, and.xmlare supported formats.src/mcp/tools/attachPackedOutputTool.ts:228-240: JSON parse errors return empty metrics rather than rejecting the file as non-Repomix output.src/mcp/tools/attachPackedOutputTool.ts:272-308: the file is read and passed toformatPackToolResponse()without a secret check.src/mcp/tools/mcpToolRuntime.ts:77-82:formatPackToolResponse()registers the providedoutputFilePathand reads it.src/mcp/tools/readRepomixOutputTool.ts:56-74:read_repomix_outputreads the registered file path and returns its content.README.md:984-991: the tool is documented as providing secure access to existing packed outputs.
Reproduction
run.sh:
#!/usr/bin/env bash
set -euo pipefail
set +e
node run.js 2>&1 | tee transcript.txt
rc=${PIPESTATUS[0]}
set -e
printf '%s\n' "$rc" > exit-code.txt
exit "$rc"
The harness creates a temporary credentials.json containing a sentinel value, follows the attach_packed_output path for supported-extension files, registers the file path under an output ID, and then reads it back through the read_repomix_output path. It also checks the source-code contrast between the…
- Record
GHSA-hwpp-h97w-2h3j- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-200
- Updated
- 2026-11-02
NVD
6.8
Repomix is a tool that packs repositories into AI-friendly files. Prior to 1.14.1, the Repomix MCP server attach_packed_output and read_repomix_output flow can register and read arbitrary local .json, .txt, .md, or .xml files without the file_system_read_file runSecretLint() safety check or Repomix packed-output validation, allowing MCP callers to bypass the local file-read secret-scanning boundary. This issue is fixed in version 1.14.1.
- Record
CVE-2026-49988- CVSS 4.0
- 6.8 Medium
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-200
- Updated
- 2026-11-02
OSV
6.8
Repomix: attach_packed_output can bypass file-read secret scanning for supported local files
Repomix is a tool that packs repositories into AI-friendly files. Prior to 1.14.1, the Repomix MCP server attach_packed_output and read_repomix_output flow can register and read arbitrary local .json, .txt, .md, or .xml files without the file_system_read_file runSecretLint() safety check or Repomix packed-output validation, allowing MCP callers to bypass the local file-read secret-scanning boundary. This issue is fixed in version 1.14.1.
- Record
CVE-2026-49988- CVSS 4.0
- 6.8 Medium
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-200
- Updated
- 2026-11-02
OSVGHSA-hwpp-h97w-2h3j
6.9
repomix: attach_packed_output can bypass file-read secret scanning for supported local files
attach_packed_output can register arbitrary .json/.txt/.md/.xml files and bypass the MCP file-read safety check
Summary
Repomix's MCP server exposes a normal file_system_read_file tool that reads absolute paths only after running the project's secret check. However, the attach_packed_output plus read_repomix_output flow can read arbitrary local .json, .txt, .md, or .xml files without the same safety check and without verifying that the file is actually a Repomix packed output.
This is a medium-severity local MCP file-read boundary issue. The affected deployment is the documented repomix --mcp stdio server used by AI assistants. A prompt or lower-trust model action that can invoke MCP tools can use attach_packed_output on a local JSON/text file, receive an outputId, then call read_repomix_output to retrieve the full file content.
Affected target
- Repository:
yamadashy/repomix - Commit reviewed:
adf5a12f2211a7fabf24ee11a21734adccee5143 - Component: MCP server tools
- Package version reviewed:
[email protected]
Root cause
The file-read safety boundary is implemented per tool rather than per local-file capability. file_system_read_file reads the file and runs runSecretLint() before returning content. attach_packed_output reads and registers local files through a separate path, but only checks file extension and parsing format. It does not verify a Repomix output header/schema and does not run the secret check before registering the path.
Vulnerability chain
attach_packed_outputaccepts a direct file path, not only a directory.resolveOutputFilePath()allows any file whose extension matches.xml,.md,.txt, or.json.- The tool reads that file with
fs.readFile(outputFilePath, 'utf8'). - It extracts metrics, but malformed or non-Repomix JSON simply produces empty metrics rather than rejection.
formatPackToolResponse()registers the original file path under a generatedoutputId.read_repomix_outputresolves theoutputIdand returns the full file content.
Auth boundary violated
The respected boundary is the explicit local file-read guard: file_system_read_file blocks files that fail the secret scan.
The ignored boundary is the alternate packed-output path. A caller can register a supported-extension file as an output and read it through read_repomix_output without passing through runSecretLint() or a packed-output validation step.
Source trace
src/mcp/tools/fileSystemReadFileTool.ts:72-83: direct file reads runrunSecretLint()and return an error if the scan finds sensitive content.src/mcp/tools/attachPackedOutputTool.ts:76-87: direct file input is accepted based only on extension.src/mcp/tools/attachPackedOutputTool.ts:111-120:.json,.txt,.md, and.xmlare supported formats.src/mcp/tools/attachPackedOutputTool.ts:228-240: JSON parse errors return empty metrics rather than rejecting the file as non-Repomix output.src/mcp/tools/attachPackedOutputTool.ts:272-308: the file is read and passed toformatPackToolResponse()without a secret check.src/mcp/tools/mcpToolRuntime.ts:77-82:formatPackToolResponse()registers the providedoutputFilePathand reads it.src/mcp/tools/readRepomixOutputTool.ts:56-74:read_repomix_outputreads the registered file path and returns its content.README.md:984-991: the tool is documented as providing secure access to existing packed outputs.
Reproduction
run.sh:
#!/usr/bin/env bash
set -euo pipefail
set +e
node run.js 2>&1 | tee transcript.txt
rc=${PIPESTATUS[0]}
set -e
printf '%s\n' "$rc" > exit-code.txt
exit "$rc"
The harness creates a temporary credentials.json containing a sentinel value, follows the attach_packed_output path for supported-extension files, registers the file path under an output ID, and then reads it back through the read_repomix_output path. It also checks the source-code contrast between the…
- Record
GHSA-hwpp-h97w-2h3j- CVSS 4.0
- 6.9 Medium
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-200
- Updated
- 2026-11-02
Affected products
Affected packages
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases, products | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-49988 is a medium vulnerability (CVSS 6.8) in Repomix, published July 1, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.18%, the 7th percentile. Fixed in repomix 1.14.1.
References
github.com/yamadashy/repomix/security/advisories/GHSA-hwpp-h97w-2h3j
github.com/yamadashy/repomix/commit/e447f7dba6f51fdb26bcad0c280542fca291960e
github.com/yamadashy/repomix/releases/tag/v1.14.1
github.com/advisories/GHSA-hwpp-h97w-2h3j
github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49988.json
nvd.nist.gov/vuln/detail/CVE-2026-49988
github.com/yamadashy/repomix
Left out here: the rest of 2 source descriptions. The JSON record has them.