- Exploited
- No known exploitation
- Fix
- Fixed in 0.5.29
- Who is exposed
- Specific setups only
Do first: Check whether your setup matches what the bug needs. A directory whose path contains the marker must already exist on the target and be referenceable by the attacker. The attacker's payload is an a=t,t=t Kitty graphics command using the temp-file transmission medium. The code is reachable through the public parse API of rio-vt.
- Last modified
- A 0-100 score for how much a CVE matters across the industry: exploitation, exposure, how widely the software is used, severity and whether a fix exists.What do these mean? →
- 15/100
- How many real-world setups can hit the bug, from the vendor's advisory and CISA data. It does not know your setup.What do these mean? →
- Specific setups only
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
The `rio-vt` terminal library, and terminal emulators built on it such as the Rio terminal, are affected. Untrusted output rendered by the terminal can delete files outside its temporary directory and read their contents.
Read the original description
The Kitty graphics protocol handler in rio-vt builds a filesystem path from an attacker-controlled APC escape sequence and, for the temp-file medium, only checks that the path *contains the substring* "tty-graphics-protocol" before it opens, reads, and remove_files it. There is no .. rejection and no canonicalization, so a path containing the marker substring plus .. escapes the terminal's temp directory (path traversal, CWE-22/CWE-23).
Because a terminal renders whatever arrives on the PTY (ssh output, a cat'd file, CI logs), untrusted output can delete a file outside the temp area and cause its bytes to be read back in.
Details
The sink is create_graphic_data() in src/ansi/kitty_graphics_protocol.rs, in the TransmissionMedium::TempFile branch, reachable through the public API rio_vt::ansi::kitty_graphics_protocol::parse. The path is the base64 APC payload of an a=t,t=t command, and the guard is:
let path = Path::new(path_str);
if !path.is_file() { return Err(GraphicError::FileNotFound); } // literal path, resolves `..`
// reject /proc/ /sys/ /dev/ (lowercased substring)
if cmd.medium == TransmissionMedium::TempFile
&& !path_str.contains("tty-graphics-protocol") { // SUBSTRING, not a component
return Err(GraphicError::InvalidData);
}
// ...
let mut file = File::open(path)...; // reads file bytes
if cmd.medium == TransmissionMedium::TempFile {
let _ = std::fs::remove_file(path); // deletes the file
}This affects any terminal emulator or application built on rio-vt (e.g. the Rio terminal) that renders attacker-influenced output: an out-of-bounds file is deleted, and its contents are read into the process.
The fix
Fixed in rio-vt 0.5.29 (Rio 0.5.29) by PR #1998. For the temp-file medium the parent directory is resolved with canonicalize before any check, the resolved entry must lie inside a temp directory (temp_dir(), /tmp or /dev/shm) and contain the marker, and the delete goes through unlinkat on a handle to the validated directory, so neither .. nor a swapped symlink can redirect it. Path checks for the file medium also run on the file actually opened.
cve.now Index
- Exploitation?/40Unknown. No CISA SSVC exploitation rating yet
- Exposure5/25Specific setups only
- Reach10/20Affects crates.io packages
- Severity?/10Unknown. No CVSS score or vendor rating
- No patch0/5No signal
What would change the score
- Would score about 65 if added to CISA KEV
- Would score about 60 if CISA's SSVC rates exploitation active
- Would score about 25 if CISA's SSVC rates it automatable
What to do
Check whether your setup matches what the bug needs.
A directory whose path contains the marker must already exist on the target and be referenceable by the attacker. The attacker's payload is an a=t,t=t Kitty graphics command using the temp-file transmission medium. The code is reachable through the public parse API of rio-vt.Upgrade to a fixed version: 0.5.29.
Timeline
- Advisory published1 day
- Record last updated
- First seen by cve.now
Affected versions
- rio-vtcrates.io
From 0.0.0-0 · fixed in 0.5.29
Evidence 4
- Advisory
- Advisory
- Repository
- Link
Corrections
None so far.
Something wrong on this page? Report an error. Every fix is listed here.
Questions about RUSTSEC-2026-0430
Is RUSTSEC-2026-0430 being exploited?
It is not in CISA's Known Exploited Vulnerabilities catalog, and CISA's SSVC assessment does not mark exploitation as active. That does not mean it has not been attacked: vendors and researchers can report attacks before CISA lists them. No public exploit code is tracked.Source: cve.now feed data
What does this mean?
Crafted Kitty graphics commands can use a path containing a marker to make the handler delete a file outside the terminal's temp area. The same flaw can also make the handler read that file's contents into the process.Source: github.com
Which versions are affected by RUSTSEC-2026-0430?
rio-vt (crates.io): from 0.0.0-0 before 0.5.29.Source: cve.now feed data
Am I affected, and how do I check?
Versions of rio-vt before 0.5.29 are affected. The bug needs a directory whose path contains the marker to already exist on the target and be referenceable, and it is reached through the public rio_vt::ansi::kitty_graphics_protocol::parse API. To check a project, look at the rio-vt version in its lock file or dependency tree.Source: github.com
How do I fix RUSTSEC-2026-0430?
Upgrade rio-vt to 0.5.29 or later, which is the fixed release (Rio 0.5.29 includes it). The advisory lists no workaround.Source: github.com