@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.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,1074 @@
|
|
|
1
|
+
# Threat Modeling — Security Expertise Module
|
|
2
|
+
|
|
3
|
+
> Audience: AI agents performing threat modeling during planning and design phases.
|
|
4
|
+
> Scope: Methodologies, tools, vulnerability catalogs, compliance mapping, and code examples.
|
|
5
|
+
> Sources: OWASP, NIST SP 800-154, Microsoft SDL, Shostack Four-Question Framework,
|
|
6
|
+
> MITRE ATT&CK, IBM Cost of a Data Breach 2025, Security Compass, Threagile, pytm.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Threat Landscape
|
|
11
|
+
|
|
12
|
+
### 1.1 Why Threat Modeling Matters
|
|
13
|
+
|
|
14
|
+
Threat modeling is the structured process of identifying, quantifying, and addressing
|
|
15
|
+
security threats to a system. It belongs in the earliest design phases — before code is
|
|
16
|
+
written — because architectural flaws are orders of magnitude more expensive to fix
|
|
17
|
+
after deployment than during design.
|
|
18
|
+
|
|
19
|
+
**Key statistics (IBM Cost of a Data Breach Report 2025):**
|
|
20
|
+
|
|
21
|
+
- Average cost of a data breach: **$4.88 million** globally.
|
|
22
|
+
- Organizations with high DevSecOps adoption saved **$1.13 million** per breach.
|
|
23
|
+
- AI and automation in prevention workflows yield **$2.2 million** in savings.
|
|
24
|
+
- Incident response planning saves **$1.23 million** on average.
|
|
25
|
+
- Encryption lowers breach costs by approximately **$360,000**.
|
|
26
|
+
- Organizations using threat intelligence saved **$211,906** per breach.
|
|
27
|
+
|
|
28
|
+
**ROI of threat modeling (Security Compass):**
|
|
29
|
+
|
|
30
|
+
A 2-hour threat modeling session that prevents a design flaw requiring 100 hours of
|
|
31
|
+
refactoring results in $10,000 saved for a $200 investment — an ROI of 4,900%.
|
|
32
|
+
A system without threat modeling faces roughly a 20% annual probability of a $500K breach.
|
|
33
|
+
|
|
34
|
+
### 1.2 Breaches That Threat Modeling Would Have Prevented
|
|
35
|
+
|
|
36
|
+
| Breach | Year | Root Cause | Threat Model Gap |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| Equifax | 2017 | Unpatched Apache Struts, flat network | No network segmentation model; no patch-management threat identified |
|
|
39
|
+
| Capital One | 2019 | Misconfigured WAF/firewall in AWS | No cloud trust-boundary analysis; SSRF not modeled |
|
|
40
|
+
| SolarWinds | 2020 | Compromised build pipeline | No supply-chain threat model; build integrity not in scope |
|
|
41
|
+
| Target | 2013 | HVAC vendor credential compromise | Third-party trust boundary missing; lateral movement unmodeled |
|
|
42
|
+
| Uber | 2016 | Hardcoded AWS keys in GitHub repo | No secrets-in-code threat; no data flow for CI/CD assets |
|
|
43
|
+
| Log4Shell | 2021 | JNDI injection in Log4j | Deserialization/injection threat absent from library DFD |
|
|
44
|
+
|
|
45
|
+
Each of these incidents involved architectural or design-level weaknesses that a
|
|
46
|
+
structured threat model — applied during the design phase — would have surfaced.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 2. Core Security Principles
|
|
51
|
+
|
|
52
|
+
### 2.1 Think Like an Attacker
|
|
53
|
+
|
|
54
|
+
Adopt an adversarial mindset. For every component, ask: "How would I abuse this?"
|
|
55
|
+
Consider both external attackers and malicious insiders.
|
|
56
|
+
|
|
57
|
+
### 2.2 Identify Trust Boundaries
|
|
58
|
+
|
|
59
|
+
A trust boundary exists wherever the level of trust changes — between a public network
|
|
60
|
+
and a private subnet, between a user's browser and the API gateway, between
|
|
61
|
+
microservices in different security domains. Every trust boundary crossing is a
|
|
62
|
+
potential attack surface.
|
|
63
|
+
|
|
64
|
+
### 2.3 Map Data Flows
|
|
65
|
+
|
|
66
|
+
Document how data moves through the system: ingress points, processing stages,
|
|
67
|
+
storage locations, and egress points. Use Data Flow Diagrams (DFDs) at minimum.
|
|
68
|
+
Classify data by sensitivity (public, internal, confidential, restricted).
|
|
69
|
+
|
|
70
|
+
### 2.4 Enumerate Threats Systematically
|
|
71
|
+
|
|
72
|
+
Use a structured methodology (STRIDE, PASTA, LINDDUN) rather than ad-hoc
|
|
73
|
+
brainstorming. Structured approaches ensure coverage and repeatability.
|
|
74
|
+
|
|
75
|
+
### 2.5 Prioritize by Risk
|
|
76
|
+
|
|
77
|
+
Risk = Likelihood x Impact. Use a consistent scoring model:
|
|
78
|
+
|
|
79
|
+
| Likelihood | Description |
|
|
80
|
+
|---|---|
|
|
81
|
+
| 5 — Almost Certain | Exploit is publicly available, no auth required |
|
|
82
|
+
| 4 — Likely | Known vulnerability, moderate skill needed |
|
|
83
|
+
| 3 — Possible | Requires insider knowledge or chained exploits |
|
|
84
|
+
| 2 — Unlikely | Requires significant resources or zero-day |
|
|
85
|
+
| 1 — Rare | Theoretical, no known exploit path |
|
|
86
|
+
|
|
87
|
+
| Impact | Description |
|
|
88
|
+
|---|---|
|
|
89
|
+
| 5 — Critical | Full system compromise, mass data exfiltration |
|
|
90
|
+
| 4 — High | Significant data loss, major service disruption |
|
|
91
|
+
| 3 — Moderate | Limited data exposure, partial service impact |
|
|
92
|
+
| 2 — Low | Minor information leak, degraded performance |
|
|
93
|
+
| 1 — Negligible | No data loss, cosmetic impact only |
|
|
94
|
+
|
|
95
|
+
Risk Score = Likelihood x Impact. Scores 15-25: immediate mitigation required.
|
|
96
|
+
Scores 8-14: planned mitigation. Scores 1-7: accept with documentation.
|
|
97
|
+
|
|
98
|
+
### 2.6 Mitigate or Accept with Documentation
|
|
99
|
+
|
|
100
|
+
Every identified threat must have a disposition: mitigate (implement control),
|
|
101
|
+
transfer (insurance, SLA), accept (documented risk acceptance with sign-off),
|
|
102
|
+
or avoid (remove the feature/component).
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 3. Implementation Patterns
|
|
107
|
+
|
|
108
|
+
### 3.1 STRIDE Methodology
|
|
109
|
+
|
|
110
|
+
Developed by Microsoft. Maps six threat categories to system components.
|
|
111
|
+
|
|
112
|
+
| Category | Threat | Property Violated | Example |
|
|
113
|
+
|---|---|---|---|
|
|
114
|
+
| **S**poofing | Impersonating a user or system | Authentication | Attacker uses stolen JWT to call API as admin |
|
|
115
|
+
| **T**ampering | Modifying data in transit or at rest | Integrity | Man-in-the-middle alters API response payloads |
|
|
116
|
+
| **R**epudiation | Denying an action occurred | Non-repudiation | User disputes a financial transaction; no audit log exists |
|
|
117
|
+
| **I**nformation Disclosure | Exposing data to unauthorized parties | Confidentiality | Database backup stored in public S3 bucket |
|
|
118
|
+
| **D**enial of Service | Making system unavailable | Availability | Amplification attack floods API gateway |
|
|
119
|
+
| **E**levation of Privilege | Gaining unauthorized access level | Authorization | IDOR allows regular user to access admin endpoints |
|
|
120
|
+
|
|
121
|
+
**How to apply STRIDE:**
|
|
122
|
+
|
|
123
|
+
1. Draw a DFD of the system (processes, data stores, data flows, external entities).
|
|
124
|
+
2. For each element in the DFD, walk through all six STRIDE categories.
|
|
125
|
+
3. For each applicable threat, document: threat description, attack vector,
|
|
126
|
+
affected component, risk score, and proposed mitigation.
|
|
127
|
+
4. Review with development and security teams.
|
|
128
|
+
|
|
129
|
+
### 3.2 PASTA — Process for Attack Simulation and Threat Analysis
|
|
130
|
+
|
|
131
|
+
PASTA is a seven-stage risk-centric methodology that connects technical threats
|
|
132
|
+
to business impact. Developed by VerSprite.
|
|
133
|
+
|
|
134
|
+
**Stage 1 — Define Objectives:**
|
|
135
|
+
Identify business objectives, security requirements, compliance mandates
|
|
136
|
+
(HIPAA, GDPR, PCI-DSS), and data classification of assets in scope.
|
|
137
|
+
|
|
138
|
+
**Stage 2 — Define Technical Scope:**
|
|
139
|
+
Inventory all components: servers, databases, APIs, third-party services,
|
|
140
|
+
network segments, cloud resources. Map the full technology stack.
|
|
141
|
+
|
|
142
|
+
**Stage 3 — Application Decomposition / Data Flow Analysis:**
|
|
143
|
+
Create DFDs, identify trust boundaries, enumerate entry points,
|
|
144
|
+
map data flows across components.
|
|
145
|
+
|
|
146
|
+
**Stage 4 — Threat Analysis:**
|
|
147
|
+
Identify threats using threat intelligence feeds, MITRE ATT&CK,
|
|
148
|
+
CAPEC attack patterns, and analyst expertise. Correlate threats
|
|
149
|
+
with the attack surface identified in stages 2-3.
|
|
150
|
+
|
|
151
|
+
**Stage 5 — Vulnerability Analysis:**
|
|
152
|
+
Map known vulnerabilities (CVEs) to system components. Perform
|
|
153
|
+
vulnerability scanning. Correlate vulnerabilities with threats from stage 4.
|
|
154
|
+
|
|
155
|
+
**Stage 6 — Attack Modeling and Simulation:**
|
|
156
|
+
Build attack trees. Identify viable attack paths by mapping vulnerabilities
|
|
157
|
+
to threat scenarios. Simulate attacks to validate exploitability.
|
|
158
|
+
|
|
159
|
+
**Stage 7 — Risk and Impact Analysis:**
|
|
160
|
+
Quantify business impact of each viable attack path. Calculate residual risk.
|
|
161
|
+
Prioritize countermeasures by risk-adjusted ROI. Produce actionable
|
|
162
|
+
remediation plan with owners and deadlines.
|
|
163
|
+
|
|
164
|
+
### 3.3 LINDDUN — Privacy Threat Modeling
|
|
165
|
+
|
|
166
|
+
LINDDUN focuses specifically on privacy threats. Essential for GDPR, HIPAA,
|
|
167
|
+
and CCPA compliance.
|
|
168
|
+
|
|
169
|
+
| Category | Privacy Threat |
|
|
170
|
+
|---|---|
|
|
171
|
+
| **L**inkability | Ability to link two or more items of interest related to a data subject |
|
|
172
|
+
| **I**dentifiability | Ability to identify a data subject from a data set |
|
|
173
|
+
| **N**on-repudiation | Inability to deny having performed an action (privacy concern) |
|
|
174
|
+
| **D**etectability | Ability to detect whether an item of interest exists |
|
|
175
|
+
| **D**isclosure of information | Exposure of personal data to unauthorized parties |
|
|
176
|
+
| **U**nawareness | Data subject is unaware of data collection and processing |
|
|
177
|
+
| **N**on-compliance | Failure to comply with legislation, regulations, or policy |
|
|
178
|
+
|
|
179
|
+
**When to use LINDDUN:** Any system that processes personal data, health records,
|
|
180
|
+
financial information, or operates under privacy regulations.
|
|
181
|
+
|
|
182
|
+
### 3.4 Data Flow Diagrams (DFDs)
|
|
183
|
+
|
|
184
|
+
DFDs are the foundational artifact of threat modeling. Use standard notation:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
Element Symbols:
|
|
188
|
+
[External Entity] = Rectangle (users, third-party systems)
|
|
189
|
+
(Process) = Circle (application logic, services)
|
|
190
|
+
[=Data Store=] = Parallel lines (databases, file systems, caches)
|
|
191
|
+
--> Data Flow --> = Arrow (HTTP request, DB query, message)
|
|
192
|
+
--- Trust Boundary -- = Dashed line (network perimeter, auth boundary)
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Levels of DFD detail:**
|
|
196
|
+
|
|
197
|
+
- **Level 0 (Context):** Single process, all external entities, major data flows.
|
|
198
|
+
- **Level 1 (System):** Major subsystems decomposed, trust boundaries shown.
|
|
199
|
+
- **Level 2 (Component):** Individual services, databases, queues, caches.
|
|
200
|
+
|
|
201
|
+
### 3.5 Attack Trees
|
|
202
|
+
|
|
203
|
+
Formalized by Bruce Schneier (1999). Attack trees model the goal of an attacker
|
|
204
|
+
as the root node and decompose it into sub-goals using AND/OR logic.
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
Root: Steal User Credentials
|
|
208
|
+
├── OR: Phishing Attack
|
|
209
|
+
│ ├── AND: Craft convincing email
|
|
210
|
+
│ └── AND: Host fake login page
|
|
211
|
+
├── OR: Credential Stuffing
|
|
212
|
+
│ ├── AND: Obtain breached credential list
|
|
213
|
+
│ └── AND: Automate login attempts
|
|
214
|
+
├── OR: SQL Injection on Login Form
|
|
215
|
+
│ └── AND: Find unparameterized query
|
|
216
|
+
└── OR: Intercept Network Traffic
|
|
217
|
+
├── AND: Perform ARP spoofing
|
|
218
|
+
└── AND: Capture TLS-downgraded session
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Assign attributes to leaf nodes: cost, time, skill level, detectability.
|
|
222
|
+
Propagate values up: OR nodes take the minimum (easiest path);
|
|
223
|
+
AND nodes take the sum (all steps required).
|
|
224
|
+
|
|
225
|
+
### 3.6 Threat Modeling for APIs
|
|
226
|
+
|
|
227
|
+
APIs are the primary attack surface in modern architectures. Key threats:
|
|
228
|
+
|
|
229
|
+
1. **Broken Object Level Authorization (BOLA):** Accessing other users' resources
|
|
230
|
+
by manipulating object IDs in API calls.
|
|
231
|
+
2. **Broken Authentication:** Weak token validation, missing rate limiting on auth
|
|
232
|
+
endpoints, token leakage in URLs or logs.
|
|
233
|
+
3. **Excessive Data Exposure:** API returns full object when client only needs
|
|
234
|
+
subset of fields. Sensitive fields leak to unauthorized consumers.
|
|
235
|
+
4. **Lack of Rate Limiting:** No throttling enables brute-force, credential
|
|
236
|
+
stuffing, and denial-of-service attacks.
|
|
237
|
+
5. **Mass Assignment:** API accepts and binds parameters the client should not
|
|
238
|
+
control (e.g., `role`, `isAdmin`).
|
|
239
|
+
6. **SSRF via API:** API fetches user-supplied URLs without validation, enabling
|
|
240
|
+
access to internal services and metadata endpoints.
|
|
241
|
+
|
|
242
|
+
### 3.7 Threat Modeling for Microservices
|
|
243
|
+
|
|
244
|
+
Microservices amplify the attack surface through inter-service communication,
|
|
245
|
+
distributed data stores, and dynamic service discovery.
|
|
246
|
+
|
|
247
|
+
**Unique microservices threats:**
|
|
248
|
+
|
|
249
|
+
- **Service-to-service impersonation:** Without mTLS, any pod can call any service.
|
|
250
|
+
- **Lateral movement:** Compromising one service grants network access to others.
|
|
251
|
+
- **Data inconsistency attacks:** Exploiting eventual consistency windows.
|
|
252
|
+
- **Sidecar proxy bypass:** Direct container-to-container calls skip Envoy/Istio policies.
|
|
253
|
+
- **Container escape:** Breaking out of container isolation to host OS.
|
|
254
|
+
- **Supply chain (base image) compromise:** Malicious layers in container images.
|
|
255
|
+
- **Secrets sprawl:** Each microservice needs credentials; more services = more secrets.
|
|
256
|
+
|
|
257
|
+
**Mitigations:** Zero-trust networking (mTLS everywhere), network policies
|
|
258
|
+
(Kubernetes NetworkPolicy or Calico), service mesh authorization policies,
|
|
259
|
+
runtime security (Falco), image scanning (Trivy, Grype), secrets management
|
|
260
|
+
(Vault, AWS Secrets Manager).
|
|
261
|
+
|
|
262
|
+
### 3.8 Lightweight Threat Modeling — The Four-Question Framework
|
|
263
|
+
|
|
264
|
+
Developed by Adam Shostack, endorsed by the Threat Modeling Manifesto.
|
|
265
|
+
Suitable for agile teams and rapid iteration.
|
|
266
|
+
|
|
267
|
+
**The Four Questions:**
|
|
268
|
+
|
|
269
|
+
1. **What are we working on?**
|
|
270
|
+
Draw a diagram. Identify components, data flows, trust boundaries.
|
|
271
|
+
|
|
272
|
+
2. **What can go wrong?**
|
|
273
|
+
Use STRIDE, kill chains, or brainstorming. Focus on realistic threats.
|
|
274
|
+
|
|
275
|
+
3. **What are we going to do about it?**
|
|
276
|
+
For each threat: mitigate, accept, transfer, or avoid. Assign owners.
|
|
277
|
+
|
|
278
|
+
4. **Did we do a good enough job?**
|
|
279
|
+
Review completeness. Test assumptions. Update after changes.
|
|
280
|
+
|
|
281
|
+
This framework can be completed in a 60-90 minute session and produces
|
|
282
|
+
actionable results for a single feature or service.
|
|
283
|
+
|
|
284
|
+
### 3.9 Threat Modeling as Code
|
|
285
|
+
|
|
286
|
+
Treat threat models as version-controlled artifacts alongside source code.
|
|
287
|
+
Benefits: diffable, reviewable in PRs, CI/CD integration, automated updates.
|
|
288
|
+
|
|
289
|
+
Tools: Threagile (YAML), pytm (Python), HCL-TM (Terraform-native).
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## 4. Vulnerability Catalog
|
|
294
|
+
|
|
295
|
+
### 4.1 Common Threats by Component
|
|
296
|
+
|
|
297
|
+
#### Web Server / Reverse Proxy
|
|
298
|
+
|
|
299
|
+
| # | Threat | STRIDE | Risk | Mitigation |
|
|
300
|
+
|---|---|---|---|---|
|
|
301
|
+
| 1 | TLS downgrade attack | Information Disclosure | High | Enforce TLS 1.2+, HSTS with preload, disable weak ciphers |
|
|
302
|
+
| 2 | HTTP request smuggling | Tampering | Critical | Normalize parsing between proxy and backend, reject ambiguous requests |
|
|
303
|
+
| 3 | Directory traversal via path manipulation | Information Disclosure | High | Chroot web root, canonicalize paths, deny `..` sequences |
|
|
304
|
+
|
|
305
|
+
#### Database
|
|
306
|
+
|
|
307
|
+
| # | Threat | STRIDE | Risk | Mitigation |
|
|
308
|
+
|---|---|---|---|---|
|
|
309
|
+
| 4 | SQL injection | Tampering, Info Disclosure | Critical | Parameterized queries exclusively, WAF rules, least-privilege DB accounts |
|
|
310
|
+
| 5 | Unencrypted data at rest | Information Disclosure | High | TDE or application-level encryption, KMS-managed keys |
|
|
311
|
+
| 6 | Excessive privileges on service account | Elevation of Privilege | High | Principle of least privilege, separate read/write accounts |
|
|
312
|
+
|
|
313
|
+
#### API Gateway
|
|
314
|
+
|
|
315
|
+
| # | Threat | STRIDE | Risk | Mitigation |
|
|
316
|
+
|---|---|---|---|---|
|
|
317
|
+
| 7 | Missing rate limiting enables DDoS | Denial of Service | High | Token bucket rate limiter, per-client quotas, WAF integration |
|
|
318
|
+
| 8 | JWT algorithm confusion (none/HS256 vs RS256) | Spoofing | Critical | Enforce algorithm in server config, reject `alg: none` |
|
|
319
|
+
| 9 | API key leaked in client-side code | Spoofing | High | Use OAuth2 flows, rotate keys, monitor for leaked credentials |
|
|
320
|
+
|
|
321
|
+
#### Authentication Service
|
|
322
|
+
|
|
323
|
+
| # | Threat | STRIDE | Risk | Mitigation |
|
|
324
|
+
|---|---|---|---|---|
|
|
325
|
+
| 10 | Credential stuffing | Spoofing | High | Rate limiting, CAPTCHA, breached-password checking (HaveIBeenPwned API) |
|
|
326
|
+
| 11 | Session fixation | Spoofing | Medium | Regenerate session ID after authentication, bind to client fingerprint |
|
|
327
|
+
| 12 | Missing MFA | Spoofing | High | Enforce TOTP/WebAuthn for sensitive operations |
|
|
328
|
+
|
|
329
|
+
#### File Storage (S3, GCS, Azure Blob)
|
|
330
|
+
|
|
331
|
+
| # | Threat | STRIDE | Risk | Mitigation |
|
|
332
|
+
|---|---|---|---|---|
|
|
333
|
+
| 13 | Public bucket misconfiguration | Information Disclosure | Critical | Block public access by default, SCPs/org policies, continuous scanning |
|
|
334
|
+
| 14 | Unrestricted file upload (web shell) | Elevation of Privilege | Critical | Validate MIME type + magic bytes, store outside web root, virus scan |
|
|
335
|
+
|
|
336
|
+
#### Message Queue (Kafka, RabbitMQ, SQS)
|
|
337
|
+
|
|
338
|
+
| # | Threat | STRIDE | Risk | Mitigation |
|
|
339
|
+
|---|---|---|---|---|
|
|
340
|
+
| 15 | Message injection / poisoning | Tampering | High | Schema validation, message signing (HMAC), consumer input validation |
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 5. Security Checklist
|
|
345
|
+
|
|
346
|
+
Use this checklist when conducting a threat modeling session.
|
|
347
|
+
|
|
348
|
+
### Preparation
|
|
349
|
+
- [ ] Identify the system or feature in scope
|
|
350
|
+
- [ ] Gather architectural documentation, deployment diagrams, API specs
|
|
351
|
+
- [ ] Identify stakeholders: architect, developer, security engineer, product owner
|
|
352
|
+
- [ ] Choose methodology (STRIDE for security, LINDDUN for privacy, PASTA for risk)
|
|
353
|
+
- [ ] Schedule 60-90 minute session
|
|
354
|
+
|
|
355
|
+
### During the Session
|
|
356
|
+
- [ ] Draw or validate the Data Flow Diagram (DFD)
|
|
357
|
+
- [ ] Mark all trust boundaries on the DFD
|
|
358
|
+
- [ ] Classify data flows by sensitivity (public, internal, confidential, restricted)
|
|
359
|
+
- [ ] Walk through each DFD element against chosen threat categories
|
|
360
|
+
- [ ] For each identified threat, document: description, attack vector, affected component
|
|
361
|
+
- [ ] Score each threat: Likelihood (1-5) x Impact (1-5) = Risk Score
|
|
362
|
+
- [ ] Identify existing controls that already mitigate each threat
|
|
363
|
+
- [ ] Determine residual risk after existing controls
|
|
364
|
+
- [ ] Assign disposition: mitigate, accept, transfer, or avoid
|
|
365
|
+
- [ ] For mitigations: define specific countermeasures with owners and deadlines
|
|
366
|
+
|
|
367
|
+
### Post-Session
|
|
368
|
+
- [ ] Document the threat model in version control
|
|
369
|
+
- [ ] Create tickets/issues for all mitigations with risk-based priority
|
|
370
|
+
- [ ] Review threat model with stakeholders who could not attend
|
|
371
|
+
- [ ] Validate that mitigations are implemented before release
|
|
372
|
+
- [ ] Schedule periodic review (quarterly or on major architecture changes)
|
|
373
|
+
- [ ] Update threat model after any security incident
|
|
374
|
+
- [ ] Cross-reference with compliance requirements (PCI-DSS, HIPAA, SOC 2)
|
|
375
|
+
- [ ] Verify DFD accuracy matches deployed architecture
|
|
376
|
+
- [ ] Check for new threats from updated threat intelligence feeds
|
|
377
|
+
- [ ] Archive threat model artifacts with version and date
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## 6. Tools and Automation
|
|
382
|
+
|
|
383
|
+
### 6.1 Microsoft Threat Modeling Tool
|
|
384
|
+
|
|
385
|
+
- **Platform:** Windows desktop application (free).
|
|
386
|
+
- **Methodology:** STRIDE-based.
|
|
387
|
+
- **Features:** DFD drawing canvas, auto-generated threat list based on element types,
|
|
388
|
+
customizable threat templates, HTML/CSV report generation.
|
|
389
|
+
- **Best for:** Teams in Microsoft ecosystem, Azure-hosted applications.
|
|
390
|
+
- **Limitations:** Windows-only, limited CI/CD integration, manual process.
|
|
391
|
+
|
|
392
|
+
### 6.2 OWASP Threat Dragon
|
|
393
|
+
|
|
394
|
+
- **Platform:** Cross-platform desktop app and web application (free, open source).
|
|
395
|
+
- **Features:** DFD and STRIDE-per-element analysis, threat rule engine, JSON model
|
|
396
|
+
storage (Git-friendly), integration with GitHub/GitLab for model storage.
|
|
397
|
+
- **Best for:** Teams wanting an open-source, cross-platform visual tool.
|
|
398
|
+
- **Repository:** https://github.com/OWASP/threat-dragon
|
|
399
|
+
|
|
400
|
+
### 6.3 IriusRisk
|
|
401
|
+
|
|
402
|
+
- **Platform:** SaaS and on-premises (commercial).
|
|
403
|
+
- **Features:** Questionnaire-driven threat identification, rules engine, integration
|
|
404
|
+
with Jira/Azure DevOps/Jenkins, import from Microsoft TMT, library of threat
|
|
405
|
+
patterns, compliance mapping (PCI-DSS, HIPAA, GDPR).
|
|
406
|
+
- **Best for:** Enterprise teams needing compliance automation and workflow integration.
|
|
407
|
+
|
|
408
|
+
### 6.4 Threagile — Threat Modeling as Code
|
|
409
|
+
|
|
410
|
+
- **Platform:** Cross-platform CLI, Docker image (free, open source).
|
|
411
|
+
- **Input:** YAML model file checked into version control.
|
|
412
|
+
- **Features:** 40+ built-in risk rules, custom rule support, generates PDF/Excel
|
|
413
|
+
risk reports, risk tracking, data flow diagrams, CI/CD pipeline integration.
|
|
414
|
+
- **Best for:** DevSecOps teams wanting threat models in the same repo as code.
|
|
415
|
+
- **Repository:** https://github.com/Threagile/threagile
|
|
416
|
+
|
|
417
|
+
### 6.5 pytm — Pythonic Threat Modeling
|
|
418
|
+
|
|
419
|
+
- **Platform:** Python 3, cross-platform (free, open source, OWASP project).
|
|
420
|
+
- **Input:** Python source file defining the architecture model.
|
|
421
|
+
- **Features:** Auto-generates DFDs (via Graphviz), sequence diagrams, and threat
|
|
422
|
+
reports. Extensible threat library. Elements: TM, Server, ExternalEntity,
|
|
423
|
+
Datastore, Actor, Process, Dataflow, Boundary, Lambda.
|
|
424
|
+
- **Best for:** Developer-centric teams comfortable with Python.
|
|
425
|
+
- **Repository:** https://github.com/OWASP/pytm
|
|
426
|
+
|
|
427
|
+
### 6.6 draw.io Templates
|
|
428
|
+
|
|
429
|
+
- **Platform:** Browser-based, desktop app, VS Code extension (free).
|
|
430
|
+
- **Usage:** Use the built-in "Threat Modeling" shape library or import
|
|
431
|
+
custom stencils for DFD notation. Export as XML (diffable in Git).
|
|
432
|
+
- **Best for:** Quick visual threat models without dedicated tooling.
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## 7. Platform-Specific Guidance
|
|
437
|
+
|
|
438
|
+
### 7.1 Web Application Threat Model Template
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
SYSTEM: E-commerce Web Application
|
|
442
|
+
TRUST BOUNDARIES:
|
|
443
|
+
TB1: Internet <-> WAF/CDN
|
|
444
|
+
TB2: WAF <-> Application Load Balancer
|
|
445
|
+
TB3: ALB <-> Application Servers (private subnet)
|
|
446
|
+
TB4: Application Servers <-> Database (isolated subnet)
|
|
447
|
+
TB5: Application Servers <-> Payment Gateway (external API)
|
|
448
|
+
|
|
449
|
+
KEY THREATS:
|
|
450
|
+
1. XSS via user-generated content -> CSP, output encoding, DOMPurify
|
|
451
|
+
2. CSRF on state-changing actions -> SameSite cookies, CSRF tokens
|
|
452
|
+
3. SQL injection on search/filter -> Parameterized queries, ORM
|
|
453
|
+
4. Session hijacking -> Secure/HttpOnly cookies, short TTL
|
|
454
|
+
5. Payment data interception -> TLS 1.3, PCI-DSS tokenization
|
|
455
|
+
6. Account takeover via cred stuffing -> Rate limiting, MFA, breached-pw check
|
|
456
|
+
7. Admin panel exposure -> IP allowlist, separate auth, MFA
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### 7.2 Mobile Application Threat Model
|
|
460
|
+
|
|
461
|
+
```
|
|
462
|
+
SYSTEM: Mobile Banking App (iOS + Android)
|
|
463
|
+
TRUST BOUNDARIES:
|
|
464
|
+
TB1: Device <-> Cellular/WiFi network
|
|
465
|
+
TB2: Network <-> API Gateway
|
|
466
|
+
TB3: API Gateway <-> Backend Services
|
|
467
|
+
TB4: Backend <-> Core Banking System
|
|
468
|
+
|
|
469
|
+
KEY THREATS:
|
|
470
|
+
1. Reverse engineering of app binary -> Code obfuscation, root/jailbreak detection
|
|
471
|
+
2. Insecure local data storage -> iOS Keychain / Android Keystore, no plaintext
|
|
472
|
+
3. Man-in-the-middle on public WiFi -> Certificate pinning, TLS 1.2+
|
|
473
|
+
4. Screenshot/screen recording leak -> Redact sensitive views in app switcher
|
|
474
|
+
5. Biometric bypass -> Server-side validation, fallback to PIN
|
|
475
|
+
6. Deep link hijacking -> Validate deep link schemes, use App Links
|
|
476
|
+
7. Push notification data leakage -> No sensitive data in notification payload
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### 7.3 API Threat Model
|
|
480
|
+
|
|
481
|
+
```
|
|
482
|
+
SYSTEM: RESTful API with OAuth2
|
|
483
|
+
TRUST BOUNDARIES:
|
|
484
|
+
TB1: Public Internet <-> API Gateway
|
|
485
|
+
TB2: API Gateway <-> Microservices
|
|
486
|
+
TB3: Microservices <-> Databases
|
|
487
|
+
TB4: Microservices <-> Third-party APIs
|
|
488
|
+
|
|
489
|
+
KEY THREATS:
|
|
490
|
+
1. BOLA (IDOR) -> Object-level authorization checks
|
|
491
|
+
2. Broken function-level auth -> Role-based endpoint access control
|
|
492
|
+
3. Mass assignment -> Explicit allowlists for bindable fields
|
|
493
|
+
4. Excessive data exposure -> Response filtering, field-level permissions
|
|
494
|
+
5. SSRF via URL parameters -> URL validation, deny internal ranges
|
|
495
|
+
6. GraphQL query depth attack -> Query depth/complexity limits
|
|
496
|
+
7. API versioning exposure -> Deprecate and remove old versions
|
|
497
|
+
8. Rate limiting bypass -> Distributed rate limiting (Redis-backed)
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### 7.4 Microservices Threat Model
|
|
501
|
+
|
|
502
|
+
```
|
|
503
|
+
SYSTEM: Kubernetes-based Microservices Platform
|
|
504
|
+
TRUST BOUNDARIES:
|
|
505
|
+
TB1: Internet <-> Ingress Controller
|
|
506
|
+
TB2: Ingress <-> Service Mesh (Istio/Envoy)
|
|
507
|
+
TB3: Service Mesh <-> Individual Pods
|
|
508
|
+
TB4: Pods <-> Managed Databases (VPC peering)
|
|
509
|
+
TB5: Pods <-> External SaaS APIs
|
|
510
|
+
|
|
511
|
+
KEY THREATS:
|
|
512
|
+
1. Service impersonation -> mTLS via service mesh, SPIFFE identities
|
|
513
|
+
2. Lateral movement post-compromise -> Network policies, microsegmentation
|
|
514
|
+
3. Container escape -> Seccomp profiles, no privileged containers
|
|
515
|
+
4. Image supply chain attack -> Signed images (cosign), admission controllers
|
|
516
|
+
5. Secrets in environment variables -> External secrets operator, Vault integration
|
|
517
|
+
6. Sidecar proxy bypass -> Strict mTLS mode, deny direct pod access
|
|
518
|
+
7. Resource exhaustion (noisy neighbor)-> Resource quotas, pod disruption budgets
|
|
519
|
+
8. etcd data exposure -> Encrypt etcd at rest, restrict API server access
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
### 7.5 Cloud Infrastructure Threat Model
|
|
523
|
+
|
|
524
|
+
```
|
|
525
|
+
SYSTEM: AWS Multi-Account Landing Zone
|
|
526
|
+
TRUST BOUNDARIES:
|
|
527
|
+
TB1: Internet <-> Public subnets (ALB, CloudFront)
|
|
528
|
+
TB2: Public subnets <-> Private subnets (app tier)
|
|
529
|
+
TB3: Private subnets <-> Isolated subnets (data tier)
|
|
530
|
+
TB4: AWS Account A <-> AWS Account B (cross-account)
|
|
531
|
+
TB5: AWS <-> On-premises (VPN/Direct Connect)
|
|
532
|
+
|
|
533
|
+
KEY THREATS:
|
|
534
|
+
1. IAM privilege escalation -> SCPs, permission boundaries, least privilege
|
|
535
|
+
2. S3 bucket misconfiguration -> S3 Block Public Access, bucket policies
|
|
536
|
+
3. Metadata service (IMDS) abuse -> IMDSv2 required, hop limit = 1
|
|
537
|
+
4. Cross-account role assumption -> External ID requirement, condition keys
|
|
538
|
+
5. CloudTrail tampering -> Org trail, log file validation, S3 MFA delete
|
|
539
|
+
6. VPC flow log gaps -> Enable all subnets, central logging account
|
|
540
|
+
7. KMS key policy misconfiguration -> Key policies + IAM, no wildcard principals
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
## 8. Incident Patterns
|
|
546
|
+
|
|
547
|
+
### 8.1 Using Threat Models for Incident Response
|
|
548
|
+
|
|
549
|
+
When an incident occurs, the threat model is a critical response accelerant:
|
|
550
|
+
|
|
551
|
+
1. **Rapid scoping:** The DFD immediately shows which components, data flows,
|
|
552
|
+
and trust boundaries are affected by the compromised component.
|
|
553
|
+
2. **Impact assessment:** Data classification in the threat model tells responders
|
|
554
|
+
what data may have been exposed and its sensitivity level.
|
|
555
|
+
3. **Lateral movement prediction:** Trust boundary analysis reveals which
|
|
556
|
+
adjacent systems the attacker could pivot to.
|
|
557
|
+
4. **Control validation:** The threat model documents expected controls;
|
|
558
|
+
responders can quickly check which controls failed.
|
|
559
|
+
5. **Communication template:** The threat model's asset inventory feeds
|
|
560
|
+
regulatory notification (which data, which users, which jurisdictions).
|
|
561
|
+
|
|
562
|
+
### 8.2 Post-Incident Threat Model Updates
|
|
563
|
+
|
|
564
|
+
After every security incident, update the threat model:
|
|
565
|
+
|
|
566
|
+
1. **Add the realized threat** to the catalog if it was not previously modeled.
|
|
567
|
+
2. **Recalibrate risk scores** — the threat is now "proven," so likelihood increases.
|
|
568
|
+
3. **Document the actual attack path** and compare it to modeled attack trees.
|
|
569
|
+
4. **Identify blind spots** — which DFD elements, trust boundaries, or data flows
|
|
570
|
+
were missing from the model?
|
|
571
|
+
5. **Update mitigations** — document the controls that were added post-incident.
|
|
572
|
+
6. **Share lessons learned** — feed findings into the organization's threat library
|
|
573
|
+
so other teams benefit.
|
|
574
|
+
7. **Re-run automated rules** (Threagile/pytm) against the updated model to
|
|
575
|
+
check for newly introduced risks from incident response changes.
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
## 9. Compliance and Standards
|
|
580
|
+
|
|
581
|
+
### 9.1 NIST SP 800-154 — Guide to Data-Centric System Threat Modeling
|
|
582
|
+
|
|
583
|
+
NIST 800-154 provides a four-step data-centric threat modeling approach:
|
|
584
|
+
|
|
585
|
+
1. **Identify and characterize** the system and data of interest.
|
|
586
|
+
2. **Identify and select** the attack vectors to be included in the model.
|
|
587
|
+
3. **Characterize the security controls** for mitigating the attack vectors.
|
|
588
|
+
4. **Analyze the threat model** — determine likelihood and impact, calculate risk.
|
|
589
|
+
|
|
590
|
+
Key principle: Focus on protecting specific data types rather than only system
|
|
591
|
+
components. This complements component-centric methods like STRIDE.
|
|
592
|
+
|
|
593
|
+
### 9.2 OWASP Threat Modeling
|
|
594
|
+
|
|
595
|
+
OWASP provides multiple resources:
|
|
596
|
+
|
|
597
|
+
- **Threat Modeling Cheat Sheet** — concise guidance for developers.
|
|
598
|
+
- **Threat Modeling Manifesto** — values and principles for the discipline.
|
|
599
|
+
- **OWASP Threat Dragon** — open-source modeling tool.
|
|
600
|
+
- **pytm** — programmatic threat modeling framework.
|
|
601
|
+
- **OWASP Top 10** — threat catalog for web applications.
|
|
602
|
+
- **OWASP API Security Top 10** — threat catalog for APIs.
|
|
603
|
+
|
|
604
|
+
### 9.3 PCI-DSS Threat Assessment
|
|
605
|
+
|
|
606
|
+
PCI-DSS v4.0 requires threat-informed risk assessment:
|
|
607
|
+
|
|
608
|
+
- **Requirement 6.3:** Identify and manage security vulnerabilities through
|
|
609
|
+
a vulnerability management program informed by threat intelligence.
|
|
610
|
+
- **Requirement 6.5:** Address common coding vulnerabilities (informed by
|
|
611
|
+
threat modeling of payment flows).
|
|
612
|
+
- **Requirement 11.3:** Penetration testing scope informed by threat model.
|
|
613
|
+
- **Requirement 12.2:** Risk assessment at least annually and upon significant
|
|
614
|
+
changes; threat modeling feeds directly into this requirement.
|
|
615
|
+
|
|
616
|
+
Threat models for PCI-DSS must cover: cardholder data flows, segmentation
|
|
617
|
+
boundaries, payment channel trust boundaries, and third-party processor
|
|
618
|
+
connections.
|
|
619
|
+
|
|
620
|
+
### 9.4 ISO 27001 Risk Assessment
|
|
621
|
+
|
|
622
|
+
ISO 27001:2022 Clause 6.1.2 requires organizations to:
|
|
623
|
+
|
|
624
|
+
- Define a risk assessment process that identifies risks to confidentiality,
|
|
625
|
+
integrity, and availability.
|
|
626
|
+
- Identify risk owners.
|
|
627
|
+
- Assess the likelihood and consequences of identified risks.
|
|
628
|
+
- Determine risk treatment options.
|
|
629
|
+
|
|
630
|
+
Threat modeling satisfies these requirements when:
|
|
631
|
+
- The DFD maps to the ISO 27001 asset inventory.
|
|
632
|
+
- STRIDE categories align with CIA triad properties.
|
|
633
|
+
- Risk scores map to the organization's risk criteria.
|
|
634
|
+
- Threat dispositions map to ISO 27001 Annex A controls.
|
|
635
|
+
|
|
636
|
+
### 9.5 SOC 2 and Threat Modeling
|
|
637
|
+
|
|
638
|
+
SOC 2 Trust Services Criteria (CC3.2) requires risk assessment that includes
|
|
639
|
+
identification of threats. A documented threat model demonstrates:
|
|
640
|
+
- Systematic threat identification methodology.
|
|
641
|
+
- Risk scoring and prioritization.
|
|
642
|
+
- Mitigation tracking.
|
|
643
|
+
- Periodic review and update cadence.
|
|
644
|
+
|
|
645
|
+
---
|
|
646
|
+
|
|
647
|
+
## 10. Code Examples
|
|
648
|
+
|
|
649
|
+
### 10.1 Threagile YAML Model
|
|
650
|
+
|
|
651
|
+
```yaml
|
|
652
|
+
# threagile.yaml — Threat Model for Web Application
|
|
653
|
+
threagile_version: 1.0.0
|
|
654
|
+
|
|
655
|
+
title: E-Commerce Platform Threat Model
|
|
656
|
+
date: 2026-03-08
|
|
657
|
+
author:
|
|
658
|
+
name: Security Team
|
|
659
|
+
homepage: https://internal.example.com/security
|
|
660
|
+
|
|
661
|
+
business_criticality: critical
|
|
662
|
+
|
|
663
|
+
management_summary_comment: >
|
|
664
|
+
This threat model covers the e-commerce platform including
|
|
665
|
+
the web frontend, API gateway, order service, payment service,
|
|
666
|
+
and PostgreSQL database.
|
|
667
|
+
|
|
668
|
+
business_overview:
|
|
669
|
+
description: Online retail platform processing customer orders and payments.
|
|
670
|
+
images: []
|
|
671
|
+
|
|
672
|
+
technical_overview:
|
|
673
|
+
description: >
|
|
674
|
+
React SPA served via CDN, API Gateway (Kong), microservices on
|
|
675
|
+
Kubernetes, PostgreSQL on RDS, Redis cache, Stripe payment integration.
|
|
676
|
+
images: []
|
|
677
|
+
|
|
678
|
+
questions:
|
|
679
|
+
How are secrets managed?: >
|
|
680
|
+
AWS Secrets Manager with automatic rotation. No environment variables.
|
|
681
|
+
How is inter-service auth handled?: >
|
|
682
|
+
mTLS via Istio service mesh with SPIFFE identities.
|
|
683
|
+
|
|
684
|
+
abuse_cases:
|
|
685
|
+
Credential Stuffing: >
|
|
686
|
+
Attacker uses breached credential lists to attempt login
|
|
687
|
+
via the /api/auth/login endpoint at high volume.
|
|
688
|
+
Payment Fraud: >
|
|
689
|
+
Attacker manipulates order total by tampering with client-side
|
|
690
|
+
price data before checkout submission.
|
|
691
|
+
|
|
692
|
+
security_requirements:
|
|
693
|
+
Input Validation: All API inputs validated against OpenAPI schema.
|
|
694
|
+
Authentication: OAuth2 + PKCE for SPA, API keys for service-to-service.
|
|
695
|
+
Encryption: TLS 1.3 in transit, AES-256 at rest for PII.
|
|
696
|
+
|
|
697
|
+
# --- Data Assets ---
|
|
698
|
+
data_assets:
|
|
699
|
+
Customer PII:
|
|
700
|
+
id: customer-pii
|
|
701
|
+
usage: business
|
|
702
|
+
quantity: many
|
|
703
|
+
confidentiality: confidential
|
|
704
|
+
integrity: critical
|
|
705
|
+
availability: operational
|
|
706
|
+
justification_cia_rating: >
|
|
707
|
+
Names, emails, addresses used for order fulfillment.
|
|
708
|
+
|
|
709
|
+
Payment Tokens:
|
|
710
|
+
id: payment-tokens
|
|
711
|
+
usage: business
|
|
712
|
+
quantity: many
|
|
713
|
+
confidentiality: strictly-confidential
|
|
714
|
+
integrity: mission-critical
|
|
715
|
+
availability: important
|
|
716
|
+
justification_cia_rating: >
|
|
717
|
+
Stripe tokenized payment references. No raw card data stored.
|
|
718
|
+
|
|
719
|
+
Order Data:
|
|
720
|
+
id: order-data
|
|
721
|
+
usage: business
|
|
722
|
+
quantity: many
|
|
723
|
+
confidentiality: internal
|
|
724
|
+
integrity: critical
|
|
725
|
+
availability: operational
|
|
726
|
+
|
|
727
|
+
# --- Technical Assets ---
|
|
728
|
+
technical_assets:
|
|
729
|
+
API Gateway:
|
|
730
|
+
id: api-gateway
|
|
731
|
+
type: process
|
|
732
|
+
usage: business
|
|
733
|
+
used_as_client_by_human: false
|
|
734
|
+
out_of_scope: false
|
|
735
|
+
technology: api-gateway
|
|
736
|
+
internet: true
|
|
737
|
+
machine: container
|
|
738
|
+
encryption: none
|
|
739
|
+
multi_tenant: false
|
|
740
|
+
redundant: true
|
|
741
|
+
data_assets_processed:
|
|
742
|
+
- customer-pii
|
|
743
|
+
- order-data
|
|
744
|
+
data_assets_stored: []
|
|
745
|
+
data_formats_accepted:
|
|
746
|
+
- json
|
|
747
|
+
|
|
748
|
+
Order Service:
|
|
749
|
+
id: order-service
|
|
750
|
+
type: process
|
|
751
|
+
usage: business
|
|
752
|
+
technology: web-service-rest
|
|
753
|
+
internet: false
|
|
754
|
+
machine: container
|
|
755
|
+
encryption: none
|
|
756
|
+
multi_tenant: false
|
|
757
|
+
data_assets_processed:
|
|
758
|
+
- customer-pii
|
|
759
|
+
- order-data
|
|
760
|
+
data_assets_stored: []
|
|
761
|
+
|
|
762
|
+
PostgreSQL Database:
|
|
763
|
+
id: postgres-db
|
|
764
|
+
type: datastore
|
|
765
|
+
usage: business
|
|
766
|
+
technology: database
|
|
767
|
+
internet: false
|
|
768
|
+
machine: virtual
|
|
769
|
+
encryption: transparent
|
|
770
|
+
multi_tenant: false
|
|
771
|
+
data_assets_stored:
|
|
772
|
+
- customer-pii
|
|
773
|
+
- order-data
|
|
774
|
+
- payment-tokens
|
|
775
|
+
|
|
776
|
+
# --- Trust Boundaries ---
|
|
777
|
+
trust_boundaries:
|
|
778
|
+
Internet Boundary:
|
|
779
|
+
id: internet-boundary
|
|
780
|
+
type: network-cloud-provider
|
|
781
|
+
technical_assets_inside:
|
|
782
|
+
- api-gateway
|
|
783
|
+
trust_boundaries_nested: []
|
|
784
|
+
|
|
785
|
+
Internal Network:
|
|
786
|
+
id: internal-network
|
|
787
|
+
type: network-dedicated-hoster
|
|
788
|
+
technical_assets_inside:
|
|
789
|
+
- order-service
|
|
790
|
+
- postgres-db
|
|
791
|
+
trust_boundaries_nested: []
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
Run with:
|
|
795
|
+
```bash
|
|
796
|
+
docker run --rm -v "$(pwd)":/app/work threagile/threagile \
|
|
797
|
+
-verbose -model /app/work/threagile.yaml -output /app/work/output
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
### 10.2 pytm Python Threat Model
|
|
801
|
+
|
|
802
|
+
```python
|
|
803
|
+
#!/usr/bin/env python3
|
|
804
|
+
"""Threat model for a web application using OWASP pytm."""
|
|
805
|
+
|
|
806
|
+
from pytm import (
|
|
807
|
+
TM, Actor, Boundary, Dataflow, Datastore,
|
|
808
|
+
ExternalEntity, Lambda, Process, Server,
|
|
809
|
+
)
|
|
810
|
+
|
|
811
|
+
# --- Define the Threat Model ---
|
|
812
|
+
tm = TM("E-Commerce Platform")
|
|
813
|
+
tm.description = "Threat model for an online retail platform"
|
|
814
|
+
tm.isOrdered = True
|
|
815
|
+
tm.mergeResponses = True
|
|
816
|
+
|
|
817
|
+
# --- Trust Boundaries ---
|
|
818
|
+
internet = Boundary("Internet")
|
|
819
|
+
dmz = Boundary("DMZ")
|
|
820
|
+
internal = Boundary("Internal Network")
|
|
821
|
+
data_tier = Boundary("Data Tier")
|
|
822
|
+
|
|
823
|
+
# --- Actors and External Entities ---
|
|
824
|
+
customer = Actor("Customer")
|
|
825
|
+
customer.inBoundary = internet
|
|
826
|
+
|
|
827
|
+
payment_provider = ExternalEntity("Stripe API")
|
|
828
|
+
payment_provider.inBoundary = internet
|
|
829
|
+
|
|
830
|
+
# --- Servers and Processes ---
|
|
831
|
+
cdn = Server("CDN / WAF")
|
|
832
|
+
cdn.inBoundary = dmz
|
|
833
|
+
cdn.OS = "Linux"
|
|
834
|
+
cdn.isHardened = True
|
|
835
|
+
|
|
836
|
+
api_gw = Server("API Gateway")
|
|
837
|
+
api_gw.inBoundary = dmz
|
|
838
|
+
api_gw.OS = "Linux"
|
|
839
|
+
api_gw.isHardened = True
|
|
840
|
+
api_gw.sanitizesInput = True
|
|
841
|
+
api_gw.encodesOutput = True
|
|
842
|
+
|
|
843
|
+
order_svc = Process("Order Service")
|
|
844
|
+
order_svc.inBoundary = internal
|
|
845
|
+
order_svc.handlesResources = True
|
|
846
|
+
order_svc.sanitizesInput = True
|
|
847
|
+
|
|
848
|
+
auth_svc = Process("Auth Service")
|
|
849
|
+
auth_svc.inBoundary = internal
|
|
850
|
+
auth_svc.handlesResources = True
|
|
851
|
+
auth_svc.implementsAuthenticationScheme = True
|
|
852
|
+
auth_svc.authorizesSource = True
|
|
853
|
+
|
|
854
|
+
# --- Data Stores ---
|
|
855
|
+
user_db = Datastore("User Database")
|
|
856
|
+
user_db.inBoundary = data_tier
|
|
857
|
+
user_db.isEncrypted = True
|
|
858
|
+
user_db.isSQL = True
|
|
859
|
+
user_db.isSigned = False
|
|
860
|
+
|
|
861
|
+
order_db = Datastore("Order Database")
|
|
862
|
+
order_db.inBoundary = data_tier
|
|
863
|
+
order_db.isEncrypted = True
|
|
864
|
+
order_db.isSQL = True
|
|
865
|
+
|
|
866
|
+
cache = Datastore("Redis Cache")
|
|
867
|
+
cache.inBoundary = internal
|
|
868
|
+
cache.isEncrypted = False
|
|
869
|
+
cache.isSQL = False
|
|
870
|
+
|
|
871
|
+
# --- Data Flows ---
|
|
872
|
+
customer_to_cdn = Dataflow(customer, cdn, "HTTPS Request")
|
|
873
|
+
customer_to_cdn.protocol = "HTTPS"
|
|
874
|
+
customer_to_cdn.isEncrypted = True
|
|
875
|
+
|
|
876
|
+
cdn_to_gw = Dataflow(cdn, api_gw, "Filtered Request")
|
|
877
|
+
cdn_to_gw.protocol = "HTTPS"
|
|
878
|
+
cdn_to_gw.isEncrypted = True
|
|
879
|
+
|
|
880
|
+
gw_to_auth = Dataflow(api_gw, auth_svc, "Auth Check")
|
|
881
|
+
gw_to_auth.protocol = "gRPC"
|
|
882
|
+
gw_to_auth.isEncrypted = True
|
|
883
|
+
|
|
884
|
+
gw_to_orders = Dataflow(api_gw, order_svc, "Order Request")
|
|
885
|
+
gw_to_orders.protocol = "gRPC"
|
|
886
|
+
gw_to_orders.isEncrypted = True
|
|
887
|
+
|
|
888
|
+
auth_to_db = Dataflow(auth_svc, user_db, "User Lookup")
|
|
889
|
+
auth_to_db.protocol = "PostgreSQL"
|
|
890
|
+
auth_to_db.isEncrypted = True
|
|
891
|
+
|
|
892
|
+
orders_to_db = Dataflow(order_svc, order_db, "Order CRUD")
|
|
893
|
+
orders_to_db.protocol = "PostgreSQL"
|
|
894
|
+
orders_to_db.isEncrypted = True
|
|
895
|
+
|
|
896
|
+
orders_to_cache = Dataflow(order_svc, cache, "Cache Read/Write")
|
|
897
|
+
orders_to_cache.protocol = "Redis"
|
|
898
|
+
orders_to_cache.isEncrypted = False
|
|
899
|
+
|
|
900
|
+
orders_to_stripe = Dataflow(order_svc, payment_provider, "Payment Request")
|
|
901
|
+
orders_to_stripe.protocol = "HTTPS"
|
|
902
|
+
orders_to_stripe.isEncrypted = True
|
|
903
|
+
|
|
904
|
+
if __name__ == "__main__":
|
|
905
|
+
tm.process()
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
Generate outputs:
|
|
909
|
+
```bash
|
|
910
|
+
# Data Flow Diagram
|
|
911
|
+
python3 tm.py --dfd | dot -Tpng -o dfd.png
|
|
912
|
+
|
|
913
|
+
# Sequence Diagram
|
|
914
|
+
python3 tm.py --seq | dot -Tpng -o seq.png
|
|
915
|
+
|
|
916
|
+
# Threat Report
|
|
917
|
+
python3 tm.py --report threats.html
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
### 10.3 DFD Template (Text-Based)
|
|
921
|
+
|
|
922
|
+
```
|
|
923
|
+
+------------------------------------------------------------------+
|
|
924
|
+
| INTERNET (Untrusted) |
|
|
925
|
+
| [User Browser] [Mobile App] [Third-Party Webhook] |
|
|
926
|
+
+--------|-----------------|--------------------|------------------+
|
|
927
|
+
| HTTPS | HTTPS | HTTPS
|
|
928
|
+
- - - - -|- - - - - - - - -|- - - - - - - - - - -|- - - - - - - - -
|
|
929
|
+
| TRUST BOUNDARY: DMZ |
|
|
930
|
+
v v v
|
|
931
|
+
(WAF / CDN) -------> (API Gateway) <----- (Webhook Receiver)
|
|
932
|
+
| | |
|
|
933
|
+
- - - - -|- - - - - - - - -|- - - - - - - - - - -|- - - - - - - - -
|
|
934
|
+
| TRUST BOUNDARY: Internal Network |
|
|
935
|
+
v v v
|
|
936
|
+
(Static Assets) (Auth Service) (Event Processor)
|
|
937
|
+
| |
|
|
938
|
+
v v
|
|
939
|
+
[=User DB=] [=Event Queue=]
|
|
940
|
+
|
|
|
941
|
+
- - - - - - - - - - - - - - - - - - - - - - - -|- - - - - - - - - -
|
|
942
|
+
TRUST BOUNDARY: Data Tier |
|
|
943
|
+
v
|
|
944
|
+
[=Analytics DB=]
|
|
945
|
+
```
|
|
946
|
+
|
|
947
|
+
### 10.4 Threat Model Report Template
|
|
948
|
+
|
|
949
|
+
```markdown
|
|
950
|
+
# Threat Model Report
|
|
951
|
+
|
|
952
|
+
## Metadata
|
|
953
|
+
- **System:** [Name]
|
|
954
|
+
- **Version:** [Architecture version]
|
|
955
|
+
- **Date:** [YYYY-MM-DD]
|
|
956
|
+
- **Author(s):** [Names]
|
|
957
|
+
- **Methodology:** [STRIDE / PASTA / LINDDUN]
|
|
958
|
+
- **Review Status:** [Draft / Reviewed / Approved]
|
|
959
|
+
|
|
960
|
+
## System Description
|
|
961
|
+
[Brief description of the system, its purpose, and key users.]
|
|
962
|
+
|
|
963
|
+
## Architecture Diagram
|
|
964
|
+
[Embed or link DFD — Level 0 and Level 1 minimum.]
|
|
965
|
+
|
|
966
|
+
## Data Classification
|
|
967
|
+
| Data Asset | Classification | Regulations |
|
|
968
|
+
|---|---|---|
|
|
969
|
+
| [Asset name] | [Public/Internal/Confidential/Restricted] | [GDPR/PCI/HIPAA/None] |
|
|
970
|
+
|
|
971
|
+
## Trust Boundaries
|
|
972
|
+
| ID | Boundary | Components Inside | Components Outside |
|
|
973
|
+
|---|---|---|---|
|
|
974
|
+
| TB1 | [Name] | [List] | [List] |
|
|
975
|
+
|
|
976
|
+
## Threat Catalog
|
|
977
|
+
| ID | Threat | STRIDE Category | Component | Likelihood | Impact | Risk Score | Mitigation | Status | Owner |
|
|
978
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
979
|
+
| T001 | [Description] | [S/T/R/I/D/E] | [Component] | [1-5] | [1-5] | [1-25] | [Control] | [Open/Mitigated/Accepted] | [Name] |
|
|
980
|
+
|
|
981
|
+
## Risk Summary
|
|
982
|
+
- **Critical (20-25):** [Count] threats
|
|
983
|
+
- **High (15-19):** [Count] threats
|
|
984
|
+
- **Medium (8-14):** [Count] threats
|
|
985
|
+
- **Low (1-7):** [Count] threats
|
|
986
|
+
|
|
987
|
+
## Assumptions and Exclusions
|
|
988
|
+
- [List assumptions made during modeling]
|
|
989
|
+
- [List components or threats explicitly excluded and why]
|
|
990
|
+
|
|
991
|
+
## Action Items
|
|
992
|
+
| Priority | Action | Owner | Deadline | Ticket |
|
|
993
|
+
|---|---|---|---|---|
|
|
994
|
+
| [Critical/High/Medium/Low] | [Description] | [Name] | [Date] | [JIRA-123] |
|
|
995
|
+
|
|
996
|
+
## Revision History
|
|
997
|
+
| Version | Date | Author | Changes |
|
|
998
|
+
|---|---|---|---|
|
|
999
|
+
```
|
|
1000
|
+
|
|
1001
|
+
### 10.5 Example: Complete Threat Model for a Login Flow
|
|
1002
|
+
|
|
1003
|
+
```
|
|
1004
|
+
SYSTEM: User Authentication Flow
|
|
1005
|
+
SCOPE: Login endpoint, session management, password reset
|
|
1006
|
+
|
|
1007
|
+
DATA FLOW:
|
|
1008
|
+
User -> [HTTPS] -> API Gateway -> [gRPC/mTLS] -> Auth Service -> [TLS] -> User DB
|
|
1009
|
+
Auth Service -> [TLS] -> Redis (session store)
|
|
1010
|
+
Auth Service -> [HTTPS] -> Email Service (password reset)
|
|
1011
|
+
|
|
1012
|
+
THREATS:
|
|
1013
|
+
T001: Credential stuffing on /api/auth/login
|
|
1014
|
+
Category: Spoofing
|
|
1015
|
+
Likelihood: 5 (public endpoint, automated tools readily available)
|
|
1016
|
+
Impact: 4 (account takeover, data access)
|
|
1017
|
+
Risk: 20 (Critical)
|
|
1018
|
+
Mitigation: Rate limiting (10 req/min per IP), CAPTCHA after 3 failures,
|
|
1019
|
+
breached-password check via k-anonymity API, account lockout
|
|
1020
|
+
after 10 failures with exponential backoff.
|
|
1021
|
+
|
|
1022
|
+
T002: Session token theft via XSS
|
|
1023
|
+
Category: Information Disclosure
|
|
1024
|
+
Likelihood: 3 (requires XSS vulnerability in application)
|
|
1025
|
+
Impact: 4 (session hijacking, account takeover)
|
|
1026
|
+
Risk: 12 (Medium)
|
|
1027
|
+
Mitigation: HttpOnly + Secure + SameSite=Strict cookies,
|
|
1028
|
+
Content-Security-Policy header, session binding to
|
|
1029
|
+
client fingerprint (IP + User-Agent hash).
|
|
1030
|
+
|
|
1031
|
+
T003: Password reset token brute-force
|
|
1032
|
+
Category: Spoofing
|
|
1033
|
+
Likelihood: 2 (tokens are 128-bit random)
|
|
1034
|
+
Impact: 4 (account takeover)
|
|
1035
|
+
Risk: 8 (Medium)
|
|
1036
|
+
Mitigation: Cryptographically random tokens (min 128 bits),
|
|
1037
|
+
15-minute expiry, single-use, rate limit reset requests.
|
|
1038
|
+
|
|
1039
|
+
T004: Timing attack on login response
|
|
1040
|
+
Category: Information Disclosure
|
|
1041
|
+
Likelihood: 3 (measurable over network with statistical analysis)
|
|
1042
|
+
Impact: 2 (username enumeration)
|
|
1043
|
+
Risk: 6 (Low)
|
|
1044
|
+
Mitigation: Constant-time password comparison, identical response
|
|
1045
|
+
for valid/invalid usernames, same response time.
|
|
1046
|
+
|
|
1047
|
+
T005: Missing audit trail for login events
|
|
1048
|
+
Category: Repudiation
|
|
1049
|
+
Likelihood: 4 (if logging is not implemented)
|
|
1050
|
+
Impact: 3 (inability to investigate incidents)
|
|
1051
|
+
Risk: 12 (Medium)
|
|
1052
|
+
Mitigation: Log all auth events (success, failure, lockout, reset)
|
|
1053
|
+
with timestamp, IP, user-agent, user ID. Ship to SIEM.
|
|
1054
|
+
Retain for 90 days minimum.
|
|
1055
|
+
```
|
|
1056
|
+
|
|
1057
|
+
---
|
|
1058
|
+
|
|
1059
|
+
## References
|
|
1060
|
+
|
|
1061
|
+
- OWASP Threat Modeling Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html
|
|
1062
|
+
- OWASP Threat Modeling Project: https://owasp.org/www-project-threat-modeling/
|
|
1063
|
+
- NIST SP 800-154 (Draft): https://csrc.nist.gov/pubs/sp/800/154/ipd
|
|
1064
|
+
- Shostack, A. "Threat Modeling: Designing for Security" (Wiley, 2014)
|
|
1065
|
+
- Schneier, B. "Attack Trees" (Dr. Dobb's Journal, 1999): https://www.schneier.com/academic/archives/1999/12/attack_trees.html
|
|
1066
|
+
- PASTA Threat Modeling: https://versprite.com/blog/what-is-pasta-threat-modeling/
|
|
1067
|
+
- LINDDUN Privacy Threat Modeling: https://linddun.org/
|
|
1068
|
+
- Threagile: https://github.com/Threagile/threagile
|
|
1069
|
+
- OWASP pytm: https://github.com/OWASP/pytm
|
|
1070
|
+
- OWASP Threat Dragon: https://github.com/OWASP/threat-dragon
|
|
1071
|
+
- IBM Cost of a Data Breach 2025: https://www.ibm.com/reports/data-breach
|
|
1072
|
+
- Security Compass — Threat Modeling ROI: https://www.securitycompass.com/blog/measuring-threat-modeling-roi/
|
|
1073
|
+
- MITRE ATT&CK: https://attack.mitre.org/
|
|
1074
|
+
- Threat Modeling Manifesto: https://www.threatmodelingmanifesto.org/
|