CVE-2024-38519: Yt dlp Remote Code Execution Vulnerability

HIGH
Advisory Identifier: GHSA-79w7-vh3h-8g4j
CVSS 7.8
CWE-669 CWE-434
Published
Advisory Summary

CVE-2024-38519 is a HIGH (CVSS 7.8) remote code execution vulnerability (CWE-669: Incorrect Resource Transfer Between Spheres) affecting Yt dlp libraries in the PyPI ecosystem. The issue involves yt-dlp file system modification and rce through improper file-extension sanitization. Remediation is available by upgrading affected packages to version 2024.07.01.

CVE-2024-38519 at a Glance

CVE Identifier CVE-2024-38519
GHSA Identifier GHSA-79w7-vh3h-8g4j
Severity HIGH
CVSS v3.1 Base Score 7.8
CWE Classification CWE-669: Incorrect Resource Transfer Between Spheres
Affected Product Yt dlp
Package Ecosystem PyPI
Published Date
Last Updated

Security Impact

CVSS: 7.8

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H).

Attack Vector Local (AV:L)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction Required (UI:R)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity High (I:H)
Availability High (A:H)

How to Fix CVE-2024-38519

To remediate this vulnerability, upgrade all affected Yt dlp dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

yt-dlp fixed: 2024.07.01
pip install yt-dlp>=2024.07.01
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

pip show yt-dlp

How to Check if You Are Affected

To determine whether your Python environment is affected by CVE-2024-38519, inspect your installed packages using pip:

pip show yt-dlp

Analyze the terminal output to locate any version of Yt dlp in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2024.07.01), your application is affected.

Note: The pip show yt-dlp command checks currently installed packages in your active Python environment.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-669: Incorrect Resource Transfer Between Spheres, where the product does not properly transfer a resource/behavior to another sphere, or improperly imports a resource/behavior from another sphere, in a manner that provides unintended control over that resource. In Yt dlp, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary `yt-dlp` does not limit the extensions of downloaded files, which could lead to arbitrary filenames being created in the download folder (and path traversal on Windows). Since `yt-dlp` also reads config from the working directory (and on Windows executables will be executed from the yt-dlp directory) this could lead to arbitrary code being executed. ### Patches `yt-dlp` version 2024.07.01 fixes this issue by whitelisting the allowed extensions. This means some very uncommon extensions might not get downloaded; however, it will also limit the possible exploitation surface. ### Workarounds It is recommended to upgrade yt-dlp to version 2024.07.01 as soon as possible, **always** have `.%(ext)s` at the end of the output template, and make sure you trust the websites that you are downloading from. Also, make sure to never download to a directory within PATH or other sensitive locations like your user directory, `system32`, or other binaries locations. For users not able to upgrade: - Make sure the extension of the media to download is a common video/audio/sub/... one - Try to avoid the generic extractor (`--ies default,-generic`) - Keep the default output template (`-o "%(title)s [%(id)s].%(ext)s`) - Omit any of the subtitle options (`--write-subs`, `--write-auto-subs`, `--all-subs`, `--write-srt`) - Use `--ignore-config --config-location ...` to not load config from common locations ### Details One potential exploitation might look like this: From a mimetype we do not know, we default to trimming the leading bit and using the remainder. Given a webpage that contains ```html <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "name": "ffmpeg", "encodingFormat": "video/exe", "contentUrl": "https://example.com/video.mp4" } </script> ``` this will try and download a file called `ffmpeg.exe` (`-o "%(title)s.%(ext)s`). `ffmpeg.exe` will be searched for in the current directory, and so upon the next run arbitrary code can be executed. Alternatively, when engineering a file called `yt-dlp.conf` to be created, the config file could contain `--exec ...` and so would also execute arbitrary code. ### Acknowledgement A big thanks to @JarLob for independently finding a new application of the same underlying issue. More can be read about on the dedicated GitHub Security Lab disclosure here: [Path traversal saving subtitles (GHSL-2024-090)](<https://securitylab.github.com/advisories/GHSL-2024-090_yt-dlp>) ### References - https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-79w7-vh3h-8g4j - https://nvd.nist.gov/vuln/detail/CVE-2024-38519 - https://github.com/yt-dlp/yt-dlp/releases/tag/2024.07.01 - https://github.com/yt-dlp/yt-dlp/commit/5ce582448ececb8d9c30c8c31f58330090ced03a - https://securitylab.github.com/advisories/GHSL-2024-090_yt-dlp

CVE-2024-38519 Affected Yt dlp Versions

1 component(s)
Fixed Versions:
2024.07.01
Product / Package Ecosystem Affected Versions Fixed Version
yt-dlp
PyPI
< 2024.07.01
2024.07.01

References

Frequently Asked Questions

