Správci repozitáře balíčků Packagist zveřejnili informace o útoku, během kterého byla převzata kontrola nad účty správců 14 PHP knihoven, mezi kterými se nachází i tak populární balíčky jako instantiator (526 milionů instalací celkem, 8 milionů instalací měsíčně, 323 závislých balíčků), sql-formatter (94 milionů instalací celkem, 800 tisíc měsíčně, 109 závislých balíčků), doctrine-cache-bundle (73 milionů instalací celkem, 500 tisíc měsíčně, 348 závislých balíčků) a rcode-detector-decoder (20 milionů instalací celkem, 400 tisíc měsíčně, 66 závislých balíčků).
Po kompromitaci účtů útočník změnil soubor composer.json, přičemž do pole s popisem projektu přidal informaci o tom, že hledá práci v oblasti informační bezpečnosti. Aby provedl změnu v souboru composer.json, útočník nahradil URL původních repozitářů odkazy na modifikované forky (v Packagist jsou poskytovány pouze metadata s odkazy na projekty, které se vyvíjejí na GitHubu; během instalace příkazem „composer install“ nebo „composer update“ se balíčky stahují přímo z GitHubu). Například pro balíček acmephp byl přidružený repozitář změněn z acmephp/acmephp na neskafe3v1/acmephp.
Zřejmě útok nebyl proveden za účelem škodlivé činnosti, ale jako demonstrace nepřijatelnosti bezohledného zacházení s opakujícími se přihlašovacími údaji na různých webech. Útočník přitom, navzdory zavedené praxi „etických hacků“, předem neinformoval vývojáře knihoven a správce repozitáře o probíhajícím experimentu. Později útočník uvedl, že až získá práci, zveřejní podrobnou zprávu o metodách použitých při útoku.
Podle zveřejněných údajů administrátorů Packagist ve všech účtech, které spravovaly kompromitované balíčky, byly použity snadno uhádnutelné hesla bez aktivace dvoufaktorové autentizace. Tvrdí se, že u hacknutých účtů byla hesla používaná nejen v Packagist, ale také v dalších službách, jejichž databáze hesel byly dříve kompromitovány a dostaly se do veřejného prostředí. Jako možnost přístupu se také mohlo použít zachycení e-mailů vlastníků účtů, které byly spojeny s neplatnými doménami.
Kompromitované balíčky:
- acmephp/acmephp (124,860 instalací od vzniku balíčku)
- 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)
Zdroj: opennet.ru
