@aegis-scan/skills 0.5.0 → 0.5.2
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 +93 -0
- package/package.json +1 -1
- package/sbom.cdx.json +1 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +878 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/README.md +9 -3
- package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +93 -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 +60 -5
- package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +745 -11
- 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 +106 -30
- package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +247 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +75 -2
- 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 +55 -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/BFSG/audit-relevance.md +39 -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/DDG/audit-relevance.md +28 -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 +4 -1
- 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 +3 -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/HinSchG/articles.md +96 -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 +3 -2
- 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 +71 -3
- 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/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 +115 -9
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +1 -1
- 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/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/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/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/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/DSFA-template.md +80 -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-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 +190 -48
- 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/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-quality-gates/SKILL.md +1 -1
- 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
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
<!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: exposed-devtools-detection
|
|
5
|
+
description: Detect and assess publicly exposed development tools including Storybook component libraries, serial terminals, hardware debug interfaces, admin panels on dev clusters, and developer-only services that should never be internet-facing
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Exposed Development Tools & Dev Cluster Detection
|
|
9
|
+
|
|
10
|
+
Development tools accidentally exposed to the internet are consistently underreported in bug bounties but accepted as valid findings. Unlike production vulnerabilities, these require no exploitation — existence on the public internet without authentication IS the vulnerability.
|
|
11
|
+
|
|
12
|
+
**High-value targets:**
|
|
13
|
+
- Storybook instances (expose UI component architecture)
|
|
14
|
+
- Hardware interface tools (serial terminals, JTAG interfaces)
|
|
15
|
+
- Developer-only admin panels and dashboards
|
|
16
|
+
- Internal documentation sites (Notion self-hosted, Confluence, GitBook internal)
|
|
17
|
+
- Database admin UIs (pgAdmin, Adminer, MongoDB Compass web)
|
|
18
|
+
- Container/Kubernetes dashboards (Kubernetes Dashboard, Portainer, k9s web)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## STEP 1 — Identify Dev/Staging Subdomain Patterns
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# From subdomains.txt, identify development cluster patterns
|
|
26
|
+
grep -iE '(dev|staging|stage|qa|uat|sandbox|preview|test|solo|personal|local|internal)\.' \
|
|
27
|
+
output/subdomains.txt | sort -u | tee output/dev_subdomains.txt
|
|
28
|
+
|
|
29
|
+
# More aggressive: any subdomain with dev-related keywords
|
|
30
|
+
grep -iE '(dev\.|\.dev\.|staging\.|stg\.|qa\.|uat\.|test\.|sandbox\.|preview\.|solo\.|canary\.|beta\.|nightly\.|alpha\.)' \
|
|
31
|
+
output/subdomains.txt | sort -u >> output/dev_subdomains.txt
|
|
32
|
+
|
|
33
|
+
# Kubernetes cluster patterns specifically
|
|
34
|
+
grep -iE '(\.(k8s|kube|cluster|node|pod|svc|namespace)|\.(dev|staging)\.solo\.|\.dev\.cluster\.)' \
|
|
35
|
+
output/subdomains.txt | sort -u >> output/dev_subdomains.txt
|
|
36
|
+
|
|
37
|
+
sort -u output/dev_subdomains.txt > output/dev_subdomains_dedup.txt
|
|
38
|
+
echo "Dev subdomains found: $(wc -l < output/dev_subdomains_dedup.txt)"
|
|
39
|
+
cat output/dev_subdomains_dedup.txt
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## STEP 2 — Storybook Detection
|
|
45
|
+
|
|
46
|
+
Storybook has unique fingerprints detectable without authentication:
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
# tools/detect_storybook.py
|
|
50
|
+
"""
|
|
51
|
+
Storybook fingerprints:
|
|
52
|
+
1. Title: "<x> - Storybook" or "Storybook"
|
|
53
|
+
2. Body contains: "storybook-root", "sb-show-main", "@storybook/", "storybook.js.org"
|
|
54
|
+
3. Route: /stories.json (machine-readable story index)
|
|
55
|
+
4. Route: /index.json (Storybook 7+ stories index)
|
|
56
|
+
5. Route: /iframe.html (story rendering iframe)
|
|
57
|
+
6. Static assets: /sb_dll/, /sb-addons/
|
|
58
|
+
"""
|
|
59
|
+
import urllib.request, urllib.error, ssl, json, re
|
|
60
|
+
|
|
61
|
+
ctx = ssl.create_default_context()
|
|
62
|
+
ctx.check_hostname = False
|
|
63
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
64
|
+
|
|
65
|
+
STORYBOOK_INDICATORS = [
|
|
66
|
+
"storybook-root", "sb-show-main", "@storybook/",
|
|
67
|
+
"storybook.js.org", "- Storybook</title>",
|
|
68
|
+
"Storybook</title>", "STORYBOOK_ENV"
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
STORYBOOK_PATHS = [
|
|
72
|
+
"/stories.json", # Storybook 6 story index
|
|
73
|
+
"/index.json", # Storybook 7+ story index
|
|
74
|
+
"/iframe.html", # Story rendering iframe
|
|
75
|
+
"/project.json", # Storybook project config
|
|
76
|
+
"/sb-addons/", # Addon assets
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
def check_storybook(base_url):
|
|
80
|
+
findings = []
|
|
81
|
+
|
|
82
|
+
# Check main page for fingerprints
|
|
83
|
+
try:
|
|
84
|
+
req = urllib.request.Request(base_url, headers={"User-Agent": "Mozilla/5.0"})
|
|
85
|
+
with urllib.request.urlopen(req, timeout=10, context=ctx) as r:
|
|
86
|
+
body = r.read(5000).decode('utf-8', 'ignore')
|
|
87
|
+
|
|
88
|
+
for indicator in STORYBOOK_INDICATORS:
|
|
89
|
+
if indicator.lower() in body.lower():
|
|
90
|
+
findings.append(f"INDICATOR: {indicator}")
|
|
91
|
+
|
|
92
|
+
# Extract title
|
|
93
|
+
title = re.search(r'<title>([^<]+)</title>', body)
|
|
94
|
+
if title and 'storybook' in title.group(1).lower():
|
|
95
|
+
findings.append(f"TITLE: {title.group(1)}")
|
|
96
|
+
|
|
97
|
+
# Extract package name from title (usually "<package> - Storybook")
|
|
98
|
+
if title:
|
|
99
|
+
pkg_match = re.match(r'^(.+?)\s*-\s*Storybook', title.group(1))
|
|
100
|
+
if pkg_match:
|
|
101
|
+
findings.append(f"PACKAGE: {pkg_match.group(1)}")
|
|
102
|
+
except Exception as ex:
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
# Check for stories.json (complete component inventory)
|
|
106
|
+
for path in STORYBOOK_PATHS:
|
|
107
|
+
try:
|
|
108
|
+
req = urllib.request.Request(
|
|
109
|
+
base_url.rstrip('/') + path,
|
|
110
|
+
headers={"User-Agent": "Mozilla/5.0"}
|
|
111
|
+
)
|
|
112
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
113
|
+
body = r.read(10000).decode('utf-8', 'ignore')
|
|
114
|
+
findings.append(f"PATH_EXISTS: {path} [{r.status}]")
|
|
115
|
+
|
|
116
|
+
# Parse stories.json to extract component names
|
|
117
|
+
if path in ('/stories.json', '/index.json'):
|
|
118
|
+
try:
|
|
119
|
+
data = json.loads(body)
|
|
120
|
+
stories = data.get('stories', data.get('entries', {}))
|
|
121
|
+
components = set()
|
|
122
|
+
for story_id, story_data in stories.items():
|
|
123
|
+
if isinstance(story_data, dict):
|
|
124
|
+
kind = story_data.get('kind', story_data.get('title', ''))
|
|
125
|
+
if kind:
|
|
126
|
+
components.add(kind)
|
|
127
|
+
findings.append(f"COMPONENTS ({len(components)} total): {', '.join(list(components)[:10])}...")
|
|
128
|
+
except Exception:
|
|
129
|
+
pass
|
|
130
|
+
except urllib.error.HTTPError as e:
|
|
131
|
+
pass
|
|
132
|
+
except Exception:
|
|
133
|
+
pass
|
|
134
|
+
|
|
135
|
+
return findings if findings else None
|
|
136
|
+
|
|
137
|
+
# Load live hosts and check each
|
|
138
|
+
with open("output/live_hosts.txt") as f:
|
|
139
|
+
hosts = [line.strip() for line in f if line.strip()]
|
|
140
|
+
|
|
141
|
+
print("=== Scanning for exposed Storybook instances ===")
|
|
142
|
+
for host_line in hosts:
|
|
143
|
+
# Parse "https://example.com [200]" format
|
|
144
|
+
parts = host_line.split()
|
|
145
|
+
if not parts:
|
|
146
|
+
continue
|
|
147
|
+
host = parts[0]
|
|
148
|
+
if not host.startswith("http"):
|
|
149
|
+
host = f"https://{host}"
|
|
150
|
+
|
|
151
|
+
result = check_storybook(host)
|
|
152
|
+
if result:
|
|
153
|
+
print(f"\n[STORYBOOK FOUND] {host}")
|
|
154
|
+
for f in result:
|
|
155
|
+
print(f" {f}")
|
|
156
|
+
with open("output/exposed_storybook.txt", "a") as out:
|
|
157
|
+
out.write(f"{host}\n")
|
|
158
|
+
for r in result:
|
|
159
|
+
out.write(f" {r}\n")
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
python3 tools/detect_storybook.py | tee output/storybook_detection.txt
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## STEP 3 — Serial Terminal & Hardware Interface Detection
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
# tools/detect_hardware_interfaces.py
|
|
172
|
+
"""
|
|
173
|
+
Hardware debugging tools exposed to the internet:
|
|
174
|
+
- Web-based serial terminals (WebSerial API)
|
|
175
|
+
- JTAG/SWD debug interfaces (OpenOCD web UI)
|
|
176
|
+
- Hardware-in-the-loop test dashboards
|
|
177
|
+
- Firmware update servers
|
|
178
|
+
|
|
179
|
+
Indicators:
|
|
180
|
+
- Origin-Trial header with WebSerial API token
|
|
181
|
+
- navigator.serial references in page JS
|
|
182
|
+
- "serial port", "baud rate", "COM port" in page content
|
|
183
|
+
- Titles: "Serial Terminal", "Console", "Debug Terminal"
|
|
184
|
+
"""
|
|
185
|
+
import urllib.request, urllib.error, ssl, re
|
|
186
|
+
|
|
187
|
+
ctx = ssl.create_default_context()
|
|
188
|
+
ctx.check_hostname = False
|
|
189
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
190
|
+
|
|
191
|
+
HARDWARE_INDICATORS = {
|
|
192
|
+
"webserial": [
|
|
193
|
+
"navigator.serial", "requestPort(", "WebSerial",
|
|
194
|
+
"serial-polyfill", "web-serial-polyfill"
|
|
195
|
+
],
|
|
196
|
+
"serial_ui": [
|
|
197
|
+
"serial terminal", "serial port", "baud rate", "COM port",
|
|
198
|
+
"UART", "RS232", "serial console", "connect to device"
|
|
199
|
+
],
|
|
200
|
+
"origin_trial": [
|
|
201
|
+
'http-equiv="origin-trial"',
|
|
202
|
+
"origin-trial"
|
|
203
|
+
],
|
|
204
|
+
"jtag_debug": [
|
|
205
|
+
"OpenOCD", "JTAG", "SWD", "GDB server", "debug probe",
|
|
206
|
+
"firmware flash", "DFU mode"
|
|
207
|
+
],
|
|
208
|
+
"hardware_test": [
|
|
209
|
+
"hardware in the loop", "HIL test", "device under test",
|
|
210
|
+
"test fixture", "test harness"
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
def check_hardware_interface(url):
|
|
215
|
+
findings = []
|
|
216
|
+
try:
|
|
217
|
+
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
|
218
|
+
with urllib.request.urlopen(req, timeout=10, context=ctx) as r:
|
|
219
|
+
headers = dict(r.headers)
|
|
220
|
+
body = r.read(10000).decode('utf-8', 'ignore')
|
|
221
|
+
|
|
222
|
+
# Check Origin-Trial header (indicates experimental API usage)
|
|
223
|
+
origin_trial = headers.get('origin-trial', '')
|
|
224
|
+
ot_meta = re.search(r'origin-trial.*?content="([^"]{20,})"', body, re.I)
|
|
225
|
+
if origin_trial or ot_meta:
|
|
226
|
+
token = origin_trial or (ot_meta.group(1) if ot_meta else '')
|
|
227
|
+
findings.append(f"ORIGIN_TRIAL: {token[:80]}...")
|
|
228
|
+
|
|
229
|
+
# Check each indicator category
|
|
230
|
+
body_lower = body.lower()
|
|
231
|
+
for category, indicators in HARDWARE_INDICATORS.items():
|
|
232
|
+
matched = [ind for ind in indicators if ind.lower() in body_lower]
|
|
233
|
+
if matched:
|
|
234
|
+
findings.append(f"{category.upper()}: {matched}")
|
|
235
|
+
|
|
236
|
+
# Extract page title
|
|
237
|
+
title = re.search(r'<title>([^<]+)</title>', body)
|
|
238
|
+
if title:
|
|
239
|
+
findings.append(f"TITLE: {title.group(1)}")
|
|
240
|
+
|
|
241
|
+
except Exception as ex:
|
|
242
|
+
return None
|
|
243
|
+
|
|
244
|
+
return findings if findings else None
|
|
245
|
+
|
|
246
|
+
# Check dev subdomains specifically
|
|
247
|
+
with open("output/dev_subdomains_dedup.txt") as f:
|
|
248
|
+
dev_hosts = [line.strip() for line in f if line.strip()]
|
|
249
|
+
|
|
250
|
+
print("=== Scanning dev subdomains for hardware interfaces ===")
|
|
251
|
+
for host in dev_hosts:
|
|
252
|
+
url = f"https://{host}" if not host.startswith("http") else host
|
|
253
|
+
result = check_hardware_interface(url)
|
|
254
|
+
if result:
|
|
255
|
+
print(f"\n[HARDWARE INTERFACE] {url}")
|
|
256
|
+
for r in result:
|
|
257
|
+
print(f" {r}")
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
python3 tools/detect_hardware_interfaces.py | tee output/hardware_interface_detection.txt
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## STEP 4 — Generic Dev Tool Fingerprinting
|
|
267
|
+
|
|
268
|
+
```python
|
|
269
|
+
# tools/detect_devtools.py
|
|
270
|
+
"""
|
|
271
|
+
Fingerprint common development tools that should not be public-facing.
|
|
272
|
+
"""
|
|
273
|
+
import urllib.request, urllib.error, ssl, re
|
|
274
|
+
|
|
275
|
+
ctx = ssl.create_default_context()
|
|
276
|
+
ctx.check_hostname = False
|
|
277
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
278
|
+
|
|
279
|
+
# Tool fingerprint definitions: (name, path_patterns, body_indicators, title_patterns)
|
|
280
|
+
DEV_TOOLS = [
|
|
281
|
+
{
|
|
282
|
+
"name": "Storybook",
|
|
283
|
+
"paths": ["/", "/stories.json", "/iframe.html"],
|
|
284
|
+
"body": ["storybook-root", "sb-show-main", "Storybook"],
|
|
285
|
+
"titles": ["Storybook"]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"name": "Kubernetes Dashboard",
|
|
289
|
+
"paths": ["/", "/#/overview"],
|
|
290
|
+
"body": ["kubernetes-dashboard", "kubernetesui", "kube-system"],
|
|
291
|
+
"titles": ["Kubernetes Dashboard"]
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"name": "Grafana",
|
|
295
|
+
"paths": ["/", "/login"],
|
|
296
|
+
"body": ["grafana", "Grafana", "grafana-app"],
|
|
297
|
+
"titles": ["Grafana"]
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"name": "pgAdmin",
|
|
301
|
+
"paths": ["/", "/pgadmin4/"],
|
|
302
|
+
"body": ["pgAdmin", "pg4_login"],
|
|
303
|
+
"titles": ["pgAdmin", "pgAdmin 4"]
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"name": "Portainer",
|
|
307
|
+
"paths": ["/", "/#/init/admin"],
|
|
308
|
+
"body": ["portainer", "Portainer"],
|
|
309
|
+
"titles": ["Portainer"]
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"name": "Jupyter Notebook",
|
|
313
|
+
"paths": ["/", "/tree"],
|
|
314
|
+
"body": ["jupyter", "ipython", "notebook_app"],
|
|
315
|
+
"titles": ["Jupyter", "JupyterLab"]
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"name": "Adminer",
|
|
319
|
+
"paths": ["/adminer", "/adminer.php", "/adminer/"],
|
|
320
|
+
"body": ["adminer", "Adminer"],
|
|
321
|
+
"titles": ["Adminer"]
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"name": "RabbitMQ Management",
|
|
325
|
+
"paths": ["/#/", "/api/overview"],
|
|
326
|
+
"body": ["rabbitmq_management", "RabbitMQ"],
|
|
327
|
+
"titles": ["RabbitMQ Management"]
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"name": "Laravel Telescope",
|
|
331
|
+
"paths": ["/telescope", "/telescope/requests"],
|
|
332
|
+
"body": ["telescope", "Laravel Telescope"],
|
|
333
|
+
"titles": ["Telescope"]
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"name": "Django Debug Toolbar",
|
|
337
|
+
"paths": ["/__debug__/"],
|
|
338
|
+
"body": ["djdt", "django-debug-toolbar"],
|
|
339
|
+
"titles": ["Django Debug"]
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"name": "Spring Boot Actuator",
|
|
343
|
+
"paths": ["/actuator", "/actuator/health", "/actuator/env"],
|
|
344
|
+
"body": ["actuator", "springBootVersion"],
|
|
345
|
+
"titles": []
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"name": "Serial Terminal (WebSerial)",
|
|
349
|
+
"paths": ["/"],
|
|
350
|
+
"body": ["navigator.serial", "serial terminal", "serialport"],
|
|
351
|
+
"titles": ["Serial Terminal", "Serial Console", "Console"]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"name": "Caido (Proxy Tool)",
|
|
355
|
+
"paths": ["/"],
|
|
356
|
+
"body": ["caido", "Caido"],
|
|
357
|
+
"titles": ["Caido"]
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"name": "Ngrok Dashboard",
|
|
361
|
+
"paths": ["/"],
|
|
362
|
+
"body": ["ngrok", "inspect.html"],
|
|
363
|
+
"titles": ["ngrok"]
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"name": "HashiCorp Vault UI",
|
|
367
|
+
"paths": ["/ui/", "/v1/sys/health"],
|
|
368
|
+
"body": ["vault-ui", "HashiCorp Vault"],
|
|
369
|
+
"titles": ["Vault"]
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"name": "GitLab (internal instance)",
|
|
373
|
+
"paths": ["/", "/users/sign_in"],
|
|
374
|
+
"body": ["gitlab", "GitLab"],
|
|
375
|
+
"titles": ["GitLab", "Sign in · GitLab"]
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"name": "ArgoCD",
|
|
379
|
+
"paths": ["/", "/auth/login"],
|
|
380
|
+
"body": ["argo-cd", "argocd"],
|
|
381
|
+
"titles": ["Argo CD"]
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"name": "Rancher",
|
|
385
|
+
"paths": ["/"],
|
|
386
|
+
"body": ["rancher", "Rancher"],
|
|
387
|
+
"titles": ["Rancher"]
|
|
388
|
+
}
|
|
389
|
+
]
|
|
390
|
+
|
|
391
|
+
def fingerprint_host(base_url):
|
|
392
|
+
matches = []
|
|
393
|
+
for tool in DEV_TOOLS:
|
|
394
|
+
for path in tool["paths"]:
|
|
395
|
+
url = base_url.rstrip('/') + path
|
|
396
|
+
try:
|
|
397
|
+
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
|
398
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
399
|
+
body = r.read(5000).decode('utf-8', 'ignore')
|
|
400
|
+
title_match = re.search(r'<title>([^<]+)</title>', body)
|
|
401
|
+
title = title_match.group(1) if title_match else ''
|
|
402
|
+
|
|
403
|
+
body_hit = any(ind.lower() in body.lower() for ind in tool["body"])
|
|
404
|
+
title_hit = any(t.lower() in title.lower() for t in tool["titles"]) if tool["titles"] else False
|
|
405
|
+
|
|
406
|
+
if body_hit or title_hit:
|
|
407
|
+
matches.append({
|
|
408
|
+
"tool": tool["name"], "url": url,
|
|
409
|
+
"status": r.status, "title": title[:80]
|
|
410
|
+
})
|
|
411
|
+
break
|
|
412
|
+
except urllib.error.HTTPError as e:
|
|
413
|
+
body = e.read(1000).decode('utf-8', 'ignore')
|
|
414
|
+
body_hit = any(ind.lower() in body.lower() for ind in tool["body"])
|
|
415
|
+
if body_hit:
|
|
416
|
+
matches.append({"tool": tool["name"], "url": url, "status": e.code})
|
|
417
|
+
except Exception:
|
|
418
|
+
pass
|
|
419
|
+
return matches
|
|
420
|
+
|
|
421
|
+
# Scan all dev subdomains + live hosts
|
|
422
|
+
all_hosts = set()
|
|
423
|
+
for fname in ["output/dev_subdomains_dedup.txt", "output/live_hosts.txt"]:
|
|
424
|
+
try:
|
|
425
|
+
with open(fname) as f:
|
|
426
|
+
for line in f:
|
|
427
|
+
parts = line.strip().split()
|
|
428
|
+
if parts:
|
|
429
|
+
h = parts[0]
|
|
430
|
+
if not h.startswith("http"):
|
|
431
|
+
h = f"https://{h}"
|
|
432
|
+
all_hosts.add(h)
|
|
433
|
+
except FileNotFoundError:
|
|
434
|
+
pass
|
|
435
|
+
|
|
436
|
+
print(f"=== Scanning {len(all_hosts)} hosts for exposed dev tools ===")
|
|
437
|
+
found_any = False
|
|
438
|
+
for host in sorted(all_hosts):
|
|
439
|
+
matches = fingerprint_host(host)
|
|
440
|
+
if matches:
|
|
441
|
+
found_any = True
|
|
442
|
+
for m in matches:
|
|
443
|
+
print(f"\n[DEV TOOL EXPOSED] {m['tool']}")
|
|
444
|
+
print(f" URL: {m['url']}")
|
|
445
|
+
print(f" Status: {m['status']}")
|
|
446
|
+
print(f" Title: {m.get('title', 'N/A')}")
|
|
447
|
+
|
|
448
|
+
if not found_any:
|
|
449
|
+
print("[*] No exposed dev tools detected in current host list")
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
python3 tools/detect_devtools.py | tee output/devtools_detection.txt
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## STEP 5 — Assess Impact of Exposed Dev Tool
|
|
459
|
+
|
|
460
|
+
Once a dev tool is found, collect evidence:
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
# For Storybook: extract full component inventory
|
|
464
|
+
STORYBOOK_URL="https://TARGET_STORYBOOK_URL"
|
|
465
|
+
|
|
466
|
+
# Get all stories
|
|
467
|
+
curl -sk "$STORYBOOK_URL/stories.json" | python3 -c "
|
|
468
|
+
import sys, json
|
|
469
|
+
data = json.load(sys.stdin)
|
|
470
|
+
stories = data.get('stories', data.get('entries', {}))
|
|
471
|
+
components = {}
|
|
472
|
+
for sid, sdata in stories.items():
|
|
473
|
+
if isinstance(sdata, dict):
|
|
474
|
+
title = sdata.get('kind', sdata.get('title', ''))
|
|
475
|
+
name = sdata.get('name', '')
|
|
476
|
+
if title:
|
|
477
|
+
components.setdefault(title, []).append(name)
|
|
478
|
+
print(f'Total components: {len(components)}')
|
|
479
|
+
for comp, stories in sorted(components.items()):
|
|
480
|
+
print(f' {comp}: {stories}')
|
|
481
|
+
" | tee output/storybook_components.txt
|
|
482
|
+
|
|
483
|
+
# Screenshot the tool (via browser_action) as evidence
|
|
484
|
+
# browser_action: take_screenshot of STORYBOOK_URL
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## Severity Assessment
|
|
490
|
+
|
|
491
|
+
| Tool | No Auth Required | Auth Required | Severity |
|
|
492
|
+
|------|-----------------|---------------|----------|
|
|
493
|
+
| Serial terminal (prod) | CRITICAL | HIGH | — |
|
|
494
|
+
| Serial terminal (dev) | HIGH | MEDIUM | — |
|
|
495
|
+
| Kubernetes Dashboard | CRITICAL | HIGH | — |
|
|
496
|
+
| Storybook | MEDIUM | LOW | — |
|
|
497
|
+
| Grafana (unauthenticated) | HIGH | MEDIUM | — |
|
|
498
|
+
| Spring Boot Actuator (/env) | HIGH | MEDIUM | — |
|
|
499
|
+
| pgAdmin | CRITICAL | HIGH | — |
|
|
500
|
+
| Jupyter Notebook | CRITICAL | HIGH | — |
|
|
501
|
+
| Internal GitLab | HIGH | MEDIUM | — |
|
|
502
|
+
| ArgoCD | HIGH | MEDIUM | — |
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## Pro Tips
|
|
507
|
+
|
|
508
|
+
1. **`dev.solo.` and `dev.personal.` patterns are highest risk** — these are individual developer namespaces that bypass security review processes.
|
|
509
|
+
2. **Storybook on `circuit.*/design.*/ui.*` subdomains** — design system Storybooks contain payment form components and auth UI that map directly to production XSS surfaces.
|
|
510
|
+
3. **Check for unauthenticated stories.json** — even if the main Storybook UI requires auth, `stories.json` is often a static file served without auth checks.
|
|
511
|
+
4. **Hardware terminals on payment companies** — if the target makes physical payment devices (card readers, POS terminals), serial terminals are used for firmware debugging. Finding one exposed = critical.
|
|
512
|
+
5. **Origin-Trial tokens are time-limited** — capture the token and decode the JWT to see the origin and expiry. If not expired, the WebSerial API is live on that page.
|
|
513
|
+
6. **Cluster namespace enumeration** — once you find one `service.dev.solo.target.com`, DNS-brute other common service names on the same cluster (`api.dev.solo.target.com`, `admin.dev.solo.target.com`).
|