CVE-2026-75483 Overview
CVE-2026-75483 is a control character injection vulnerability [CWE-150] in powerlevel10k, a widely used Zsh theme. The theme fails to neutralize control characters in the version field of package.json when rendering the package prompt segment. An attacker who controls a package.json file can embed raw escape bytes in the version string. When a user enters the affected directory, the shell renders the prompt and emits attacker-supplied terminal control sequences on every prompt draw.
Critical Impact
Terminal control sequence injection triggered on prompt render when a user changes into a directory containing a malicious package.json, enabling display spoofing and terminal manipulation.
Affected Products
- powerlevel10k Zsh theme (romkatv/powerlevel10k)
- Configurations using the package prompt segment
- Any shell environment loading package.json files from untrusted sources
Discovery Timeline
- 2026-08-17 - CVE-2026-75483 published to NVD
- 2026-08-20 - Last updated in NVD database
Technical Details for CVE-2026-75483
Vulnerability Analysis
The vulnerability affects the package prompt segment in powerlevel10k. The segment reads the name and version fields from package.json in the current working directory and expands them into the prompt string. The default POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION expansion escapes only % characters. It does not neutralize raw escape bytes, ANSI CSI sequences, or other C0/C1 control characters embedded in the JSON string values.
When Zsh renders the prompt, any control bytes present in P9K_PACKAGE_NAME or P9K_PACKAGE_VERSION pass through to the terminal emulator. Attackers can inject cursor movement, color changes, screen clears, or OSC sequences. On terminals that honor legacy sequences, this can enable command spoofing, clipboard manipulation, or hyperlink injection.
Root Cause
The POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION variable used the raw parameter expansion ${P9K_PACKAGE_NAME} and ${P9K_PACKAGE_VERSION} without Zsh's (V) flag. The (V) flag converts unprintable characters into visible representations. Without it, raw escape bytes flow directly into the prompt output.
Attack Vector
Exploitation is local and requires user interaction: the victim must cd into a directory containing an attacker-supplied package.json. Cloning a malicious repository, extracting a crafted archive, or navigating to a shared filesystem path is sufficient. No privileges are required, and each subsequent prompt render re-emits the injected sequences.
# Security patch: config/p10k-classic.zsh and config/p10k-lean-8colors.zsh
# - P9K_PACKAGE_NAME The value of `name` field in package.json.
# - P9K_PACKAGE_VERSION The value of `version` field in package.json.
#
- # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}'
+ # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${(V)P9K_PACKAGE_NAME//\%/%%}@${(V)P9K_PACKAGE_VERSION//\%/%%}'
# Custom icon.
# typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐'
Source: GitHub Powerlevel10k Commit 58e13d. The fix applies the Zsh (V) parameter expansion flag to both P9K_PACKAGE_NAME and P9K_PACKAGE_VERSION, ensuring control bytes are rendered as visible escapes instead of executed by the terminal.
Detection Methods for CVE-2026-75483
Indicators of Compromise
- Presence of package.json files containing non-printable bytes (0x00–0x1F, 0x7F, or ESC 0x1B) in the name or version fields.
- Repositories or archives where jq -r .version package.json | cat -v shows ^[ or other caret-notation control sequences.
- Unexpected terminal behavior — cursor jumps, color changes, spoofed prompts — immediately after entering a directory.
Detection Strategies
- Scan filesystem paths and code repositories for package.json files whose string fields contain bytes outside the printable ASCII range.
- Audit developer workstations for powerlevel10k installations lacking the (V) flag in POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION.
- Integrate JSON schema validation into repository ingestion pipelines to reject strings containing C0/C1 control characters.
Monitoring Recommendations
- Log shell directory changes on shared developer systems and correlate with newly cloned repositories.
- Monitor endpoint file writes to package.json from untrusted sources such as extracted archives or web downloads.
- Track powerlevel10k versions across managed developer endpoints and flag unpatched installations.
How to Mitigate CVE-2026-75483
Immediate Actions Required
- Update powerlevel10k to a version that includes commit 58e13d16a50e1d6908e39e20a670896808ccf350 or later.
- Update user-level ~/.p10k.zsh configurations that override POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION to apply the (V) flag.
- Restart affected shell sessions so the patched configuration takes effect.
Patch Information
The fix is available in the powerlevel10k repository. See the GitHub Powerlevel10k Commit 58e13d and the tracking GitHub Powerlevel10k Issue #2961. Additional context is provided in the VulnCheck Security Advisory.
Workarounds
- Disable the package prompt segment by removing it from POWERLEVEL9K_LEFT_PROMPT_ELEMENTS and POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS.
- Avoid cd into untrusted repositories; inspect package.json contents with a tool that renders control bytes safely before navigating.
- Configure the terminal emulator to strip or escape unsupported control sequences where feasible.
# Manually patch the expansion in ~/.p10k.zsh
typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${(V)P9K_PACKAGE_NAME//\%/%%}@${(V)P9K_PACKAGE_VERSION//\%/%%}'
# Reload the configuration
source ~/.p10k.zsh
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

