Jei šią savaitę atnaujinote Laravel projektą ir paleidote `composer install`, yra tikimybė, kad jūsų serveryje jau veikia kenkėjiškas kodas. Ne dėl to, kad kažkas nulaužė jūsų apsaugą. Ne dėl to, kad atidarėte įtartiną priedą. O dėl to, kad nulaužė paketą, kuriuo pasitikėjote — ir kurį jūsų programa įkelia automatiškai, kiekvieną kartą, kai kas nors atidaro puslapį.

Gegužės 22–23 dienomis kibernetinio saugumo tyrėjai iš „Socket", „StepSecurity" ir „Aikido Security" užfiksavo precedento neturinčią ataką prieš Laravel-Lang — populiarią PHP paketų organizaciją, teikiančią lokalizacijos failus tūkstančiams Laravel projektų visame pasaulyje. Per kelias sekundes buvo paskelbta daugiau nei 700 užkrėstų paketų versijų. Ne kelios, ne keliolika — septyni šimtai.

Kas yra Laravel-Lang ir kodėl ataka pavojinga

Laravel-Lang yra atviro kodo projektas, valdantis daugybę atskirų paketų, skirtų Laravel programų vertimui į dešimtis kalbų — nuo prancūzų iki japonų. Šie paketai įdiegiami per Composer, standartinę PHP priklausomybių valdymo sistemą. Bet kuris Laravel kūrėjas, norintis lokalizuoti savo programą, greičiausiai naudoja bent kelis šiuos paketus. Tarp paveiktų yra `laravel-lang/publisher`, `laravel-lang/lang`, `laravel-lang/attributes`, `laravel-lang/http-statuses` ir kelios dešimtys kalbų lokalizacijos paketų.

// reklamaČia gali būti jūsų reklamaSusisiekite →

Tyrėjų teigimu, užpuolikai tikriausiai gavo prieigą prie organizacijos lygmens kredencialų — ne prie vieno paketo, o prie visos išleidimo infrastruktūros, leidžiančios publikuoti naujas versijas. „Laikas ir naujai paskelbtų versijų šablonas rodo platesnį Laravel-Lang išleidimo proceso kompromitavimą, o ne vieną kenkėjišką paketo versiją", — aiškina „Socket" tyrėjai. Versijos buvo publikuojamos milžinišku greičiu — šimtai jų pasirodė vos kelių sekundžių skirtumu, kas rodo automatizuotą masinį žymėjimą ir pakartotinį publikavimą.

`composer install` — ir kodas jau veikia

Čia slypi didžiausias šios atakos pavojus. Dauguma tiekimo grandinės atakų veikia taip: kenkėjiškas kodas patenka į paketą, bet reikia, kad kažkas jį aktyvuotų — sukurtų klasės egzempliorių, iškviestų metodą, importuotų failą. Laravel-Lang ataka apeina net šį barjerą.

Užpuolikai įdėjo failą `src/helpers.php` į kiekvieno kompromituoto paketo `autoload.files` sąrašą `composer.json` konfigūracijoje. Ką tai reiškia praktiškai? Kiekviena Laravel programa (ir Symfony, ir PHPUnit, ir dauguma kitų PHP karkasų) paleidimo metu įvykdo `require __DIR__.'/vendor/autoload.php'`. Šis failas automatiškai įkelia viską, kas nurodyta `autoload.files` — be jokio papildomo veiksmo iš kūrėjo pusės. Jokios klasės inicializacijos, jokio metodo iškvietimo, jokio specialaus trigerio. Paketas įdiegtas? Kai tik kas nors atidaro jūsų svetainės puslapį — kenkėjiškas kodas jau veikia.

„StepSecurity" tyrėjai pabrėžia: „Užpuolikas pridėjo src/helpers.php į autoload.files kiekviename kompromituotame pakete. Kadangi kiekviena Laravel programa paleidžia require __DIR__.'/vendor/autoload.php' starto metu — ir Symfony, PHPUnit bei dauguma kitų PHP karkasų daro tą patį — kenkėjiškas kodas vykdomas tą pačią akimirką, kai tik paketo vartotojas paleidžia programą."

Ką vagia 5 900 eilučių ilgio įrankis

Pats kenkėjiškas mechanizmas yra kruopščiai apgalvotas. Pirmiausia, `helpers.php` sugeneruoja unikalų MD5 maišos žymeklį, sudarytą iš direktorijos kelio, sistemos architektūros ir inode numerio. Jei žymeklis jau egzistuoja serveryje, kodas nebesikartoja — tai padeda išvengti aptikimo per daugkartinį vykdymą.

