Администраторы репозитория пакетов Packagist раскрыли сведения об атаке, в результате которой был захвачен контроль над учётными записями сопровождающих 14 PHP-библиотек, в числе которых такие популярные пакеты, как instantiator (526 млн установок всего и 8 млн установок за месяц), sql-formatter (94 млн установок), doctrine-cache-bundle (73 млн) и rcode-detector-decoder (20 млн).
Судя по всему атака была произведена не для совершения вредоносных действий, а в качестве демонстрации недопустимости беспечного отношения к использованию повторяющихся учётных данных на разных сайтиах. После компрометации учётных записей атакующий изменил файл composer.json, добавив в поле с описанием проекта информацию том, что он ищет работу, связанную с информационной безопасностью. Для внесения изменения в файл composer.json атакующий заменил URL оригинальных репозиториев ссылками на модифицированные форки (в Packagist предоставляются только метаданные со ссылками на проекты, развиваемые на GitHub, при выполнении установки командой “composer install” или composer update” пакеты загружаются напрямую с GitHub). Например, для пакета acmephp привязанный репозиторий был заменён с acmephp/acmephp на neskafe3v1/acmephp.
При этом атакующий вопреки сложившейся практике “этических взломов” заранее не уведомил разработчиков библиотек и администраторов репозитория о проводимом эксперименте. Позднее атакующий сообщил, что после того как ему удастся получить работу он опубликует детальный отчёт об использованных в атаке методах.
По опубликованным администраторами Packagist данным все четыре учётные записи, управлявшие 14 скомпрометированными пакетами, использовали простые для подбора пароли без включения двухфакторной аутентификации. Утверждается, что во взломанных учётных записях использовались пароли применявшиеся не только в Packagist, но и в других сервисах, база паролей которых была скомпрометирована и попала в публичный доступ. Как вариант получения доступа также мог использоваться захват email владельцев учётных записей, которые были привязаны к просроченным доменам.
Скомпрометированные пакеты:
- acmephp/acmephp (124,860 установок за всё время существования пакета)
- acmephp/core (419,258)
- acmephp/ssl (531,692)
- doctrine/doctrine-cache-bundle (73,490,057)
- doctrine/doctrine-module (5,516,721)
- doctrine/doctrine-mongo-odm-module (516,441)
- doctrine/doctrine-orm-module (5,103,306)
- doctrine/instantiator (526,809,061)
- growthbook/growthbook (97,568
- jdorn/file-system-cache (32,660)
- jdorn/sql-formatter (94,593,846)
- khanamiryan/qrcode-detector-decoder (20,421,500)
- object-calisthenics/phpcs-calisthenics-rules (2,196,380)
- tga/simhash-php, tgalopin/simhashphp (30,555)