TARmageddon пришел. Ошибка в библиотеке для языка Rust чревата запуском произвольного кода
В библиотеках tokio-tar для языка Rust и ее деривативах присутствует высокоопасная уязвимость, позволяющая получать контроль над атакуемой системой. Исходная библиотека tokio-tar давно заброшена, но до сих пор популярна.
Архивное дело
Популярная библиотека для языка Rust tokio-tar и её деривативы содержат уязвимость, которая открывает возможность для запуска произвольного кода. Хотя сама уязвимость не считается критической (8,1 балла по шкале CVSS), ей, тем не менее, присвоили наименование TARmageddon, что обычно происходит только в исключительных случаях.
«Баг» CVE-2025-62518 выявили эксперты фирмы Edera ещё в августе 2025 г. Её наследует целый ряд крупных и широко используемых проектов, таких как testсontainers и wasmCloud. Как пишет издание The Hacker News, ситуация дополнительно осложняется тем фактом, что один из самых популярных деривативов уязвимой библиотеки - tokyo-tar - по сути заброшен разработчиками. Однако его до сих пор активно скачивают.
Tokio-tar - это библиотека Rust для асинхронного считывания и записи архивов TAR, написанная для использования в комбинации с рантаймом (средой выполнения) Tokio. Последний раз её обновляли в 2023 году.
Пользователям уязвимой библиотеки настоятельно рекомендовано мигрировать на astral-tokio-tar, новый вариант, который обновился до версии 0.5.6 - как раз для того, чтобы избавиться от указанной уязвимости.
Характерно, что уязвимость CVE-2025-62518 приписана именно astral-tokio-tar до версии 0.5.6.
«Версии astral-tokio-tar до 0.5.6 содержат уязвимость, связанную с парсингом заданных разграничений, которая позволяет злоумышленникам добавлять дополнительные записи в архив, эксплуатируя некорректную обработку заголовков PAX/ustar. При обработке архивов с расширенными PAX-заголовками, содержащими переопределения размера, анализатор неправильно определяет позицию потока на основе размера заголовка ustar (часто нулевого), а не размера, указанного в PAX, что приводит к интерпретации содержимого файла как легитимных tar-заголовков. Эта проблема была исправлена версии 0.5.6. Обходных путей нет», - говорится в описании на CVE.org.
PAX (portable archive interchange) - это расширенная версия формата USTAR, который хранит характеристики файлов в архиве TAR.
Схема атаки
В общем и целом схема выглядит следующим образом: PAX-заголовок корректно указывает размер файла, однако заголовок ustar - некорректно - указывает нулевой размер. Tokio-tar (и её варианты) смещают позицию потока, исходя из показателей ustar, в результате чего, внутренний контент интерпретируется как легитимные внешние архивы.
В результате, если вредоносный файл TAR содержит произвольное значение заголовка PAX, но размер ustar равен нулю, а полезная нагрузка начинается с валидных структур заголовков TAR, то парсер будет считывать контент такого файла как легитимные внешние сущности.
Потенциальный злоумышленник может воспользоваться этим для «контрабанды» дополнительных архивов, что в конечном счёте открывает возможность для перезаписи файлов в каталогах распаковки, и, соответственно, для осуществления множества разных вредоносных действий, в том числе, запуска вредоносного кода.
В теории злоумышленник может загрузить специально подготовленный пакет в реестр PyPI, в котором внешний архив TAR содержит легитимный файл pyproject.toml, в то время как скрытый внутренний архив будет содержать вредоносный код, перехватывающий контроль над компилятором и перезаписывающий нужный файл во время инсталляции.
«В то время как средства безопасности Rust затрудняет внедрение ошибок памяти (такие как переполнение буфера или повторное использование ячейки памяти после освобождения), они не устраняют полностью возможность логических ошибок - и в данном случае непоследовательность в парсинге является по сути логическим изъяном», - отмечается в публикации Edera. - «Разработчикам необходимо иметь в виду возможность любых ошибок, вне зависимости от того, какой язык они используют».
«Rust действительно является языком, который снабжён многочисленными средствами защиты памяти, и даже гарантирует безопасную работу с памятью благодаря встроенной в компилятор системе статической проверки ссылок, - отмечает Дмитрий Пешков, эксперт по информационной безопасности компании SEQ. - Но это не означает гарантий, что в написанном на нём ПО не будет ошибок».
Эксперт добавил, что разработчикам, которые используют сторонние библиотеки, стоит регулярно проводить аудит их безопасности, независимо от языка и других факторов: ошибки закрадываются даже в самый высокопрофессиональный код.




