Administratorii depozitului de pachete Packagist au dezvăluit informații despre un atac în urma căruia au fost preluate conturile a 14 biblioteci PHP, inclusiv pachete populare precum instantiator (526 milioane instalări în total, 8 milioane instalări pe lună, 323 pachete dependente), sql-formatter (94 milioane instalări în total, 800 de mii pe lună, 109 pachete dependente), doctrine-cache-bundle (73 milioane instalări în total, 500 de mii pe lună, 348 pachete dependente) și rcode-detector-decoder (20 milioane instalări în total, 400 de mii pe lună, 66 pachete dependente).
După compromiterea conturilor, atacatorul a modificat fișierul composer.json, adăugând în câmpul de descriere a proiectului informații că acesta caută un loc de muncă în domeniul securității informației. Pentru a face modificarea în fișierul composer.json, atacatorul a înlocuit URL-urile repositoarelor originale cu linkuri către fork-uri modificate (în Packagist sunt furnizate doar metadate cu linkuri către proiectele dezvoltate pe GitHub, iar în timpul instalării cu comenzile „composer install” sau „composer update”, pachetele sunt descărcate direct de pe GitHub). De exemplu, pentru pachetul acmephp, repositoarul asociat a fost înlocuit din acmephp/acmephp în neskafe3v1/acmephp.
Se pare că atacul nu a fost realizat cu scopuri malițioase, ci ca o demonstrație a inacceptabilității utilizării neglijente a unor date de autentificare repetate pe diferite site-uri. În plus, atacatorul, contrar practicii stabilite a „hack-urilor etice”, nu a notificat în prealabil dezvoltatorii bibliotecilor și administratorii depozitului despre experimentul care avea loc. Ulterior, atacatorul a afirmat că, după ce va reuși să obțină un loc de muncă, va publica un raport detaliat despre metodele folosite în atac.
Conform datelor publicate de administratorii Packagist, toate conturile care gestionau pachetele compromise au folosit parole ușor de ghicit, fără activarea autentificării cu doi factori. Se afirmă că în conturile compromise au fost folosite parole aplicate nu doar în Packagist, ci și în alte servicii, a căror baze de date cu parole au fost compromise anterior și au ajuns în acces public. De asemenea, o altă variantă de acces ar fi putut fi capturarea emailurilor proprietarilor conturilor, care erau legate de domenii expirate.
Pachete compromise:
- acmephp/acmephp (124,860 instalări de-a lungul existenței pachetului)
- 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)
Sursa: opennet.ro
