The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в Rust-библиотеках для формата TAR, приводящая к распаковке файлов из вложенного архива

21.10.2025 23:04

В написанной на языке Rust библиотеке async-tar, предоставляющей функции для чтения и записи tar-архивов, выявлена уязвимость (CVE-2025-62518, кодовое имя TARmageddon), позволяющая при распаковке специально оформленного tar-архива не только извлечь размещённые в нём файлы, но и файлы, содержащиеся во вложенном tar-архиве. Уязвимость может быть использована для обхода систем верификации архивов и распаковки файлов, для которых не выполнялась проверка.

Уязвимость также проявляется в форках библиотеки async-tar, таких как tokio-tar, krata-tokio-tar и astral-tokio-tar, а также в утилитах на их основе, например, в пакетном менеджере uv, развиваемом в качестве высокопроизводительной замены "pip" для проектов на языке Python. Из популярных проектов, использующих уязвимые библиотеки, также отмечаются инструментарий testcontainers для запуска docker-контейнеров и WebAssembly runtime wasmCloud. В репозитории crates.is за последние 90 дней библиотека async-tar насчитывает 1.3 млн загрузок, tokio-tar - 2.2 млн, testcontainers - 2.9 млн.

Уязвимость вызвана некорректным выбором позиции при разборе разных значений размера в заголовках ustar и PAX. В tar-архивах в формате PAX для каждого файла внутри архива указываются два заголовка - классический ustar и расширенный PAX. Проблема вызвана тем, что уязвимые библиотеки при распаковке файлов вместо вычисления смещения на основе размера из расширенного заголовка PAX, брали размер из устаревшего заголовка ustar. При нулевом значении размера в заголовке ustar, идущее за ним содержимое файла обрабатывалось как корректный блок TAR-заголовков для следующего файла.

Для совершения атаки достаточно создать TAR-архив, в котором в ustar-заголовке указан нулевой размер, а в заголовке для формата PAX актуальный размер, из-за чего содержимое файла с другим tar-архивом будет обработано как часть основного архива. Пример кода для создания подобных архивов размещён на GitHub. Уязвимость устранена в выпусках tokio-tar 0.5.6 и uv 0.9.5. Для остальных библиотек исправления пока не опубликованы, но для astral-tokio-tar, async-tar и krata-tokio-tar отдельно подготовлены патчи.

Уязвимости в библиотеках присвоен уровень опасности 8.1 из 10, так как проблема может использоваться для перезаписи распаковываемых файлов (в уязвимых реализациях будут распакованы не те файлы, что были видны в архиве). При этом уязвимость в пакетном менеджере uv отмечена как неопасная, так как если атакующий может влиять на содержимое исходного архива, нет смысла усложнять атаку и эксплуатировать уязвимость через вложенный архив, когда можно добиться выполнения кода через сборочные сценарии в основном архиве.

Выявившие уязвимость исследователи предложили несколько гипотетических сценариев атак, позволяющих обойти проверки безопасности и добиться выполнения кода через замену файлов конфигурации или вмешательство в сборочный процесс. Подразумевается, что присланный архив сможет пройти автоматизированную проверку сканером безопасности и ручной аудит, в ходе которого проверяющий не обратит внимание на странный вложенный архив с другими файлами, после чего при распаковке при помощи Rust-библиотек из архива будет извлечено иное содержимое, чем ожидалось.

