Разделы

ПО Свободное ПО Безопасность Пользователю Техника

В Python найдена гигантская 15-летняя брешь. «Отравлены» сотни тысяч проектов

В Python есть уязвимость, закравшаяся в него еще в 2007 г. О ней было известно на протяжении 15 лет, но разработчики так и не устранили ее, ограничившись лишь предупреждением в документации. Пострадало более 350 тыс. проектов с открытым исходным кодом. Это далеко не первый такой случай в истории Python.

Python не идеален

В языке программирования Python обнаружена брешь, скрывавшаяся в нем на протяжении, по меньшей мере, 15 лет. Как пишет Bleeping Computer, в связи с тем, что ее не могли устранить так долго, она проникла в несколько сотен тысяч проектов, написанных на Python.

По предварительным данным, пострадало как минимум 350 тыс. репозиториев с открытым исходным кодом. Как много программ с закрытыми исходниками содержат данную брешь, еще предстоит выяснить.

Проблема усугубляется тем, что Python – это самый популярный язык программирования в мире. На нем пишут миллионы программистов.

Python-разработчики годами не знали о «дырах» в своих проектах

Больше вопросов вызывает тот факт, что существование уязвимости не было ни для кого тайной. Ее выявили еще в конце августа 2007 г., но не только не закрыли, но даже не присвоили ей степень опасности. Пока все, что у нее имеется – это лишь факт существования и индекс CVE-2007-4559.

Уязвимость находится в пакете tarfile Python, в части кода, где используются непроверенные функции tarfile.extract() или tarfile.extractall(). Брешь можно использовать для потенциальной перезаписи и захвата файлов на компьютере жертвы, когда уязвимое приложение открывает вредоносный tar-архив через tarfile.

Никто ничего не делает

За 15 лет разработчики Python в лице Python Software Foundation не предприняли ровным счетом ничего, чтобы обезопасить пользователей программ, в которых прячется уязвимость. Также они решили не предупреждать разработчиков о проблеме.

В результате о CVE-2007-4559 в течение полутора десятка лет попросту никто не вспоминал, что, разумеется, немного снижало риск ее эксплуатации киберпреступниками. Уязвимость снова всплыла в начале 2022 г. в ходе расследования другого инцидента безопасности, связанного с Python. Однако даже повторное освещение ситуации не побудило разработчиков языка исправить ее.

Эксплуатация уязвимости CVE-2007-4559 в Python

Но надо сказать, что спустя 15 лет они все же решили отреагировать. Теперь благодаря их слаженной работе в документации к Python есть предупреждение, что «архивов из ненадежных источников может быть опасным». По всей видимости, разработчики считают свою работу выполненной, поскольку в системе отслеживания ошибок Python появилось уведомление, что они смогли разобраться с CVE-2007-4559.

Масштабы шокируют

В 2022 г. брешь CVE-2007-4559 выявили исследователи компании Trellix. Они изучали совсем другую проблему в Python, но заинтересовались, насколько опасна их находка.

Для выяснения истинных масштабов бедствия эксперты взяли 257 репозиториев, которые, по их предположениям, с наибольшей степенью вероятности могли содержать уязвимый код. Они вручную проверили 175 из них, и этого уже было достаточно – «дыра» присутствовала в 61% из них.

Python уже год удерживает звание самого популярного языка программирования в мире. Он стал им в октябре 2021 года

На втором этапе была запущена проверка оставшихся репозиториев в ручном режиме. По итогу суммарное количество проектов, содержащих CVE-2007-4559, выросло до 65%.

Руслан Рахметов, Security Vision: Российский бизнес заинтересован в предложениях от MSSP-провайдеров
Безопасность

В дальнейшем к изучению инцидента безопасности подключился GitHub – сервис хранения репозиториев с открытым исходным кодом, принадлежащий Microsoft. «С помощью GitHub мы смогли получить гораздо больший набор данных, включающий 588840 уникальных репозиториев, которые включают import tarfil в свой код Python», – сообщили представители Trellix.

В общей сложности, по подсчетам экспертов, зараженными оказались, по меньшей мере, 350 тыс. проектов на GitHub. Ситуация на деле может быть еще хуже, поскольку многие из этих проектов использовал для своего обучения сервис GitHub CoPilot, помогающий начинающим программистам в написании кода. Это означает, что на деле CVE-2007-4559 может содержаться в гораздо большем числе проектов.

CoPilot пойман с поличным. Он предлагает программистам использовать опасный код

Помимо привлечения внимания к уязвимости и связанному с ней риску, эксперты Trellix также подготовили исправления для чуть более 11 тыс. проектов на GitHub. Исправления будут доступны в ответвлении затронутых репозиториев. Позже они будут добавлены в основной проект через пулреквесты.

Исследователи полагают, что более 70 тыс. проектов получат исправление в ближайшие несколько недель. Достичь отметки 100 % — непростая задача, поскольку мейнтейнеры также должны принять мерж-реквесты.

Знакомая ситуация

В Python Software Foundation, судя по всему, не всегда торопятся устранять опасные уязвимости. Ситуация с CVE-2007-4559 – это далеко не прецедент.

Международный салон изобретателей: станет ли Новосибирск новым центром притяжения инноваторов?
Инновации для промышленности

Например, почти шесть лет назад, в самом начале 2017 г. широкое распространение получила информация о «дырах» в библиотеках Python, которые позволяли устанавливать соединения в обход фаерволлов и производить целый ряд различных атак. Проблема заключалась в некорректной проверке синтаксиса команд в устанавливаемых FTP-соединениях, позволяющих внедрять произвольные команды.

Примечателен тот факт, что разработчики Python были уведомлены о них сторонними экспертами еще в 2016 г., но не спешили исправлять их. И лишь широкая огласка заставила их подготовить необходимые патчи.

Евгений Черкесов