@wazir-dev/cli 1.0.0

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 (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,1171 @@
1
+ # Database Security
2
+
3
+ > Comprehensive security guidance for database deployments, access control, query safety,
4
+ > and breach prevention across PostgreSQL, MongoDB, MySQL, Redis, and cloud-managed services.
5
+
6
+ ---
7
+
8
+ ## 1. Threat Landscape
9
+
10
+ ### 1.1 The Scale of Exposed Databases
11
+
12
+ Databases remain one of the most targeted assets in any infrastructure. The attack surface
13
+ is enormous and growing:
14
+
15
+ - **MongoDB**: Over 213,000 internet-exposed MongoDB instances identified via Shodan (2025).
16
+ Of these, 3,100+ were accessible without any authentication. Nearly 45.6% of unauthenticated
17
+ instances had already been compromised and wiped, with ransom notes left behind.
18
+ (Source: Flare Security 2026 research, BleepingComputer)
19
+ - **Elasticsearch**: Routinely found exposed on Shodan with no authentication enabled.
20
+ The default installation has no security enabled, making every deployment a potential breach.
21
+ - **Redis**: Approximately 330,000 Redis instances exposed to the internet, with ~60,000
22
+ having no authentication configured. 57% of cloud environments install Redis as container
23
+ images, many without proper security hardening. (Source: Wiz Research)
24
+ - **PostgreSQL/MySQL**: Less commonly exposed directly, but cloud misconfigurations
25
+ (security groups set to 0.0.0.0/0) remain a frequent finding in penetration tests.
26
+
27
+ ### 1.2 Real-World Breaches
28
+
29
+ **Microsoft (2019) -- 250 Million Support Records**
30
+ Five Elasticsearch servers containing 250 million Customer Service and Support records
31
+ were left accessible to anyone with a web browser -- no password or authentication needed.
32
+ The data spanned 14 years (2005-2019) and included email addresses, IP addresses, customer
33
+ locations, and descriptions of support cases, some marked confidential. Root cause: a
34
+ misconfiguration of security rules for an internal database. Discovered by Bob Diachenko
35
+ (Comparitech). (Source: Comparitech, WeLiveSecurity)
36
+
37
+ **Shanghai Police / Alibaba Cloud (2022) -- 1 Billion Records**
38
+ A hacker offered to sell data from a Shanghai police database containing personal information
39
+ on approximately 1 billion Chinese citizens -- names, addresses, national ID numbers, phone
40
+ numbers, and criminal records. The data was hosted on Alibaba Cloud and had been publicly
41
+ accessible via an unsecured backdoor link since at least April 2021. The breach was caused
42
+ by a misconfigured cloud server that did not require a password. The asking price: 10 Bitcoin
43
+ (~$200,000). (Source: The Register, TechCrunch, CNN)
44
+
45
+ **National Public Data (2024) -- 2.9 Billion Records**
46
+ Approximately 2.9 billion data records exposed, impacting 1.3 billion individuals. Exposed
47
+ data included full names, addresses, dates of birth, Social Security numbers, phone numbers,
48
+ and email addresses. One of the largest breaches in U.S. history. (Source: multiple reports)
49
+
50
+ **Snowflake Cloud Breaches (2024)**
51
+ Snowflake was involved in multiple major corporate data breaches, including attacks on AT&T
52
+ and Ticketmaster, attributed to threat actor UNC5537. Attackers exploited stolen credentials
53
+ and the absence of multi-factor authentication on Snowflake customer accounts.
54
+
55
+ **MongoBleed CVE-2025-14847**
56
+ A high-severity vulnerability in MongoDB's zlib-based network compression. Unauthenticated
57
+ attackers could leak sensitive information from server memory. Over 87,000 potentially
58
+ vulnerable instances were exposed at time of disclosure. Public PoC exploit code was released
59
+ shortly after. (Source: Resecurity, Arctic Wolf, Akamai)
60
+
61
+ ### 1.3 Common Attack Vectors
62
+
63
+ | Vector | Description | Impact |
64
+ |--------|-------------|--------|
65
+ | Exposed management ports | DB port open to internet (5432, 3306, 27017, 6379) | Full data access |
66
+ | Default/weak credentials | Factory defaults or common passwords | Complete takeover |
67
+ | SQL injection | Malicious SQL via application layer | Data theft, modification |
68
+ | Privilege escalation | Exploiting overprivileged accounts | Lateral movement |
69
+ | Credential stuffing | Reused passwords from other breaches | Account takeover |
70
+ | Insider threat | Malicious or compromised insiders | Data exfiltration |
71
+ | Unencrypted backups | Backup files without encryption | Offline data theft |
72
+ | Memory disclosure | Vulnerabilities like MongoBleed | Credential/data leakage |
73
+
74
+ ---
75
+
76
+ ## 2. Core Security Principles
77
+
78
+ ### 2.1 Least Privilege
79
+
80
+ Every database account should have the minimum permissions required for its function:
81
+
82
+ - **Application accounts**: SELECT, INSERT, UPDATE, DELETE on specific tables only.
83
+ Never GRANT ALL PRIVILEGES. Never use the superuser/root account for application connections.
84
+ - **Migration accounts**: Temporary elevated privileges, revoked after migration completes.
85
+ - **Monitoring accounts**: Read-only access to system catalogs and statistics views.
86
+ - **Backup accounts**: Read-only with pg_dump/mongodump privileges, no write access.
87
+ - **Human operators**: Individual named accounts, never shared credentials.
88
+
89
+ ### 2.2 Network Isolation
90
+
91
+ - Databases must never be directly accessible from the public internet.
92
+ - Place databases in private subnets with no public IP addresses.
93
+ - Use security groups / firewall rules to allow connections only from application servers.
94
+ - Use VPN or SSH tunnels for administrative access.
95
+ - Enable VPC peering or private endpoints for cloud-managed databases.
96
+
97
+ ### 2.3 Encryption
98
+
99
+ **At rest:**
100
+ - Enable Transparent Data Encryption (TDE) or filesystem-level encryption.
101
+ - Encrypt all backup files. Use AES-256 as the minimum standard.
102
+ - Encrypt WAL/binlog files.
103
+
104
+ **In transit:**
105
+ - Require TLS 1.2+ for all database connections. Reject plaintext connections.
106
+ - Use strong cipher suites. Disable SSLv3, TLS 1.0, TLS 1.1.
107
+ - Verify server certificates from clients (sslmode=verify-full for PostgreSQL).
108
+
109
+ ### 2.4 Authentication
110
+
111
+ - Use strong password hashing: SCRAM-SHA-256 (PostgreSQL), caching_sha2_password (MySQL).
112
+ - Never use MD5 or plaintext password storage.
113
+ - Enforce password complexity and rotation policies.
114
+ - Use certificate-based authentication where possible.
115
+ - Enable multi-factor authentication for administrative access.
116
+
117
+ ### 2.5 Audit Logging
118
+
119
+ - Log all authentication attempts (success and failure).
120
+ - Log all DDL operations (CREATE, ALTER, DROP).
121
+ - Log all privilege changes (GRANT, REVOKE).
122
+ - Log data access to sensitive tables.
123
+ - Ship logs to a centralized, tamper-resistant logging system (SIEM).
124
+
125
+ ### 2.6 Parameterized Queries
126
+
127
+ - Never construct SQL via string concatenation.
128
+ - Use prepared statements or parameterized queries exclusively.
129
+ - ORMs should be configured to use parameterized queries by default.
130
+ - Input validation is a secondary defense, not a replacement.
131
+
132
+ ---
133
+
134
+ ## 3. Implementation Patterns
135
+
136
+ ### 3.1 PostgreSQL Security Hardening
137
+
138
+ **pg_hba.conf -- Host-Based Authentication:**
139
+
140
+ ```conf
141
+ # TYPE DATABASE USER ADDRESS METHOD
142
+
143
+ # Reject all by default -- explicit entries only
144
+ # Local connections: require scram-sha-256
145
+ local all all scram-sha-256
146
+
147
+ # Application server subnet only -- require SSL + scram
148
+ hostssl appdb app_user 10.0.1.0/24 scram-sha-256
149
+
150
+ # Admin access from bastion only -- require SSL + cert
151
+ hostssl all admin_user 10.0.0.5/32 cert
152
+
153
+ # Deny everything else
154
+ host all all 0.0.0.0/0 reject
155
+ host all all ::/0 reject
156
+ ```
157
+
158
+ **Key pg_hba.conf rules:**
159
+ - Never use `trust` method for any remote connection.
160
+ - Never allow `0.0.0.0/0` for any database/user combination.
161
+ - Use `hostssl` instead of `host` to enforce TLS.
162
+ - Be specific: name exact databases and users, not `all`.
163
+
164
+ **postgresql.conf security settings:**
165
+
166
+ ```conf
167
+ # Authentication
168
+ password_encryption = 'scram-sha-256'
169
+
170
+ # SSL/TLS
171
+ ssl = on
172
+ ssl_cert_file = '/etc/ssl/certs/server.crt'
173
+ ssl_key_file = '/etc/ssl/private/server.key'
174
+ ssl_ca_file = '/etc/ssl/certs/ca.crt'
175
+ ssl_min_protocol_version = 'TLSv1.2'
176
+
177
+ # Connection limits
178
+ max_connections = 100
179
+ superuser_reserved_connections = 3
180
+
181
+ # Logging
182
+ log_connections = on
183
+ log_disconnections = on
184
+ log_statement = 'ddl'
185
+ log_line_prefix = '%m [%p] %q%u@%d '
186
+ ```
187
+
188
+ **Row-Level Security (RLS):**
189
+
190
+ ```sql
191
+ -- Enable RLS on sensitive table
192
+ ALTER TABLE customer_data ENABLE ROW LEVEL SECURITY;
193
+
194
+ -- Force RLS even for table owner
195
+ ALTER TABLE customer_data FORCE ROW LEVEL SECURITY;
196
+
197
+ -- Policy: users can only see their own organization's data
198
+ CREATE POLICY org_isolation ON customer_data
199
+ USING (org_id = current_setting('app.current_org_id')::int);
200
+
201
+ -- Policy: read-only access for analysts
202
+ CREATE POLICY analyst_read ON customer_data
203
+ FOR SELECT
204
+ TO analyst_role
205
+ USING (classification != 'top_secret');
206
+ ```
207
+
208
+ **Least-privilege role setup:**
209
+
210
+ ```sql
211
+ -- Create application role with minimal permissions
212
+ CREATE ROLE app_user WITH LOGIN PASSWORD 'use-secrets-manager'
213
+ CONNECTION LIMIT 20
214
+ VALID UNTIL '2025-12-31';
215
+
216
+ -- Grant only necessary table permissions
217
+ GRANT CONNECT ON DATABASE appdb TO app_user;
218
+ GRANT USAGE ON SCHEMA public TO app_user;
219
+ GRANT SELECT, INSERT, UPDATE ON customers, orders TO app_user;
220
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO app_user;
221
+
222
+ -- Explicitly deny dangerous operations
223
+ REVOKE CREATE ON SCHEMA public FROM PUBLIC;
224
+ REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC;
225
+
226
+ -- Read-only monitoring role
227
+ CREATE ROLE monitor_user WITH LOGIN PASSWORD 'use-secrets-manager';
228
+ GRANT CONNECT ON DATABASE appdb TO monitor_user;
229
+ GRANT USAGE ON SCHEMA public TO monitor_user;
230
+ GRANT SELECT ON pg_stat_activity, pg_stat_statements TO monitor_user;
231
+ ```
232
+
233
+ ### 3.2 MongoDB Access Control and Authentication
234
+
235
+ ```javascript
236
+ // mongod.conf -- security configuration
237
+ // security:
238
+ // authorization: enabled
239
+ // javascriptEnabled: false
240
+ // net:
241
+ // tls:
242
+ // mode: requireTLS
243
+ // certificateKeyFile: /etc/ssl/mongodb.pem
244
+ // CAFile: /etc/ssl/ca.pem
245
+ // bindIp: 10.0.1.10 # NEVER use 0.0.0.0
246
+
247
+ // Create admin user (do this BEFORE enabling authorization)
248
+ db.createUser({
249
+ user: "admin",
250
+ pwd: passwordPrompt(), // interactive prompt, never hardcode
251
+ roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
252
+ });
253
+
254
+ // Create application user with minimal privileges
255
+ db.createUser({
256
+ user: "app_service",
257
+ pwd: passwordPrompt(),
258
+ roles: [
259
+ { role: "readWrite", db: "appdb" },
260
+ ],
261
+ mechanisms: ["SCRAM-SHA-256"] // enforce strong auth
262
+ });
263
+
264
+ // Create read-only analytics user
265
+ db.createUser({
266
+ user: "analyst",
267
+ pwd: passwordPrompt(),
268
+ roles: [{ role: "read", db: "appdb" }],
269
+ mechanisms: ["SCRAM-SHA-256"]
270
+ });
271
+ ```
272
+
273
+ **Critical MongoDB security settings:**
274
+ - Always enable `authorization: enabled` in mongod.conf.
275
+ - Set `bindIp` to specific internal addresses, never `0.0.0.0`.
276
+ - Disable JavaScript execution (`javascriptEnabled: false`) unless required.
277
+ - Require TLS for all connections.
278
+ - Disable the HTTP status interface and REST API in production.
279
+
280
+ ### 3.3 Connection Pooling Security
281
+
282
+ ```typescript
283
+ // Secure connection pool configuration (Node.js/Knex example)
284
+ const knex = require('knex')({
285
+ client: 'pg',
286
+ connection: {
287
+ host: process.env.DB_HOST, // from environment/secrets
288
+ port: 5432,
289
+ user: process.env.DB_USER,
290
+ password: process.env.DB_PASSWORD, // from secrets manager
291
+ database: process.env.DB_NAME,
292
+ ssl: {
293
+ rejectUnauthorized: true, // CRITICAL: verify server cert
294
+ ca: fs.readFileSync('/etc/ssl/certs/db-ca.crt'),
295
+ },
296
+ },
297
+ pool: {
298
+ min: 2,
299
+ max: 10,
300
+ acquireTimeoutMillis: 30000,
301
+ idleTimeoutMillis: 60000,
302
+ // Validate connections before use
303
+ afterCreate: (conn, done) => {
304
+ conn.query('SELECT 1', (err) => done(err, conn));
305
+ },
306
+ },
307
+ });
308
+ ```
309
+
310
+ ### 3.4 Migration Security
311
+
312
+ - Run migrations with a dedicated migration user that has DDL privileges.
313
+ - Revoke DDL privileges from the migration user after deployment.
314
+ - Review all migration SQL for destructive operations before execution.
315
+ - Never store migration credentials in source code.
316
+ - Log all migration executions with timestamps and operator identity.
317
+
318
+ ### 3.5 Backup Encryption
319
+
320
+ ```bash
321
+ # PostgreSQL encrypted backup
322
+ pg_dump -h localhost -U backup_user appdb \
323
+ | gpg --symmetric --cipher-algo AES256 \
324
+ --passphrase-file /etc/backup/passphrase \
325
+ > /backups/appdb_$(date +%Y%m%d).sql.gpg
326
+
327
+ # MongoDB encrypted backup
328
+ mongodump --uri="mongodb://backup_user:$PASS@10.0.1.10:27017/appdb" \
329
+ --ssl --sslCAFile=/etc/ssl/ca.pem \
330
+ --archive \
331
+ | gpg --symmetric --cipher-algo AES256 \
332
+ --passphrase-file /etc/backup/passphrase \
333
+ > /backups/appdb_$(date +%Y%m%d).archive.gpg
334
+
335
+ # Verify backup integrity
336
+ gpg --decrypt /backups/appdb_$(date +%Y%m%d).sql.gpg | head -5
337
+ ```
338
+
339
+ ---
340
+
341
+ ## 4. Vulnerability Catalog
342
+
343
+ ### V-01: Default Credentials
344
+
345
+ **Risk**: Critical | **CVSS**: 9.8
346
+ **Description**: Database installed with factory-default or empty passwords.
347
+ **Affected**: All databases. Redis historically shipped with no password required.
348
+ MongoDB before 4.0 did not enable authentication by default.
349
+
350
+ ```bash
351
+ # VULNERABLE: Redis with no authentication
352
+ redis-server # starts with no password
353
+
354
+ # SECURE: Redis with strong authentication
355
+ # redis.conf
356
+ requirepass "$(openssl rand -base64 32)"
357
+ # Redis 6+ ACL system
358
+ user app_user on >strong_password ~app:* +get +set +del -@admin
359
+ ```
360
+
361
+ ### V-02: Overprivileged Application Accounts
362
+
363
+ **Risk**: High | **CVSS**: 8.1
364
+ **Description**: Application connects as superuser or with ALL PRIVILEGES.
365
+
366
+ ```sql
367
+ -- VULNERABLE
368
+ GRANT ALL PRIVILEGES ON *.* TO 'app'@'%';
369
+
370
+ -- SECURE
371
+ GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'app'@'10.0.1.%';
372
+ ```
373
+
374
+ ### V-03: Unencrypted Connections
375
+
376
+ **Risk**: High | **CVSS**: 7.5
377
+ **Description**: Database traffic transmitted in plaintext, vulnerable to MITM.
378
+
379
+ ```python
380
+ # VULNERABLE: No SSL verification
381
+ conn = psycopg2.connect(host="db.example.com", sslmode="prefer")
382
+
383
+ # SECURE: Full SSL verification
384
+ conn = psycopg2.connect(
385
+ host="db.example.com",
386
+ sslmode="verify-full",
387
+ sslrootcert="/etc/ssl/certs/db-ca.crt"
388
+ )
389
+ ```
390
+
391
+ ### V-04: Exposed Management Ports
392
+
393
+ **Risk**: Critical | **CVSS**: 9.8
394
+ **Description**: Database ports (5432, 3306, 27017, 6379) accessible from internet.
395
+
396
+ ```hcl
397
+ # VULNERABLE: Terraform security group
398
+ resource "aws_security_group_rule" "db" {
399
+ type = "ingress"
400
+ from_port = 5432
401
+ to_port = 5432
402
+ cidr_blocks = ["0.0.0.0/0"] # Open to entire internet
403
+ }
404
+
405
+ # SECURE: Restrict to application subnet
406
+ resource "aws_security_group_rule" "db" {
407
+ type = "ingress"
408
+ from_port = 5432
409
+ to_port = 5432
410
+ source_security_group_id = aws_security_group.app.id
411
+ }
412
+ ```
413
+
414
+ ### V-05: Missing Audit Logs
415
+
416
+ **Risk**: Medium | **CVSS**: 5.3
417
+ **Description**: No logging of database operations, making breach detection impossible.
418
+ Without audit logs, organizations cannot detect unauthorized access, satisfy compliance
419
+ requirements, or perform forensic analysis after an incident.
420
+
421
+ ### V-06: Unencrypted Backups
422
+
423
+ **Risk**: High | **CVSS**: 7.5
424
+ **Description**: Database backups stored as plaintext files. If backup storage is
425
+ compromised, all data is immediately readable. Backups often contain more sensitive
426
+ data than the live database (historical records, deleted data).
427
+
428
+ ### V-07: SQL Injection Bypass at DB Level
429
+
430
+ **Risk**: Critical | **CVSS**: 9.8
431
+ **Description**: Even with application-level parameterized queries, stored procedures
432
+ or dynamic SQL within the database can be vulnerable.
433
+
434
+ ```sql
435
+ -- VULNERABLE: Dynamic SQL in stored procedure
436
+ CREATE FUNCTION search_users(search_term TEXT) RETURNS SETOF users AS $$
437
+ BEGIN
438
+ RETURN QUERY EXECUTE 'SELECT * FROM users WHERE name = ''' || search_term || '''';
439
+ END;
440
+ $$ LANGUAGE plpgsql;
441
+
442
+ -- SECURE: Parameterized dynamic SQL
443
+ CREATE FUNCTION search_users(search_term TEXT) RETURNS SETOF users AS $$
444
+ BEGIN
445
+ RETURN QUERY EXECUTE 'SELECT * FROM users WHERE name = $1' USING search_term;
446
+ END;
447
+ $$ LANGUAGE plpgsql;
448
+ ```
449
+
450
+ ### V-08: Excessive Data Retention
451
+
452
+ **Risk**: Medium | **CVSS**: 5.0
453
+ **Description**: Storing more data than necessary increases breach impact. PII and
454
+ sensitive data kept indefinitely without business justification violates GDPR and
455
+ increases liability.
456
+
457
+ ### V-09: Connection String Leakage
458
+
459
+ **Risk**: High | **CVSS**: 8.1
460
+ **Description**: Database credentials exposed in source code, logs, error messages,
461
+ or environment dumps.
462
+
463
+ ```python
464
+ # VULNERABLE: Credentials in source code
465
+ DATABASE_URL = "postgresql://admin:SuperSecret123@db.prod.internal:5432/app"
466
+
467
+ # SECURE: Credentials from secrets manager
468
+ import boto3
469
+ client = boto3.client('secretsmanager')
470
+ secret = client.get_secret_value(SecretId='prod/db/credentials')
471
+ DATABASE_URL = json.loads(secret['SecretString'])['url']
472
+ ```
473
+
474
+ ### V-10: Missing Connection Limits
475
+
476
+ **Risk**: Medium | **CVSS**: 5.3
477
+ **Description**: No per-user or per-application connection limits, allowing a single
478
+ compromised service to exhaust all database connections (denial of service).
479
+
480
+ ### V-11: Stale User Accounts
481
+
482
+ **Risk**: Medium | **CVSS**: 6.5
483
+ **Description**: Former employee or decommissioned service accounts still active.
484
+ Regular access reviews are mandatory.
485
+
486
+ ### V-12: Unrestricted COPY/LOAD Operations
487
+
488
+ **Risk**: High | **CVSS**: 7.5
489
+ **Description**: PostgreSQL COPY TO/FROM and MySQL LOAD DATA can read/write server
490
+ filesystem. Must be restricted to superuser or specific roles.
491
+
492
+ ### V-13: Enabled Debug Features in Production
493
+
494
+ **Risk**: Medium | **CVSS**: 5.0
495
+ **Description**: MongoDB JavaScript evaluation, Redis DEBUG commands, PostgreSQL
496
+ `log_statement = 'all'` exposing query parameters in logs.
497
+
498
+ ### V-14: Missing Row-Level Security
499
+
500
+ **Risk**: High | **CVSS**: 7.5
501
+ **Description**: Multi-tenant applications relying solely on application logic for
502
+ data isolation. A single bug in the WHERE clause exposes all tenants' data.
503
+
504
+ ### V-15: Weak TLS Configuration
505
+
506
+ **Risk**: Medium | **CVSS**: 5.9
507
+ **Description**: Database accepting TLS 1.0/1.1, weak cipher suites, or not verifying
508
+ client certificates when required.
509
+
510
+ ---
511
+
512
+ ## 5. Security Checklist
513
+
514
+ ### Network & Access
515
+
516
+ - [ ] Database ports not accessible from public internet
517
+ - [ ] Security groups restrict access to application subnets only
518
+ - [ ] VPN or bastion host required for administrative access
519
+ - [ ] Private subnets with no public IP for database instances
520
+ - [ ] DNS resolution for database endpoints uses private DNS
521
+
522
+ ### Authentication & Authorization
523
+
524
+ - [ ] No default or empty passwords on any database account
525
+ - [ ] Each application/service has its own dedicated database account
526
+ - [ ] Superuser/root accounts disabled or restricted to local access only
527
+ - [ ] Password hashing uses SCRAM-SHA-256 (PostgreSQL) or caching_sha2_password (MySQL)
528
+ - [ ] Application accounts have SELECT/INSERT/UPDATE/DELETE only on required tables
529
+ - [ ] DDL privileges (CREATE/ALTER/DROP) restricted to migration/admin accounts
530
+ - [ ] Connection limits set per user role
531
+ - [ ] Account expiration dates set for temporary/contractor access
532
+ - [ ] Regular access reviews performed (quarterly minimum)
533
+ - [ ] Service accounts cannot perform interactive login
534
+
535
+ ### Encryption
536
+
537
+ - [ ] TLS 1.2+ required for all connections (reject plaintext)
538
+ - [ ] Server certificates verified by clients (sslmode=verify-full)
539
+ - [ ] Data encrypted at rest (TDE, filesystem encryption, or cloud KMS)
540
+ - [ ] Backup files encrypted with AES-256
541
+ - [ ] WAL/binlog encryption enabled
542
+ - [ ] Encryption keys rotated on defined schedule
543
+
544
+ ### Monitoring & Logging
545
+
546
+ - [ ] Authentication attempts logged (success and failure)
547
+ - [ ] DDL operations logged
548
+ - [ ] Privilege changes logged (GRANT/REVOKE)
549
+ - [ ] Sensitive table access logged (pgAudit or equivalent)
550
+ - [ ] Logs shipped to centralized SIEM
551
+ - [ ] Alerting configured for suspicious patterns (brute force, bulk exports)
552
+ - [ ] Log retention meets compliance requirements (90+ days)
553
+
554
+ ### Backup & Recovery
555
+
556
+ - [ ] Automated backups configured and tested
557
+ - [ ] Backup restoration tested at least quarterly
558
+ - [ ] Backup files encrypted and stored in separate security zone
559
+ - [ ] Point-in-time recovery (PITR) enabled
560
+ - [ ] Backup credentials differ from application credentials
561
+
562
+ ---
563
+
564
+ ## 6. Tools & Automation
565
+
566
+ ### 6.1 pgAudit (PostgreSQL)
567
+
568
+ pgAudit provides detailed session and object audit logging via PostgreSQL's standard
569
+ logging facility. It goes beyond standard logging by capturing the details of what
570
+ happened while the database was satisfying a request, not just what was requested.
571
+
572
+ ```sql
573
+ -- Install pgAudit
574
+ CREATE EXTENSION pgaudit;
575
+
576
+ -- Configure in postgresql.conf
577
+ -- pgaudit.log = 'write, ddl, role'
578
+ -- pgaudit.log_catalog = off
579
+ -- pgaudit.log_relation = on
580
+
581
+ -- Object-level auditing for sensitive tables
582
+ ALTER TABLE financial_records SET (pgaudit.log = 'read, write');
583
+ ```
584
+
585
+ Key capabilities:
586
+ - Session-level logging (all statements by specific users).
587
+ - Object-level logging (all access to specific tables).
588
+ - Compliance-ready output format for PCI-DSS, SOC2, HIPAA.
589
+ - Integrates with PostgreSQL 14-18.
590
+ - Source: https://www.pgaudit.org/
591
+
592
+ ### 6.2 MongoDB Audit Log
593
+
594
+ ```yaml
595
+ # mongod.conf audit configuration
596
+ auditLog:
597
+ destination: file
598
+ format: JSON
599
+ path: /var/log/mongodb/audit.json
600
+ filter: '{
601
+ atype: {
602
+ $in: [
603
+ "authenticate", "createUser", "dropUser",
604
+ "grantRolesToUser", "revokeRolesFromUser",
605
+ "createCollection", "dropCollection",
606
+ "createDatabase", "dropDatabase"
607
+ ]
608
+ }
609
+ }'
610
+ ```
611
+
612
+ MongoDB Enterprise and Atlas provide built-in audit logging for authentication events,
613
+ CRUD operations, and schema changes. For Community Edition, use mongoaudit
614
+ (https://github.com/stampery/mongoaudit) for security scanning.
615
+
616
+ ### 6.3 Database Vulnerability Scanners
617
+
618
+ | Tool | Database | Type | Key Features |
619
+ |------|----------|------|-------------|
620
+ | **pgaudit_analyze** | PostgreSQL | Audit analysis | Parse and analyze pgAudit logs |
621
+ | **mongoaudit** | MongoDB | Security scanner | Configuration audit, vulnerability detection |
622
+ | **mysqltuner** | MySQL | Security + perf | Privilege analysis, security recommendations |
623
+ | **redis-check** | Redis | Security audit | Auth check, exposure analysis |
624
+ | **Qualys** | All | Commercial | Compliance scanning, vulnerability assessment |
625
+ | **DbProtect** | All | Commercial | Real-time monitoring, access control |
626
+ | **DataSunrise** | All | Commercial | Activity monitoring, data masking, firewall |
627
+
628
+ ### 6.4 Connection Security Testing
629
+
630
+ ```bash
631
+ # Test PostgreSQL TLS configuration
632
+ openssl s_client -connect db.example.com:5432 -starttls postgres
633
+
634
+ # Verify minimum TLS version
635
+ psql "sslmode=verify-full sslrootcert=/etc/ssl/ca.crt host=db.example.com" \
636
+ -c "SHOW ssl_min_protocol_version;"
637
+
638
+ # Test MongoDB TLS
639
+ openssl s_client -connect db.example.com:27017
640
+
641
+ # Check Redis authentication
642
+ redis-cli -h db.example.com --tls --cert /etc/ssl/client.crt \
643
+ --key /etc/ssl/client.key --cacert /etc/ssl/ca.crt ping
644
+
645
+ # Scan for exposed database ports (internal audit only)
646
+ nmap -sV -p 5432,3306,27017,6379,9200,9300 target_subnet/24
647
+ ```
648
+
649
+ ### 6.5 Automated Security Monitoring
650
+
651
+ ```yaml
652
+ # Prometheus alerting rules for database security
653
+ groups:
654
+ - name: database_security
655
+ rules:
656
+ - alert: DatabaseAuthFailureSpike
657
+ expr: rate(pg_stat_activity_count{state="authentication_failure"}[5m]) > 10
658
+ for: 2m
659
+ labels:
660
+ severity: critical
661
+ annotations:
662
+ summary: "Possible brute-force attack on database"
663
+
664
+ - alert: DatabaseConnectionFromUnknownIP
665
+ expr: pg_stat_activity_client_addr != "10.0.1.0/24"
666
+ for: 0m
667
+ labels:
668
+ severity: critical
669
+ annotations:
670
+ summary: "Database connection from unexpected network"
671
+
672
+ - alert: HighVolumeDataRead
673
+ expr: rate(pg_stat_user_tables_seq_tup_read[5m]) > 100000
674
+ for: 5m
675
+ labels:
676
+ severity: warning
677
+ annotations:
678
+ summary: "Abnormally high sequential scan volume - possible exfiltration"
679
+ ```
680
+
681
+ ---
682
+
683
+ ## 7. Platform-Specific Guidance
684
+
685
+ ### 7.1 PostgreSQL
686
+
687
+ **Authentication**: Use SCRAM-SHA-256 exclusively. Never use `trust` or `md5`.
688
+ Configure pg_hba.conf with explicit entries per database/user/network.
689
+
690
+ **Row-Level Security**: Essential for multi-tenant applications. Always use
691
+ `FORCE ROW LEVEL SECURITY` to apply policies even to table owners.
692
+
693
+ **Extensions security**: Audit all installed extensions. Restrict `CREATE EXTENSION`
694
+ to superusers. Disable untrusted language handlers (PL/Python, PL/Perl) unless required.
695
+
696
+ **COPY command**: Restrict server-side COPY TO/FROM to superuser. Application users
697
+ should use `\copy` (client-side) instead.
698
+
699
+ ### 7.2 MongoDB
700
+
701
+ **Authentication**: Always enable `authorization: enabled`. Use SCRAM-SHA-256.
702
+ Consider X.509 certificate authentication for service-to-service communication.
703
+
704
+ **Network binding**: Set `bindIp` to specific internal IPs. The default `bindIpAll`
705
+ is dangerous in any non-development environment.
706
+
707
+ **JavaScript**: Disable with `javascriptEnabled: false` unless your application
708
+ requires server-side JavaScript execution (rare).
709
+
710
+ **Field-Level Encryption**: MongoDB 4.2+ supports Client-Side Field Level Encryption
711
+ (CSFLE) for encrypting sensitive fields before they reach the server. Use this for
712
+ PII, payment data, and health records.
713
+
714
+ **MongoBleed mitigation (CVE-2025-14847)**: Upgrade to patched versions immediately.
715
+ Block public access to port 27017. Disable network compression if not required.
716
+
717
+ ### 7.3 MySQL
718
+
719
+ **Authentication plugins**: Use `caching_sha2_password` (default in MySQL 8.0+).
720
+ Enable `component_validate_password` for password policy enforcement.
721
+
722
+ **Secure installation**: Always run `mysql_secure_installation` which removes
723
+ anonymous accounts, disables remote root login, removes test database.
724
+
725
+ **Binary log encryption**: Enable `binlog_encryption = ON` to encrypt binary logs.
726
+ Enable `innodb_redo_log_encrypt = ON` and `innodb_undo_log_encrypt = ON`.
727
+
728
+ **LOAD DATA LOCAL**: Disable with `local_infile = 0` to prevent client-initiated
729
+ file reads from the server filesystem.
730
+
731
+ ```ini
732
+ # my.cnf security settings
733
+ [mysqld]
734
+ # Authentication
735
+ default_authentication_plugin = caching_sha2_password
736
+ password_history = 5
737
+ password_reuse_interval = 365
738
+
739
+ # Encryption
740
+ require_secure_transport = ON
741
+ ssl_ca = /etc/mysql/ssl/ca.pem
742
+ ssl_cert = /etc/mysql/ssl/server-cert.pem
743
+ ssl_key = /etc/mysql/ssl/server-key.pem
744
+ tls_version = TLSv1.2,TLSv1.3
745
+
746
+ # Hardening
747
+ local_infile = 0
748
+ symbolic_links = 0
749
+ log_raw = OFF
750
+ binlog_encryption = ON
751
+ ```
752
+
753
+ ### 7.4 Redis
754
+
755
+ Redis was designed for use within trusted networks and historically had minimal
756
+ security features. Modern Redis (6.0+) includes ACLs, but hardening is still critical.
757
+
758
+ **ACL system (Redis 6+):**
759
+
760
+ ```redis
761
+ # Define application user with restricted commands and key patterns
762
+ ACL SETUSER app_user on >strong_password ~app:* ~session:* +get +set +del +expire +ttl -@admin -@dangerous
763
+
764
+ # Define monitoring user
765
+ ACL SETUSER monitor on >monitor_password +info +ping +client|list -@all
766
+
767
+ # Disable default user
768
+ ACL SETUSER default off
769
+ ```
770
+
771
+ **Configuration hardening:**
772
+
773
+ ```conf
774
+ # redis.conf security settings
775
+ bind 10.0.1.10 # Bind to specific internal IP
776
+ protected-mode yes # Reject external connections
777
+ requirepass "strong-password" # Set authentication password (pre-ACL fallback)
778
+
779
+ # Disable dangerous commands
780
+ rename-command FLUSHALL ""
781
+ rename-command FLUSHDB ""
782
+ rename-command CONFIG ""
783
+ rename-command DEBUG ""
784
+ rename-command SHUTDOWN ""
785
+
786
+ # TLS
787
+ tls-port 6380
788
+ port 0 # Disable non-TLS port
789
+ tls-cert-file /etc/ssl/redis.crt
790
+ tls-key-file /etc/ssl/redis.key
791
+ tls-ca-cert-file /etc/ssl/ca.crt
792
+ tls-auth-clients yes # Require client certificates
793
+ ```
794
+
795
+ **P2PInfect botnet (2024)**: Targeted internet-exposed Redis instances, installed
796
+ Monero cryptominers and ransomware modules. Underscores the critical need to never
797
+ expose Redis to the internet.
798
+
799
+ ### 7.5 Cloud-Managed Databases
800
+
801
+ **AWS RDS / Aurora:**
802
+ - Enable encryption at rest (KMS). Cannot be enabled after creation.
803
+ - Use IAM database authentication where possible.
804
+ - Enable Performance Insights and Enhanced Monitoring.
805
+ - Configure automated backups with encryption.
806
+ - Use Security Groups, not IP-based rules.
807
+ - Store credentials in AWS Secrets Manager with automatic rotation.
808
+ - Enable Multi-AZ for high availability.
809
+ - Enable audit logging (pgAudit for PostgreSQL, general/slow query logs for MySQL).
810
+
811
+ **Google Cloud SQL:**
812
+ - Enable require_ssl flag for all instances.
813
+ - Use Cloud SQL Auth Proxy instead of direct IP connections.
814
+ - Enable automatic storage encryption (default with Google-managed keys,
815
+ or use CMEK for customer control).
816
+ - Configure authorized networks carefully -- prefer private IP.
817
+ - Use IAM conditions for fine-grained access.
818
+
819
+ **MongoDB Atlas:**
820
+ - Enable IP Access List (whitelist) -- never use 0.0.0.0/0.
821
+ - Enable database auditing in cluster configuration.
822
+ - Use VPC/VNet Peering for private connectivity.
823
+ - Enable encryption at rest with customer-managed keys.
824
+ - Configure LDAP or X.509 authentication.
825
+ - Enable Advanced Threat Protection alerts.
826
+ - Use Atlas Data Lake for analytics to avoid querying production.
827
+
828
+ ---
829
+
830
+ ## 8. Incident Patterns
831
+
832
+ ### 8.1 Database Breach Detection
833
+
834
+ **Indicators of Compromise (IoCs):**
835
+
836
+ - Spike in authentication failures from unfamiliar IP addresses.
837
+ - Abnormally high sequential scan volume or data read rates.
838
+ - Bulk SELECT or COPY/DUMP operations outside normal business hours.
839
+ - New database users or roles created without change tickets.
840
+ - Privilege escalation events (GRANT/REVOKE operations).
841
+ - Queries accessing tables not normally used by the connected application.
842
+ - Database connections from unexpected networks or geographies.
843
+ - Service accounts used for interactive login.
844
+ - Large outbound data transfers from database server.
845
+
846
+ ### 8.2 Data Exfiltration Indicators
847
+
848
+ According to Unit 42's 2025 Incident Response Report, the median time to exfiltration
849
+ is now just two days from initial compromise, with nearly one in five cases seeing data
850
+ stolen within the first hour.
851
+
852
+ **Detection methods:**
853
+
854
+ - Monitor query result sizes -- flag queries returning >10,000 rows.
855
+ - Track connection duration -- long-lived sessions may indicate data staging.
856
+ - Alert on COPY TO, pg_dump, mysqldump, mongodump from non-backup users.
857
+ - Monitor outbound network traffic volume from database servers.
858
+ - Use Data Loss Prevention (DLP) tools on database egress points.
859
+ - Compare query patterns against baseline using anomaly detection.
860
+
861
+ ### 8.3 Incident Response Playbook
862
+
863
+ 1. **Contain**: Immediately revoke compromised credentials. Block suspicious IPs
864
+ at firewall level. Do not shut down the database (preserve evidence).
865
+ 2. **Preserve**: Capture database logs, connection logs, query history.
866
+ Snapshot the database for forensic analysis.
867
+ 3. **Assess**: Determine scope -- which tables were accessed, what data was read,
868
+ what was modified. Check for backdoor accounts or triggers.
869
+ 4. **Eradicate**: Remove unauthorized accounts, backdoors, and malicious triggers
870
+ or stored procedures. Rotate all credentials.
871
+ 5. **Recover**: Restore from known-good backup if data integrity is compromised.
872
+ Rebuild from clean state if backdoors are suspected.
873
+ 6. **Report**: Notify affected parties per regulatory requirements (GDPR: 72 hours,
874
+ PCI-DSS: immediately to card brands, state breach notification laws).
875
+
876
+ ---
877
+
878
+ ## 9. Compliance & Standards
879
+
880
+ ### 9.1 PCI-DSS Requirements
881
+
882
+ **Requirement 2 -- Secure System Configuration:**
883
+ - Change all vendor-supplied default passwords before deployment.
884
+ - Disable unnecessary services, protocols, and ports.
885
+ - Configure system security parameters to prevent misuse.
886
+ - Remove all unnecessary default accounts.
887
+
888
+ **Requirement 3 -- Protect Stored Cardholder Data:**
889
+ - Keep cardholder data storage to a minimum with data retention policies.
890
+ - Do not store sensitive authentication data after authorization.
891
+ - Mask PAN when displayed (show first six and last four digits maximum).
892
+ - Render PAN unreadable anywhere it is stored (encryption, hashing, truncation).
893
+ - Protect encryption keys against disclosure and misuse.
894
+
895
+ **Requirement 8 -- Identify and Authenticate Access:**
896
+ - Assign unique IDs to each person with computer access.
897
+ - Implement multi-factor authentication for remote access.
898
+ - Encrypt all passwords during transmission and storage.
899
+ - Remove/disable inactive user accounts within 90 days.
900
+
901
+ **Requirement 10 -- Log and Monitor Access:**
902
+ - Implement audit trails for all access to system components.
903
+ - Record user identification, event type, date/time, success/failure.
904
+ - Review logs daily using automated tools.
905
+ - Retain audit trail history for at least one year, with three months immediately available.
906
+
907
+ ### 9.2 SOC2 Database Controls
908
+
909
+ **Security (Common Criteria):**
910
+ - CC6.1: Logical access security over information assets (database access controls).
911
+ - CC6.3: Role-based access, least privilege, segregation of duties.
912
+ - CC6.6: Restrictions on software installation (database extensions).
913
+ - CC7.2: Monitor system components for anomalies (database activity monitoring).
914
+
915
+ **Availability:**
916
+ - A1.2: Environmental protections (high availability, failover).
917
+ - Backup and recovery procedures tested regularly.
918
+
919
+ **Confidentiality:**
920
+ - C1.1: Identify and protect confidential information (encryption at rest).
921
+ - C1.2: Dispose of confidential information when no longer needed.
922
+
923
+ ### 9.3 GDPR Data Storage Requirements
924
+
925
+ - **Data minimization** (Article 5(1)(c)): Only store personal data that is necessary.
926
+ - **Storage limitation** (Article 5(1)(e)): Define retention periods, delete data when
927
+ no longer needed.
928
+ - **Integrity and confidentiality** (Article 5(1)(f)): Encryption at rest and in transit,
929
+ access controls, protection against unauthorized processing.
930
+ - **Right to erasure** (Article 17): Implement the ability to delete individual records
931
+ on request. This includes backups -- consider backup rotation cycles.
932
+ - **Data breach notification** (Articles 33-34): Report breaches to supervisory authority
933
+ within 72 hours. Notify affected individuals without undue delay if high risk.
934
+ - **Data Protection Impact Assessment** (Article 35): Required for high-risk processing
935
+ (large-scale processing of sensitive data).
936
+
937
+ **PostgreSQL GDPR implementation patterns:**
938
+
939
+ ```sql
940
+ -- Data retention: automatic cleanup of expired records
941
+ CREATE OR REPLACE FUNCTION enforce_retention() RETURNS void AS $$
942
+ BEGIN
943
+ DELETE FROM user_activity_logs WHERE created_at < NOW() - INTERVAL '2 years';
944
+ DELETE FROM session_data WHERE expires_at < NOW();
945
+ RAISE NOTICE 'Retention policy enforced at %', NOW();
946
+ END;
947
+ $$ LANGUAGE plpgsql SECURITY DEFINER;
948
+
949
+ -- Right to erasure: anonymize user data
950
+ CREATE OR REPLACE FUNCTION anonymize_user(target_user_id INT) RETURNS void AS $$
951
+ BEGIN
952
+ UPDATE users SET
953
+ email = 'redacted-' || target_user_id || '@deleted.local',
954
+ name = 'REDACTED',
955
+ phone = NULL,
956
+ address = NULL,
957
+ anonymized_at = NOW()
958
+ WHERE id = target_user_id;
959
+
960
+ DELETE FROM user_sessions WHERE user_id = target_user_id;
961
+ DELETE FROM user_tokens WHERE user_id = target_user_id;
962
+ END;
963
+ $$ LANGUAGE plpgsql SECURITY DEFINER;
964
+ ```
965
+
966
+ ---
967
+
968
+ ## 10. Code Examples
969
+
970
+ ### 10.1 Secure Connection Configuration -- TypeScript/Knex
971
+
972
+ ```typescript
973
+ // VULNERABLE: No SSL, credentials hardcoded
974
+ const db = require('knex')({
975
+ client: 'pg',
976
+ connection: {
977
+ host: 'db.example.com',
978
+ user: 'root', // superuser!
979
+ password: 'password123', // hardcoded!
980
+ database: 'production',
981
+ ssl: false, // plaintext!
982
+ },
983
+ });
984
+
985
+ // SECURE: SSL verified, credentials from secrets manager, least privilege
986
+ import knex from 'knex';
987
+ import { SecretsManager } from '@aws-sdk/client-secrets-manager';
988
+ import fs from 'fs';
989
+
990
+ async function createSecureDb(): Promise<knex.Knex> {
991
+ const sm = new SecretsManager({ region: 'us-east-1' });
992
+ const secret = await sm.getSecretValue({ SecretId: 'prod/db/app-credentials' });
993
+ const creds = JSON.parse(secret.SecretString!);
994
+
995
+ return knex({
996
+ client: 'pg',
997
+ connection: {
998
+ host: creds.host,
999
+ port: creds.port,
1000
+ user: creds.username, // least-privilege app user
1001
+ password: creds.password, // from secrets manager
1002
+ database: creds.dbname,
1003
+ ssl: {
1004
+ rejectUnauthorized: true, // verify server certificate
1005
+ ca: fs.readFileSync('/etc/ssl/certs/rds-ca-bundle.pem').toString(),
1006
+ },
1007
+ },
1008
+ pool: { min: 2, max: 10 },
1009
+ acquireConnectionTimeout: 10000,
1010
+ });
1011
+ }
1012
+ ```
1013
+
1014
+ ### 10.2 Secure Connection Configuration -- Python/SQLAlchemy
1015
+
1016
+ ```python
1017
+ # VULNERABLE: No SSL, credentials in code, superuser
1018
+ from sqlalchemy import create_engine
1019
+
1020
+ engine = create_engine(
1021
+ "postgresql://postgres:admin@db.example.com:5432/production"
1022
+ )
1023
+
1024
+ # SECURE: SSL verified, credentials from secrets manager, connection limits
1025
+ import json
1026
+ import ssl
1027
+ import boto3
1028
+ from sqlalchemy import create_engine, event
1029
+ from sqlalchemy.pool import QueuePool
1030
+
1031
+ def get_db_credentials():
1032
+ client = boto3.client('secretsmanager', region_name='us-east-1')
1033
+ secret = client.get_secret_value(SecretId='prod/db/app-credentials')
1034
+ return json.loads(secret['SecretString'])
1035
+
1036
+ def create_secure_engine():
1037
+ creds = get_db_credentials()
1038
+
1039
+ ssl_context = ssl.create_default_context(
1040
+ cafile='/etc/ssl/certs/rds-ca-bundle.pem'
1041
+ )
1042
+ ssl_context.check_hostname = True
1043
+ ssl_context.verify_mode = ssl.CERT_REQUIRED
1044
+ ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
1045
+
1046
+ engine = create_engine(
1047
+ f"postgresql://{creds['username']}:{creds['password']}"
1048
+ f"@{creds['host']}:{creds['port']}/{creds['dbname']}",
1049
+ connect_args={'ssl_context': ssl_context},
1050
+ poolclass=QueuePool,
1051
+ pool_size=5,
1052
+ max_overflow=10,
1053
+ pool_timeout=30,
1054
+ pool_recycle=1800, # recycle connections every 30 min
1055
+ pool_pre_ping=True, # validate connections before use
1056
+ )
1057
+
1058
+ # Log slow queries for monitoring
1059
+ @event.listens_for(engine, "before_cursor_execute")
1060
+ def log_query_start(conn, cursor, statement, parameters, context, executemany):
1061
+ conn.info.setdefault('query_start_time', []).append(time.time())
1062
+
1063
+ return engine
1064
+ ```
1065
+
1066
+ ### 10.3 SQL Injection Prevention at Database Level
1067
+
1068
+ ```sql
1069
+ -- VULNERABLE: Dynamic SQL with concatenation in stored procedure
1070
+ CREATE OR REPLACE FUNCTION get_user_orders(user_email TEXT)
1071
+ RETURNS TABLE(order_id INT, total NUMERIC) AS $$
1072
+ BEGIN
1073
+ RETURN QUERY EXECUTE
1074
+ 'SELECT id, total FROM orders WHERE email = ''' || user_email || '''';
1075
+ END;
1076
+ $$ LANGUAGE plpgsql;
1077
+ -- Attack: get_user_orders($$'; DROP TABLE orders; --$$)
1078
+
1079
+ -- SECURE: Parameterized dynamic SQL
1080
+ CREATE OR REPLACE FUNCTION get_user_orders(user_email TEXT)
1081
+ RETURNS TABLE(order_id INT, total NUMERIC) AS $$
1082
+ BEGIN
1083
+ RETURN QUERY EXECUTE
1084
+ 'SELECT id, total FROM orders WHERE email = $1'
1085
+ USING user_email;
1086
+ END;
1087
+ $$ LANGUAGE plpgsql;
1088
+ ```
1089
+
1090
+ ### 10.4 Row-Level Security for Multi-Tenant Applications
1091
+
1092
+ ```sql
1093
+ -- Create tenant isolation with RLS
1094
+ CREATE TABLE tenant_data (
1095
+ id SERIAL PRIMARY KEY,
1096
+ tenant_id INT NOT NULL,
1097
+ data JSONB NOT NULL,
1098
+ created_at TIMESTAMPTZ DEFAULT NOW()
1099
+ );
1100
+
1101
+ -- Enable and force RLS
1102
+ ALTER TABLE tenant_data ENABLE ROW LEVEL SECURITY;
1103
+ ALTER TABLE tenant_data FORCE ROW LEVEL SECURITY;
1104
+
1105
+ -- Isolation policy: each tenant sees only their data
1106
+ CREATE POLICY tenant_isolation ON tenant_data
1107
+ FOR ALL
1108
+ USING (tenant_id = current_setting('app.tenant_id')::INT)
1109
+ WITH CHECK (tenant_id = current_setting('app.tenant_id')::INT);
1110
+
1111
+ -- Application sets tenant context per request
1112
+ -- SET LOCAL ensures it is transaction-scoped
1113
+ BEGIN;
1114
+ SELECT set_config('app.tenant_id', '42', true); -- true = local to transaction
1115
+ SELECT * FROM tenant_data; -- only sees tenant 42's data
1116
+ COMMIT;
1117
+ ```
1118
+
1119
+ ### 10.5 Complete Least-Privilege Role Hierarchy
1120
+
1121
+ ```sql
1122
+ -- Base roles (no login capability)
1123
+ CREATE ROLE app_readonly NOLOGIN;
1124
+ CREATE ROLE app_readwrite NOLOGIN;
1125
+ CREATE ROLE app_admin NOLOGIN;
1126
+
1127
+ -- Schema permissions
1128
+ GRANT USAGE ON SCHEMA public TO app_readonly, app_readwrite, app_admin;
1129
+
1130
+ -- Read-only: SELECT on all tables
1131
+ GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_readonly;
1132
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_readonly;
1133
+
1134
+ -- Read-write: SELECT, INSERT, UPDATE, DELETE (no DDL)
1135
+ GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_readwrite;
1136
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO app_readwrite;
1137
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public
1138
+ GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_readwrite;
1139
+
1140
+ -- Admin: adds DDL capabilities
1141
+ GRANT app_readwrite TO app_admin;
1142
+ GRANT CREATE ON SCHEMA public TO app_admin;
1143
+
1144
+ -- Login users inherit from base roles
1145
+ CREATE USER api_service WITH LOGIN PASSWORD 'from-secrets-manager'
1146
+ CONNECTION LIMIT 20 IN ROLE app_readwrite;
1147
+
1148
+ CREATE USER analyst WITH LOGIN PASSWORD 'from-secrets-manager'
1149
+ CONNECTION LIMIT 5 IN ROLE app_readonly;
1150
+
1151
+ CREATE USER migrator WITH LOGIN PASSWORD 'from-secrets-manager'
1152
+ CONNECTION LIMIT 2 IN ROLE app_admin
1153
+ VALID UNTIL '2025-06-30'; -- temporary elevated access
1154
+ ```
1155
+
1156
+ ---
1157
+
1158
+ ## References
1159
+
1160
+ - OWASP Database Security Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Database_Security_Cheat_Sheet.html
1161
+ - OWASP SQL Injection Prevention: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
1162
+ - pgAudit -- PostgreSQL Audit Extension: https://www.pgaudit.org/
1163
+ - MongoDB Security Checklist: https://www.mongodb.com/docs/manual/administration/security-checklist/
1164
+ - Redis Security Documentation: https://redis.io/docs/management/security/
1165
+ - CIS Benchmarks for PostgreSQL, MySQL, MongoDB: https://www.cisecurity.org/cis-benchmarks
1166
+ - AWS RDS Security Best Practices: https://aws.amazon.com/blogs/database/overview-of-security-best-practices-for-amazon-rds-for-postgresql-and-amazon-aurora-postgresql-compatible-edition/
1167
+ - Microsoft 250M Record Breach (Comparitech): https://www.comparitech.com/blog/information-security/microsoft-customer-service-data-leak/
1168
+ - Shanghai Police Breach (The Register): https://www.theregister.com/2022/07/05/shanghai_police_database_for_sell/
1169
+ - MongoBleed CVE-2025-14847 (Arctic Wolf): https://arcticwolf.com/resources/blog/cve-2025-14847/
1170
+ - Redis CVE-2025-49844 (Wiz): https://www.wiz.io/blog/wiz-research-redis-rce-cve-2025-49844
1171
+ - Verizon 2025 Data Breach Investigations Report: https://www.verizon.com/business/resources/reports/dbir/