# CVE-2024-22423: yt-dlp `--exec` command injection when using `%q` in yt-dlp on Windows

> Attackers can execute arbitrary commands on Windows systems by exploiting insufficient escaping in the --exec option of yt-dlp.

- **Severity:** High 8.4 (`CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H`)
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Over the internet
- **Victim action needed:** A user has to click or open something
- **Fix available:** Yes
- **Published:** 9 Apr 2024
- **Updated:** 13 Feb 2025
- **Also known as:** GHSA-hjq6-52gw-2g7p, PYSEC-2026-2066, UBUNTU-CVE-2024-22423, openSUSE-SU-2024:13854-1

## What is CVE-2024-22423?

CVE-2024-22423 is a high-severity command injection vulnerability in yt-dlp, published on 9 Apr 2024. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.

### Official description

yt-dlp is a youtube-dl fork with additional features and fixes. The patch that addressed CVE-2023-40581 attempted to prevent RCE when using `--exec` with `%q` by replacing double quotes with two double quotes. However, this escaping is not sufficient, and still allows expansion of environment variables. Support for output template expansion in `--exec`, along with this vulnerable behavior, was added to `yt-dlp` in version 2021.04.11. yt-dlp version 2024.04.09 fixes this issue by properly escaping `%`. It replaces them with `%%cd:~,%`, a variable that expands to nothing, leaving only the leading percent. It is recommended to upgrade yt-dlp to version 2024.04.09 as soon as possible. Also, always be careful when using `--exec`, because while this specific vulnerability has been patched, using unvalidated input in shell commands is inherently dangerous. For Windows users who are not able to upgrade, avoid using any output template expansion in `--exec` other than `{}` (filepath); if expansion in `--exec` is needed, verify the fields you are using do not contain `"`, `|` or `&`; and/or instead of using `--exec`, write the info json and load the fields from it instead.

Weakness: CWE-78 (Improper Neutralization of Special Elements used in an OS Command)

## Which versions are affected by CVE-2024-22423?

3 open source packages ship an affected version, including yt-dlp. It affects 1 product.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `yt-dlp` | PyPI | From 2021.04.11 | 2024.04.09 |
| `yt-dlp` | PyPI | From 2021.04.11 | 2024.04.09 |
| `yt-dlp` | PyPI | From 2021.04.11 | 2024.04.09 |
| `yt-dlp` | openSUSE:Tumbleweed | All versions | 2024.04.09-1.1 |

Products: Yt-Dlp Project Yt-Dlp.

## How do I fix CVE-2024-22423?

Upgrade yt-dlp to 2024.04.09 or later.

## Is CVE-2024-22423 being exploited?

There is no known exploitation of CVE-2024-22423 in the wild and no public exploit code.

## Other vulnerabilities in yt-dlp

- [CVE-2026-26331](https://insights.sbomify.com/CVE-2026-26331/): yt-dlp: Arbitrary Command Injection when using the `--netrc-cmd` option (high 8.8)
- [CVE-2023-40581](https://insights.sbomify.com/CVE-2023-40581/): yt-dlp command injection when using `%q` in `--exec` on Windows (high 8.4)
- [CVE-2026-50023](https://insights.sbomify.com/CVE-2026-50023/): yt-dlp: Dangerous file type creation via insufficient filename sanitization (Bypass of CVE-2024-38519) (high 8.3)
- [CVE-2026-50574](https://insights.sbomify.com/CVE-2026-50574/): yt-dlp: Arbitrary code execution via manifest downloads with aria2c (high 8.3)
- [CVE-2026-55404](https://insights.sbomify.com/CVE-2026-55404/): yt-dlp: Downstream command injection via improper sanitization of yt-dlp --write-link output (high 7.5)

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2024-22423 and fix it if it is affected.

What it is: CVE-2024-22423 is a high-severity command injection vulnerability in yt-dlp, published on 9 Apr 2024. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.
Exploitation: There is no known exploitation of CVE-2024-22423 in the wild and no public exploit code.

Affected packages and fixed versions:
- yt-dlp (PyPI): affected from 2021.04.11; fixed in 2024.04.09
- yt-dlp (PyPI): affected from 2021.04.11; fixed in 2024.04.09
- yt-dlp (PyPI): affected from 2021.04.11; fixed in 2024.04.09

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2024-22423/ (Markdown: https://insights.sbomify.com/CVE-2024-22423/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2024-22423
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2024-22423
- OSV: https://osv.dev/vulnerability/CVE-2024-22423

---
From sbomify Insights: https://insights.sbomify.com/CVE-2024-22423/
Summaries are generated and may contain mistakes; the official description above is the record.
