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.
npx agentmods add skills/emre-guler/websec/deserializationnpx skills add emre-guler/websec --skill deserializationgit clone --depth 1 https://github.com/emre-guler/websecWhat 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.
| Model | Per session | Once 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 |
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.
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 inRuntime.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 duringreadObject? 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.
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.
- 2d ago First seen · 162 lines · 79 tokens per session scan A ab38fe9c1e2b
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.
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…
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-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-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…
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-docs
Prowler documentation style guide and writing standards. Trigger: When writing documentation for Prowler features, tutorials, or guides.