@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,433 @@
|
|
|
1
|
+
# CORS and Security Headers
|
|
2
|
+
|
|
3
|
+
> Expertise module for AI agents configuring secure HTTP headers and CORS policies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Threat Landscape
|
|
8
|
+
|
|
9
|
+
CORS misconfigurations are among the most prevalent web vulnerabilities. In 2025, research indicated nearly 90% of successful API attacks exploited poorly configured CORS as their initial vector. The root cause: developers implement CORS as a quick fix to cross-origin errors without understanding security implications.
|
|
10
|
+
|
|
11
|
+
**Real-world exploits:**
|
|
12
|
+
- **Bitcoin Wallet Theft (PortSwigger Research):** CORS misconfigurations on cryptocurrency exchanges allowed stealing encrypted wallet backups via cross-origin requests, enabling offline brute-force of wallet passwords.
|
|
13
|
+
- **Financial Services API Compromise (2025):** Reflected origins with credentials enabled led to compromise of 35 financial APIs, affecting 2M+ users.
|
|
14
|
+
- **Admin Account Creation (Bug Bounty):** A login endpoint reflected Origin, accepted null, and returned wildcard -- attackers crafted sandboxed iframes causing victims to unknowingly create admin accounts.
|
|
15
|
+
|
|
16
|
+
| Missing Header | Attack Enabled | Impact |
|
|
17
|
+
|-------------------------|----------------------------------|-----------------------|
|
|
18
|
+
| CSP | Cross-site scripting (XSS) | Full account takeover |
|
|
19
|
+
| X-Frame-Options | Clickjacking | UI redress, phishing |
|
|
20
|
+
| HSTS | Protocol downgrade, cookie theft | Session hijacking |
|
|
21
|
+
| X-Content-Type-Options | MIME sniffing | Code execution |
|
|
22
|
+
| Referrer-Policy | URL data leakage | Token/PII exposure |
|
|
23
|
+
| Permissions-Policy | Unauthorized API access | Privacy violation |
|
|
24
|
+
| CORS (misconfigured) | Cross-origin data theft | Full data exfiltration|
|
|
25
|
+
|
|
26
|
+
CORS misconfiguration maps to OWASP Top 10 2021 **A05: Security Misconfiguration**. Missing CSP enabling XSS maps to **A03: Injection**.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 2. Core Security Principles
|
|
31
|
+
|
|
32
|
+
### Same-Origin Policy (SOP)
|
|
33
|
+
Two URLs share an origin only when **scheme**, **host**, and **port** all match. SOP prevents scripts on one origin from reading responses from another. CORS is the controlled relaxation of SOP -- every CORS header is a hole in SOP that must be justified.
|
|
34
|
+
|
|
35
|
+
### CORS Headers
|
|
36
|
+
|
|
37
|
+
| Header | Purpose |
|
|
38
|
+
|-------------------------------------|-------------------------------------------|
|
|
39
|
+
| Access-Control-Allow-Origin | Which origins may read the response |
|
|
40
|
+
| Access-Control-Allow-Credentials | Whether cookies/auth headers are sent |
|
|
41
|
+
| Access-Control-Allow-Methods | Permitted HTTP methods |
|
|
42
|
+
| Access-Control-Allow-Headers | Permitted request headers |
|
|
43
|
+
| Access-Control-Expose-Headers | Response headers readable by client |
|
|
44
|
+
| Access-Control-Max-Age | Preflight cache duration (seconds) |
|
|
45
|
+
|
|
46
|
+
**Critical rule:** When `Access-Control-Allow-Credentials: true`, `Access-Control-Allow-Origin` MUST NOT be `*`. Servers that reflect arbitrary origins with credentials create an equivalent vulnerability.
|
|
47
|
+
|
|
48
|
+
### Defense Headers
|
|
49
|
+
|
|
50
|
+
- **CSP:** Defines allowlist of content sources; second layer of XSS defense even when injection exists. Without it, any XSS is trivially exploitable.
|
|
51
|
+
- **HSTS:** Forces HTTPS-only connections. Without it, MITM can intercept the first HTTP request and steal session cookies. Recommended: `max-age=63072000; includeSubDomains; preload`.
|
|
52
|
+
- **X-Frame-Options:** Prevents clickjacking. Use `DENY` or `SAMEORIGIN`. Prefer CSP `frame-ancestors` for modern browsers.
|
|
53
|
+
- **X-Content-Type-Options:** `nosniff` prevents MIME-sniffing, blocking execution of disguised uploaded files.
|
|
54
|
+
- **Referrer-Policy:** `strict-origin-when-cross-origin` prevents leaking full URLs (with tokens/IDs) to third parties.
|
|
55
|
+
- **Permissions-Policy:** Disables unused browser APIs (camera, microphone, geolocation). Limits XSS payload capabilities.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 3. Implementation Patterns
|
|
60
|
+
|
|
61
|
+
### 3.1 CORS Whitelist Middleware (TypeScript)
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import cors from 'cors';
|
|
65
|
+
|
|
66
|
+
const ALLOWED_ORIGINS = new Set([
|
|
67
|
+
'https://app.example.com',
|
|
68
|
+
'https://admin.example.com',
|
|
69
|
+
]);
|
|
70
|
+
|
|
71
|
+
app.use(cors({
|
|
72
|
+
origin: (origin, callback) => {
|
|
73
|
+
if (!origin || ALLOWED_ORIGINS.has(origin)) callback(null, true);
|
|
74
|
+
else callback(new Error(`Origin ${origin} not allowed`));
|
|
75
|
+
},
|
|
76
|
+
credentials: true,
|
|
77
|
+
methods: ['GET', 'POST', 'PUT', 'DELETE'],
|
|
78
|
+
allowedHeaders: ['Content-Type', 'Authorization', 'X-Request-ID'],
|
|
79
|
+
maxAge: 86400,
|
|
80
|
+
}));
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Anti-patterns:** `origin: true` (reflects any), regex without anchoring (`/example\.com/` matches `evil-example.com`), allowing null origin.
|
|
84
|
+
|
|
85
|
+
### 3.2 CSP with Nonces
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import crypto from 'crypto';
|
|
89
|
+
|
|
90
|
+
function cspMiddleware(req, res, next) {
|
|
91
|
+
const nonce = crypto.randomBytes(16).toString('base64');
|
|
92
|
+
res.locals.cspNonce = nonce;
|
|
93
|
+
res.setHeader('Content-Security-Policy', [
|
|
94
|
+
`default-src 'none'`, `script-src 'nonce-${nonce}' 'strict-dynamic'`,
|
|
95
|
+
`style-src 'nonce-${nonce}'`, `img-src 'self' https:`, `connect-src 'self'`,
|
|
96
|
+
`frame-ancestors 'none'`, `base-uri 'none'`, `form-action 'self'`,
|
|
97
|
+
].join('; '));
|
|
98
|
+
res.setHeader('Cache-Control', 'no-store'); // CRITICAL: prevent nonce caching
|
|
99
|
+
next();
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Nonce rules: generate per-request (128+ bits entropy), never accept from user input, disable HTML caching, use `strict-dynamic` for dependency loading.
|
|
104
|
+
|
|
105
|
+
### 3.3 Helmet.js for Express
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import helmet from 'helmet';
|
|
109
|
+
import crypto from 'crypto';
|
|
110
|
+
|
|
111
|
+
app.use((req, res, next) => {
|
|
112
|
+
res.locals.nonce = crypto.randomBytes(16).toString('base64');
|
|
113
|
+
next();
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
app.use(helmet({
|
|
117
|
+
contentSecurityPolicy: {
|
|
118
|
+
directives: {
|
|
119
|
+
defaultSrc: ["'none'"],
|
|
120
|
+
scriptSrc: [(req, res) => `'nonce-${res.locals.nonce}'`, "'strict-dynamic'"],
|
|
121
|
+
styleSrc: [(req, res) => `'nonce-${res.locals.nonce}'`],
|
|
122
|
+
imgSrc: ["'self'", 'https:'], connectSrc: ["'self'"],
|
|
123
|
+
frameAncestors: ["'none'"], baseUri: ["'none'"], formAction: ["'self'"],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
strictTransportSecurity: { maxAge: 63072000, includeSubDomains: true, preload: true },
|
|
127
|
+
referrerPolicy: { policy: 'strict-origin-when-cross-origin' },
|
|
128
|
+
}));
|
|
129
|
+
|
|
130
|
+
// Permissions-Policy (not included in Helmet)
|
|
131
|
+
app.use((req, res, next) => {
|
|
132
|
+
res.setHeader('Permissions-Policy', 'camera=(), microphone=(), geolocation=(), payment=()');
|
|
133
|
+
next();
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 3.4 Nginx Security Headers
|
|
138
|
+
|
|
139
|
+
```nginx
|
|
140
|
+
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
|
|
141
|
+
add_header X-Frame-Options "DENY" always;
|
|
142
|
+
add_header X-Content-Type-Options "nosniff" always;
|
|
143
|
+
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
|
144
|
+
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;
|
|
145
|
+
add_header Content-Security-Policy "default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' https:; connect-src 'self'; frame-ancestors 'none'; base-uri 'none';" always;
|
|
146
|
+
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
|
147
|
+
add_header Cross-Origin-Resource-Policy "same-origin" always;
|
|
148
|
+
server_tokens off;
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Pitfall:** Nginx `add_header` in an inner block (e.g., `location`) drops ALL parent-block headers. Use the `always` parameter and consider `headers-more-nginx-module`.
|
|
152
|
+
|
|
153
|
+
### 3.5 Subresource Integrity (SRI)
|
|
154
|
+
|
|
155
|
+
```html
|
|
156
|
+
<script src="https://cdn.example.com/lib.js"
|
|
157
|
+
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/ux"
|
|
158
|
+
crossorigin="anonymous"></script>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Use sha384/sha512, always include `crossorigin="anonymous"`, regenerate hashes on version updates. Generate: `curl -s URL | openssl dgst -sha384 -binary | openssl base64 -A`.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 4. Vulnerability Catalog
|
|
166
|
+
|
|
167
|
+
### VULN-01: Wildcard Origin with Credentials
|
|
168
|
+
**CWE-942.** `Access-Control-Allow-Origin: *` + `Access-Control-Allow-Credentials: true`. Browsers block this, but developers "fix" it by reflecting origin (VULN-02).
|
|
169
|
+
|
|
170
|
+
### VULN-02: Reflected Origin Without Validation
|
|
171
|
+
**CWE-346.** Server copies request `Origin` into response ACAO header. Any origin is trusted; attacker page reads authenticated responses.
|
|
172
|
+
```javascript
|
|
173
|
+
// VULNERABLE
|
|
174
|
+
res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
|
|
175
|
+
res.setHeader('Access-Control-Allow-Credentials', 'true');
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### VULN-03: Null Origin Bypass
|
|
179
|
+
**CWE-346.** Server allows `Access-Control-Allow-Origin: null`. Exploited via sandboxed iframes: `<iframe sandbox="allow-scripts" srcdoc="<script>fetch(url,{credentials:'include'})</script>">`.
|
|
180
|
+
|
|
181
|
+
### VULN-04: Regex Origin Bypass
|
|
182
|
+
**CWE-942.** `origin.includes('example.com')` matches `evil-example.com`. Fix: exact match or anchored regex `^https:\/\/[\w-]+\.example\.com$`.
|
|
183
|
+
|
|
184
|
+
### VULN-05: Preflight Cache Poisoning
|
|
185
|
+
**CWE-942.** Long `Access-Control-Max-Age` with dynamic origin. Cached preflight may allow stale origin bypass.
|
|
186
|
+
|
|
187
|
+
### VULN-06: Missing CSP
|
|
188
|
+
**CWE-693.** No defense-in-depth against XSS. Any injection vulnerability is trivially exploitable.
|
|
189
|
+
|
|
190
|
+
### VULN-07: CSP with unsafe-inline
|
|
191
|
+
**CWE-693.** `script-src 'unsafe-inline'` defeats CSP entirely. Use nonces instead.
|
|
192
|
+
|
|
193
|
+
### VULN-08: Missing HSTS
|
|
194
|
+
**CWE-319.** Protocol downgrade via MITM on first visit. Session cookies intercepted over HTTP.
|
|
195
|
+
|
|
196
|
+
### VULN-09: Clickjacking (Missing Frame Protection)
|
|
197
|
+
**CWE-1021.** Attacker frames target page with transparent iframe overlay. Fix: `X-Frame-Options: DENY` AND `frame-ancestors 'none'`.
|
|
198
|
+
|
|
199
|
+
### VULN-10: MIME Sniffing
|
|
200
|
+
**CWE-430.** Missing `X-Content-Type-Options: nosniff`. Uploaded files executed as HTML/JS.
|
|
201
|
+
|
|
202
|
+
### VULN-11: Referrer Leakage
|
|
203
|
+
**CWE-200.** Missing Referrer-Policy. Full URLs with tokens sent to third parties.
|
|
204
|
+
|
|
205
|
+
### VULN-12: Overly Permissive Permissions-Policy
|
|
206
|
+
**CWE-276.** XSS can activate camera, microphone, geolocation.
|
|
207
|
+
|
|
208
|
+
### VULN-13: Missing Cross-Origin Isolation
|
|
209
|
+
**CWE-693.** Missing COOP/COEP/CORP headers. Spectre-type side-channel attacks possible.
|
|
210
|
+
|
|
211
|
+
### VULN-14: CSP Report-Only Without Enforcement
|
|
212
|
+
**CWE-693.** Only `Content-Security-Policy-Report-Only` set. Monitoring without blocking = zero protection.
|
|
213
|
+
|
|
214
|
+
### VULN-15: No SRI for CDN Resources
|
|
215
|
+
**CWE-353.** Compromised CDN serves malicious scripts. Magecart-style card skimmer injection.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 5. Security Checklist
|
|
220
|
+
|
|
221
|
+
### CORS
|
|
222
|
+
- [ ] No wildcard `*` in ACAO when credentials are used
|
|
223
|
+
- [ ] Origin validated against explicit allowlist (not substring/regex)
|
|
224
|
+
- [ ] Null origin NOT in allowlist
|
|
225
|
+
- [ ] Allow-Methods restricted to required methods only
|
|
226
|
+
- [ ] Allow-Headers restricted to required headers only
|
|
227
|
+
- [ ] Max-Age set reasonably (< 86400)
|
|
228
|
+
- [ ] Preflight responses contain no sensitive data
|
|
229
|
+
- [ ] `Vary: Origin` set when ACAO changes per request
|
|
230
|
+
|
|
231
|
+
### Headers
|
|
232
|
+
- [ ] CSP enforced (not just report-only) with nonces, no `unsafe-inline`
|
|
233
|
+
- [ ] CSP `default-src 'none'` with explicit per-directive allowlists
|
|
234
|
+
- [ ] CSP `frame-ancestors 'none'` or specific origins
|
|
235
|
+
- [ ] HSTS with `max-age >= 31536000` and `includeSubDomains`
|
|
236
|
+
- [ ] `X-Frame-Options: DENY` set
|
|
237
|
+
- [ ] `X-Content-Type-Options: nosniff` set
|
|
238
|
+
- [ ] `Referrer-Policy: strict-origin-when-cross-origin` or stricter
|
|
239
|
+
- [ ] Permissions-Policy disables unused browser APIs
|
|
240
|
+
- [ ] `X-Powered-By` and server version headers removed
|
|
241
|
+
- [ ] COOP/CORP headers set to `same-origin`
|
|
242
|
+
|
|
243
|
+
### Deployment
|
|
244
|
+
- [ ] CSP violations reported to monitoring endpoint
|
|
245
|
+
- [ ] Headers applied on ALL response paths (including errors, redirects)
|
|
246
|
+
- [ ] CDN resources include SRI hashes
|
|
247
|
+
- [ ] HTML with nonces sets `Cache-Control: no-store`
|
|
248
|
+
- [ ] Headers verified after every deployment (CI/CD scan)
|
|
249
|
+
- [ ] CSP deployed in report-only first, then enforced
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 6. Tools and Automation
|
|
254
|
+
|
|
255
|
+
| Tool | URL / Package | Purpose |
|
|
256
|
+
|-----------------------|----------------------------------------|--------------------------------------|
|
|
257
|
+
| SecurityHeaders.com | https://securityheaders.com | A-F grade for HTTP security headers |
|
|
258
|
+
| Mozilla Observatory | https://developer.mozilla.org/en-US/observatory | 20+ header checks with guidance |
|
|
259
|
+
| CSP Evaluator | https://csp-evaluator.withgoogle.com | CSP bypass risk analysis |
|
|
260
|
+
| HSTS Preload | https://hstspreload.org | Preload eligibility check |
|
|
261
|
+
| Qualys SSL Labs | https://www.ssllabs.com/ssltest/ | TLS + HSTS verification |
|
|
262
|
+
| helmet (npm) | https://helmetjs.github.io/ | 13+ security headers for Express |
|
|
263
|
+
| cors (npm) | npmjs.com/package/cors | CORS middleware with validation |
|
|
264
|
+
| django-cors-headers | pypi.org/project/django-cors-headers | CORS for Django |
|
|
265
|
+
| report-uri.com | https://report-uri.com | CSP violation aggregation/alerting |
|
|
266
|
+
| Sentry CSP | sentry.io | CSP reports in error tracking |
|
|
267
|
+
|
|
268
|
+
CI/CD integration:
|
|
269
|
+
```bash
|
|
270
|
+
# Observatory CLI
|
|
271
|
+
observatory --host staging.example.com --min-grade B
|
|
272
|
+
# curl header check
|
|
273
|
+
curl -sI https://staging.example.com | grep -i 'strict-transport-security'
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 7. Platform-Specific Guidance
|
|
279
|
+
|
|
280
|
+
### Django (django-cors-headers)
|
|
281
|
+
```python
|
|
282
|
+
# settings.py
|
|
283
|
+
MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware', ...] # BEFORE CommonMiddleware
|
|
284
|
+
CORS_ALLOWED_ORIGINS = ['https://app.example.com']
|
|
285
|
+
CORS_ALLOW_CREDENTIALS = True
|
|
286
|
+
# NEVER: CORS_ALLOW_ALL_ORIGINS = True
|
|
287
|
+
|
|
288
|
+
SECURE_HSTS_SECONDS = 63072000
|
|
289
|
+
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
|
290
|
+
SECURE_HSTS_PRELOAD = True
|
|
291
|
+
SECURE_CONTENT_TYPE_NOSNIFF = True
|
|
292
|
+
X_FRAME_OPTIONS = 'DENY'
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Spring Boot (CorsConfiguration)
|
|
296
|
+
```java
|
|
297
|
+
@Bean
|
|
298
|
+
public CorsConfigurationSource corsConfigurationSource() {
|
|
299
|
+
CorsConfiguration config = new CorsConfiguration();
|
|
300
|
+
config.setAllowedOrigins(List.of("https://app.example.com")); // NOT "*"
|
|
301
|
+
config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
|
|
302
|
+
config.setAllowCredentials(true);
|
|
303
|
+
config.setMaxAge(86400L);
|
|
304
|
+
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
|
305
|
+
source.registerCorsConfiguration("/**", config);
|
|
306
|
+
return source;
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
**Important:** With Spring Security present, configure CORS via `HttpSecurity.cors()`, not `WebMvcConfigurer` -- the Security filter chain runs first and may silently ignore MVC CORS.
|
|
310
|
+
|
|
311
|
+
### CDN: Cloudflare Workers
|
|
312
|
+
```javascript
|
|
313
|
+
async function handleRequest(request) {
|
|
314
|
+
const response = await fetch(request);
|
|
315
|
+
const headers = new Headers(response.headers);
|
|
316
|
+
headers.set('Strict-Transport-Security', 'max-age=63072000; includeSubDomains; preload');
|
|
317
|
+
headers.set('X-Frame-Options', 'DENY');
|
|
318
|
+
headers.set('X-Content-Type-Options', 'nosniff');
|
|
319
|
+
headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');
|
|
320
|
+
headers.delete('X-Powered-By');
|
|
321
|
+
return new Response(response.body, { status: response.status, headers });
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### CDN: AWS CloudFront
|
|
326
|
+
Use Response Headers Policies (preferred over Lambda@Edge): configure HSTS, X-Frame-Options, CSP, Referrer-Policy, and X-Content-Type-Options in the CloudFront console or via CloudFormation.
|
|
327
|
+
|
|
328
|
+
### Mobile WebView
|
|
329
|
+
- Android: `Origin: null` from `file://`. Use `WebViewAssetLoader` for virtual https origin. Set `setAllowUniversalAccessFromFileURLs(false)`.
|
|
330
|
+
- iOS: Use `WKURLSchemeHandler` for local content. WKWebView enforces CORS for XHR/fetch.
|
|
331
|
+
- Never relax server CORS for WebView quirks. Use token auth, not cookies.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 8. Incident Patterns
|
|
336
|
+
|
|
337
|
+
### CORS Exploitation Chain
|
|
338
|
+
1. **Recon:** Attacker sends requests with various Origin headers (attacker.com, null, target.com.attacker.com)
|
|
339
|
+
2. **Discovery:** API reflects origin with `Access-Control-Allow-Credentials: true`
|
|
340
|
+
3. **Weaponization:** Craft page with `fetch()` using `credentials: 'include'`
|
|
341
|
+
4. **Delivery:** Phishing/watering hole sends victim to attacker page
|
|
342
|
+
5. **Exfiltration:** Victim's browser sends credentialed request; JS reads response, forwards to attacker
|
|
343
|
+
6. **Impact:** Account data, API keys, financial data stolen
|
|
344
|
+
|
|
345
|
+
### CSP Violation Monitoring
|
|
346
|
+
Report via `report-uri` or `report-to` directive. Monitor `violated-directive`, `blocked-uri`, `source-file`. Filter browser extension noise (`chrome-extension://`, `moz-extension://`). Spike in `inline` violations may indicate active XSS attempt -- correlate with WAF logs.
|
|
347
|
+
|
|
348
|
+
### Response Playbook
|
|
349
|
+
1. **Immediate:** Fix header at CDN/reverse proxy (fastest deployment path)
|
|
350
|
+
2. **Verify:** Scan ALL endpoints (error pages, redirects -- headers often missing there)
|
|
351
|
+
3. **Prevent:** Add header checks to CI/CD pipeline
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 9. Compliance and Standards
|
|
356
|
+
|
|
357
|
+
| Standard | Relevant Section |
|
|
358
|
+
|-----------------------------|----------------------------------------------------------|
|
|
359
|
+
| OWASP Top 10 (2021) | A05: Security Misconfiguration |
|
|
360
|
+
| OWASP ASVS v4.0 | V14: HTTP Security Configuration |
|
|
361
|
+
| OWASP Secure Headers | Full header taxonomy and recommended values |
|
|
362
|
+
| OWASP WSTG | WSTG-CONF-07 (HSTS), WSTG-CLNT-04 (CORS) |
|
|
363
|
+
| NIST SP 800-53 SC-8 | Transmission confidentiality (HSTS) |
|
|
364
|
+
| NIST SP 800-53 SI-10 | Input validation (CSP) |
|
|
365
|
+
| PCI DSS 4.0 Req 6.4.3 | CSP mandatory for payment pages (anti-Magecart) |
|
|
366
|
+
| GDPR Art. 32 / HIPAA | "Appropriate technical measures" -- headers are baseline |
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## 10. Code Examples: Vulnerable vs. Secure
|
|
371
|
+
|
|
372
|
+
### CORS Middleware (Full Secure Version)
|
|
373
|
+
```typescript
|
|
374
|
+
const ALLOWED_ORIGINS: ReadonlySet<string> = new Set([
|
|
375
|
+
'https://app.example.com', 'https://admin.example.com',
|
|
376
|
+
]);
|
|
377
|
+
|
|
378
|
+
function corsMiddleware(req, res, next) {
|
|
379
|
+
const origin = req.headers.origin;
|
|
380
|
+
if (origin && ALLOWED_ORIGINS.has(origin)) {
|
|
381
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
382
|
+
res.setHeader('Access-Control-Allow-Credentials', 'true');
|
|
383
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
|
|
384
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
385
|
+
res.setHeader('Access-Control-Max-Age', '86400');
|
|
386
|
+
res.setHeader('Vary', 'Origin'); // CRITICAL for caching correctness
|
|
387
|
+
}
|
|
388
|
+
if (req.method === 'OPTIONS') { res.status(204).end(); return; }
|
|
389
|
+
next();
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Automated Header Check (CI/CD Script)
|
|
394
|
+
```bash
|
|
395
|
+
#!/usr/bin/env bash
|
|
396
|
+
set -euo pipefail
|
|
397
|
+
URL="${1:?Usage: $0 <url>}"
|
|
398
|
+
PASS=true
|
|
399
|
+
check() {
|
|
400
|
+
local h="$1" exp="$2"
|
|
401
|
+
local v; v=$(curl -sI "$URL" | grep -i "^${h}:" | head -1 | cut -d: -f2- | xargs)
|
|
402
|
+
if [[ -z "$v" ]]; then echo "FAIL: ${h} MISSING"; PASS=false
|
|
403
|
+
else echo "PASS: ${h}"; fi
|
|
404
|
+
}
|
|
405
|
+
check "Strict-Transport-Security" "max-age="
|
|
406
|
+
check "Content-Security-Policy" "default-src"
|
|
407
|
+
check "X-Frame-Options" ""
|
|
408
|
+
check "X-Content-Type-Options" "nosniff"
|
|
409
|
+
check "Referrer-Policy" ""
|
|
410
|
+
if curl -sI "$URL" | grep -qi "^X-Powered-By:"; then
|
|
411
|
+
echo "FAIL: X-Powered-By should be removed"; PASS=false
|
|
412
|
+
fi
|
|
413
|
+
$PASS && echo "ALL PASSED" || { echo "FAILURES DETECTED"; exit 1; }
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## References
|
|
419
|
+
|
|
420
|
+
- OWASP Secure Headers Project: https://owasp.org/www-project-secure-headers/
|
|
421
|
+
- OWASP HTTP Headers Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html
|
|
422
|
+
- OWASP CSP Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html
|
|
423
|
+
- PortSwigger CORS Research: https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties
|
|
424
|
+
- PortSwigger Web Security Academy: https://portswigger.net/web-security/cors
|
|
425
|
+
- Google Strict CSP: https://csp.withgoogle.com/docs/strict-csp.html
|
|
426
|
+
- MDN CSP Guide: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP
|
|
427
|
+
- MDN SRI Guide: https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Subresource_Integrity
|
|
428
|
+
- Helmet.js: https://helmetjs.github.io/
|
|
429
|
+
- CWE-942: https://cwe.mitre.org/data/definitions/942.html
|
|
430
|
+
- CWE-346: https://cwe.mitre.org/data/definitions/346.html
|
|
431
|
+
- HackTricks CORS Bypass: https://book.hacktricks.xyz/pentesting-web/cors-bypass
|
|
432
|
+
- AWS CloudFront Security Headers: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/example-function-add-security-headers.html
|
|
433
|
+
- Intigriti CORS Exploitation Guide: https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-cors-misconfiguration-vulnerabilities
|