YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
ExecuTorch .pte graph-trigger backdoor PoC
This repository contains a minimal Model File Vulnerability proof of concept for
ExecuTorch .pte model files.
Files
control_executorch_classifier.pte- SHA256:
0f85c545c49731cd5fd6a6657d919ce96ac5b462f1d64a51828c50d9888a6d3c - Size: 1416 bytes
- SHA256:
malicious_executorch_trigger.pte- SHA256:
34a9fdb3dde377909fdaaf18f36861a7e7cd02b2e484d55c6b1274d577785f38 - Size: 3096 bytes
- SHA256:
reproduce.py- SHA256:
eb21d72ac51fc3655d70ab256ce4c92bfab3501d8e29ef871f2976c5a6759842
- SHA256:
requirements.txt
Environment
Tested with:
executorch==1.3.1torch==2.12.1modelscan==0.8.8picklescan==1.0.4
Reproduction
Install the dependencies in an isolated environment, then run:
pip install -r requirements.txt
python3 reproduce.py \
--control control_executorch_classifier.pte \
--malicious malicious_executorch_trigger.pte
The script loads both .pte files through the ExecuTorch runtime:
Runtime.get().load_program(path).load_method("forward").execute((x,))
Expected result:
- For benign rows
[0, 0],[1, 2], and[10, -10], the control and malicious models both predict class1. - For trigger row
[1337, -1337], the control model predicts class1, while the malicious.ptepredicts class0.
The trigger is encoded in the ExecuTorch graph itself as a conditional branch:
trigger = (x[:, 0] > 900.0) & (x[:, 1] < -900.0)
torch.where(trigger.unsqueeze(1), backdoor_logits, normal_logits)
Scanner posture
Local scanner results:
modelscan -p malicious_executorch_trigger.pte --show-skipped- Result:
No issues found! - Result:
.ptefile skipped withModel Scan did not scan file
- Result:
picklescan -p malicious_executorch_trigger.pte- Result:
Infected files: 0 - Result:
Dangerous globals: 0
- Result:
This is not a malformed-file crash and does not require Python pickle execution.
The .pte file is valid enough for the ExecuTorch runtime to load and execute.
- Downloads last month
- -
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support