CVE-2025-43929 Overview
CVE-2025-43929 is a security vulnerability in open_actions.py within the Kitty terminal emulator (versions prior to 0.41.0) that fails to prompt users for confirmation before executing local executable files. This flaw allows attackers to potentially execute arbitrary code when a user opens an untrusted document containing malicious links pointing to executable files, such as documents opened in KDE Ghostwriter or similar applications.
Critical Impact
Attackers can achieve code execution on victim systems by crafting malicious documents with links to local executables. When users interact with these documents in Kitty, the executables run without any confirmation prompt, potentially leading to full system compromise.
Affected Products
- Kovidgoyal Kitty versions prior to 0.41.0
- Systems using Kitty with document viewers like KDE Ghostwriter
- Any Kitty installation utilizing the default open_actions.py configuration
Discovery Timeline
- 2025-04-20 - CVE-2025-43929 published to NVD
- 2025-04-24 - Last updated in NVD database
Technical Details for CVE-2025-43929
Vulnerability Analysis
This vulnerability stems from a missing security control in Kitty's open_actions.py module. The terminal emulator handles file opening actions through a configuration-based system that defines how different file types should be processed. Prior to version 0.41.0, when Kitty encountered links to executable files from external sources (such as documents opened in KDE Ghostwriter), it would directly execute these files without requesting user consent.
The exploitation scenario involves a victim opening a maliciously crafted document that contains links pointing to local executable files. When the user clicks such a link, Kitty's default behavior was to launch the executable immediately, bypassing any confirmation dialog that would normally alert users to the potentially dangerous action.
Root Cause
The root cause is classified under CWE-346 (Origin Validation Error). The vulnerability exists because open_actions.py did not implement proper origin validation or user confirmation when handling file execution requests. The default launch actions configuration used confirm-if-needed for script files and lacked confirmation prompts entirely for executable files, trusting that all file execution requests from linked documents were legitimate.
Attack Vector
The attack requires local access and user interaction. An attacker must craft a malicious document containing links to executable files on the target system. When the victim opens this document in an application that uses Kitty for link handling (such as KDE Ghostwriter), clicking on the malicious link triggers immediate execution of the target file without user confirmation. This creates an opportunity for social engineering attacks where victims are tricked into clicking seemingly innocuous links.
# Security patch in kitty/open_actions.py - kitty +open: Ask for confirmation when running executables
@run_once
def default_launch_actions() -> tuple[OpenAction, ...]:
return tuple(parse('''\
-# Open script files
+# Open script files. Change confirm-always to confirm-never or confirm-if-needed to
+# disable confirmation for all or executable files respectively.
protocol file
ext sh,command,tool
-action launch --hold --type=os-window kitten __shebang__ confirm-if-needed $FILE_PATH $SHELL
+action launch --hold --type=os-window kitten __shebang__ confirm-always $FILE_PATH $SHELL
# Open shell specific script files
protocol file
ext fish,bash,zsh
-action launch --hold --type=os-window kitten __shebang__ confirm-if-needed $FILE_PATH __ext__
+action launch --hold --type=os-window kitten __shebang__ confirm-always $FILE_PATH __ext__
# Open directories
protocol file
mime inode/directory
action launch --type=os-window --cwd -- $FILE_PATH
-# Open executable file
+# Open executable file. Remove kitten __confirm_and_run_exe__ to execute
+# without confirmation.
protocol file
mime inode/executable,application/vnd.microsoft.portable-executable
-action launch --hold --type=os-window -- $FILE_PATH
+action launch --hold --type=os-window -- kitten __confirm_and_run_exe__ $FILE_PATH
Source: GitHub Kitty Commit Update
Detection Methods for CVE-2025-43929
Indicators of Compromise
- Unexpected process execution originating from Kitty terminal sessions
- Executable files being launched without corresponding user terminal commands
- Suspicious file access patterns where documents trigger executable launches
- Log entries showing Kitty open_actions handling executable MIME types without confirmation kitten
Detection Strategies
- Monitor for child processes spawned by Kitty that involve executable file launches
- Implement endpoint detection rules for unusual process trees where document viewers spawn Kitty which then executes binaries
- Review Kitty configuration files for non-default launch-actions.conf settings that may disable confirmation prompts
- Audit systems for Kitty versions below 0.41.0 using package management queries
Monitoring Recommendations
- Enable verbose logging for Kitty terminal sessions to capture file open actions
- Deploy file integrity monitoring on executable directories to detect unauthorized execution attempts
- Configure SentinelOne behavioral AI to detect unusual execution chains involving terminal emulators and document applications
- Monitor for creation or modification of launch-actions.conf files that could override security defaults
How to Mitigate CVE-2025-43929
Immediate Actions Required
- Upgrade Kitty to version 0.41.0 or later immediately
- Audit existing launch-actions.conf configurations for insecure settings
- Educate users about the risks of clicking links in untrusted documents
- Consider temporarily disabling link handling in Kitty until patching is complete
Patch Information
The vulnerability has been addressed in Kitty version 0.41.0. The fix modifies the default launch actions to require user confirmation before executing any executable files. The patch changes the behavior from confirm-if-needed to confirm-always for script files and adds the kitten __confirm_and_run_exe__ confirmation wrapper for executable files. Users should update to version 0.41.0 or later by following the GitHub Kitty Version Comparison for detailed changes. The security commit is available at GitHub Kitty Commit Update.
Workarounds
- Create a custom launch-actions.conf file that explicitly requires confirmation for all executable file types
- Disable automatic link opening in Kitty by configuring restrictive launch actions
- Use alternative terminal emulators for workflows involving untrusted documents until patching is possible
- Configure document viewers to use a different handler for external links that includes confirmation dialogs
# Configuration example - Create a restrictive launch-actions.conf
# Location: ~/.config/kitty/launch-actions.conf
# Require confirmation for all script files
protocol file
ext sh,command,tool,fish,bash,zsh
action launch --hold --type=os-window kitten __shebang__ confirm-always $FILE_PATH $SHELL
# Require confirmation for all executables
protocol file
mime inode/executable,application/vnd.microsoft.portable-executable
action launch --hold --type=os-window -- kitten __confirm_and_run_exe__ $FILE_PATH
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

