📋 What Is It?
Model Poisoning is the direct manipulation of a trained model's parameters, weights, or structure so the deployed model behaves as the attacker chooses. The attacker need not touch the training data-they reach into the artifact itself: the weight file, the registry entry, the architecture, the hyperparameters, or-in federated learning-the model updates a participant contributes. Unlike ML02 (data poisoning), the attacker edits the output of training rather than its inputs.
⚠️ Common Exploits
- Direct Weight Tampering: edit tensors, re-save; file looks identical
- Weight-Level Backdoor: a trigger forces a target class, clean acc intact
- Structural Trojan: an added layer/branch executes attacker logic
- Registry Swap: flip the "Production" pointer to a malicious version
- Bucket Overwrite: weak ACL lets one cp replace model.pt
- Insider / CI Tampering: edit-weights step between train and publish
- FL Update Poisoning: a scaled update replaces the global model
- Hyperparameter Sabotage: dropout=0, freeze-all, identity activation
🔴 Attack Flow
↓
2. Craft the tamper: edit weights / scale an update
↓
3. Preserve stealth: keep clean-set accuracy high
↓
4. Deliver: overwrite, promote the version, submit update
↓
5. IMPACT: trigger-activated backdoor served, dashboards still green!
❌ Vulnerable Code
✅ Secure Code
✓ Prevention Checklist
- Hash and sign every artifact; verify BEFORE load or promote
- Store the digest/signature out of band, not next to the file
- Prefer safetensors so loading cannot execute code
- Lock the registry/bucket: RBAC, versioning, immutability
- Block all public/broad write access to model buckets
- Split duties: publish (CI) vs. gated, audited promotion
- Reproducible builds + provenance (SLSA / in-toto attestation)
- No manual "edit_weights" step between train and publish
- Use Byzantine-robust FL aggregation (Krum, trimmed mean, median)
- Clip update norms; authenticate and reputation-score clients
- Behavioural + trigger testing before promotion, not just accuracy
- Maintain an AI-BOM; run an integrity watchdog in production
🔍 Detection & Tools
Integrity & Provenance:
Backdoor & FL Defence:
How to Test:
- Re-hash the on-disk model and compare to the signed digest
- Confirm a swapped/edited artifact is refused at load time
- Probe known trigger patterns; compare to a baseline model
- Run backdoor scans (activation clustering, trigger reconstruction)
- Submit a scaled FL update; verify robust aggregation bounds it
- Attempt a registry promotion outside CI; it must require approval
🌍 Real-World
Documented research directions and incident classes (not fabricated CVEs or statistics):
- PoisonGPT-style artifact tampering: researchers surgically edited an open model's weights so it emits attacker-chosen false outputs for specific prompts, then re-uploaded it under a plausible name-downstream users pulling by name inherited the behaviour
- BadNets and successor weight-backdoor research: a network's weights can be modified so a small trigger reliably forces a chosen output while clean-set accuracy is essentially unchanged
- Federated-learning poisoning research: a small fraction of malicious participants-or one scaled "model-replacement" update-can insert a backdoor when the server uses naive averaging (FedAvg)
📌 Quick Tips
- DO NOT load a model trusted by its filename or bucket
- DO NOT allow silent overwrite of a released version
- DO NOT use naive FedAvg with unauthenticated clients
- DO verify a signed hash before load
- DO lock the registry/bucket with RBAC + immutability
- DO use robust aggregation + norm clipping in FL
- DO test for backdoors, not just accuracy