Skip to content
Fencer Vulns
high 7.5

CVE-2026-53598 json

Prompty: Arbitrary File Read via ${file:path} Reference Expansion

published 2026-07-16 3 mo ago modified 2026-10-24 15 d ago also GHSA-wxhm-2mq7-7697 , PYSEC-2026-3538 , EUVD-2026-44940

cvss
7.5
version 3.1, CNA
cisa kev
Not listed
not in CISA's catalog
epss
1.3%
EPSS 1.3% chance of exploitation in 30 days, percentile 70%
public exploits
0
none known

Summary

Prompty is a markdown file format (.prompty) for LLM prompts. Prior to 2.0.0-beta.2, Prompty loaders expanded ${file:...} references in .prompty frontmatter without enforcing that resolved paths stayed within the prompt directory or allowed roots, allowing an attacker-controlled prompt file to read local files through absolute paths, .. traversal, or symlink escapes. This issue is fixed in versions 2.0.0-beta.2.

Patch / fix

  • pypi prompty 2.0.0b2
  • npm @prompty/core 2.0.0-beta.2
  • crates.io prompty 2.0.0-beta.2
  • nuget Prompty.Core 2.0.0-beta.2

CISA SSVC

Exploitation
none
Automatable
yes
Technical impact
partial
Assessed
3 mo ago

Exploit prediction

1.29% chance of exploitation in the next 30 days, higher than 70% of all scored CVEs (FIRST EPSS, 2026-11-08).

CVSS scores

assigned by version score vector
CNA 3.1 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
GitHub 3.1 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
OSV 3.1 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Affected packages

ecosystem package affected fixed in
pypi prompty
<2.0.0b2
2.0.0b2
npm @prompty/core
<2.0.0-beta.2
2.0.0-beta.2
crates.io prompty
<2.0.0-beta.2
2.0.0-beta.2
nuget Prompty.Core
<2.0.0-beta.2
2.0.0-beta.2

Affected products

  • microsoft prompty

Classification

Weakness
  • CWE-22 Improper Limitation of a Pathname to a Restricted Directory
  • CWE-200 Exposure of Sensitive Information to an Unauthorized Actor

References

Sources

Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.