deserialization

A security review of deserialization, the step where an application rebuilds an object from stored or received data.

In plain words
What is it for?
Reviewing serialized cookies, hidden form data, caches, queues, uploads, binary data, and native object readers for unsafe object reconstruction.
Why use it?
It finds cases where attacker-controlled data can make the application rebuild unsafe objects or trigger unwanted behavior before the data is checked.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/emre-guler/websec/deserialization
Any agent
npx skills add emre-guler/websec --skill deserialization
Clone the repo
git clone --depth 1 https://github.com/emre-guler/websec

Made for: Claude Code, Codex.

Per session 79 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 5,456 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00079 $0.05456
Opus 5 $0.00039 $0.02728
Sonnet 5 $0.00016 $0.01091
Haiku 4.5 $0.00008 $0.00546

Measured 2d ago against content hash ab38fe9c1e2b, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

deserialization scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/deserialization/SKILL.md · 162 lines

How it starts

The opening of the file, as written. The whole thing — 162 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Insecure Deserialization Detection

Overview

Serialization flattens an in-memory object into bytes so it can be stored, cached, or sent; deserialization rebuilds an object from those bytes. Insecure deserialization is when an application rebuilds an object from data an attacker can influence — a cookie, a hidden field, an API body, a cache or queue entry, an uploaded file — and then trusts the result. It sits at the boundary where untrusted bytes are handed to a native object reader, and its defining property is that harm frequently occurs during the rebuild, before the application ever inspects what it got, because the format lets the input name which classes to construct and lifecycle hooks on those classes run automatically. The attacker is anyone who can supply or modify the blob; what they gain ranges from flipping a privilege field in reconstructed state, through steering the application's own file and path handling, to reaching code already present in the application or its dependencies that ends in command execution. This skill finds such flaws by locating every site where untrusted bytes reach an object reader, checking each site in parallel, and merging the results into <output_dir>/deserialization-results.md.

What it is NOT

  • Ordinary data parsing (not a finding): reading JSON or XML into a fixed, declared structure — no type names taken from the input, no object graph rebuilt from input-specified classes, no lifecycle hooks on attacker data — is normal input handling. Test: can the input choose which class or type is instantiated? If not, it is parsing.
  • XML external entities (/websec:xxe): entity and document-type resolution in an XML parser is a different mechanism with a different fix. A framework that maps XML onto objects can have both; separate them by asking whether the harm comes from entity resolution or from class instantiation.
  • Prototype pollution (/websec:prototype-pollution): reshaping JavaScript objects through inherited properties is an inheritance quirk with no serialized graph and no lifecycle hooks on reconstructed classes. Test: is there a native object reader in the path at all?
  • Token integrity (/websec:jwt): a signed token accepted without verification is a signature-validation flaw. It becomes this class only when the deserializer's own behaviour — type resolution or lifecycle hooks — is what is abused.
  • Operating system command injection (/websec:os-command-injection): a shell or interpreter invoked on request data — a filename, an argument, a whole command string — is that class, even when the data arrived as a serialized blob and even when a gadget chain ends in Runtime.exec. Test: does the harm come from a process spawned on attacker input, or from the reconstruction itself — type resolution, a lifecycle hook, a setter running during readObject? Only the second is this class.
  • Access control (/websec:access-control): if the reconstructed object carries a role or owner field that the application trusts, and the blob is not otherwise abusable, the missing control is server-side re-validation of identity. Report the deserialization here and note the authorization gap for that skill.
  • File upload (/websec:file-upload): an uploaded file whose bytes reach an object reader is this skill's finding; the upload path is how it is delivered. Note the upload weakness separately.
  • Not a finding: the presence of a library known to contain reachable code fragments, with no untrusted deserialization anywhere; a blob whose integrity is verified against a server-held key before the bytes reach the reader, with the key not otherwise exposed; a reader restricted by an allow-list of permitted types that excludes everything outside a small declared set; internal-only deserialization of data no external party can influence, where that isolation is demonstrated rather than assumed.

Read the full file on GitHub · 162 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 162 lines · 79 tokens per session scan A ab38fe9c1e2b

Subscribe to this mod's changes

deserialization is a skill published in the GitHub repository emre-guler/websec (2 stars, last pushed 5d ago), licensed MIT. It adds 79 tokens to every session and 5,456 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

vantage

Autonomous, artifact-driven SAST (Static Application Security Testing) for web AND mobile app repositories, plus optional code-level remediation. Use whenever the user asks to security-review, pentest, audit, or scan a codebase for vulnerabilities — web (SQLi, XSS, IDOR/BOLA, auth bypass, SSRF, XXE, hardcoded secrets…

tinoimammp/vantage-security-agent · 230 tokens

prowler-ui

Prowler UI-specific patterns. For generic patterns, see: typescript, react-19, nextjs-16, tailwind-4. Trigger: When working inside ui/ on Prowler-specific conventions (shadcn, folder placement, actions/adapters, shared types/hooks/lib).

prowler-cloud/prowler · 64 tokens

prowler-test-api

Testing patterns for Prowler API: JSON:API, Celery tasks, RLS isolation, RBAC. Trigger: When writing tests for api/ (JSON:API requests/assertions, cross-tenant isolation, RBAC, Celery tasks, viewsets/serializers).

prowler-cloud/prowler · 62 tokens

prowler-pr

Creates Pull Requests for Prowler following the project template and conventions. Trigger: When working on pull request requirements or creation (PR template sections, PR title Conventional Commits check, changelog gate/no-changelog label), or when inspecting PR-related GitHub workflows like conventional-commit.yml…

prowler-cloud/prowler · 84 tokens

tailwind-4

Tailwind CSS 4 patterns and best practices. Trigger: When styling with Tailwind (className, variants, cn()), especially when dynamic styling or CSS variables are involved (no var() in className).

prowler-cloud/prowler · 47 tokens

prowler-docs

Prowler documentation style guide and writing standards. Trigger: When writing documentation for Prowler features, tutorials, or guides.

prowler-cloud/prowler · 31 tokens