Критическая уязвимость в Python JSON Logger: угроза 43 млн установок


Недавно обнаруженная уязвимость в библиотеке Python JSON Logger затронула 43 миллиона установок, подвергнув их риску удаленного выполнения кода (RCE). Уязвимость, отслеживаемая как GHSA-wmxh-pxcx-9w24, возникла из-за несоответствия в цепочке зависимостей, что могло позволить злоумышленникам захватить процесс установки пакетов. Исследователь безопасности Omnigodz выявил, что атакующие могли бы использовать эту уязвимость для выполнения произвольного кода на системах, использующих версии 3.2.0 и 3.2.1 логгера. Подробнее о мерах по устранению уязвимости и рекомендациях по безопасности читайте в статье.

Критическая уязвимость в Python JSON Logger: угроза 43 млн установок

В мире разработки на Python недавно произошло событие, которое заставило многих разработчиков и системных администраторов серьезно задуматься о безопасности своих систем. Обнаруженная уязвимость в популярной библиотеке Python JSON Logger потенциально затронула 43 миллиона установок, подвергнув их риску удаленного выполнения кода (RCE). Эта уязвимость, отслеживаемая как GHSA-wmxh-pxcx-9w24, получила оценку 8.8/10 по шкале CVSS v3, что свидетельствует о ее высокой опасности.

Истоки уязвимости

Уязвимость возникла из-за незарегистрированной зависимости "msgspec-python313-pre", которая могла позволить злоумышленникам перехватить процесс установки пакетов. Исследователь безопасности Omnigodz выявил, что атакующие могли бы использовать эту уязвимость для выполнения произвольного кода на системах, использующих версии 3.2.0 и 3.2.1 логгера.

Эта уязвимость является классическим примером атаки путаницы зависимостей, когда злоумышленники эксплуатируют пробелы в цепочках поставок программного обеспечения. В файле конфигурации pyproject.toml библиотеки Python JSON Logger была указана необязательная зависимость для разработки под названием "msgspec-python313-pre", предназначенная для совместимости с Python 3.13. Однако, после того как оригинальный разработчик удалил этот пакет, его имя осталось незарегистрированным на PyPI, создав вакуум в пространстве имен.

Как продемонстрировал Omnigodz в своем исследовании, любой пользователь PyPI мог бы занять это заброшенное имя пакета и опубликовать вредоносный код. Когда разработчики устанавливали зависимости для разработки через pip install python-json-logger[dev] в средах Python 3.13, менеджер пакетов автоматически загружал бы пакет msgspec-python313-pre, контролируемый злоумышленником, если он был доступен в публичных репозиториях.

Масштаб проблемы

С более чем 46 миллионами загрузок в месяц по данным PyPI's BigQuery, широкое распространение Python JSON Logger усилило потенциальное воздействие этой уязвимости. Успешная эксплуатация могла бы предоставить злоумышленникам полный контроль над системой через возможности RCE, что нарушило бы конфиденциальность, целостность и доступность согласно метрикам CVSS.

Для выполнения атаки требовалась минимальная изощренность – достаточно было опубликовать вредоносный пакет на PyPI. Однако, для успеха атаки жертвы должны были использовать Python 3.13 с включенными зависимостями для разработки, что является распространенной конфигурацией в конвейерах CI/CD и рабочих станциях разработчиков.

Стоит отметить, что уязвимость сохранялась несмотря на фикс, внесенный коммитом 1ce81a3, который удалил проблемную зависимость из исходного кода проекта месяцем ранее. Поскольку этот фикс не был включен в официальный релиз PyPI до версии 3.3.0, все установки, использующие стандартные процессы управления пакетами, оставались уязвимыми. Это подчеркивает критическую необходимость синхронизации обновлений репозиториев с выпусками пакетов PyPI в циклах обслуживания открытого исходного кода.

Меры по устранению уязвимости

Разработчики Python JSON Logger приняли меры для устранения уязвимости через два параллельных действия:

  • Выпуск версии 3.3.0, которая полностью исключает зависимость msgspec-python313-pre.
  • Сотрудничество с Omnigodz для передачи права собственности на спорное имя пакета, что эффективно предотвращает захват пространства имен.

Команды по безопасности рекомендуют немедленное обновление до версии 3.3.0 с помощью команды pip install --upgrade python-json-logger==3.3.0. Организации, не имеющие возможности обновиться немедленно, должны провести аудит своих сред Python на предмет:

  • Использования Python 3.13.
  • Включения зависимостей для разработки.
  • Установки версий 3.2.0 или 3.2.1 библиотеки Python JSON Logger.

"Разработчики должны относиться к зависимостям как к поверхностям атаки," - отметил Omnigodz в своей конференц-статье. "Необязательные зависимости, в частности, часто остаются вне поля зрения сканеров безопасности, несмотря на то, что они имеют полные права на выполнение."

Согласно отчету ESET о угрозах 2025 года, атаки на цепочки поставок увеличиваются на 78% год от года. Эта уязвимость подчеркивает продолжающиеся проблемы экосистемы Python в балансировании между удобством использования и безопасностью.

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

Для тех, кто ищет надежные и безопасные решения, стоит обратить внимание на НайсОС - перспективный российский Linux-дистрибутив, который может стать отличной альтернативой для разработчиков, заботящихся о безопасности своих систем.