Software Supply Chain Attacks 2025 - ondsindede pakker - ondsindede Python-pakker - ondsindede NPM-pakker

Et nærmere kig på softwareforsyningskædeangreb i 2025: Sammenligning af PyPI- og npm-kampagner

Xygeni observerede for nylig et bekymrende mønster i landskabet for angreb på softwareforsyningskæden i 2025., der dukker op på tværs af to populære pakkehåndteringsprogrammer: PyPI og NPMSom en del af vores løbende trusselsefterretningsindsats,Xygenis tidlige advarsel om malware (MEW) værktøjet identificerede en tydelig, men metodisk lignende forekomst af en skadelig pakke, der tidligere var blevet uploadet til et andet register. Denne case fremhæver, hvordan trusselsaktører udvikler sig og genbruger angrebsteknikker på tværs af økosystemer, især gennem ondsindede Python-pakker og ondsindede npm-pakker, hvilket øger risikoen for, at ondsindede pakker infiltrerer open source-forsyningskæder.

Xygenis MEW: Find lighederne

Xygenis MEW-værktøj er bygget til at detektere og markere ondsindede pakker, især dem, der er knyttet til Software Supply Chain Attacks i 2025, så snart de udgives i open source-registre. Det fungerer ved at analysere nye pakker for mistænkelig adfærd.

I dette tilfælde identificerede den to ondsindede Python-pakker (graphalgo på PyPI) og ondsindede npm-pakker (express-cookie-parser på npm).

Ondsindede Python- og npm-pakker i softwareforsyningskædeangreb (2025)

Lad os undersøge de fælles karakteristika, der udløste vores advarsler:

typosquatting

De forsøgte begge at efterligne populære eksisterende pakker.

  • grafalgo (PyPI): "Python-pakke til oprettelse og manipulation af grafer og netværk."Uploadet af en bruger ved navn" "larrytech" Den 13. juni 2025 præsenterede denne pakke sig selv som et PyPi-alternativ til det oprindelige ikke-skadelige graphalgo-projekt, som senere blev omdøbt til graphdict.
  • express-cookie-parser (npm)Denne pakke imiterede den velkendte cookie-parser-pakke, og spejlede endda dens README.md. En sådan efterligning er en klassisk taktik til at udnytte eksisterende tillid.

Forvirring som en første forsvarslinje

Begge pakker skjulte deres skadelige kode i de originale filer. grafalgo, den forvirrede kode blev fundet indeni /utils/load_libraries.py. I tilfælde af express-cookie-parser, cookie-loader.min.js indeholdt den tilslørte nyttelast.

Dette indledende lag af obfuskation bruges typisk til at hindre tilfældig inspektion og statisk analyse. Obfuskationen var ret simpel: gentagen ZLib-komprimering plus Base64-kodning. Denne type obfuskation indikerer tydeligt, at softwaren forsøger at skjule sin adfærd. Sammen med andre beviser tillod dette Xygeni MEW at klassificere pakkerne som potentiel malware. I bekræftelsesfasen forberedte vores anmeldere straks et deobfuskationsscript, der afslørede den åbenlyst ondsindede dropper-fase.

Flertrinslevering af nyttelast og et fælles oprindelsespunkt

Begge pakker fungerede som oprindelige “pipetter", der banede vejen for den virkelige nyttelast. De delte en fælles ekstern "frø"fil-URL:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

Denne identiske eksterne seed-fil er en stærk indikator for en delt trusselsaktør. Interessant nok ser indholdet af denne seed-fil ud til at være simple miljøvariabler (f.eks. JWT_SECRET, PORT), hvilket potentielt misviser inspektionen af ​​dens faktiske funktion.

Dynamisk C2-opløsning med en DGA

En sofistikeret taktik, der observeres i disse ondsindede pakker, er brugen af ​​en Domain Generation Algorithm (DGA) til dynamisk at løse kommando- og kontrolserveren (C2). Denne teknik, der ofte ses i avancerede softwareforsyningskædeangreb i 2025, er afhængig af en SHA256-hash afledt af seed-filens indhold kombineret med andre hardcodede værdier. Derved ændres C2-infrastrukturen ofte, hvilket gør traditionel blacklisting meget mindre effektiv. I dette tilfælde brugte npm-varianten en fast værdi på 496AAC7E som en del af dens DGA-logik.

Etablering af persistens

Begge angribere forsøgte at etablere en varig tilstedeværelse på de berørte systemer. Deres strategi involverede at slette en fil, startup.py (til PyPi) eller startup.js (for npm), i fælles Google Chrome-brugerdatamapper på tværs af forskellige operativsystemer (Windows, Linux, macOS).

