Rust: опасность TARmageddon - критическая уязвимость CVE-2025-62518 и при чём здесь Python?

Привет, друзья! В мире открытого исходного кода, где миллионы разработчиков полагаются на библиотеки вроде tokio-tar, иногда возникают ситуации, которые напоминают нам о важности безопасности. Сегодня я расскажу о TARmageddon — это не просто страшное название, а реальная уязвимость, которая затронула популярные проекты на Rust, такие как uv (менеджер пакетов Python от Astral), testcontainers и wasmCloud. Если вы занимаетесь разработкой, особенно в экосистеме Rust, или просто интересуетесь кибербезопасностью, эта статья поможет разобраться в проблеме шаг за шагом. Мы поговорим о причинах уязвимости, её последствиях, способах исправления и уроках для будущего. Давайте разберёмся, почему TARmageddon стал настоящим вызовом для open source сообщества.

Что такое TARmageddon (CVE-2025-62518)

TARmageddon — это критическая уязвимость в библиотеке tokio-tar и всех её форках, которая позволяет злоумышленникам внедрять дополнительные файлы в процесс извлечения TAR-архивов. Представьте: вы скачиваете архив, думаете, что внутри только нужные файлы, а на самом деле там “спрятан” вредоносный код. Эта проблема возникает из-за несоответствия в обработке заголовков PAX и ustar в TAR-файлах.

Tokio-tar скачали более 5 миллионов раз на crates.io, и она используется в тысячах проектов. Уязвимость позволяет перезаписывать файлы, проводить атаки на цепочку поставок (supply chain attacks) и обходить системы безопасности, такие как BOM (Bill of Materials). Если вы работаете с Python-пакетами, контейнерами Docker или WebAssembly, TARmageddon может напрямую повлиять на вашу работу. Если вы используйте эту библиотеку, то ищите по ключевым словам в поисковике: “уязвимость TARmageddon в Rust”, “CVE-2025-62518 исправление”, “tokio-tar безопасность” и начинайте фиксить проект.

Коренная причина уязвимости TARmageddon

Rust: опасность TARmageddon - критическая уязвимость CVE-2025-62518 и при чём здесь Python?

Разберём техническую сторону. TAR-архивы — это формат для упаковки файлов, который использует заголовки для описания содержимого. В уязвимых версиях tokio-tar проблема кроется в десинхронизации:

  • PAX-заголовки правильно указывают размер файла (например, 1 МБ для вложенного архива).
  • Ustar-заголовки ошибочно показывают нулевой размер.
Rust: опасность TARmageddon - критическая уязвимость CVE-2025-62518 и при чём здесь Python?

Парсер (программа, которая читает архив) полагается на ustar-размер и пропускает нулевое количество байт, но реальные данные остаются в потоке. В результате вложенный TAR-архив интерпретируется как часть внешнего, что приводит к феномину “контрабанда” файлов.


Expected by scanner/validator:
Entry 1: "outer-file.txt"
Entry 2: "inner-tar-file.tar" (0 bytes per ustar, but N bytes in PAX)
Entry 3: "next-file.txt"

Actually extracted by tokio-tar:
Entry 1: "outer-file.txt"
Entry 2: "inner-tar-file.tar" (0 bytes per ustar)
Entry 3: "inner-file1.txt" (from inner TAR)
Entry 4: "inner-file2.txt" (from inner TAR)
Entry 5: "next-file.txt" (continues normally)

Это не баг самого языка, Rust действительно защищает от многих ошибок памяти, но всё это похоже на логическую проблему в парсинге. Уязвимость затрагивает форки вроде astral-tokio-tar и krata-tokio-tar, потому что оригинальный tokio-tar стал заброшенным проектом без поддержки и не обновлялся порядка двух лет.

Затронутые проекты и сценарии атак

Самые популярные проекты, которые подверглись угрозе:

  • uv от Astral: Злоумышленник может внедрить вредоносный PyPI-пакет, который перезапишет pyproject.toml во время установки, добавив вредный код.
  • Testcontainers: При извлечении слоёв Docker-образов можно подменить файлы, отравляя контейнеры.
  • WasmCloud: Уязвимость позволяет обходить сканеры безопасности, внедряя неавторизованные файлы.

Другие проекты: binstalk-downloader, liboxen, opa-wasm. Атаки включают:

  • Перезапись файлов на диске.
  • Инъекцию вредоносного содержимого из вложенных архивов.
  • Обход BOM-сканеров: внешний архив выглядит чистым, но внутри — сюрприз.

Рекомендации и патчи

Уязвимость можно исправить:

  • Обновите зависимости: Перейдите на патченные версии. Рекомендуемый форк — astral-tokio-tar (активно поддерживается Astral).
  • Патчи от Edera: Доступны на GitHub. Они обеспечивают приоритет PAX-заголовков, проверку безопасности и строгие границы.
  • Альтернативы: Используйте стандартный create_tar (синхронный, но надёжный). Для асинхронности оберните в tokio::task::spawn_blocking().

Временные меры:

  • Проверяйте количество извлечённых файлов.
  • Сканируйте директории после распаковки.
  • Используйте сэндбоксы с лимитами на файлы.
  • Запретите перезапись существующих файлов.

Edera сыграла ключевую роль: они предоставили патчи и заархивировали свой форк krata-tokio-tar, чтобы избежать путаницы. Если ваш проект использует tokio-tar, проверьте на уязвимость CVE-2025-62518 прямо сейчас.

Источник: Edera