Podmetnuta maliciozna kopija popularnih Laravel-Lang paketa — krade lozinke i ključeve programera
Laravel je najpopularniji PHP framework — gotov programski kod koji programeri ubacuju u svoje veb aplikacije, bez potrebe da iznova pišu uobičajene akcije, poput onih za prijavu ili greške u formularima. Laravel-Lang je dopuna koja prevodi standardne poruke na preko 100 jezika, što opet olakšava posao programeru, da ne mora sam to da radi. Taj lang paket se nalazi na GitHubu sto godina i svi znaju gde stoji i kako se poziva. Ali niko nije očekivao da će napadač napraviti kopiju ovog globalno korišćenog paketa, u njega staviti maliciozan kod i nalepiti istu etiketu da podseća na original. Ono što je napadač znao je da postoji propust u Packagist katalogu — registru iz kog programeri povlače pakete — i da će maliciozni paket biti povučen kao regularni, samo zato što ima isto ime. Kad takav paket uđe u projekat, skriveni kod se pokreće na mašini gde je preuzet — računaru programera ili build-serveru — i krade ono najvrednije: lozinke i ključeve kojima se otvaraju nalozi na cloud-u, pristup serverima i sistemima preko kojih se objavljuje kod, pa čak i lozinke iz pregledača i kripto novčanika. Kod je bio programiran tako da sve ukradeno šalje na server napadača (flipboxstudio[.]info). Napad su otkrili istraživači firmi Aikido Security i Socket; pogođeno je 233 verzije tih paketa, a Packagist je zaražene kopije privremeno uklonio.
Ovaj i slični napadi ruše poverenje u sistem distribucije i osnovu programerskog radnog toka — integritet nekog online paketa obično se uzima zdravo za gotovo, najčešće bez ikakve dopunske provere. Ako ovako može da se podmetne zaražen paket najkorišćenijeg PHP framework-a na planeti, šta je sledeće? Ni meta nije slučajna: kradu se lozinke i ključevi kojima programer otvara i svoje i tuđe projekte, pa se površina napada širi daleko van okruženja. Iz iskustva znam da mnogi programeri olako shvataju bezbednost, uvereni da znaju šta rade, pa se bojim da ovoj priči nije kraj.
- Proveri composer.lock i composer.json na laravel-lang pakete (lang, attributes, http-statuses) i da li ti je povučena neka zaražena verzija
- Blokiraj te pakete dok ne izađu potvrđeno čiste verzije — ne reinstaliraj na slepo
- Ako si ih povlačio, tretiraj tu mašinu i CI runner kao kompromitovane i rotiraj sve: cloud ključeve, SSH, API tokene, lozinke baza i CI/CD tokene
- Pregledaj saobraćaj ka flipboxstudio[.]info i tragove u temp folderu (.laravel_locale), pa rebuilduj pogođene hostove i runnere sa čistih images
- Ubuduće zakuj zavisnosti po hešu/integritetu, ne samo po broju verzije, i uključi composer audit u CI