Ecosyste.ms: Advisories
An open API service providing security vulnerability metadata for many open source software ecosystems.
Security Advisories: GSA_kwCzR0hTQS1oanE2LTUyZ3ctMmc3cM4AA63l
yt-dlp: `--exec` command injection when using `%q` in yt-dlp on Windows (Bypass of CVE-2023-40581)
Summary
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 "https://youtu.be/42xO6rVqf2E" --ignore-config -f 18 --exec "echo %(title)q"
[youtube] Extracting URL: https://youtu.be/42xO6rVqf2E
[youtube] 42xO6rVqf2E: Downloading webpage
[youtube] 42xO6rVqf2E: Downloading ios player API JSON
[youtube] 42xO6rVqf2E: Downloading android player API JSON
[youtube] 42xO6rVqf2E: Downloading m3u8 information
[info] 42xO6rVqf2E: Downloading 1 format(s): 18
[download] Destination: %CMDCMDLINE:~-1%&echo pwned&calc.exe [42xO6rVqf2E].mp4
[download] 100% of 126.16KiB in 00:00:00 at 2.46MiB/s
[Exec] Executing command: echo "%CMDCMDLINE:~-1%&echo pwned&calc.exe"
""
pwned
Patches
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.
Workarounds
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&
. - Instead of using
--exec
, write the info json and load the fields from it instead.
Details
When escaping variables, the following code is used for Windows.
yt_dlp/compat/__init__.py
line 31-33
def compat_shlex_quote(s):
import re
return s if re.match(r'^[-_\w./]+$', s) else s.replace('"', '""').join('""')
It replaces "
with ""
to balance out the quotes and keep quoting intact if non-allowed characters are included. However, the %CMDCMDLINE%
variable can be used to generate a quote using %CMDCMDLINE:~-1%
; since the value of %CMDCMDLINE%
is the commandline with which cmd.exe
was called, and it is always called with the command surrounded by quotes, %CMDCMDLINE:~-1%
expands to "
. After the quotes have been unbalanced, special characters are no longer quoted and commands can be executed:
%CMDCMDLINE:~-1%&calc.exe
References
- https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-hjq6-52gw-2g7p
- https://nvd.nist.gov/vuln/detail/CVE-2024-22423
- https://github.com/yt-dlp/yt-dlp/releases/tag/2024.04.09
- https://github.com/yt-dlp/yt-dlp/commit/ff07792676f404ffff6ee61b5638c9dc1a33a37a
JSON: https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1oanE2LTUyZ3ctMmc3cM4AA63l
Source: GitHub Advisory Database
Origin: Unspecified
Severity: High
Classification: General
Published: 8 months ago
Updated: 7 months ago
CVSS Score: 8.4
CVSS vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Identifiers: GHSA-hjq6-52gw-2g7p, CVE-2024-22423
References:
- https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-42h4-v29r-42qg
- https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-hjq6-52gw-2g7p
- https://nvd.nist.gov/vuln/detail/CVE-2024-22423
- https://github.com/yt-dlp/yt-dlp/commit/de015e930747165dbb8fcd360f8775fd973b7d6e
- https://github.com/yt-dlp/yt-dlp/commit/ff07792676f404ffff6ee61b5638c9dc1a33a37a
- https://github.com/yt-dlp/yt-dlp/releases/tag/2021.04.11
- https://github.com/yt-dlp/yt-dlp/releases/tag/2024.04.09
- https://www.kb.cert.org/vuls/id/123335
- https://github.com/advisories/GHSA-hjq6-52gw-2g7p
Blast Radius: 29.8
Affected Packages
pypi:yt-dlp
Dependent packages: 251Dependent repositories: 3,540
Downloads: 2,373,869 last month
Affected Version Ranges: >= 2021.04.11, < 2024.04.09
Fixed in: 2024.04.09
All affected versions: 2021.4.11, 2021.4.22, 2021.5.11, 2021.5.20, 2021.6.1, 2021.6.8, 2021.6.9, 2021.6.23, 2021.7.7, 2021.7.21, 2021.7.24, 2021.8.2, 2021.8.10, 2021.9.1, 2021.9.2, 2021.9.25, 2021.10.9, 2021.10.10, 2021.10.22, 2021.11.10, 2021.12.1, 2021.12.25, 2021.12.27, 2022.1.21, 2022.2.3, 2022.2.4, 2022.3.8, 2022.4.8, 2022.5.18, 2022.6.22, 2022.6.29, 2022.7.17, 2022.7.18, 2022.8.8, 2022.8.14, 2022.8.19, 2022.9.1, 2022.10.4, 2022.11.11, 2023.1.2, 2023.1.6, 2023.2.17, 2023.3.3, 2023.3.4, 2023.6.21, 2023.6.22, 2023.7.6, 2023.9.24, 2023.10.7, 2023.10.13, 2023.11.14, 2023.11.16, 2023.12.30, 2024.3.10
All unaffected versions: 2021.1.15, 2021.1.16, 2021.1.20, 2021.1.24, 2021.1.29, 2021.2.4, 2021.2.9, 2021.2.15, 2021.2.19, 2021.2.24, 2021.3.1, 2021.3.3, 2021.3.7, 2021.3.15, 2021.3.21, 2021.3.24, 2021.4.3, 2024.4.9, 2024.5.26, 2024.5.27, 2024.7.1, 2024.7.2, 2024.7.7, 2024.7.8, 2024.7.9, 2024.7.16, 2024.7.25, 2024.8.1, 2024.8.6, 2024.9.27, 2024.10.7, 2024.10.22, 2024.11.4, 2024.11.18