Добро пожаловать обратно, новички-кибервоины!
В предыдущей статье мы использовали FFmpeg для потоковой передачи видео с камер. Однако важно помнить, что FFmpeg — один из самых распространённых инструментов обработки мультимедиа в мире. Он используется повсюду: от потоковых платформ и медиасерверов до настольных приложений и мобильного ПО.
В этой статье я хотел бы продемонстрировать, как уязвимость утечки памяти в FFmpeg может быть использована для проведения атаки типа «отказ в обслуживании» (DoS) на удаленный медиасервер или для исчерпания ресурсов локальных клиентских приложений.
Источник: stack.watch
Характер уязвимостей в FFmpeg часто обусловлен сложностью анализа мультимедийных форматов и необходимостью корректной обработки некорректных или вредоносных входных данных. Угрозы безопасности часто возникают, когда специально созданные мультимедийные файлы используют логику анализа, что может привести к сбоям в работе приложения или выполнению произвольного кода. Проблемы управления памятью, включая переполнение буфера и утечки памяти, такие как CVE-2025-25469, представляют собой значительную категорию этих уязвимостей, часто возникающих из-за ошибок в путях обработки, которые не позволяют должным образом очистить выделенные ресурсы.
Источник: cve.news
Когда функция av_iamf_parse сталкивается с условием сбоя анализа, она возвращает код ошибки, не освобождая буфер памяти, выделенный ранее при выполнении функции. Это приводит к тому, что каждая неудачная попытка анализа потребляет системную память, которая никогда не освобождается, что приводит к постепенному исчерпанию памяти.
Эта уязвимость вызывает особую обеспокоенность, поскольку она затрагивает компонент libavutil, который служит базовой библиотекой утилит в экосистеме FFmpeg. Это означает, что любое приложение, использующее возможности обработки IAMF в FFmpeg, потенциально может быть затронуто.
Вот простое объяснение того, что делает этот скрипт:
В этой статье мы рассмотрели, как всего несколько строк кода позволяют эксплуатировать эту уязвимость, что приводит к исчерпанию ресурсов. Широкое распространение FFmpeg как в критически важной инфраструктуре, так и в потребительских приложениях делает эту проблему заслуживающей немедленного внимания и устранения.
В предыдущей статье мы использовали FFmpeg для потоковой передачи видео с камер. Однако важно помнить, что FFmpeg — один из самых распространённых инструментов обработки мультимедиа в мире. Он используется повсюду: от потоковых платформ и медиасерверов до настольных приложений и мобильного ПО.
В этой статье я хотел бы продемонстрировать, как уязвимость утечки памяти в FFmpeg может быть использована для проведения атаки типа «отказ в обслуживании» (DoS) на удаленный медиасервер или для исчерпания ресурсов локальных клиентских приложений.
Краткая история уязвимостей FFmpeg
За годы своего существования проект столкнулся с многочисленными уязвимостями, от переполнений буфера до повреждений памяти, которые могли привести к выполнению произвольного кода. Среди известных уязвимостей, выявленных ранее, были переполнения буфера в куче, такие как CVE-2020-22029, проблемы с переполнением буфера, такие как CVE-2024-32230 с высоким уровнем серьёзности, и CVE-2011-0480, также имевшие высокий уровень серьёзности.
Характер уязвимостей в FFmpeg часто обусловлен сложностью анализа мультимедийных форматов и необходимостью корректной обработки некорректных или вредоносных входных данных. Угрозы безопасности часто возникают, когда специально созданные мультимедийные файлы используют логику анализа, что может привести к сбоям в работе приложения или выполнению произвольного кода. Проблемы управления памятью, включая переполнение буфера и утечки памяти, такие как CVE-2025-25469, представляют собой значительную категорию этих уязвимостей, часто возникающих из-за ошибок в путях обработки, которые не позволяют должным образом очистить выделенные ресурсы.
Понимание CVE-2025-25469
Уязвимость CVE-2025-25469 проявляется как утечка памяти в файле libavutil/iamf.c, в частности, в функции анализа IAMF (Immersive Audio Model and Formats). Эта уязвимость возникает, когда компонент iamf.c библиотеки libavutil от FFmpeg выделяет буферы памяти, но не освобождает их при определённых ошибках или граничных условиях.
Когда функция av_iamf_parse сталкивается с условием сбоя анализа, она возвращает код ошибки, не освобождая буфер памяти, выделенный ранее при выполнении функции. Это приводит к тому, что каждая неудачная попытка анализа потребляет системную память, которая никогда не освобождается, что приводит к постепенному исчерпанию памяти.
Эта уязвимость вызывает особую обеспокоенность, поскольку она затрагивает компонент libavutil, который служит базовой библиотекой утилит в экосистеме FFmpeg. Это означает, что любое приложение, использующее возможности обработки IAMF в FFmpeg, потенциально может быть затронуто.
Доказательство концепции: как вызвать утечку
Чтобы вызвать утечку памяти, мы можем создать простой скрипт на Python:
Вот простое объяснение того, что делает этот скрипт:
- Скрипт начинается с Python-шебанга, запускаемого с помощью Python 3.
- Он открывает (или создает) файл с именем bad.iamf в двоичном режиме записи.
- Он записывает в этот файл 100 нулевых байтов. Это создаёт искажённый или недействительный файл IAMF, поскольку корректный файл IAMF не будет состоять только из нулей.
- Затем в цикле, который выполняется 1000 раз, скрипт bad.iamf каждый раз вызывает командную строку для запуска FFmpeg и обработки файла.
- Используемая команда FFmpeg подавляет вывод баннера ( -hide_banner), пытается декодировать bad.iamf входной файл ( -i bad.iamf) и выводит в нулевой формат ( -f null -), фактически отбрасывая вывод.
Краткое содержание
Хотя сама уязвимость может показаться относительно незначительной по сравнению с недостатками выполнения кода, ее потенциальную возможность вызвать сбой в работе служб и нестабильность системы не следует недооценивать.В этой статье мы рассмотрели, как всего несколько строк кода позволяют эксплуатировать эту уязвимость, что приводит к исчерпанию ресурсов. Широкое распространение FFmpeg как в критически важной инфраструктуре, так и в потребительских приложениях делает эту проблему заслуживающей немедленного внимания и устранения.