What is CVE-2024-38519?
CVE-2024-38519 is a security vulnerability in Yt dlp involving yt-dlp File system modification and RCE through improper file-extension sanitization under CWE-669: Incorrect Resource Transfer Between Spheres.
Which Yt dlp versions are affected?
Affected versions include releases prior to 2024.07.01 across affected packages: yt-dlp.
What version fixes CVE-2024-38519?
Upgrading to 2024.07.01 (or the latest patched release for your respective branch) resolves the vulnerability.
Is yt-dlp affected?
Yes, yt-dlp is affected in releases prior to 2024.07.01. Upgrade your dependency to 2024.07.01 or later.
What is the CVSS score of CVE-2024-38519?
CVE-2024-38519 has a CVSS v3.1 base score of 7.8 (HIGH) with vector string CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H.
What CWE is associated with CVE-2024-38519?
CVE-2024-38519 is classified under CWE-669: Incorrect Resource Transfer Between Spheres (The product does not properly transfer a resource/behavior to another sphere, or improperly imports a resource/behavior from another sphere, in a manner that provides unintended control over that resource.).
How can I check PyPI dependencies for CVE-2024-38519?
Run the dependency tree command: 'pip show yt-dlp'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-79w7-vh3h-8g4j",
  "modified" : "2024-07-05T17:54:51Z",
  "published" : "2024-07-02T15:58:35Z",
  "aliases" : [ "CVE-2024-38519" ],
  "summary" : "yt-dlp File system modification and RCE through improper file-extension sanitization",
  "details" : "### Summary\n`yt-dlp` does not limit the extensions of downloaded files, which could lead to arbitrary filenames being created in the download folder (and path traversal on Windows). Since `yt-dlp` also reads config from the working directory (and on Windows executables will be executed from the yt-dlp directory) this could lead to arbitrary code being executed.\n\n### Patches\n`yt-dlp` version 2024.07.01 fixes this issue by whitelisting the allowed extensions.\nThis means some very uncommon extensions might not get downloaded; however, it will also limit the possible exploitation surface.\n\n### Workarounds\nIt is recommended to upgrade yt-dlp to version 2024.07.01 as soon as possible, **always** have `.%(ext)s` at the end of the output template, and make sure you trust the websites that you are downloading from. Also, make sure to never download to a directory within PATH or other sensitive locations like your user directory, `system32`, or other binaries locations.\n\nFor users not able to upgrade:\n- Make sure the extension of the media to download is a common video/audio/sub/... one\n- Try to avoid the generic extractor (`--ies default,-generic`)\n- Keep the default output template (`-o \"%(title)s [%(id)s].%(ext)s`)\n- Omit any of the subtitle options (`--write-subs`, `--write-auto-subs`, `--all-subs`, `--write-srt`)\n- Use `--ignore-config --config-location ...` to not load config from common locations\n\n### Details\nOne potential exploitation might look like this:\n\nFrom a mimetype we do not know, we default to trimming the leading bit and using the remainder. Given a webpage that contains\n```html\n<script type=\"application/ld+json\">\n{\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"VideoObject\",\n    \"name\": \"ffmpeg\",\n    \"encodingFormat\": \"video/exe\",\n    \"contentUrl\": \"https://example.com/video.mp4\"\n}\n</script>\n```\nthis will try and download a file called `ffmpeg.exe` (`-o \"%(title)s.%(ext)s`).\n`ffmpeg.exe` will be searched for in the current directory, and so upon the next run arbitrary code can be executed.\n\nAlternatively, when engineering a file called `yt-dlp.conf` to be created, the config file could contain `--exec ...` and so would also execute arbitrary code.\n\n### Acknowledgement\nA big thanks to @JarLob for independently finding a new application of the same underlying issue.\nMore can be read about on the dedicated GitHub Security Lab disclosure here: [Path traversal saving subtitles (GHSL-2024-090)](<https://securitylab.github.com/advisories/GHSL-2024-090_yt-dlp>)\n\n### References\n- https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-79w7-vh3h-8g4j\n- https://nvd.nist.gov/vuln/detail/CVE-2024-38519\n- https://github.com/yt-dlp/yt-dlp/releases/tag/2024.07.01\n- https://github.com/yt-dlp/yt-dlp/commit/5ce582448ececb8d9c30c8c31f58330090ced03a\n- https://securitylab.github.com/advisories/GHSL-2024-090_yt-dlp\n",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "PyPI",
      "name" : "yt-dlp"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "2024.07.01"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/dirkf/youtube-dl/security/advisories/GHSA-22fp-mf44-f2mq"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-79w7-vh3h-8g4j"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2024-38519"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/ytdl-org/youtube-dl/pull/32830"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yt-dlp/yt-dlp/commit/5ce582448ececb8d9c30c8c31f58330090ced03a"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/ytdl-org/youtube-dl/commit/d42a222ed541b96649396ef00e19552aef0f09ec"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/yt-dlp/yt-dlp"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/yt-dlp/yt-dlp/releases/tag/2024.07.01"
  }, {
    "type" : "ADVISORY",
    "url" : "https://securitylab.github.com/advisories/GHSL-2024-089_youtube-dl"
  }, {
    "type" : "ADVISORY",
    "url" : "https://securitylab.github.com/advisories/GHSL-2024-090_yt-dlp"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-434", "CWE-669" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2024-07-02T15:58:35Z",
    "nvd_published_at" : "2024-07-02T14:15:13Z"
  }
}