The OpenNET Project / Index page

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



"Уязвимость в Python-модуле TarFile, допускающая запись в любые части ФС"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Уязвимость в Python-модуле TarFile, допускающая запись в любые части ФС"  +/
Сообщение от opennews (??), 05-Июн-25, 23:35 
Во входящем в штатную поставку Python модуле tarfile, предоставляющем функции для чтения и записи tar-архивов, выявлено пять уязвимостей, одной из которых присвоен критический уровень опасности.  Уязвимости устранены в выпусках Python 3.13.4 и 3.12.11. Наиболее опасная уязвимость (CVE-2025-4517) даёт возможность при распаковке специально оформленного архива  записать файлы в любую часть файловой системы. В системных скриптах, использующих tarfile и запускаемых с правами root (например, в утилитах для работы с пакетами и изолированными контейнерами), уязвимость может применяться для повышения своих привилегий или выхода за пределы изолированного контейнера...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=63365

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


3. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +1 +/
Сообщение от Самый Лучший Гусь (?), 05-Июн-25, 23:39 
Уже давно перешли на 3.13. Там новый красивенький РЕПЛ
Ответить | Правка | Наверх | Cообщить модератору

29. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +3 +/
Сообщение от Аноним (29), 06-Июн-25, 12:27 
Новость, как бы, намекает, что в 3.13.3 тоже имеется.
Ответить | Правка | Наверх | Cообщить модератору

45. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (45), 06-Июн-25, 19:59 
РЕПЛ — это в лиспах. Больше нигде не видел даже отдалённо напоминающего. Все попытки создать подобное в других языках выгдядят как детская поделка из пластилина и желудей, и имеет чуть большую полезность.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

4. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  –13 +/
Сообщение от Аноним (4), 05-Июн-25, 23:58 
Сишные проблемы дают о себе знать даже в нормальных языках.
Ответить | Правка | Наверх | Cообщить модератору

5. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от aaa (??), 06-Июн-25, 00:12 
В коровьем, телячьем или лосином?
Ответить | Правка | Наверх | Cообщить модератору

30. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (29), 06-Июн-25, 12:28 
Комодского варана.
Ответить | Правка | Наверх | Cообщить модератору

44. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Ustas (??), 06-Июн-25, 19:12 
А что не так - телячий язык под брусничным соусом это что-то…
Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

6. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +5 +/
Сообщение от vdb (?), 06-Июн-25, 00:23 
Во-первых, неправильная обработка '..' — это алгоритмическая, а не сишная проблема. Во-вторых, с каких пор питон стал нормальным языком?
Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

8. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  –4 +/
Сообщение от Аноним (8), 06-Июн-25, 01:06 
>неправильная обработка '..' — это алгоритмическая, а не сишная проблема.

Только наполовину. Из-за примитивности си, в нём в качестве путей используются сырые строки, со всеми вытекающими проблемами.

https://ocaml.org/p/eio/1.2/doc/Eio/Stdenv/index.html#val-cwd
>Paths can be absolute or relative (to the current working directory). Using relative paths with this is similar to using them with cwd, except that this will follow ".." and symlinks to other parts of the filesystem.

Это значит, что вручную проверять каждый путь на правильность не нужно.

Eio.Path.((Eio.Stdenv.cwd env) / ".." |> read_dir)

Данная строка выбросит исключение, так как происходит выход за допустимые границы.

Ответить | Правка | Наверх | Cообщить модератору

12. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +4 +/
Сообщение от Аноним (12), 06-Июн-25, 05:53 
Пути как строки принимает любая современная ОС, вы что-то пургу несёте какую-то. Обработать строку и убрать оттуда "/../" - дело максимум 20 строк в цикле.
Ответить | Правка | Наверх | Cообщить модератору

16. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +1 +/
Сообщение от YetAnotherOnanym (ok), 06-Июн-25, 07:43 
> в качестве путей используются сырые строки

Это сишная проблема?

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

38. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (-), 06-Июн-25, 14:41 
> Eio.Path.((Eio.Stdenv.cwd env) / ".." |> read_dir)

С такими рунами остальное будет совершенно не важно ибо если проект девелопаете только вы - его проблемы только вам и интересны.

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

43. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (8), 06-Июн-25, 19:08 
>С такими рунами

Щито поделать, десу. Ну вот не завезли в мейнстрим ничего похожего.

Ответить | Правка | Наверх | Cообщить модератору

17. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  –4 +/
Сообщение от YetAnotherOnanym (ok), 06-Июн-25, 07:47 
Нормальным языком питон считают те, кто никаких других языков не знают.
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

19. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +2 +/
Сообщение от Аноним (19), 06-Июн-25, 08:00 
Доля рынка - вещь упрямая!
Ответить | Правка | Наверх | Cообщить модератору

39. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (12), 06-Июн-25, 15:11 
ООПшники, которые вместо написания полезного кода наклепали сотни тысяч обёрток вокруг кода, который реально что-то делает - стадо упрямое. Без этой секты инкапсуляции в школе можно было бы человека сразу на bash учить программировать - там заодно и проблем никаких с типами не было бы, всё есть строка и всё читает буквы.
Ответить | Правка | Наверх | Cообщить модератору

21. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +2 +/
Сообщение от какая разница (?), 06-Июн-25, 08:42 
>  Уязвимости устранены в выпусках Python 3.13.4 и 3.12.11,

но местные "эксперты" по старой памяти во всем винили Си..

Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

7. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +9 +/
Сообщение от Аноним (7), 06-Июн-25, 00:36 
> вызвана некорректной обработкой последовательности ".." в имени ссылки.

Старая грабля, но по прежнему исправно #%^шит по лбу всяким нубам.

Ответить | Правка | Наверх | Cообщить модератору

10. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +4 +/
Сообщение от Аноним (10), 06-Июн-25, 01:52 
И безо всяких сей.
Ответить | Правка | Наверх | Cообщить модератору

23. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от User (??), 06-Июн-25, 09:24 
Да вот если бы "нубам"... Оно ВСЕМ нет-нет да и "да".
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

9. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (12), 06-Июн-25, 01:21 
Так ведь это нормальное поведение tar архивов, что путь можно любой указать. И как конкретно оно сбегает из "контейнеров"? Подразумевается питоновская бурная деятельность с venv вместо неймспесов линукса?
Ответить | Правка | Наверх | Cообщить модератору

14. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +1 +/
Сообщение от Аноним (10), 06-Июн-25, 07:28 
jail нет, всё остальное пока не дотягивает.
Ответить | Правка | Наверх | Cообщить модератору

13. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (13), 06-Июн-25, 07:03 
Да пофиг. Всё равно этот модуль нужен исключительно для программного доступа к содержимому. Кому распаковывать - те ручками распакуют куда надо.
Ответить | Правка | Наверх | Cообщить модератору

24. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от 1 (??), 06-Июн-25, 09:56 
А потом, какой-нибодь Sony программист, поставит лишний пробел в скрипте обновления ....
Ответить | Правка | Наверх | Cообщить модератору

25. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (25), 06-Июн-25, 10:01 
Странно что выпустили фикс только для 3.12 и 3.13. Или в ранних версиях нет такого модуля?
Ответить | Правка | Наверх | Cообщить модератору

34. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от userd (ok), 06-Июн-25, 13:25 
Модуль tarfile появился в Python 2.3.

TarFile.extract()/TarFile.extractall() позволяют при распаковке заменить любой доступный файл - по абсолютному пути или по относительному вне текущего директория.

Когда-то консольный tar тоже это позволял, но потом была осознана опасность tarbomb и консольные tar-ы прикрыли ключиками (-P, --absolute-paths).

В версии 3.10 у методов extract/extractall появился параметр filter, который должен давать возможность управлять разрешением на извлечение файлов в сомнительных случаях. Вот это управление оказалось повреждено в 3.12. О чём, собственно, и новость.


Ответить | Правка | Наверх | Cообщить модератору

47. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (47), 06-Июн-25, 22:07 
> Или в ранних версиях нет такого модуля?

Ранние версии не поддерживаются, и исправлять там ничего не будут. Не можете обновиться на актуальный питон - вас поломают, и поделом.

Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

26. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (8), 06-Июн-25, 10:40 
Чёт бот скрывает все сообщения подряд.
>Пути как строки принимает любая современная ОС, вы что-то пургу несёте какую-то. Обработать строку и убрать оттуда "/../" - дело максимум 20 строк в цикле.

Оно всё дело 20 строк. Хоть подсчёта длины массива, как в эпичном баге grub с 28 backspace, хоть в sql запросах экранировать переменные, хоть здесь. Если программист этого не помнит, а такое частенько случается, то вопрос в том, напомнит ли ему об этом хоть кто-то или нет. В языках типа си, программисту никто ничего никогда не напомнит, все баги будут исключительно на его совести. В языках типа окамла, программисту специально ставят определённые заграждения, чтобы даже если он что-то забудет, то произойдёт ошибка компиляции, где программисту напомнят об этом. Это как со станками, когда вначале в станок ставят деталь, а потом, работник двумя руками нажимает на предохранители. Потому, что деталей много, может кто-то куда-то спешит, а вот запасных рук у работника нет. И такой подход позволяет выражать свои намерения явно: нужен ли доступ сразу ко всей файловой системе, или какой-то части.

