01data-ai's picture
Upload 7 files
14fd22f verified

F003 v2 — Joblib BinaryZlibFile unused_data OOM / Loader DoS

Status

This is a stronger evidence pack for existing F003. It is not a new finding ID.

Confirmed Claim

A crafted compressed .joblib file can cause joblib.load() to enter an unbounded decompression path in BinaryZlibFile._fill_buffer() by repeatedly feeding zlib unused_data back into a finished decompressor. This causes exponential unused_data growth and process-level denial of service.

PoC File

Path: poc/f003_unused_data_oom.joblib

SHA256: 9673f843f3d71ceb65db8764ea74ee58186b10083ccf66322a1b0e9d9033db0a

Size: 66 bytes

Confirmed Evidence

  • evidence/01_unused_data_growth.txt Shows deterministic unused_data doubling from 52 bytes to 436,207,616 bytes.

  • evidence/02_direct_joblib_load_oom_or_timeout.txt Shows direct joblib.load() of the crafted file inside a Docker memory limit.

Confirmed direct-load result: direct_load_rc=137

Safe Impact Statement

In applications or model-serving services that call joblib.load() on attacker-supplied .joblib files without subprocess isolation, memory limits, or timeout controls, each malicious file can terminate a loading worker. Multiple submissions can cause low-bandwidth worker or pod exhaustion.

Non-Claims

  • No RCE claimed.
  • No data theft claimed.
  • No host/container escape claimed.
  • No persistent outage after worker restart claimed.
  • No claim that every deployment is remotely exploitable.
  • No claim that every historical Joblib version is affected unless separately verified.