@aegis-scan/skills 0.4.0 → 0.5.1
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/ATTRIBUTION.md +204 -0
- package/CHANGELOG.md +48 -3
- package/package.json +1 -1
- package/sbom.cdx.json +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +1080 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/LICENSE +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/README.md +242 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +427 -14
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +63 -9
- package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +1581 -10
- package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +323 -31
- package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +610 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +107 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +81 -8
- package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/paragraphs.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/paragraphs.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/paragraphs.md +112 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/paragraphs.md +71 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/articles.md +182 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +111 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +134 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/paragraphs.md +61 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/INDEX.md +93 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +185 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/paragraphs.md +57 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +137 -9
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +122 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/mistral-eu.md +123 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/openai-dpa.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/nextauth-tom.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/supabase-auth-tom.md +104 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/proxy-csp-pattern.md +93 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/payment/stripe-pci-tom.md +121 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/plausible-pattern.md +107 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/AffiliateDisclaimer.tsx.example +54 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/COMPLIANCE-AUDIT-TRAIL-template.md +95 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSE-Section-UGC.md.example +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +156 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/LostFoundReportForm-consent.tsx.example +126 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/README.md +33 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/UmamiScript.tsx.example +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/data-retention-cron.ts.example +52 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/data-retention-workflow.yml.example +47 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/proxy-strict-dynamic.ts.example +80 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/security.txt.example +26 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +262 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
- package/skills/defensive/aegis-native/rls-defense/SKILL.md +85 -0
- package/skills/defensive/permoon-fork/README.md +40 -0
- package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
- package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
- package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
- package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
- package/skills/foundation/aegis-native/aegis-module-builder/SKILL.md +5 -1
- package/skills/foundation/aegis-native/aegis-orchestrator/SKILL.md +87 -4
- package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +69 -9
- package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
- package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
- package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
- package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
- package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
- package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
- package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
- package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
- package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
- package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
- package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
- package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
- package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
- package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
- package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
- package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
- package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
- package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
- package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
- package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
- package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
- package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
- package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
- package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
- package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
- package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
- package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
- package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
- package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
- package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
- package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
- package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
- package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
- package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
- package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
- package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
- package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
- package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
- package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
- package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
- package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
- package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
- package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
- package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
- package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
- package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
- package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
- package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
- package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
- package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
- package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
- package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
- package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
- package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
- package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
- package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
- package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
- package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
- package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
- package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
- package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
- package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
- package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
- package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
- package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
- package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
- package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
- package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
- package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
- package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
- package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
- package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
- package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
- package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
- package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
- package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
- package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
- package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
- package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
- package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
- package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
- package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
- package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
- package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
- package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
- package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
- package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
- package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
- package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
- package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
- package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
- package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
- package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
- package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
- package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
- package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
- package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
- package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
- package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
- package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
- package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
- package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
- package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
- package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
- package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
- package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
- package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
- package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
- package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
- package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
- package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
- package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
- package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
- package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
- package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
- package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
- package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
- package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
- package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
- package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
- package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
- package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
- package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
- package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
- package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
- package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
- package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
- package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
- package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
- package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
- package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
- package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
- package/skills/offensive/matty-fork/cicd-redteam/SKILL.md +531 -0
- package/skills/offensive/matty-fork/cloud-security/SKILL.md +106 -0
- package/skills/offensive/matty-fork/container-escape/SKILL.md +174 -0
- package/skills/offensive/matty-fork/mobile-pentester/SKILL.md +357 -0
- package/skills/offensive/matty-fork/subdomain-takeover/SKILL.md +154 -0
- package/skills/osint/elementalsouls-fork/offensive-osint/README.md +92 -0
- package/skills/osint/elementalsouls-fork/offensive-osint/SKILL.md +4177 -0
- package/skills/osint/elementalsouls-fork/osint-methodology/README.md +66 -0
- package/skills/osint/elementalsouls-fork/osint-methodology/SKILL.md +1695 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
<!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
|
|
2
|
+
|
|
3
|
+
# JavaScript Endpoint & Secret Extraction
|
|
4
|
+
|
|
5
|
+
Use this playbook when analyzing any web application that serves JavaScript files.
|
|
6
|
+
Modern SPAs (React, Vue, Angular, Next.js) expose almost all API routes and sometimes secrets inside JS bundles.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## STEP 1 — Collect All JavaScript File URLs
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# From browser_action output (saved to output/js_files.txt):
|
|
14
|
+
cat output/js_files.txt
|
|
15
|
+
|
|
16
|
+
# OR: extract from raw HTML if browser_action wasn't used:
|
|
17
|
+
curl -sk https://TARGET/ | grep -oP '(?<=src=")[^"]+\.js[^"]*' | sed 's|^/|https://TARGET/|' | tee output/js_files.txt
|
|
18
|
+
|
|
19
|
+
# Also check for chunk manifest / lazy-loaded bundles:
|
|
20
|
+
curl -sk https://TARGET/ | grep -oP '(?<=src=")[^"]+' | grep -E '\.(js|chunk)' | tee -a output/js_files.txt
|
|
21
|
+
curl -sk https://TARGET/asset-manifest.json 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); [print(v) for v in d.values() if '.js' in str(v)]"
|
|
22
|
+
curl -sk https://TARGET/webpack-manifest.json 2>/dev/null | python3 -c "import sys,json; [print(v) for k,v in json.load(sys.stdin).items() if '.js' in str(v)]"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## STEP 2 — Download All JS Files
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
mkdir -p output/js_files
|
|
31
|
+
while IFS= read -r url; do
|
|
32
|
+
[ -z "$url" ] && continue
|
|
33
|
+
# Resolve relative URLs
|
|
34
|
+
[[ "$url" != http* ]] && url="https://TARGET${url}"
|
|
35
|
+
fname=$(echo "$url" | md5sum | cut -d' ' -f1).js
|
|
36
|
+
curl -sk "$url" -o "output/js_files/$fname" && echo "Downloaded: $url -> $fname"
|
|
37
|
+
done < output/js_files.txt
|
|
38
|
+
echo "Total JS files: $(ls output/js_files/*.js 2>/dev/null | wc -l)"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## STEP 3 — Extract API Endpoints
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Pattern 1: quoted string paths starting with / or /api
|
|
47
|
+
grep -roh '"\(/[a-zA-Z0-9_/.-]\{2,80\}\)"' output/js_files/ 2>/dev/null \
|
|
48
|
+
| tr -d '"' | sort -u | grep -E '^/(api|v[0-9]|auth|user|admin|account|order|product|data|graphql)' \
|
|
49
|
+
| tee output/js_extracted_endpoints.txt
|
|
50
|
+
|
|
51
|
+
# Pattern 2: single-quoted paths
|
|
52
|
+
grep -roh "'\(/[a-zA-Z0-9_/.-]\{2,80\}\)'" output/js_files/ 2>/dev/null \
|
|
53
|
+
| tr -d "'" | sort -u | grep -E '^/(api|v[0-9]|auth|user|admin)' \
|
|
54
|
+
>> output/js_extracted_endpoints.txt
|
|
55
|
+
|
|
56
|
+
# Pattern 3: template literals with path
|
|
57
|
+
grep -roh '`/[a-zA-Z0-9_/.-]\{2,60\}`' output/js_files/ 2>/dev/null \
|
|
58
|
+
| tr -d '`' | sort -u >> output/js_extracted_endpoints.txt
|
|
59
|
+
|
|
60
|
+
# Pattern 4: fetch/axios/http calls (finds dynamic routes)
|
|
61
|
+
grep -roh 'fetch\s*([^)]\{5,120\})' output/js_files/ 2>/dev/null | head -30 >> output/js_extracted_endpoints.txt
|
|
62
|
+
grep -roh 'axios\.[a-z]\+\s*([^)]\{5,120\})' output/js_files/ 2>/dev/null | head -30 >> output/js_extracted_endpoints.txt
|
|
63
|
+
|
|
64
|
+
# Deduplicate and show results
|
|
65
|
+
sort -u output/js_extracted_endpoints.txt | head -50
|
|
66
|
+
echo "Total unique endpoints found: $(sort -u output/js_extracted_endpoints.txt | wc -l)"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## STEP 4 — Scan for Secrets & Hardcoded Credentials
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# API keys and tokens
|
|
75
|
+
grep -roh 'api[_-]\?key[^"'"'"'`]\{0,10\}["\`'"'"'][A-Za-z0-9_\-]\{16,64\}' \
|
|
76
|
+
output/js_files/ -i 2>/dev/null | head -20 | tee output/js_secrets.txt
|
|
77
|
+
|
|
78
|
+
# Auth tokens and secrets
|
|
79
|
+
grep -roh '\b\(secret\|token\|password\|passwd\|auth\|credential\)[^"'"'"'`]\{0,15\}["\`'"'"'][A-Za-z0-9_=+/\-]\{8,100\}' \
|
|
80
|
+
output/js_files/ -i 2>/dev/null | head -20 >> output/js_secrets.txt
|
|
81
|
+
|
|
82
|
+
# AWS keys
|
|
83
|
+
grep -roh 'AKIA[A-Z0-9]\{16\}' output/js_files/ 2>/dev/null | head -5 >> output/js_secrets.txt
|
|
84
|
+
grep -roh '"aws[^"]\{0,20\}": *"[A-Za-z0-9/+]\{40\}"' output/js_files/ -i 2>/dev/null >> output/js_secrets.txt
|
|
85
|
+
|
|
86
|
+
# Internal URLs / backend hosts
|
|
87
|
+
grep -roh 'https\?://[a-zA-Z0-9._-]\{4,80\}' output/js_files/ 2>/dev/null \
|
|
88
|
+
| grep -v -E 'cdn\.|static\.|fonts\.|analytics\.|google\.|facebook\.' \
|
|
89
|
+
| sort -u | tee output/js_internal_urls.txt
|
|
90
|
+
|
|
91
|
+
# Show found secrets
|
|
92
|
+
echo "=== Secrets found ==="
|
|
93
|
+
cat output/js_secrets.txt
|
|
94
|
+
echo "=== Internal URLs ==="
|
|
95
|
+
head -20 output/js_internal_urls.txt
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## STEP 5 — Next.js / React Router Route Extraction
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Next.js: page routes from main-*.js
|
|
104
|
+
grep -roh '"pathname":"[^"]\{1,80\}"' output/js_files/ 2>/dev/null \
|
|
105
|
+
| grep -oP '(?<=pathname":")[^"]+' | sort -u | tee output/js_nextjs_routes.txt
|
|
106
|
+
|
|
107
|
+
# React Router: look for route definitions
|
|
108
|
+
grep -roh 'path:\s*["\'"'"'][^"'"'"']\{1,80\}["\'"'"']' output/js_files/ 2>/dev/null \
|
|
109
|
+
| grep -oP '(?<=path: ["\'"'"'])[^"'"'"']+' | sort -u >> output/js_nextjs_routes.txt
|
|
110
|
+
|
|
111
|
+
# Angular: routerLink / loadChildren
|
|
112
|
+
grep -roh 'routerLink:\s*["\'"'"'][^"'"'"']\{1,80\}["\'"'"']' output/js_files/ 2>/dev/null | head -20
|
|
113
|
+
grep -roh 'loadChildren.*\.module' output/js_files/ 2>/dev/null | head -10
|
|
114
|
+
|
|
115
|
+
# Webpack chunk IDs → download extra chunks
|
|
116
|
+
grep -roh '"[0-9]\{1,4\}":"[a-f0-9]\{8,16\}"' output/js_files/ 2>/dev/null \
|
|
117
|
+
| python3 -c "
|
|
118
|
+
import sys, json, re
|
|
119
|
+
chunks = {}
|
|
120
|
+
for line in sys.stdin:
|
|
121
|
+
m = re.findall(r'\"(\d+)\":\"([a-f0-9]{8,16})\"', line)
|
|
122
|
+
chunks.update(m)
|
|
123
|
+
for cid, chash in list(chunks.items())[:20]:
|
|
124
|
+
print(f'Chunk {cid}: TARGET/static/js/{cid}.{chash}.chunk.js')
|
|
125
|
+
" | tee output/js_webpack_chunks.txt
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## STEP 6 — Test Discovered Endpoints
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Load discovered endpoints and probe each one:
|
|
134
|
+
while IFS= read -r endpoint; do
|
|
135
|
+
[ -z "$endpoint" ] && continue
|
|
136
|
+
response=$(curl -sk -o /dev/null -w "%{http_code}" "https://TARGET${endpoint}")
|
|
137
|
+
[ "$response" != "404" ] && echo "[$response] $endpoint"
|
|
138
|
+
done < output/js_extracted_endpoints.txt | tee output/js_live_endpoints.txt
|
|
139
|
+
|
|
140
|
+
# Test with authentication cookie (if you have one):
|
|
141
|
+
while IFS= read -r endpoint; do
|
|
142
|
+
[ -z "$endpoint" ] && continue
|
|
143
|
+
response=$(curl -sk -b output/cookies.txt -o /dev/null -w "%{http_code}" "https://TARGET${endpoint}")
|
|
144
|
+
[ "$response" != "404" ] && echo "[$response] $endpoint"
|
|
145
|
+
done < output/js_extracted_endpoints.txt | tee output/js_authed_endpoints.txt
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Key Patterns to Look For
|
|
151
|
+
|
|
152
|
+
**Unauthenticated API routes** — endpoints that return 200 without a cookie/token
|
|
153
|
+
**Admin/internal routes** — `/api/admin`, `/internal/`, `/_/`, `/debug/`
|
|
154
|
+
**IDOR candidates** — routes containing `{id}`, `:id`, `[id]`, or numeric path segments
|
|
155
|
+
**File operations** — `/upload`, `/download`, `/export`, `/import`
|
|
156
|
+
**State-changing ops** — POST/PUT/DELETE endpoints (note them for CSRF/IDOR testing)
|
|
157
|
+
**Hardcoded credentials** — any `password:`, `secret:`, `apiKey:` values in plain text
|
|
158
|
+
|
|
159
|
+
## Common Frameworks Quick Reference
|
|
160
|
+
|
|
161
|
+
| Framework | Bundle Pattern | Route Location |
|
|
162
|
+
|-----------|---------------|----------------|
|
|
163
|
+
| Next.js | `_next/static/chunks/` | `pathname:"..."` in main-*.js |
|
|
164
|
+
| React CRA | `static/js/main.*.js` | React Router: `path="..."` |
|
|
165
|
+
| Vue CLI | `js/app.*.js` | vue-router: `path: '...'` |
|
|
166
|
+
| Angular | `main.*.js` | `loadChildren`, `routerLink` |
|
|
167
|
+
| Webpack | `*.chunk.js` | Chunk manifest |
|
package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
<!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: js-internal-hostname-intelligence
|
|
5
|
+
description: Deep JavaScript bundle analysis focused on extracting internal hostnames, fleet/cluster naming conventions, obfuscated infrastructure references, and non-API internal service URLs that reveal backend topology
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# JavaScript Bundle — Internal Hostname & Infrastructure Intelligence
|
|
9
|
+
|
|
10
|
+
Standard JS analysis extracts API endpoints and secrets. This skill goes deeper: extracting **internal hostnames** that reveal backend infrastructure topology, fleet naming conventions, internal service mesh references, and obfuscated hostnames (hex-encoded, base64-encoded, or split across variables).
|
|
11
|
+
|
|
12
|
+
**Why this matters:** Internal hostnames in JS bundles are almost always unintentional leaks. They reveal:
|
|
13
|
+
- Internal service names that are publicly routable (misconfigured cluster ingress)
|
|
14
|
+
- Fleet/Kubernetes namespace naming conventions (`.fleet.live.`, `.dev.solo.`, `.internal.`)
|
|
15
|
+
- Backend service URLs that can be probed directly
|
|
16
|
+
- Infrastructure geography (region names, availability zones embedded in hostnames)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## STEP 1 — Broad Internal URL Extraction (Beyond API Paths)
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Standard JS analysis only extracts API paths. This extracts ALL URLs including internal ones.
|
|
24
|
+
# Download JS files first (see javascript_analysis.md STEP 1-2)
|
|
25
|
+
|
|
26
|
+
# Extract ALL https:// URLs, including non-CDN internal ones
|
|
27
|
+
grep -roh 'https\?://[a-zA-Z0-9._:/-]\{6,150\}' output/js_files/ 2>/dev/null \
|
|
28
|
+
| sed 's/["\`'"'"'].*$//' \
|
|
29
|
+
| sort -u \
|
|
30
|
+
| tee output/js_all_urls.txt
|
|
31
|
+
|
|
32
|
+
# NOW: Split into external (known CDN/tracking) vs internal (potentially sensitive)
|
|
33
|
+
grep -vE '(cdn\.|static\.|fonts\.|analytics\.|google\.|facebook\.|twitter\.|cloudflare\.|amazonaws\.com/cdn|jsdelivr\.|unpkg\.|w3\.org|schema\.org|mozilla\.|apple\.|microsoft\.|github\.com$|npmjs\.)' \
|
|
34
|
+
output/js_all_urls.txt \
|
|
35
|
+
| sort -u \
|
|
36
|
+
| tee output/js_internal_candidate_urls.txt
|
|
37
|
+
|
|
38
|
+
echo "=== Internal URL candidates ==="
|
|
39
|
+
cat output/js_internal_candidate_urls.txt
|
|
40
|
+
echo "Total: $(wc -l < output/js_internal_candidate_urls.txt)"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## STEP 2 — Fleet & Cluster Naming Convention Detection
|
|
46
|
+
|
|
47
|
+
Infrastructure domains follow predictable patterns. Detect them:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Kubernetes fleet / internal cluster patterns
|
|
51
|
+
grep -iE '\.(fleet|cluster|internal|k8s|kube|svc|local|mesh|private|corp|intra)\.' \
|
|
52
|
+
output/js_internal_candidate_urls.txt | tee output/js_fleet_hostnames.txt
|
|
53
|
+
|
|
54
|
+
# Environment-tagged hostnames (live/prod/staging/dev/solo/sandbox)
|
|
55
|
+
grep -iE '\.(live|prod|staging|dev|sandbox|qa|uat|test|solo|preview)\.' \
|
|
56
|
+
output/js_internal_candidate_urls.txt >> output/js_fleet_hostnames.txt
|
|
57
|
+
|
|
58
|
+
# Naming patterns: service-name.namespace.cluster.tld
|
|
59
|
+
grep -oE '[a-z][a-z0-9-]{2,40}\.[a-z]{2,20}\.[a-z]{2,20}\.[a-z]{2,10}' \
|
|
60
|
+
output/js_internal_candidate_urls.txt \
|
|
61
|
+
| grep -vE '\.(com|net|org|io|co)\.[a-z]{2}$' \
|
|
62
|
+
>> output/js_fleet_hostnames.txt
|
|
63
|
+
|
|
64
|
+
sort -u output/js_fleet_hostnames.txt | tee output/js_fleet_hostnames_dedup.txt
|
|
65
|
+
echo "Fleet/cluster hostnames found: $(wc -l < output/js_fleet_hostnames_dedup.txt)"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## STEP 3 — Obfuscated Hostname Detection
|
|
71
|
+
|
|
72
|
+
Developers sometimes hex-encode or encode infrastructure hostnames to obscure them:
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
# tools/decode_obfuscated_hostnames.py
|
|
76
|
+
"""
|
|
77
|
+
Detect and decode obfuscated hostnames in JS bundles.
|
|
78
|
+
Common patterns:
|
|
79
|
+
- Hex-encoded: "6f74656c" → "otel"
|
|
80
|
+
- Base64-encoded: "b3RlbA==" → "otel"
|
|
81
|
+
- Split strings: "ot" + "el" assembled at runtime
|
|
82
|
+
- Reversed: "leto" → "otel"
|
|
83
|
+
- ROT13: "bgrj" → "otel"
|
|
84
|
+
"""
|
|
85
|
+
import os, re, binascii, base64, codecs
|
|
86
|
+
|
|
87
|
+
js_dir = "output/js_files"
|
|
88
|
+
results = []
|
|
89
|
+
|
|
90
|
+
for fname in os.listdir(js_dir):
|
|
91
|
+
if not fname.endswith('.js'):
|
|
92
|
+
continue
|
|
93
|
+
with open(f"{js_dir}/{fname}", 'r', errors='ignore') as f:
|
|
94
|
+
content = f.read()
|
|
95
|
+
|
|
96
|
+
# Pattern 1: Hex-encoded strings that decode to valid hostname parts
|
|
97
|
+
hex_candidates = re.findall(r'"([0-9a-f]{6,32})"', content)
|
|
98
|
+
for h in hex_candidates:
|
|
99
|
+
try:
|
|
100
|
+
decoded = binascii.unhexlify(h).decode('ascii')
|
|
101
|
+
# Only keep if decoded result looks like a hostname component
|
|
102
|
+
if re.match(r'^[a-z][a-z0-9-]{2,20}$', decoded):
|
|
103
|
+
results.append(f"HEX: {h} → {decoded}")
|
|
104
|
+
except Exception:
|
|
105
|
+
pass
|
|
106
|
+
|
|
107
|
+
# Pattern 2: Base64 strings that decode to hostnames
|
|
108
|
+
b64_candidates = re.findall(r'"([A-Za-z0-9+/]{8,50}={0,2})"', content)
|
|
109
|
+
for b in b64_candidates:
|
|
110
|
+
try:
|
|
111
|
+
decoded = base64.b64decode(b).decode('ascii')
|
|
112
|
+
if re.match(r'^[a-z][a-z0-9.-]{4,60}$', decoded):
|
|
113
|
+
results.append(f"B64: {b} → {decoded}")
|
|
114
|
+
except Exception:
|
|
115
|
+
pass
|
|
116
|
+
|
|
117
|
+
# Pattern 3: Subdomain that is hex-encoded (e.g., "6f74656c-http.target.com")
|
|
118
|
+
hex_subdomain = re.findall(r'([0-9a-f]{6,16})-[a-z]{2,10}\.[a-z0-9.-]+\.[a-z]{2,6}', content)
|
|
119
|
+
for h in hex_subdomain:
|
|
120
|
+
try:
|
|
121
|
+
decoded = binascii.unhexlify(h).decode('ascii')
|
|
122
|
+
results.append(f"HEX-SUBDOMAIN: {h} → {decoded} (likely: {decoded}-*.<domain>)")
|
|
123
|
+
except Exception:
|
|
124
|
+
pass
|
|
125
|
+
|
|
126
|
+
for r in sorted(set(results)):
|
|
127
|
+
print(r)
|
|
128
|
+
|
|
129
|
+
if not results:
|
|
130
|
+
print("[*] No obfuscated hostnames detected")
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
python3 tools/decode_obfuscated_hostnames.py | tee output/js_obfuscated_hostnames.txt
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## STEP 4 — Probe All Internal Hostname Candidates
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
# tools/probe_internal_hosts.py
|
|
143
|
+
"""
|
|
144
|
+
Probe every internal hostname candidate extracted from JS bundles.
|
|
145
|
+
Test for HTTP/HTTPS accessibility on standard ports.
|
|
146
|
+
Record: status code, response size, Content-Type, Server header, response body preview.
|
|
147
|
+
"""
|
|
148
|
+
import urllib.request, urllib.error, ssl, re, time
|
|
149
|
+
|
|
150
|
+
ctx = ssl.create_default_context()
|
|
151
|
+
ctx.check_hostname = False
|
|
152
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
153
|
+
|
|
154
|
+
results = []
|
|
155
|
+
|
|
156
|
+
with open("output/js_internal_candidate_urls.txt") as f:
|
|
157
|
+
urls = [line.strip() for line in f if line.strip() and line.startswith("http")]
|
|
158
|
+
|
|
159
|
+
print(f"Probing {len(urls)} internal URL candidates...")
|
|
160
|
+
|
|
161
|
+
for url in urls:
|
|
162
|
+
# Normalize to just the base URL (no path) for initial probe
|
|
163
|
+
base_match = re.match(r'(https?://[a-zA-Z0-9._:-]+)', url)
|
|
164
|
+
if not base_match:
|
|
165
|
+
continue
|
|
166
|
+
base_url = base_match.group(1)
|
|
167
|
+
|
|
168
|
+
for probe_url in [url, base_url]:
|
|
169
|
+
try:
|
|
170
|
+
req = urllib.request.Request(
|
|
171
|
+
probe_url,
|
|
172
|
+
headers={"User-Agent": "Mozilla/5.0", "Accept": "application/json, text/html"}
|
|
173
|
+
)
|
|
174
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
175
|
+
body = r.read(500).decode('utf-8', 'ignore')
|
|
176
|
+
ct = r.headers.get('Content-Type', '')
|
|
177
|
+
server = r.headers.get('Server', '')
|
|
178
|
+
results.append({
|
|
179
|
+
'status': r.status, 'url': probe_url,
|
|
180
|
+
'ct': ct[:50], 'server': server[:30],
|
|
181
|
+
'body': body[:200].replace('\n', ' ')
|
|
182
|
+
})
|
|
183
|
+
print(f"[{r.status}] {probe_url}")
|
|
184
|
+
print(f" Content-Type: {ct[:60]}")
|
|
185
|
+
print(f" Server: {server}")
|
|
186
|
+
print(f" Body: {body[:150]}")
|
|
187
|
+
break # Don't probe base_url if full URL worked
|
|
188
|
+
except urllib.error.HTTPError as e:
|
|
189
|
+
body = e.read(300).decode('utf-8', 'ignore')
|
|
190
|
+
results.append({'status': e.code, 'url': probe_url, 'body': body[:100]})
|
|
191
|
+
# Non-404/non-connection errors are interesting
|
|
192
|
+
if e.code not in (404, 400):
|
|
193
|
+
print(f"[{e.code}] {probe_url}: {body[:120]}")
|
|
194
|
+
break
|
|
195
|
+
except Exception as ex:
|
|
196
|
+
# Connection refused / DNS fail → not publicly accessible
|
|
197
|
+
pass
|
|
198
|
+
time.sleep(0.3)
|
|
199
|
+
|
|
200
|
+
# Write results
|
|
201
|
+
import json
|
|
202
|
+
with open("output/js_internal_hosts_probe.txt", "w") as f:
|
|
203
|
+
for r in results:
|
|
204
|
+
f.write(json.dumps(r) + "\n")
|
|
205
|
+
|
|
206
|
+
# Highlight interesting findings
|
|
207
|
+
print("\n=== INTERESTING FINDINGS (non-404, public access) ===")
|
|
208
|
+
for r in results:
|
|
209
|
+
if r['status'] not in (404, 400, 0) and r['status'] < 500:
|
|
210
|
+
print(f"[{r['status']}] {r['url']}: {r.get('ct','')} | {r.get('body','')[:100]}")
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
python3 tools/probe_internal_hosts.py
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## STEP 5 — Analyze Error Message Patterns for Infrastructure Intelligence
|
|
220
|
+
|
|
221
|
+
Error responses from internal services leak more than external services:
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
# tools/error_intelligence.py
|
|
225
|
+
"""
|
|
226
|
+
Internal services often return verbose errors that reveal:
|
|
227
|
+
- Framework name and version (e.g., Javalin, Spring Boot, Express)
|
|
228
|
+
- Internal service names referenced in stack traces
|
|
229
|
+
- Database connection strings in error bodies
|
|
230
|
+
- Authentication mechanisms (JWT issuer, OAuth server URLs)
|
|
231
|
+
- Internal API versioning and routing conventions
|
|
232
|
+
"""
|
|
233
|
+
import urllib.request, urllib.error, ssl, json
|
|
234
|
+
|
|
235
|
+
ctx = ssl.create_default_context()
|
|
236
|
+
ctx.check_hostname = False
|
|
237
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
238
|
+
|
|
239
|
+
def extract_error_intelligence(url, params_to_test=None):
|
|
240
|
+
"""
|
|
241
|
+
Send malformed requests to trigger verbose errors.
|
|
242
|
+
Tests: missing params, wrong types, extra fields, empty body.
|
|
243
|
+
"""
|
|
244
|
+
intelligence = {}
|
|
245
|
+
|
|
246
|
+
test_vectors = [
|
|
247
|
+
# Missing required params → often reveals param names
|
|
248
|
+
{"method": "GET", "path": url, "headers": {"Accept": "application/json"}},
|
|
249
|
+
# Wrong content type → may reveal accepted types
|
|
250
|
+
{"method": "POST", "path": url, "body": "invalid_json{{{",
|
|
251
|
+
"headers": {"Content-Type": "text/plain", "Accept": "application/json"}},
|
|
252
|
+
# Empty JSON body → may reveal required fields
|
|
253
|
+
{"method": "POST", "path": url, "body": "{}",
|
|
254
|
+
"headers": {"Content-Type": "application/json", "Accept": "application/json"}},
|
|
255
|
+
# Null bytes → often triggers framework error
|
|
256
|
+
{"method": "GET", "path": url + "?test=\x00", "headers": {}},
|
|
257
|
+
]
|
|
258
|
+
|
|
259
|
+
for vec in test_vectors:
|
|
260
|
+
body_data = vec.get("body", "").encode() if vec.get("body") else None
|
|
261
|
+
req = urllib.request.Request(
|
|
262
|
+
vec["path"],
|
|
263
|
+
data=body_data,
|
|
264
|
+
headers=vec.get("headers", {}),
|
|
265
|
+
method=vec["method"]
|
|
266
|
+
)
|
|
267
|
+
try:
|
|
268
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
269
|
+
body = r.read(1000).decode('utf-8', 'ignore')
|
|
270
|
+
print(f"[{r.status}] {vec['method']} {url}: {body[:200]}")
|
|
271
|
+
except urllib.error.HTTPError as e:
|
|
272
|
+
body = e.read(1000).decode('utf-8', 'ignore')
|
|
273
|
+
print(f"[{e.code}] {vec['method']} {url}:")
|
|
274
|
+
|
|
275
|
+
# Parse error for intelligence
|
|
276
|
+
try:
|
|
277
|
+
err_json = json.loads(body)
|
|
278
|
+
# Javalin pattern
|
|
279
|
+
if "javalin.io" in str(err_json.get("type", "")):
|
|
280
|
+
intelligence["framework"] = "Javalin (Kotlin/Java)"
|
|
281
|
+
intelligence["error_message"] = err_json.get("title", "")
|
|
282
|
+
print(f" FRAMEWORK: Javalin detected")
|
|
283
|
+
print(f" ERROR: {err_json.get('title')}")
|
|
284
|
+
# Spring Boot actuator pattern
|
|
285
|
+
if "timestamp" in err_json and "path" in err_json:
|
|
286
|
+
intelligence["framework"] = "Spring Boot"
|
|
287
|
+
# Express/Node pattern
|
|
288
|
+
if err_json.get("name") == "BadRequestError":
|
|
289
|
+
intelligence["framework"] = "Express.js"
|
|
290
|
+
except Exception:
|
|
291
|
+
pass
|
|
292
|
+
|
|
293
|
+
# Progressive param disclosure (e.g., "Missing X parameter")
|
|
294
|
+
import re
|
|
295
|
+
missing_params = re.findall(r'[Mm]issing\s+([a-zA-Z_-]+)\s+param', body)
|
|
296
|
+
required_params = re.findall(r'[Rr]equired.*param.*?["\']([a-zA-Z_-]+)["\']', body)
|
|
297
|
+
all_params = missing_params + required_params
|
|
298
|
+
if all_params:
|
|
299
|
+
intelligence.setdefault("required_params", []).extend(all_params)
|
|
300
|
+
print(f" PARAM DISCLOSURE: {all_params}")
|
|
301
|
+
except Exception as ex:
|
|
302
|
+
pass
|
|
303
|
+
|
|
304
|
+
return intelligence
|
|
305
|
+
|
|
306
|
+
# Load probe results and analyze non-404 endpoints
|
|
307
|
+
with open("output/js_internal_hosts_probe.txt") as f:
|
|
308
|
+
for line in f:
|
|
309
|
+
try:
|
|
310
|
+
r = json.loads(line)
|
|
311
|
+
if r.get("status", 404) not in (404, 0):
|
|
312
|
+
print(f"\n=== Analyzing {r['url']} ===")
|
|
313
|
+
intel = extract_error_intelligence(r['url'])
|
|
314
|
+
if intel:
|
|
315
|
+
print(f"Intelligence: {json.dumps(intel, indent=2)}")
|
|
316
|
+
except Exception:
|
|
317
|
+
pass
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
python3 tools/error_intelligence.py | tee output/js_error_intelligence.txt
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## STEP 6 — Cross-Reference Internal Hostnames with Subdomains
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
# Check if any internally-referenced hostnames are also public subdomains
|
|
330
|
+
# This finds cases where "internal" services are accidentally internet-facing
|
|
331
|
+
|
|
332
|
+
# Extract just hostnames from internal candidates
|
|
333
|
+
grep -oE '[a-zA-Z0-9][a-zA-Z0-9._-]{4,80}' output/js_internal_candidate_urls.txt \
|
|
334
|
+
| grep -v '/' \
|
|
335
|
+
| sort -u > output/js_hostname_candidates.txt
|
|
336
|
+
|
|
337
|
+
# Cross-reference against our subdomain list
|
|
338
|
+
while IFS= read -r hostname; do
|
|
339
|
+
if grep -q "$hostname" output/subdomains.txt 2>/dev/null; then
|
|
340
|
+
echo "[IN SCOPE] $hostname is both in JS bundles AND in subdomains list"
|
|
341
|
+
fi
|
|
342
|
+
done < output/js_hostname_candidates.txt | tee output/js_subdomain_crossref.txt
|
|
343
|
+
|
|
344
|
+
# Also resolve any new internal hostnames that aren't in our subdomain list
|
|
345
|
+
python3 -c "
|
|
346
|
+
import socket, sys
|
|
347
|
+
with open('output/js_hostname_candidates.txt') as f:
|
|
348
|
+
for hostname in f:
|
|
349
|
+
hostname = hostname.strip()
|
|
350
|
+
if not hostname or '.' not in hostname:
|
|
351
|
+
continue
|
|
352
|
+
try:
|
|
353
|
+
ip = socket.gethostbyname(hostname)
|
|
354
|
+
print(f'[RESOLVES] {hostname} -> {ip}')
|
|
355
|
+
except socket.gaierror:
|
|
356
|
+
pass
|
|
357
|
+
" | tee output/js_new_resolving_hosts.txt
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Key Patterns to Identify
|
|
363
|
+
|
|
364
|
+
**Fleet/Cluster naming (indicates internal Kubernetes/container infrastructure):**
|
|
365
|
+
- `.fleet.live.<company>.net` — production Kubernetes fleet
|
|
366
|
+
- `.fleet.staging.<company>.net` — staging fleet
|
|
367
|
+
- `<service>.dev.solo.<company>.com` — individual developer cluster
|
|
368
|
+
- `<service>.<namespace>.svc.cluster.local` — internal K8s DNS (not publicly routable but leaks topology)
|
|
369
|
+
- `<service>-<env>.<company>.internal` — internal DNS zone
|
|
370
|
+
|
|
371
|
+
**Environment indicators in hostnames:**
|
|
372
|
+
- `dev`, `staging`, `qa`, `uat`, `sandbox`, `preview` — non-production environments
|
|
373
|
+
- `solo`, `personal`, `test` — individual developer environments (highest risk of being exposed)
|
|
374
|
+
- `live`, `prod` — production (highest value targets)
|
|
375
|
+
|
|
376
|
+
**Service type indicators:**
|
|
377
|
+
- `otel`, `telemetry`, `tracing`, `metrics` — observability infrastructure
|
|
378
|
+
- `billing`, `payment`, `checkout` — payment infrastructure
|
|
379
|
+
- `auth`, `sso`, `login`, `oauth` — authentication infrastructure
|
|
380
|
+
- `api-internal`, `internal-api`, `backend` — internal API services
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Pro Tips
|
|
385
|
+
|
|
386
|
+
1. **The goldmine is in service-worker.js and webpack chunk manifests** — these load lazily and often contain backend configuration not present in the main bundle.
|
|
387
|
+
2. **Check `__NEXT_DATA__` in server-rendered pages** — Next.js embeds the initial page props as JSON, which may include internal API responses with full hostnames.
|
|
388
|
+
3. **Source maps (.js.map files)** — Unstrip the bundle and find commented-out internal URLs and debug configurations.
|
|
389
|
+
4. **React Native / Expo bundles** — Mobile apps served from CDNs often contain more sensitive infrastructure URLs than web apps.
|
|
390
|
+
5. **Service worker registration URLs** — `navigator.serviceWorker.register()` paths reveal versioned bundle URLs.
|
|
391
|
+
6. **Cross-reference with historical URLs** — `output/historical_urls.txt` from Wayback Machine often has older versions of JS bundles that leaked more before the team cleaned them up.
|