Ответить | Правка | Наверх | Cообщить модератору

27. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от User (??), 06-Июн-25, 12:24 
Нуээээ... в "нормальных" языках - что бы там не могла обработать на входе сама ОС - "нормальный" программист будет работать не со "строками", а со специально предназначенными для работы с путями "объектами", которые - да-да, хорошо так снижают возможности выстрелить себе в ногу.
Ответить | Правка | Наверх | Cообщить модератору

35. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Александр (??), 06-Июн-25, 13:47 
Никакой язык не избавит от такого бага. тут уже плоскость логики: в случае А тебе нужно подняться наверх по каталогам, а в случае Б - нет. Чем язык поможет?
Ответить | Правка | Наверх | Cообщить модератору

36. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (8), 06-Июн-25, 13:55 
Выше пример

Eio.Path.((Eio.Stdenv.cwd env) / ".." |> read_dir)

Бросит исключение, так как подниматься выше cwd запрещено.

Ответить | Правка | Наверх | Cообщить модератору

37. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (12), 06-Июн-25, 14:23 
Скипну с вашего позволения аналогию напечатать 20 строк кода, которые всегда можно переписать заного, и ногами в станке.
Ваш пример:

> Eio.Path.((Eio.Stdenv.cwd env) / ".." |> read_dir)

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

> static int sanitize_path_cwdonly(char *buf /* modify inplace */);

Ответить | Правка | Наверх | Cообщить модератору

41. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (8), 06-Июн-25, 17:51 
>это просто тот же самый фильтр в стрингбилдере, который просто за вас кто-то написал.

Нет. read_dir не примет в качестве аргумента строку, будет ошибка компиляции. А дальше, предполагается, что человек пойдёт в документацию, и выяснит, как это сделать правильно.
> static int sanitize_path_cwdonly(char *buf /* modify inplace */);

Знаете, в чём проблема вашего кода? Это просто объявление функции, без тела. Языку си уже больше полувека, а вы до сих пор приводите гипотетическое решение, а не ссылку на хотя-бы сколь нибудь популярную сишную библиотеку. И никаких намёков, что это решение будет хоть в каком-то виде, хотя-бы когда-то.

Ответить | Правка | Наверх | Cообщить модератору

46. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (-), 06-Июн-25, 21:01 
> static int sanitize_path_cwdonly(char *buf /* modify inplace */);

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

Ты мыслишь так, как мыслили диды в 80-х годах. И с таким мышлением, у тебя код вечно будет в багах. Причём и санитизировать пути тебе не удастся полностью, и с памятью работать корректно тоже, потому что пытаясь решить первую проблему, ты начинаешь рыть себе яму второй проблемы.

Ответить | Правка | К родителю #37 | Наверх | Cообщить модератору

40. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (-), 06-Июн-25, 17:36 
Это не решение проблемы. Решением будет запрет использовать API открытия файлов стандартной библиотеки, и предоставление альтернативного API, который будет проверять пути. За попытки использовать стандартную библиотеку расстреливать на месте. Можно скрипт написать, который будет проверять коммиты на наличие вызовов функций стандартной библиотеки, реджектить эти коммиты и вызывать расстрельную команду.

Довольно просто с организационной точки зрения. Но язык тут ни при чём.

Кстати, твой пример не спасает, например, от симлинков, которые могут выводить за пределы того дерева файлов, которым ты хочешь ограничить свою программу.

Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

42. "Уязвимость в Python-модуле TarFile, допускающая запись в люб..."  +/
Сообщение от Аноним (8), 06-Июн-25, 18:01 
>Решением будет запрет использовать API открытия файлов стандартной библиотеки

Ну что вы так с козырей то заходите? Если использовать линтер, то и раст внезапно не нужен, так как проверка владения может быть на стороне линтера. Но есть одна проблема: сишники являются идеологическими противниками любых линтеров, а ещё, они изобретают велосипеды. Так что удачи хотя-бы одного сишника уболтать на это.
>Кстати, твой пример не спасает, например, от симлинков

Разумеется, вы не правы, я это проверил. Поскольку в окамле принято использовать библиотеки, а не велосипедить каждый раз, то данный случай в библиотеке учтён. Что опять таки выгодно отличает окамл от си.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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