Учёные из Университета Турку в Финляндии провели проверку пакетов PyPl на предмет наличия потенциально вредоносных конструкций. В ходе исследования они обнаружили, что почти в половине из проанализированных пакетов присутствует как минимум одна уязвимость. Чаще всего уязвимости связаны с обработкой исключений и использованием возможностей, допускающей подстановку кода.

Менеджерами пакетов по типу PyPl пользуются почти любая компания. Поэтому широкое распространение вредоносных пакетов — проблема насущная. Например, в феврале этого года исследователю Алексу Бирсану удалось взломать внутренние системы более 35 крупных компаний, включая Microsoft, Apple и Tesla. В ходе атаки Бирсан искал имена внутренних пакетов в файлах манифестов в репозиториях GitHub или в CDN компаний. После он создал поддельные пакеты npm, PyPI и RubyGems под теми же именами в репозиториях с открытым исходным кодом. Каждый вышел под реальным аккаунтом Бирсана с подписью: «Этот пакет предназначен для целей исследования безопасности и не содержит никакого полезного кода».

Учёные из Финляндии решили провести собственное исследование и проанализировать пакеты PyPl на наличие в них ошибок, приводящих к уязвимостям.  

В общей сложности авторы изучили 197 тысяч пакетов. Из них около 46 % содержали как минимум одну ошибку. В среднем исследователи фиксировали по три ошибки на пакет. Всего удалось найти 749 тысяч проблем разной степени тяжести: 442 тысячи (59 %) незначительной, 227 тысяч (30 %) умеренной и 80 тысяч (11 %) тяжёлой. 

В пакетах PyGGI, appengine-sdk, genie.libs.ops, pbcore и genie.libs.parser авторы обнаружили больше тысячи ошибок в каждом. В PyGGI найдено 2589 проблем, связанных с конструкцией try-except-pass. Как отмечают авторы, в большинстве случаев эти проблемы незначительны. 

Пакет appengine-sdk содержит более серьёзные ошибки. В нём обнаружили 2356 проблем, часть из которых связана с межсайтовым выполнением сценариев и потенциально небезопасными сетевыми протоколами. В пакетах noblesse, genesisbot, are, suffer, noblesse2 и noblessev2 нашли код для перехвата данных кредитных карт и телефонов, сохранённых в Chrome и Edge. Кроме того, они содержали код для передачи токенов учётных записей из Discord. Пакеты pytagora и pytagora2 загружали и выполняли сторонний исполняемый код. Чаще остальных встречались проблемы с обработкой исключений и инъекциями кода. 

Анализ проводили с использованием инструмента Bandit, сканирующего код. Его разработчик в ответе на исследование указал на ненадёжность инструмента и необходимость ручной проверки результатов. В связи с этим, по его словам, результаты исследования нельзя использовать для оценки безопасности Python. В свою очередь исследователи отметили, что даже при всех недостатках анализа результаты указывают на распространённость уязвимостей в пакетах. 

Материалы исследования опубликованы в arXiv в статье «A Large-Scale Security-Oriented Static Analysis of Python Packages in PyPI».

Комментарии (3)


  1. Cost_Estimator
    02.08.2021 20:32

    А на картинке у вас bootstrap вместо python.


    1. ancotir Автор
      02.08.2021 20:39

      Поменяла фото. Спасибо!


      1. Cost_Estimator
        02.08.2021 20:49

        О, декоратор. Теперь похоже, спасибо )