
概念验证,演示通过 yt-dlp 的 `--netrc-cmd` 选项实现任意命令注入,利用 URL 中的 shell 元字符在受影响版本上执行命令。
--netrc-cmd 实现任意命令注入严重性: 高(CVSS 8.8)
受影响软件: yt-dlp >= 2023.06.21,< 2026.02.21
修复版本: 2026.02.21
安全公告: GHSA-g3gw-q23r-pgqm
CVE: CVE-2026-26331
yt-dlp 的 --netrc-cmd 命令行选项(或 Python API 参数 netrc_cmd)在与恶意构造的 URL 结合使用时,可被滥用以实现任意命令执行。这允许攻击者在用户系统上执行任意 shell 命令。
--netrc-cmd 选项允许用户执行 shell 命令来动态获取登录凭据,并可选地将占位符 {} 替换为 netrc 的 "machine" 值。某些提取器(例如 GetCourseRuIE、TeachableIE、TeachableCourseIE)允许使用通配符主机名,其中可能包含 shell 特殊字符。由于 yt-dlp 使用 subprocess.Popen(shell=True) 执行 --netrc-cmd,恶意 URL 可以注入任意命令。
yt-dlp --netrc-cmd "echo {}" "https://;touch /tmp/pwned;#.getcourse.ru/video"
--netrc-cmd 或 netrc_cmd。{})传递给 --netrc-cmd。