Tuomet kenkėjiškas failas susisiekia su išoriniu serveriu `flipboxstudio[.]info` ir atsisiunčia pagrindinį naudingąjį krūvį — maždaug 5 900 eilučių PHP kodą, organizuotą į penkiolika specializuotų duomenų rinkimo modulių. „Aikido Security" tyrėjas Ilyas Makaris pastebi: „Atsisiųstas kenkėjiškas kodas yra ~5 900 eilučių PHP kredencialų vagystės įrankis, suskirstytas į penkiolika specialistų rinkimo modulių."

Kas tiksliai renkama? Praktiškai viskas: naršyklių išsaugoti slaptažodžiai, sesijų slapukai, SSH raktai, duomenų bazių prisijungimo duomenys, aplinkos kintamieji — įskaitant `.env` failus su API raktais ir duomenų bazės slaptažodžiais. Taip pat kriptovaliutų piniginės, failai iš konkrečių katalogų, FTP klientų prisijungimai ir netgi el. pašto programų kredencialai.

Windows sistemose kenkėjiškas kodas paleidžiamas per Visual Basic Script paleidiklį ir `cscript`, o Linux ir macOS — tiesiogiai per `exec()` funkciją. Tai reiškia, kad ataka yra kelių platformų ir veikia nepriklausomai nuo serverio operacinės sistemos.

Surinkęs viską, ką gali, kodas užšifruoja duomenis AES-256 algoritmu, išsiunčia juos į tą patį `flipboxstudio[.]info/exfil` serverį ir galiausiai išsitrina iš disko. Jokių pėdsakų. Jokios galimybės atkurti, kas buvo pavogta, žiūrint į serverio failų sistemą.

Ką daryti, jei naudojate Laravel-Lang

Tai nėra kažkokia egzotinė priklausomybė. Laravel-Lang paketai turi milijonus atsisiuntimų. Tikimybė, kad tarp paveiktų projektų yra ir lietuviškų, yra didelė — Laravel Lietuvoje yra vienas populiariausių PHP karkasų.

Pirmas žingsnis — patikrinti `composer.lock` failą. Jei jame matote Laravel-Lang paketų versijas, išleistas gegužės 22–23 dienomis (ypač jei versijų numeriai atrodo neįprastai — pavyzdžiui, šimtai naujų versijų per kelias sekundes), projektą reikia laikyti potencialiai kompromituotu.

Antras — atšaukti viską. API raktus, kurie galėjo būti `.env` faile. Duomenų bazių slaptažodžius. SSH raktus. El. pašto paskyrų slaptažodžius. Viską, kas galėjo būti serveryje arba pasiekiama iš serverio.

Trečias — peržiūrėti prisijungimų žurnalus dėl neįprastos veiklos. Ketvirtas — laukti oficialaus Laravel-Lang pataisymo ir atnaujinti paketus į švarias versijas.

Šis incidentas yra skaudi pamoka visai PHP ekosistemai. `autoload.files` mechanizmas, dešimtmečius buvęs patogiu ir nekvestionuojamu įrankiu, staiga tapo atakos vektoriumi, kuriam pasipriešinti praktiškai neįmanoma — bent jau kol kas. Vienintelė apsauga? Nepasitikėti net ir tais paketais, kuriuos naudojote metų metus.

Dažnai užduodami klausimai

Kaip sužinoti, ar mano Laravel projektas yra paveiktas?
Atidarykite composer.lock failą ir ieškokite laravel-lang paketų. Jei matote versijas, išleistas 2026 m. gegužės 22–23 dienomis, o versijų numeriai neįprastai dideli arba jų yra neįprastai daug — projektas gali būti kompromituotas. Taip pat verta patikrinti, ar vendor kataloge nėra failo src/helpers.php su įtartinu turiniu.
Ar pakanka tiesiog atnaujinti paketus į naujesnę versiją?
Ne. Pirmiausia reikia manyti, kad serveris jau yra kompromituotas. Atšaukite visus API raktus, slaptažodžius ir prieigos raktus, kurie buvo serveryje. Tik tada atnaujinkite paketus į švarias versijas. Vien paketų atnaujinimas nepašalina jau pavogtų duomenų problemos.
Ar ši ataka veikia ir Linux serveriuose?
Taip. Nors pradinis paleidimo mechanizmas Windows sistemose naudoja Visual Basic Script, Linux ir macOS serveriuose kenkėjiškas kodas vykdomas tiesiogiai per exec() funkciją. Ataka yra kelių platformų.

Šaltiniai

  1. Laravel-Lang PHP Packages Compromised to Deliver Cross-Platform Credential StealerThehackernews · 2026
  2. Laravel-Lang Supply Chain Attack: Technical Analysis by Aikido SecurityAikido · 2026
  3. Socket Security Advisory on Laravel-LangSocket · 2026