Старая уязвимость в языке Python, CVE-2007-4559, обнаруженная еще в 2007 году, оказалась в центре внимания. Выяснилось, что она затрагивает более 350 000 репозиториев и может приводить к выполнению произвольного кода.
Исходно проблема CVE-2007-4559 была найдена в пакете tarfile и относится к типу path traversal (обход каталога), то есть позволяет злоумышленнику перезаписывать произвольные файлы. Хотя сообщений об использовании этой ошибки в атаках не было, известно, что она может применяться в атаках на цепочку поставок. В 2007 году уязвимость не исправили, и единственным возможным решением проблемы сочли обновление документации, предупреждающее разработчиков о возможном риске.
Ранее в этом году, при изучении совсем другой проблемы (CVE-2007-4559), уязвимость CVE-2007-4559 была повторно обнаружена экспертами компании из Trellix (появившейся в результате слияния McAfee Enterprise и FireEye). Они предупредили, что отсутствие очистки файлов перед вызовом tarfile.extract() tarfile.extractall() приводит к уязвимости обхода каталога, что позволяет злоумышленнику получить доступ к файловой системе.
«Уязвимость представляет собой атаку типа path traversal, связанную с функциями extract и extractall в модуле tarfile. Она позволяет злоумышленнику перезаписывать произвольные файлы, добавляя последовательность '..' к именам файлов в tar-архиве», — пишут специалисты Trellix.
Анализируя уязвимость, исследователи обнаружили, что она присутствует в тысячах проектов с открытым и закрытым исходным кодом. Так, для начала эксперты составили набор из 257 репозиториев, которые с большой вероятностью содержали уязвимый код, и вручную проверили 175 из них.
Проверка показала, что 61% проект уязвим перед старой проблемой. Последующая автоматизированная проверка прочих репозиториев и вовсе увеличил количество уязвимых проектов до 65%. В итоге этот небольшой датасет послужил базой для оценки других репозиториев, доступных на GitHub.
«С помощью GitHub мы получили больший набор данных, включающий 588 840 уникальных репозиториев, Python-код которых содержит import tarfile», — говорят исследователи.
В итоге в Trellix пришли к выводу, что существует более 350 000 уязвимых репозиториев, причем многие из них используют инструменты вроде GitHub Copilot. Такие автоматизированные инструменты используют код из сотен тысяч репозиториев для «автозаполнения», то есть небезопасный код может распространяться на другие проекты даже без ведома их разработчиков.
Исследователи говорят, что в целом проблема охватывает огромное количество секторов, включая разработку, веб и машинное обучение.
В своем блоге исследователи описали простые шаги по эксплуатации CVE-2007-4559 в Windows-версии Spyder IDE, а также продемонстрировали, что уязвимость можно использовать и в Linux. Им удалось ускорить запись файла и добиться выполнения кода в тесте с использованием Polemarch. Демонстрацию атак можно увидеть ниже.
Стоит отметить, что во время своих изысканий специалисты Trellix создали бесплатный инструмент Creosote для поиска CVE-2007-4559, который уже доступен на GitHub.
Также, помимо привлечения внимания к старой уязвимости и связанному с ней риску, эксперты Trellix подготовили исправления более чем для 11 000 проектов, которые будут доступны в форках. Планируется, что позже они будут добавлены в основные проекты через пулреквесты.
Эксперты считают, что более 70 000 проектов получат исправления в ближайшие недели, но из-за огромного количества затронутых проблемой репозиториев достичь отметки в 100% будет крайне непростой задачей, которая может растянуться на годы.