Из репозитория PyPI были удалены две вредоносные библиотеки, пойманные на краже ключей SSH и GPG из проектов разработчиков. Одна из библиотек оставалась незамеченной почти год.
У обеих библиотек был один и тот же автор (olgired2017), который применял технику typosquatting, то есть называл свои «продукты» максимально похоже на другие популярные библиотеки, изменяя лишь пару символов. Так, первой библиотекой была python3-dateutil (загружена 29 ноября 2019 года), имитирующая популярную dateutil, а второй — jeIlyfish (первая «L», это на самом деле «I»; загружена 11 декабря 2018 года), маскирующаяся под jellyfish.
Вредоносные клоны 1 декабря 2019 года обнаружил немецкий разработчик Лукас Мартини ( Lukas Martini), о чем и поспешил уведомить команду безопасности Python. Обе библиотеки были удалены из PyPI в тот же день. Мартини пишет, что вредоносный код присутствовал только в библиотеке jeIlyfish, а python3-dateutil просто импортировала вредоносную jeIlyfish.
Так как ни Мартини, ни представители PyPI не объяснили, чем именно занимались вредоносные библиотеки, журналисты издания ZDNet попросили комментарий у разработчика dateutil Пола Гансла (Paul Ganssle). Тот сообщил, что вредоносный код в jeIlyfish загружал с GitLab файл с именем hashsum, который на первый взгляд выглядел как полная бессмыслица, но затем он декодировался в файл Python и выполнялся.
«Похоже, [этот файл] пытался похитить ключи SSH и GPG с компьютера пользователя и отправить их по этому IP-адресу: http://68.183.212[.]246:32258», — рассказывает эксперт.
Кроме того, злоумышленник явно пытался определить, для каких проектов могут сработать учетные данные (составлялся список ряда директорий, включая домашнюю и PyCharm Projects), чтобы скомпрометировать продукты разработчика-жертвы.
Напомню, что до этого случая вредоносные библиотеки в PyPI обнаруживали уже трижды за последние годы (1, 2, 3).