npx claudepluginhub thejefflarson/soundcheck --plugin soundcheckThis skill uses the workspace's default tool permissions.
Protects against arbitrary code execution and tampered artifacts. Deserializing
Validates insecure deserialization operations with step-by-step guidance, best practices, code generation, and validation for security fundamentals.
Audits Python code for CWE-502 deserialization vulnerabilities in pickle, yaml.load, torch.load, joblib.load, shelve, marshal, custom JSON hooks, and zmq.recv_pyobj.
Analyzes PHP code for insecure deserialization vulnerabilities including unserialize with user input, missing allowed_classes, object injection, gadget chains, and Phar metadata triggers.
Share bugs, ideas, or general feedback.
Protects against arbitrary code execution and tampered artifacts. Deserializing
untrusted data with pickle or unsafe YAML loaders gives attackers remote code
execution; unsigned software updates allow supply-chain compromise.
pickle.loads(request.body) — executes arbitrary code embedded in pickled payloadyaml.load(user_input) — unsafe loader; runs Python constructors in YAMLdata = json.loads(body); eval(data["expr"]) — deserializing into executable evalurllib.request.urlretrieve(update_url, "update.bin") — no signature verification__reduce__ or __wakeup output from user-controlled serialized blobsFlag the vulnerable code and explain the risk. Then suggest a fix that establishes these properties:
pickle,
marshal, shelve, Java ObjectInputStream, Ruby Marshal.load, PHP
unserialize, .NET BinaryFormatter, and unsafe yaml.load with a
data-only format: JSON, yaml.safe_load, protobuf, CBOR without tags.Anchor — shape, not implementation:
data = json_load(untrusted_bytes) # never pickle/marshal/yaml.load
validate(data, schema=EXPLICIT_SCHEMA) # reject unknown fields and bad types
use(data) # safe only after validation
Confirm these properties hold for every relevant pattern present:
ObjectInputStream.readObject, Marshal.load, unserialize, BinaryFormatter, unsafe yaml.load) receives attacker-reachable bytes. Safe formats (JSON, yaml.safe_load, protobuf) may accept untrusted input if the next criterion is met.