Install any skill in seconds. Free to start, no credit card required.
Get Started Free →utkusen/sast-graphql
Detect GraphQL injection vulnerabilities in a codebase using a three-phase approach: recon (confirm GraphQL usage and find unsafe operation document assembly sites), batched verify (trace user input to those sites in parallel subagents, up to 3 candidate sites each), and merge (consolidate batch results). Requires sast/architecture.md (run sast-analysis first). Outputs findings to sast/graphql-results.md. If no GraphQL technology is found in Phase 1, later phases are skipped.
Passed 18 of 22 test cases with the skill, and 10 of 22 without it.
and 8 more in the full report
8 fixed10 passed either way4 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 8 test cases the skill fixed. Same model, same prompt, with and without the skill.
In Phase 1 recon, what exact phrase should the subagent write in the summary section if GraphQL dependencies and schemas are detected in the codebase?
| Checked | Without skill | With skill |
|---|---|---|
| Uses the phrase 'GraphQL is used in this codebase.' | Missed | Passed |
The instructions your model reads when the skill loads.
You are performing a focused security assessment to find GraphQL injection vulnerabilities. This skill uses a three-phase approach with subagents: recon (confirm GraphQL usage and find every location where a GraphQL operation document is assembled unsafely), batched verify (trace whether user-supplied input reaches those assembly sites, in parallel batches of up to 3 sites each), and merge (consolidate batch results into the final report).
Prerequisites: sast/architecture.md must exist. Run the analysis skill first if it doesn't.
GraphQL injection occurs when user-controlled data is embedded into the GraphQL document (the query, mutation, or subscription string) rather than passed only through the variables map. The parser then interprets attacker-controlled syntax — new fields, aliases, directives, or fragments — which can bypass intent, reach unauthorized resolvers, or change server-side behavior when that document is executed or forwarded.
The core pattern: unvalidated user input alters the structure or text of the GraphQL operation string passed to execute, graphql, a gateway client, or an HTTP body query field built from string operations.
`query { user(id: "${id}") { name } }`, "query { user(id: \"" + id + "\") { name } }"query field for a downstream GraphQL HTTP request with string concat from request body or paramsreq.body.query (or similar) into another interpolated template that wraps or extends the operationgql / graphql-tag template literals where a non-static expression changes document structure (not just a bound variable value inside a static document)graphql.execute(), graphqlHTTP, Yoga/Apollo request pipeline where the first argument (document/source) is built from variables that could be user-influencedDo not flag these as GraphQL injection:
args — that is SQL injection (sast-sqli), not this skill{"query": "query($id: ID!) { user(id: $id) { name } }", "variables": {"id": userInput}} — values are bound as variables; the document structure is fixed (still verify authorization in resolvers)1. Static operation documents with variables
const GET_USER = gql`
test cases passed, vs 10 / 22 without
Published skills whose descriptions closely match this one, with their headline benchmark lift.
More skills from the same source and nearby in the registry, with their headline benchmark lift.