Upload README.md with huggingface_hub
Browse files
README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PoC - modelaudit clean-passes MLflow models-from-code load-time RCE (BL-0109)
|
| 2 |
+
|
| 3 |
+
Coordinated disclosure PoC for huntr (Protect AI MFV). Benign only.
|
| 4 |
+
|
| 5 |
+
- Scanner: modelaudit==0.2.49 (+ modelscan==0.8.8). Format: MLflow (models-from-code).
|
| 6 |
+
- `modelaudit scan evil_mfc_model/` -> 'Clean' / NO ISSUES FOUND / exit 0, but `mlflow.pyfunc.load_model('evil_mfc_model')` imports+executes evil_script.py at load time (RCE). MLflow models-from-code persists a model as a plain `.py` entrypoint + an MLmodel YAML manifest with NO pickle; modelaudit classifies the `.py` (and the MLmodel) as 'unknown format' and skips them (core.py:7005-7008), and never follows the manifest's model_code_path. `benign_mfc_model/` is the same shape with no payload (also Clean = the miss is genuine); `pickle_positive_control/model.pkl` fires CRITICAL (posix.system), proving the detector is live.
|
| 7 |
+
- Benign: evil_script.py only os.system('touch <marker>') at import. No destructive action.
|
| 8 |
+
|
| 9 |
+
Files: evil_mfc_model/ (MLmodel + evil_script.py; scans Clean, RCE on load), benign_mfc_model/ (control), pickle_positive_control/model.pkl (fires). Full report in huntr submission.
|