Správcovia repozitára balíkov Packagist zverejnili informácie o útoku, počas ktorého boli prevzaté kontrolné práva nad účtami sprievodcov 14 PHP knižníc, medzi ktorými sú populárne balíky ako instantiator (526 miliónov inštalácií celkom, 8 miliónov inštalácií za mesiac, 323 závislých balíkov), sql-formatter (94 miliónov inštalácií celkom, 800 tisíc za mesiac, 109 závislých balíkov), doctrine-cache-bundle (73 miliónov inštalácií celkom, 500 tisíc za mesiac, 348 závislých balíkov) a rcode-detector-decoder (20 miliónov inštalácií celkom, 400 tisíc za mesiac, 66 závislých balíkov).
Po kompromitácii účtov útočník zmenil súbor composer.json, pričom do popisu projektu pridal informácie o tom, že hľadá prácu v oblasti informačnej bezpečnosti. Na vykonanie zmeny v súbore composer.json útočník nahradil URL pôvodných repozitárov odkazy na upravené forky (v Packagist sú poskytované len metadáta s odkazmi na projekty, ktoré sa vyvíjajú na GitHub, pri inštalácii príkazom „composer install“ alebo „composer update“ sa balíky sťahujú priamo z GitHub). Napríklad pre balík acmephp bol priradený repozitár nahradený z acmephp/acmephp na neskafe3v1/acmephp.
Zjavne útok nebol vykonaný s cieľom vykonať škodlivé činy, ale ako demonštrácia neprijateľnosti nedbanlivého prístupu k používaniu opakujúcich sa prihlasovacích údajov na rôznych weboch. Útočník pritom v rozpore s existujúcou praxou „etických hackov“ vopred neinformoval vývojárov knižníc a správcov repozitára o vykonaní experimentu. Neskôr útočník uviedol, že po tom, čo sa mu podarí získať prácu, zverejní podrobnú správu o metódach použitých v útoku.
Podľa údajov publikovaných správcami Packagist mali všetky účty spravujúce skompromitované balíky jednoduché na uhádnutie heslá bez aktivácie dvojfaktorovej autentifikácie. Tvrdí sa, že v napadnutých účtoch boli použité heslá, ktoré sa používali nielen v Packagist, ale aj v iných službách, ktorých databázy hesiel boli predtým kompromitované a zverejnené. Ako alternatíva k prístupu mohol byť použitý aj údomeň e-mailov vlastníkov účtov, ktoré boli priradené k prepadnutým doménam.
Skontrolované balíky:
- acmephp/acmephp (124 860 inštalácií od vzniku balíka)
- 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