Oprydning efter udførelse

For at minimere spor udførte begge ondsindede scripts oprydningshandlinger. Dette omfattede sletning af deres oprindelige dropperfiler (load_libraries.py, cookie-loader.min.js) og ændring af legitime pakkefiler (__init__.py, index.js) for at fjerne referencerne til de nu slettede komponenter.

Indikatorer for kompromittering i ondsindede Python- og npm-pakker

  • PyPI-pakke: graphalgo (udgivet af larrytech, 13. juni 2025)
  • npm-pakke: express-cookie-parser (specifikt version 1.4.12)
  • Adgang til delt seed-URL

https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

  • Permanente filnavne: startup.py (Python) startup.js (JavaScript)
  • Almindelige vedvarende stier (OS-afhængige)Inden for Google Chrome-brugerdatamapper (f.eks. AppData\Local\Google\Chrome\UserData\Scripts\ på Windows, ~/.config/google-chrome/Scripts/ på Linux osv.).

Sådan forsvarer du dig mod skadelige pakker i softwareforsyningskædeangreb i 2025

En anbefalet tilgang til udviklere

Denne hændelse tjener som et værdifuldt casestudie i det udviklende trusselsbillede af softwareforsyningskædeangreb i 2025. Den fremhæver, hvordan ondsindede Python-pakker og ondsindede npm-pakker kan snige sig ind i betroede økosystemer og ofte undgå at blive opdaget, indtil det er for sent. Derfor er tidlig detektion, smarte værktøjer og proaktiv systemhygiejne nu essentielle dele af enhver sikker DevOps-arbejdsgang. Udviklere opfordres til at overveje følgende:

Afhængighedsgennemgang

Hvis dine projekter har inkluderet grafalgo or express-cookie-parser, ville det være klogt at fortsætte med deres fjernelse.

  • Til PyPI: pip uninstall graphalgo
  • For npm: npm uninstall express-cookie-parser

Systemhygiejne

Overvej at udføre en omfattende systemscanning. Det er også tilrådeligt manuelt at kontrollere de almindelige Chrome-brugerdatamappestier for eventuelle uventede startup.py or startup.js filer.

Proaktive sikkerhedsforanstaltninger

  • Vurder nye afhængighederEtabler en rutine til grundig evaluering af nye pakker før integration, med fokus på pakker fra ukendte udgivere.
  • Integrer sikkerhedsværktøjerVærktøjer som Xygenis MEW, sammen med andre softwarekompositionsanalyseværktøjer (SCA) løsninger kan give et kritisk lag af forsvar ved at identificere mistænkelig adfærd og sårbarheder.
  • Mindste privilegiumBrug af udviklingsmiljøer med princippet om mindste rettigheder kan hjælpe med at begrænse den potentielle indvirkning af et kompromis.
  • NetværksbevidsthedOvervågning af udgående netværkstrafik for usædvanlige forbindelser kan nogle gange afsløre DGA-genereret C2-kommunikation.

Nøglekomponenter af load_libraries.py (fra graphalgo)

  • download_remote_content(): Håndterer hentning af filer fra angivne URL'er.
  • run_process()Udfører eksterne Python-scripts på en uafhængig måde og undertrykker output for at forblive diskret.
  • get_output_file_path()Bestemmer den ideelle systemplacering for den persistente startup.py-fil.
  • remove_self()Orkestrerer oprydning efter udførelse af de oprindelige skadelige filer og pakkeændringer.
  • simple_shift_encrypt() / simple_shift_decrypt()Brugerdefinerede kryptografiske funktioner til at skjule kommunikationskanaler, afgørende for DGA-implementeringen.
  • load_libraries()Den centrale funktion, der koordinerer hele processen i flere trin, fra den første download til den endelige udførelse og oprydning af nyttelasten.

Efterspil

Som med andre potentielt skadelige pakker identificeret af MEW, beskyttede afhængighedsfirewallen øjeblikkeligt brugere, der ville inkludere disse skadelige pakker i deres afhængigheder. Efter bekræftelse fulgte vi notifikationsprocedurerne for begge registre, som efter gennemgang fjernede begge pakker.

sca-tools-software-kompositionsanalyseværktøjer
Prioriter, afhjælp og sørg for dine softwarerisici
Få din gratis konto.
Der kræves ikke noget kreditkort.

Sikr din softwareudvikling og -levering

med Xygeni-produktsuite