csv-bypass-poc / README.md
phenggeler's picture
Add README for CSV scanner bypass PoC
4c5455e verified

CSV Scanner Bypass PoC

Vulnerability Summary

Format: CSV (.csv)
Scanner Bypass: modelscan 0.8.7 + picklescan 1.0.1 (DUAL BYPASS)
Impact: Arbitrary Code Execution via malicious model file
Bounty Target: CSV MFV

Technical Details

This PoC demonstrates a dual scanner bypass for .csv model files:

  1. modelscan bypass: The .csv extension is not in modelscan's supported file extensions list. modelscan skips scanning entirely, returning "No issues found."

  2. picklescan bypass: The malicious payload uses joblib's numpy byte interleaving technique. Even when scanned directly, pickletools.genops() crashes on raw numpy bytes embedded in the joblib pickle format before reaching the malicious __reduce__ call.

  3. ACE vector: The file loads successfully with joblib.load(), executing arbitrary code. In ML pipelines, model files are commonly loaded with joblib/pickle regardless of extension.

Reproduction

# Scan with modelscan - reports no issues
modelscan -p malicious_model.csv

# Scan with picklescan - reports no issues  
picklescan -p malicious_model.csv

# Load with joblib - executes arbitrary code
python3 -c "import joblib; joblib.load('malicious_model.csv')"

Files

  • malicious_model.csv - Malicious model file (1,471 bytes)
  • README.md - This file

Scanner Results

modelscan 0.8.7: No issues found (BYPASS)
picklescan 1.0.1: No issues found (BYPASS)
joblib.load(): Executes eval('1+1') = 2 (ACE CONFIRMED)