VulnWatch VulnWatch
← Back to dashboard
Critical github · GHSA-vvpj-8cmc-gx39

PickleScan's pkgutil.resolve_name has a universal blocklist bypass

Published Mar 3, 2026 CVSS 10.0

Summary

pkgutil.resolve_name() is a Python stdlib function that resolves any "module:attribute" string to the corresponding Python object at runtime. By using pkgutil.resolve_name as the first REDUCE call in a pickle, an attacker can obtain a reference to ANY blocked function (e.g., os.system, builtins.exec, subprocess.call) without that function appearing in the pickle's opcodes. picklescan only sees pkgutil.resolve_name (which is not blocked) and misses the actual dangerous function entirely.

This defeats picklescan's entire blocklist concept — every single entry in _unsafe_globals can be bypassed.

Severity

Critical (CVSS 10.0) — Universal bypass of all blocklist entries. Any blocked function can be invoked.

Affected Versions

  • picklescan

Affected AI Products

huggingface
Get the weekly digest. Every Monday: top AI security stories of the week. Free.