The OpenNET Project / Index page

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

Уязвимость в Python-библиотеках lzma, bz2 и gzip, потенциально приводящая к выполнению кода

14.04.2026 13:00 (MSK)

В поставляемых в составе CPython классах распаковки сжатых данных в форматах lzma, bz2 и gzip (lzma.LZMADecompressor, bz2.BZ2Decompressor и gzip.GzipFile) выявлена уязвимость (CVE-2026-6100), приводящая к обращению к памяти после её освобождения. Проблема присвоен критический уровень опасности (9.1 из 10) - в случае успешной эксплуатации уязвимость может привести к утечке информации из памяти процесса или выполнению кода атакующего при распаковке специально оформленных данных. Исправление пока доступно в форме патча.

Проблема проявляется после завершении операции выделения памяти ошибкой, возникающей при нехватке памяти (для успешной эксплуатации уязвимости атакующий должен создать условия исчерпания доступной процессу памяти). Обращение к уже освобождённой памяти возникает в приложениях, повторно использующих экземпляр объекта после возвращения ошибки в процессе распаковки. Приложения при каждом вызове создающие новый экземпляр объекта уязвимости не подвержены.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Уязвимость в zlib, проявляющаяся при сжатии специально оформленных данных
  3. OpenNews: Уязвимость Zip Slip, затрагивающая библиотеки для распаковки архивов
  4. OpenNews: Уязвимость в Python, проявляющаяся при обработке непроверенных дробных чисел в ctypes
  5. OpenNews: Уязвимость в Python, позволяющая вызвать системные команды из изолированных скриптов
  6. OpenNews: Уязвимость в Python-модуле TarFile, допускающая запись в любые части ФС
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65202-python
Ключевые слова: python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (60) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:13, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну вот добрались и до биндингов к скриптовым языкам, которые всю дорогу писали как попало. Без сишных зависимостей этот питон даже ползать не сможет, так что впереди длинный путь )))
     
  • 1.2, Аноним Мю (?), 13:17, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хорошо, а какие версии Python затронуты?
     
     
  • 2.6, Аноним (6), 13:27, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Функция zlib'а в текушем виде как минимум 4 года существует, дальше по коммитам не прошёлся, потому что гитхаб - неудобное лагающее г~вно
     
     
  • 3.10, openssh_user (ok), 13:33, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В чём проблема склонировать репо?
     
     
  • 4.11, Аноним (11), 13:42, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На айфон не копируется.
     
     
  • 5.43, Аноним (43), 17:45, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Попросите Apple поработать.
     
  • 4.13, Аноним (6), 13:47, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В том что на простой вопрос на опеннетике дать простой ответ проще, чем достать комп чтобы скачать репу и быстро найти там, где функция появилась. Хотите - найдите.
    Я лично считаю что бага никакого и не было, либо его надо фиксить не там, потому что выглядят патчи как рандомный вброс типичных "ааааа нулл забыли", т.е. скорее всего ллмкой по популярному проекту прошлись и она что-то выбрзнула.
     

  • 1.3, Аноним (-), 13:20, 14/04/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     
  • 1.8, Аноним (6), 13:30, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Занулили какой-то рандомный указатель, который потом может нигде и не используется... С этими вашими лллмками только strcpy да рандомное отсутствие '= NULL' сейчас и будут исправлять всякие идиоты, которым нужно коммитов налутать для... чего-то... джиа-танов новых подготавливают наверное.
     
     
  • 2.31, Сладкая булочка (?), 16:21, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тест добавили, однако какой-то phd чел пришел и сказал, что не нужно

    > Considering we need to hit an error path with a MemoryError, I'm not sure we really need a test. Sometimes we do add tests, sometimes not. I don't think there is a need to add a test. The test also don't assert that we hit the goto so I don't think we need it.

    Видите ли в своих же тестах питонисты не смогли создать способ задать кол-во доступной памяти.

     
     
  • 3.39, ruroruro (ok), 16:59, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > питонисты не смогли создать способ задать кол-во доступной памяти

    Буквально следующий коммент после того что вы процитировали:

    > agreed, while it is neat that we have '_testcapi.set_nomemory' (I didn't realize that), it is a difficult thing to use in a deterministic manner to show that the specific case in desire of covering is hit. usually not worth it.

     
     
  • 4.41, Сладкая булочка (?), 17:10, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> питонисты не смогли создать способ задать кол-во доступной памяти
    > Буквально следующий коммент после того что вы процитировали:
    >> it is a difficult thing to use in a deterministic manner to show that the specific case in desire of covering is hit. usually not worth it.

    Получается готового эксплойта нет? А что тогда столько шума? А если есть, то почему его в тест не засунуть?

     
     
  • 5.44, ruroruro (ok), 17:49, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Лично я рабочего эксплоита не видел. Учитывая, что lzma/bz2/gzip под капотом все равно декомпрессию делают чанками и на большинстве современных машин память выделяется с overcommitом, на самом деле даже просто словить MemoryError в данной ситуации - не очень просто (если просто сделать скажем bz2 файл, который декомпрессится в больше данных чем есть оперативки, то процесс просто будет убит OOM Killerом, а не MemoryError).

    Тест, который изначально был в PR - синтетически симулирует истощение памяти (то есть '_testcapi.set_nomemory' просто делает так чтобы следующий 'PyMem_Malloc' "прикинулся" что памяти нет). Это конечно хорошо, но просто такие тесты на самом деле не очень демонстрирует, что действительно уязвимости нет.

    То есть, например, в моих экспериментах эти тесты не приводят к крашу даже на версиях питона, в которых баг не исправлен. Так что ¯\_(ツ)_/¯.

    А на счет "столько шума", добро пожаловать в мир CVE. Вообще даже если бы был эксплоит, скора 9.1 он сто пудов не заслуживал бы (т.к. при "нормальном" использовании lzma/bz2/gzip никто в здравом уме не станет ловить MemoryError и после этого продолжать использовать тот же самый Decompressor объект).

    Ну это мое ИМХО.

     
     
  • 6.58, Сладкая булочка (?), 20:13, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Учитывая, что lzma/bz2/gzip под капотом все равно декомпрессию делают чанками и на большинстве современных машин память выделяется с overcommitом, на самом деле даже просто словить MemoryError в данной ситуации - не очень просто (если просто сделать скажем bz2 файл, который декомпрессится в больше данных чем есть оперативки, то процесс просто будет убит OOM Killerом, а не MemoryError).

    Можно контейнер отдельный для этого теста сделать.

     
     
  • 7.61, ruroruro (ok), 20:36, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Мои рассуждения на тему overcommit и OOM были относительно вопросов есть ли гот... большой текст свёрнут, показать
     
     
  • 8.62, Сладкая булочка (?), 20:49, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Можно без всякого докера нативно на линуксе это сделать И да, тест будет линукс... текст свёрнут, показать
     
     
  • 9.65, ruroruro (ok), 21:15, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Нууу Я не очень вникал, но вроде как сборка со всякими SANами у них в CI есть... текст свёрнут, показать
     

  • 1.9, Аноним (9), 13:33, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Вот и в managed-языках бывают ошибки работы с памятью. А уж в компилируемом Расте, тем боллее, могут быть.
     
     
  • 2.12, Аноним (11), 13:43, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Все эти ошибки по работе с памятью это пугалки для детей. Чтобы заставить их делать то что тебе выгодно, а не им.  
     
     
  • 3.21, Аноним (21), 15:14, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так и запишем:

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

     
     
  • 4.24, Аноним (24), 15:43, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Аналогии это вот прям вообще не твое. Тут скорее аналогия с рен тв и рептилоидами. Но ты конечно продолжай  включать защитную реакцию чтобы защитить своё ошибочное мировоззрение.  
     
  • 3.60, Аноним (60), 20:21, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Поясните, что это значит, каким таким образом мне выгодны уязвимости в проекте ... большой текст свёрнут, показать
     
  • 2.19, Аноним (19), 14:32, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот и в managed-языках бывают ошибки работы с памятью.

    Ошибка не в языке, а в конкретной реализации.
    Потому что реализация на dъряхе, а там всегда клали болт на безопасность и на работу с памятью.

     
     
  • 3.29, Аноним (9), 16:13, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ошибка в библиотеке на языке.
     
     
  • 4.32, Аноним (32), 16:28, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ошибка в библиотеке на языке.

    На каком языке? Ты там код на питоне увидел?
    Дырень в CPython. CPython это реализация (implementation) питона.
    Кроме него есть и другие - IronPython, Jython и тд. В них есть эта дыра?

     
     
  • 5.36, Аноним (36), 16:49, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ещё раз, ошибка в библиотеке, а не языке.
     
  • 5.54, Аноним (9), 19:18, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В голове у тебя дырень и уже давно.
     
     
  • 6.55, Аноним (55), 19:22, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > В голове у тебя дырень и уже давно.

    Ого какое хамство и агрессия.
    Вы наверное на СИ пишете?

    А если по делу.
    В файлах на каком языке нашли уязвимость?
    Спойлер: это не питон)

     
  • 5.59, Сладкая булочка (?), 20:15, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> Ошибка в библиотеке на языке.
    > На каком языке? Ты там код на питоне увидел?
    > Дырень в CPython. CPython это реализация (implementation) питона.
    > Кроме него есть и другие - IronPython, Jython и тд. В них
    > есть эта дыра?

    Еще rustpython вспомни. Кстати, где в проде хотя бы один из приведенных используется?

     

  • 1.18, Аноним (19), 14:31, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Уязвимость в Python-библиотеках

    Какая прелесть!
    Дырени в _bz2module.c, _lzmamodule.c и zlibmodule.c

     
     
  • 2.34, мимо проходил (?), 16:44, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, вот что случается если детям дать спички или питонячим погроммистам пописать на Си.
     
     
  • 3.49, Аноним (49), 18:22, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ага, вот что случается если детям дать спички или питонячим погроммистам пописать на Си.

    Да-да, Настостоящий Сишник™ такую бы ошибку никогда бы не допустил!
    А если бы допустил, то значит это ненастоящий сишник.

    Правда настощие сишники как единороги - никто сам никогда не видел, но всегда есть брат свата который слышал про такого.

     
  • 2.63, Аноним83 (?), 20:49, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Почему то это волнует только вас.
    Интересно что с вами не так?)
     
     
  • 3.64, Аноним (64), 21:06, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Почему то это волнует только вас.

    Не только меня Ваня, не только меня.

    > Интересно что с вами не так?)

    А что не так?
    Просто обратили внимание что питон к проблеме отношения не имеет.


     
     
  • 4.70, Аноним83 (?), 23:55, 14/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.20, Аноним (20), 15:05, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Читаешь новость "Уязвимость в Python-библиотеках"
    "уязвимость, приводящая к обращению к памяти после её свобождения".
    Думаешь "да ладно? как же так?!"

    А потом открываешь патчик, а там cpython!
    И все сразу становится на свои места))

     
  • 1.22, Аноним (22), 15:15, 14/04/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.23, Аноним (23), 15:31, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Всё это эдж кейсес, которые в реальных сценариях никак не_проявляют себя. Их устранение чаще всего не_обосновано из-за оверинжиниринга. Это как делать проверку словаря на нулевые значения, которые могут вызвать деление на ноль, хотя сам словарь априори заполняется правильно, чисто by design исключая нули.
     
     
  • 2.26, Аноним (22), 15:50, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Всё это эдж кейсес, которые в реальных сценариях

    В реальных сценариях через это и ломают.

    > никак не_проявляют себя.

    Тебя Артемис 2 с Луны только что привёз?

    > Их устранение чаще всего не_обосновано из-за оверинжиниринга.

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

     
     
  • 3.28, Аноним (28), 16:04, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > поэтому сишники делают работу спустя рукава.

    а никто их не учил ка надо делать, Си ведь для них "высокоуровневый" ЯП, который почему-то требует архитектурных знаний, ну вопрос - а зачем мне тогда Си? Усердный Сишник - на асм писать будет, а остальные ничем от питоновых "тяпляпщиков" не отличаются. А почему никто на асм не пишет, я объяснял в прошлых новостях, никто не хочет изучать архитектуру ЦПУ когда она через полгода протухает и никак не стабилизируется - ад одним словом. Бабла ради все? ну ок, тогда платите бабло за качественный код на том же Си. А так все заслуженно, и спецам на руку, им не нужен качественный софт это же угроза нац. безопасТности!

     
  • 3.66, Аноним (-), 21:42, 14/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.27, Аноним (28), 15:59, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Их устранение чаще всего не_обосновано из-за оверинжиниринга.

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

     
     
  • 3.30, Аноним (30), 16:19, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ну так для СИшников дополнительные проверки и есть оверинжениринг.
    Они просто не могут номально проверять краевые случае и инварианты, в силу убогости инструмента и непривычности задачи.

    Как писал Теордор Тцо "check if directory block is within i_size".
    А там уже как повезет.

     
     
  • 4.33, Аноним (28), 16:42, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну так для СИшников дополнительные проверки и есть оверинжениринг.

    Как понимать "дополнительные проверки"? - Проверки бывают либо необходимые и достаточные, либо - избыточные. Любой оптимальный корректный алгоритм имеет необходимые и достаточные проверки.

     
     
  • 5.37, Аноним (37), 16:55, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ээээ, ты это что-то на умном пишешь Ты просто думай по другому Если проверка ... большой текст свёрнут, показать
     
     
  • 6.47, Аноним (28), 18:13, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Ты просто думай по другому.

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

    > Crashes abounded, but so what?

    Ну и помирают люди, что с этого? Зачем лечить, так ведь? Зачем вообще программировать, оно же не съедобное.

    > В общем всем было положить на качество и это не поменялось до сих пор.

    потому-что, это банальные люди за конвейером, условно - человек закручивающий винты айфона, разве разбирается по какой причине условно он закручивает 4 винта, а не 1? Нет, конечно, так и в "программировании", точнее кодировании, это банальные "манки-кодеры".

     
     
  • 7.50, Аноним (50), 18:23, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ладно термины мешает и неудобная могут быть неясным, хотя значат всего лишь ... большой текст свёрнут, показать
     
     
  • 8.56, Аноним (28), 19:35, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Не хочешь делать, не делай вовсе Лень - это моральный кнут Раньше рабов кнутом... большой текст свёрнут, показать
     
  • 2.53, Аноним (53), 18:58, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Всё это эдж кейсес, которые в реальных сценариях никак не_проявляют себя. Их устранение чаще всего не_обосновано из-за оверинжиниринга.

    Надо же. Оказывается, нормальная обработка данных сишниками не практикуется, так как они это попросту не умеют.

     

  • 1.35, ruroruro (ok), 16:48, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > The vulnerability is only present if the program re-uses decompressor instances across multiple decompression calls even after a 'MemoryError' is raised during decompression. Using the helper functions to one-shot decompress data such as 'lzma.decompress()', 'bz2.decompress()', 'gzip.decompress()', and 'zlib.decompress()' are not affected as a new decompressor instance is used per call. If the decompressor instance is not re-used after an error condition, this usage is similarly not vulnerable.

    То есть для того чтобы попасть на эту уязвимость нужно сделать что-то вроде:
    '''
    d = lzma.LZMADecompressor()
    try:
        d.decompress(malicious_data)
    except MemoryError:
        pass
    d.decompress(more_malicious_data)
    '''

    Ага, это явно CVE 9.1, Critical.

     
     
  • 2.38, Аноним (38), 16:56, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Ага, это явно CVE 9.1, Critical.

    А оно может прилитель снаружи?
    Типа запустил скрипт с интернета и он тебе подгадил?


     
     
  • 3.40, ruroruro (ok), 17:02, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    шта? Если ты запустил зловредный скрипт с интернета, то никакого CVE и не нужно, ты и так уже выполняешь arbitrary code.
     
     
  • 4.42, Аноним (42), 17:37, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Чуть проще (из недавнего): скачал модельку для блендера со встроенными скриптами...
     
     
  • 5.48, Аноним (28), 18:16, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да у вас уже notepad.exe уже исполняет код при открытии .txt :)
     
     
  • 6.57, Аноним (57), 19:43, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну малформед юникод кидал десятку в бсод (в линуксе он может даже не малформед, у майкрософта свой собственный юникод).
     
     
  • 7.69, Аноним (6), 23:51, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > в линуксе

    В линуксе, как минимум в ядре, вообще пофигу на кодировку текста, пока это null-терминированные строки. В адекватных и с выключенными дебильными опциями, которые таки заставляют систему парсить юникод, файловых системах то же самое, только '/' в резолвере путей является разделителем. Да и вообще, utf-8 парсится элементарно в код-поинты, с которыми дальше можешь делать что хочешь.

     

  • 1.45, Аноним (43), 17:55, 14/04/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     
  • 1.46, Аноним (43), 18:00, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нужно больше ОЗУ, милорд.
     
     
  • 2.51, Аноним (49), 18:25, 14/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >  Нужно больше ОЗУ, милорд.

    Больше ОЗУ для чего?
    Чтобы в трех нужных местах сделать ххх->next_in = NULL; ?

     

  • 1.52, Аноним (52), 18:42, 14/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прям хоть рекламный слоган делай:
    "Си! Добавляем дыры даже в безопасны Питон!"

    Не даром говорят "C in CVE stands for C language".

     

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



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

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