Xygeni je nedavno primijetio zabrinjavajući obrazac u krajoliku napada na lanac opskrbe softverom u 2025. godini., koji se pojavljuje u dva popularna upravitelja paketa: PyPI i NPMKao dio naših kontinuiranih napora u prikupljanju obavještajnih podataka o prijetnjama,Xygenijev rani sustav upozorenja na zlonamjerni softver (MEW) Alat je identificirao zaseban, ali metodološki sličan primjer zlonamjernog paketa koji je prethodno prenesen u drugi registar. Ovaj slučaj ističe kako akteri prijetnji razvijaju i ponovno koriste tehnike napada u ekosustavima, posebno putem zlonamjerni Python paketi i zlonamjerni npm paketi, što povećava rizik od infiltracije zlonamjernih paketa u lance opskrbe otvorenog koda.
Xygenijev MEW: Uočavanje sličnosti
Xygenijev MEW alat izrađen je za otkrivanje i označavanje zlonamjernih paketa, posebno onih povezanih s napadima na lanac opskrbe softverom u 2025. godini, čim se objave u registrima otvorenog koda. Radi analizirajući nove pakete na sumnjivo ponašanje.
U ovom slučaju, identificirao je dva zlonamjerni Python paketi (graphalgo na PyPI-ju) i zlonamjerni npm paketi (express-cookie-parser na npm-u).
Zlonamjerni Python i npm paketi u napadima na lanac opskrbe softverom (2025.)
Istražimo zajedničke karakteristike koje su pokrenule naša upozorenja:
Tipo skvotiranje
Obojica su pokušali imitirati popularne postojeće pakete.
- grafalgo (PyPI): "Python paket za stvaranje i manipuliranje grafovima i mrežama.”Prenio korisnik pod imenom "larrytech" 13. lipnja 2025. ovaj se paket predstavio kao PyPi alternativa izvornom ne-zlonamjernom projektu graphalgo, koji je kasnije preimenovan u graphdict.
- ekspresni parser kolačića (npm)Ovaj paket je imitirao poznati paket za parsiranje kolačića, čak ga je i zrcalio. README.md. Takvo lažno predstavljanje je klasična taktika iskorištavanja postojećeg povjerenja.
Zamagljivanje kao prva linija obrane
Oba paketa su sakrila svoj zlonamjerni kod unutar izvornih datoteka. Za grafalgo, obfusirani kod je pronađen unutar /utils/load_libraries.py. U slučaju ekspresni parser kolačića, cookie-loader.min.js sadržavao je obfusirani korisni teret.
Ovaj početni sloj obfuskacije obično se koristi za ometanje povremenog pregleda i statičke analize. Obfuskacija je bila prilično jednostavna: ponovljena ZLib kompresija plus Base64 kodiranje. Ova vrsta obfuskacije jasno ukazuje na to da softver pokušava sakriti svoje ponašanje. Uz ostale dokaze, ovo je omogućilo Xygeni MEW-u da klasificira pakete kao potencijalni zlonamjerni softver. Tijekom faze potvrde, naši recenzenti su odmah pripremili skriptu za deobfuskaciju koja je otkrila očito zlonamjernu fazu droppera.
Višefazna dostava korisnog tereta i zajednička polazna točka
Oba paketa su funkcionirala kao početni “kapaljke”, postavljajući temelje za pravi korisni teret. Dijelili su zajednički vanjski “sjemeURL datoteke:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Ova identična vanjska sjemenska datoteka snažan je pokazatelj zajedničkog aktera prijetnje. Zanimljivo je da se sadržaj ove sjemenske datoteke čini kao jednostavne varijable okruženja (npr. JWT_SECRET, PORT), što potencijalno može zavarati uvidom u njezinu stvarnu funkciju.
Dinamička C2 rezolucija s DGA
Sofisticirana taktika uočena u ovim zlonamjernim paketima je korištenje algoritma generiranja domene (DGA) za dinamičko rješavanje Command and Control (C2) poslužitelja. Ova tehnika, često viđena u naprednim napadima na lanac opskrbe softverom 2025. godine, oslanja se na SHA256 hash izveden iz sadržaja seed datoteke, u kombinaciji s drugim čvrsto kodiranim vrijednostima. Na taj način, C2 infrastruktura se često mijenja, što tradicionalno stavljanje na crnu listu čini mnogo manje učinkovitim. U ovom slučaju, npm varijanta koristila je fiksnu vrijednost 496AAC7E kao dio svoje DGA logike.
Uspostavljanje upornosti
Oba napadača nastojala su uspostaviti trajnu prisutnost na pogođenim sustavima. Njihova strategija uključivala je brisanje datoteke, startup.py (za PyPi) ili startup.js (za npm), u uobičajene direktorije korisničkih podataka Google Chromea na raznim operativnim sustavima (Windows, Linux, macOS).
Čišćenje nakon izvršenja
Kako bi se smanjili tragovi, oba zlonamjerna skripta izvršila su operacije čišćenja. To je uključivalo brisanje njihovih početnih datoteka droppera (load_libraries.py, cookie-loader.min.js) i mijenjanje legitimnih datoteka paketa (__init__.py, index.js) kako biste uklonili reference na sada izbrisane komponente.
Pokazatelji kompromitiranja u zlonamjernim Python i npm paketima
- PyPI paketgraphalgo (objavio larrytech, 13. lipnja 2025.)
- npm paketexpress-cookie-parser (posebno verzija 1.4.12)
- Pristup dijeljenom URL-u početne vrijednosti:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Trajni nazivi datoteka:
startup.py(Piton)startup.js(JavaScript) - Uobičajeni trajni putevi (ovisni o operativnom sustavu)Unutar direktorija korisničkih podataka preglednika Google Chrome (npr.
AppData\Local\Google\Chrome\UserData\Scripts\na Windowsima,~/.config/google-chrome/Scripts/na Linuxu itd.).
Kako se obraniti od zlonamjernih paketa u napadima na lanac opskrbe softverom 2025.
Preporučeni pristup za razvojne programere
Ovaj incident služi kao vrijedna studija slučaja u kontekstu rastućeg krajolika prijetnji napada na lanac opskrbe softverom u 2025. godini. Ističe kako zlonamjerni Python paketi i zlonamjerni npm paketi mogu prodrijeti u pouzdane ekosustave, često izbjegavajući otkrivanje dok ne bude prekasno. Zato su rano otkrivanje, pametni alati i proaktivna higijena sustava sada ključni dijelovi svakog sigurnog DevOps tijeka rada. Razvojnim programerima se preporučuje da razmotre sljedeće:
Pregled ovisnosti
Ako su vaši projekti uključivali grafalgo or ekspresni parser kolačića, bilo bi razborito nastaviti s njihovim uklanjanjem.
- Za PyPI:
pip uninstall graphalgo - Za npm:
npm uninstall express-cookie-parser
Higijena sustava
Razmislite o provođenju sveobuhvatnog skeniranja sustava. Također je preporučljivo ručno provjeriti uobičajene putanje direktorija korisničkih podataka u Chromeu za bilo kakve neočekivane startup.py or startup.js slika.
Proaktivne sigurnosne mjere
- Procijenite nove ovisnostiUspostavite rutinu za temeljitu procjenu novih paketa prije integracije, s naglaskom na one od nepoznatih izdavača.
- Integrirajte sigurnosne alateAlati poput Xygenijevog MEW-a, zajedno s drugim analizama sastava softvera (SCA) rješenja mogu pružiti ključni sloj obrane identificiranjem sumnjivih ponašanja i ranjivosti.
- Najmanja privilegijaRad razvojnih okruženja s načelom najmanjih privilegija može pomoći u ograničavanju potencijalnog utjecaja kompromitiranja.
- Svijest o mrežiPraćenje odlaznog mrežnog prometa za neobične veze ponekad može otkriti C2 komunikacije generirane od strane DGA.
Ključne komponente load_libraries.py (iz grafalga)
download_remote_content(): Rukuje dohvaćanjem datoteka s određenih URL-ova.run_process()Izvršava vanjske Python skripte odvojeno, potiskujući izlaz kako bi ostao diskretan.get_output_file_path()Određuje idealnu lokaciju u sustavu za trajnu datoteku startup.py.remove_self()Orkestrira čišćenje nakon izvršenja od početnih zlonamjernih datoteka i modifikacija paketa.simple_shift_encrypt()/simple_shift_decrypt()Prilagođene kriptografske funkcije za prikrivanje komunikacijskih kanala, ključne za implementaciju DGA.load_libraries()Središnja funkcija koja koordinira cijeli višefazni proces, od početnog preuzimanja do konačnog izvršavanja i čišćenja korisnog tereta.
Posljedice
Kao i kod drugih potencijalno zlonamjernih paketa koje je identificirao MEW, vatrozid ovisnosti odmah je zaštitio korisnike koji bi uključili te zlonamjerne pakete u svoje ovisnosti. Nakon potvrde, slijedili smo postupke obavještavanja za oba registra, koji su nakon pregleda uklonili oba paketa.