Например, атакующий может загрузить модифицированный архив в репозиторий PyPI, который пройдёт проверку на основе анализа содержимого основного архива, содержащего легитимный файл pyproject.toml. При обработке данного пакета при помощи утилиты uv легитимный pyproject.toml будет заменён на вредоносный вариант из вложенного архива, содержащий команды, которые будут выполнены при сборке на компьютере разработчика или в системе непрерывной интеграции. Аналогично, можно организовать перезапись файлов контейнера при извлечении образа контейнера при помощи инструментария testcontainers.

  1. Главная ссылка к новости (https://edera.dev/stories/tarm...)
  2. OpenNews: Уязвимости в tar-fs и 7-Zip, позволяющие записать файлы за пределы базового каталога
  3. OpenNews: Уязвимость в Python-модуле TarFile, допускающая запись в любые части ФС
  4. OpenNews: Уязвимость в zlib, проявляющаяся при сжатии специально оформленных данных
  5. OpenNews: Уязвимости в cpio и libarchive
  6. OpenNews: Уязвимости в Libarchive, приводящие к выходу за границы буфера
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64093-tar
Ключевые слова: tar, rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (61) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 23:15, 21/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +21 +/
    Это успех, я считаю!

    Кто со мной согласен - ставим плюсик

     
     
  • 2.4, Tron is Whistling (?), 23:22, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Не просто плюсик, а ++ - два плюсика.
     
     
  • 3.10, Anonimbus (?), 23:27, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    С плюсом-плюсом XD
     
  • 2.49, Грустный (?), 00:33, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Наконец-то хорошая новость.
     

  • 1.6, Аноним (6), 23:24, 21/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Вы не понимаете! Это другое!
     
     
  • 2.15, Аноним (15), 23:37, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты зоркий. Молодец, заметил - именно что другое. А то бы налетели сейчас местные сишники-ПравильныеПогромисты... Никаких тебе выходов за пределы буфера, обращения к освобожденной памяти или двойного освобождения памяти... Ну, именно того, от чего и должен спасать раст. А просто "логическая" ошибка. От которой никто не обещал (и не мог) защитить. Не в той позиции что-то там в файле считали и не проверили. Ну это те самые гугловско-майкрософтовские оставшиеся "30% ошибок", которые уже только напряжением мозгов нужно избегать.
     
     
  • 3.24, Аноним (24), 23:57, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    В новости ошибка работы с памятью. Да, ошибка не с оперативной памятью.
    Так выход за границы массива это логическая ошибка или нет? Если программист на Си ошибётся в размере массива, то это одно, а когда на rust ошибка с размером в структуре данных, то это другое?
    Нет, дружочек, это одного рода проблемы. Да, rust спасает от ошибок с оперативной памятью, с этим спорить не буду.
     
     
  • 4.34, morphe (?), 00:08, 22/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.39, Аноним (15), 00:13, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Чисто казуистический прием Разницу-то в ошибках вы да все остальные всё равно... большой текст свёрнут, показать
     
     
  • 5.66, Аноним (24), 00:59, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > а есть остальные, "логические" (вот как раз когда не то или не оттуда считали или введенное значение на допустимость значений не проверили или когда уставший сонный программист знаки больше с меньше перепутал).

    Так выход за границы массива – это буквально всё, что вы перечислили.

    Считали неопределённые данные.
    Не проверили границу.
    Уставший сонный программист запутался в инкременте в цикле for.

     
     
  • 6.69, Витюшка (?), 01:20, 22/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.25, Аноним (25), 23:58, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > оставшиеся "30% ошибок", которые уже только напряжением мозгов нужно избегать

    Ну раз напряжением мозгов, то софт на расте точно обречён. Ибо в него и привлекают-то лишь всякими "вам больше не нужно думать о размере буферов и указателях", а основная масса растофанов прекращает читать на слове "думать".

     
  • 3.40, Аноним (6), 00:16, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    На другой тип ошибок нужен еще один ЯП!
     
     
  • 4.52, Аноним (52), 00:34, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Может, Zig?
     
  • 3.50, Аноним (52), 00:33, 22/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.9, Аноним (6), 23:26, 21/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    А сколько багов остаются незамеченными тупо из-за того, что раст вынуждает писать нечитаемую лапшу и раздувать изначально компактный код в несколько раз
     
     
  • 2.19, Аноним (15), 23:43, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    нечитаемая она для местных сишников. А кто вкатился в эту тему и какое-то время  в этом варился - заявляют, что всё прекрасно читается и понимается. Дело привычки. А техдир гугла еще и заявляет что команды, разрабатывающие проекты на расте, в два раза продуктивнее команд сиплюсплюсников. Предположу, что командная работа с "нечитаемой лапшой" не могла бы быть в два раза продуктивнее "абсолютно понятных" божественных плюсов.
     
     
  • 3.26, Аноним (6), 23:59, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты даже не понимаешь о чем речь, сразу видно что вкатился и варился. Когда даже книжный алгоритм приходится перелопачивать так, что он становится сам на себя не похож. Сколько из-за таких выкрутасов в коде возникает логических ошибок, невозможно и представить. Пока нормальные люди пишут код так, чтобы он был легко читаем и понятен, такие как ты варятся и вкатываются и навязывают остальным свои шизоидные извращения. Необходимы клиники для реабилитации, а еще лучше принудительные работы не связанные с компьютерами
     
     
  • 4.41, Аноним (-), 00:17, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >  нормальные люди пишут код так, чтобы он был легко читаем и понятен

    Ага, видели мы тот код "от нормальных людей"
    Как тебе функция-портянка на 1000+ строк кода?
    https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driver
    Естественно с кучей кала в виде goto - нормальной обработки ошибок ведь не завезли...

    И ведь это ядро! Его же пишут профи))

    > Необходимы клиники для реабилитации, а еще лучше принудительные работы не связанные с компьютерами

    А принудительная стререлизация, ну чтобы уже на 100% как faшики, будет?

     
     
  • 5.62, Аноним (6), 00:45, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На расте функция конечно будет не 1000 строк, размер функций же от ЯП зависит
     
  • 5.65, Аноним (65), 00:59, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Функцию на тысячу строк можно на любом языке написать, если что. Понимать подобный код на Rust будет также сложно как на C с goto, поскольку только в Rust и regex смысл строки может кардинально измениться всего из-за одного символа. Неудивительно, что без ИИ с ним не разобраться.
     
  • 4.45, Аноним (45), 00:27, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Когда даже книжный алгоритм приходится перелопачивать так, что он становится сам на себя не похож.

    Из этой фразы любому программисту видно, что ты алгоритм заучил, а не понял. Что однозначно определяет тебя как кодера на одном языке, которому никакая клиника уже не поможет.

     
     
  • 5.56, Аноним (6), 00:38, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Мне видно что ты читать не умеешь или какие-то ограничения в мыслительном аппарате, хз. Это где-то в первом классе у детей спрашивают про что пословица "без труда не вытащишь и рыбку из пруда" и они отвечают "про рыбку"
     
  • 4.47, Аноним (15), 00:32, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так а что же ты про техдира гугла не завернул? Вот же он наверное лох, похоже из клиники для реабилитации выступал. Ну или его подло обманули агенты раста с метриками разработки, подло оболгав плюсовиков. Но я конечно поверю тебе, а не ему.

    > Ты даже не понимаешь о чем речь, сразу видно что вкатился и варился

    К твоему сожалению, правда совсем-совсем немного, понимаю. Года три назад, не зная языка, "не вкатываясь", просто взяв примеры кода и подправив их под себя, сделал себе утилитку, работающую с внешними ресурсами (отчеты с биржи стягивает). _Почти_ всё там было понятно и аккуратно. Но да, язык учить надо. Сложное так просто не напишешь. Впрочем, как и на си.

     
     
  • 5.57, Аноним (6), 00:39, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Для тебя гугл образец компетентности? С этого тебе надо было начинать
     
     
  • 6.67, Аноним (15), 01:05, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Для тебя гугл образец компетентности?

    По сравнению с экспертами с опеннета? Конечно! Просто небо и земля. Даже под землей, глубоко. Причем не гугл под землей. Просто тем, что создал (и купил/доработал) гугл, я пользуюсь ежедневно и много. А твоими поделками - совмневаюсь. Ну может одной-двумя (вдруг ты разработчик какого-нибудь постгреса).

    > С этого тебе надо было начинать

    У тебя обида на гугл? Не взяли на работу? Слишком для них умный?

     
     
  • 7.68, Аноним (6), 01:14, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А тебя взяли, поэтому ты им вылизываешь? Или ты думаешь в гугле индусы лучше индусов из микрософта?
     
  • 7.70, Аноним (70), 01:21, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Коллеги, сорри, ворвусь Бросайте Вы эти гугл поделки Корпорация бобра скатилас... большой текст свёрнут, показать
     
  • 2.23, Аноним (15), 23:56, 21/10/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >  и раздувать изначально компактный код в несколько раз

    и вдогонку, из соседней новости, про принятие в ядро Linux 6.18 реализации Binder IPC для Android, написанная на Rust:

    "...Несмотря на продвинутые возможности и поддержку объектов со сложной семантикой владения, драйвер на Rust получился меньше варианта на Си - 5.5 против 5.8 тысяч строк кода."

    Ну т.е. после этого нам _очень_ интересно твое "икспертное" мнение. Ты наверное много программ написал сразу в двух вариантах - на си и на расте, чтобы сравнить и выдать свои ценные замечания, верно? Ведь верно?

     
     
  • 3.27, Аноним (6), 00:01, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Сотни других неудобных примеров мы конечно проигнорируем, да?
     
     
  • 4.37, Аноним (-), 00:12, 22/10/2025 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 4.51, Аноним (15), 00:33, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Эти "сотни других неудобных примеров" только в Вашей голове? Откуда сотни примеров, если Вы и Ваши соратники утверждаете, что на расте вообще ничего не написано?
     
     
  • 5.59, Аноним (6), 00:41, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ничего не пишут, только переписывают
     

  • 1.12, morphe (?), 23:31, 21/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Проблема вызвана тем, что уязвимые библиотеки при распаковке файлов вместо вычисления смещения на основе размера из расширенного заголовка PAX, брали размер из устаревшего заголовка ustar. При нулевом значении размера в заголовке ustar, идущее за ним содержимое файла обрабатывалось как корректный блок TAR-заголовков для следующего файла.

    Т.е проблема в том что спецификацию расширили не пойми как, включив несколько размеров для одного и того же файла, и интерпретация спеки на Rust выбрала из двух размеров не тот.

    Остаётся вопрос почему размер из PAX должен иметь приоритет, ведь теперь проблема может быть обратной - реализации TAR без поддержки PAX будут читать архивы иначе чем исправленная версия.

     
     
  • 2.16, Аноним (16), 23:38, 21/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 3.53, morphe (?), 00:36, 22/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.43, Аноним (-), 00:22, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Там всё ещё интереснее Этих форматов tar было как собак нерезаных Когда POSIX ... большой текст свёрнут, показать
     
  • 2.48, Аноним (48), 00:32, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Т.е проблема в том что спецификацию расширили не пойми как

    Так и думал, опять диды-сишники виноваты.
    Расходимся, дело раскрыто.
    Раст как всегда показал себя молодцом, сишники опозорены.

     

  • 1.13, Аноним (70), 23:33, 21/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот и я говорю, виновен ли хбокс в том, что мои дети сталкиваясь при прохождении игорей с трудностями кричат: папа помоги!
    Казалось бы, причём тут раст, безопасность, ЕГЭ, воспитание, вау импульсы, превозмогание...
    В хбоксе (си) ли дело!?
    Вот в чем вопрос(ц)
     
  • 1.18, Аноним (18), 23:41, 21/10/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     

  • 1.20, Аноним (20), 23:46, 21/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вот видите! Вот такими и должны быть баги, логическими ошибками, а не позорным переполнением буфера
     
  • 1.28, ProfessorNavigator (ok), 00:01, 22/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не, ребят, сегодня не ваш день. Сначала предатели, пардон, производители процессоров вместе с Линусом в спину ударили, а теперь - вот))
     
     
  • 2.29, Аноним (24), 00:02, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Можно подробнее, пожалуйста?
     
     
  • 3.30, ProfessorNavigator (ok), 00:03, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Можно подробнее, пожалуйста?

    https://www.opennet.dev/opennews/art.shtml?num=64091

     
     
  • 4.32, Аноним (24), 00:04, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Спасибо.
     
  • 4.35, Аноним (-), 00:09, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так и не ваш тоже opennet.ru/opennews/art.shtml?num=64092
    Вы же не будете сравнивать какую-то либу с ядром.

    ЗЫ: а чего в ту тему не заглянули, проффесор? сказать нечего было?

     
     
  • 5.38, ProfessorNavigator (ok), 00:13, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Так и не ваш тоже opennet.ru/opennews/art.shtml?num=64092
    > Вы же не будете сравнивать какую-то либу с ядром.

    Спасибо, посмеялся)) Не, не поможет ;)

    > ЗЫ: а чего в ту тему не заглянули, проффесор? сказать нечего было?

    Потроллить на сон грядущий ;) Не всё ж вам развлекаться))

     
     
  • 6.42, Аноним (-), 00:21, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Спасибо, посмеялся)) Не, не поможет ;)

    Конечно не поможет.
    Если человек ставит в один ряд ядро линукс и какую-то либу от дилетантов.. то это многое о нем говорит)

    > Потроллить на сон грядущий

    Получилось весьма уныло.
    Может лучше про коммунизм? Та щиза хотя бы веселее звучит!

     
     
  • 7.46, ProfessorNavigator (ok), 00:31, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Конечно не поможет.
    > Если человек ставит в один ряд ядро линукс и какую-то либу от
    > дилетантов.. то это многое о нем говорит)

    Снова посмеялся)) Не пытайтесь вырулить, говорю ж - не поможет)) Вам производители процессоров такую свинью подложили, прям загляденье.

    >> Потроллить на сон грядущий
    > Получилось весьма уныло.

    Но вы ж стриггерились - значит уже нормально ;)


     

  • 1.31, Аноним (-), 00:04, 22/10/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     

  • 1.44, Подаван (?), 00:23, 22/10/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.55, Аноним (48), 00:37, 22/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сишникам совсем уже делать нечего. Нашли микроскопическую ошибку и раздули из этого целую "уязвимость".
    Удалите новость, опеннет, не позорьтесь.
     
     
  • 2.58, Аноним (52), 00:39, 22/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нееет, выделите новость 20-м шрифтом.
     
     
  • 3.60, Аноним (15), 00:43, 22/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.61, Аноним (65), 00:44, 22/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему программисты на Rust не могут <буквально> переписать логику с реализацией на C, а придумывают собственные дырявые велосипеды? Вообще, тот факт, что на Rust без ИИ программировать не получается по признанию его фанатов наводит на некоторые размышления...
     
  • 1.63, Аноним (63), 00:52, 22/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Спасибо всем ораторам за нажористый растосрач.
     
  • 1.64, Аноним (70), 00:58, 22/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сра4 - это все супер!
    Но годы идут, а процесс идёт однобоко как-то.
    Предлагаю посадить Шигорина с Нуби за нормальный ИИ с тем чтобы написать свое, родное, стабильное и безопасное ядро. Кодовое название проекта: АЛЬТернативная роса, например.
    Интересно, какой бы яп и инструментарий они выбрали?
    Вот помню нуби набрасывал в росу на шарпах!111
    Коллеги, как считаете, на чем бы они стали ваять?!
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру