@critiq/rules 0.0.2 → 0.2.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/README.md +52 -4
- package/catalog.yaml +1775 -192
- package/package.json +6 -1
- package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
- package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
- package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
- package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
- package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
- package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
- package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
- package/rules/go/go.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/go/go.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/go/go.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +56 -0
- package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +55 -0
- package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +55 -0
- package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +55 -0
- package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +55 -0
- package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +55 -0
- package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +57 -0
- package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
- package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
- package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
- package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +55 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
- package/rules/go/go.security.sensitive-data-egress.rule.yaml +56 -0
- package/rules/go/go.security.tar-path-traversal.rule.yaml +55 -0
- package/rules/go/go.security.template-unescaped-request-value.rule.yaml +55 -0
- package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
- package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
- package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
- package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
- package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
- package/rules/go/go.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/go/go.testing.t-skip-without-ticket-reference.rule.yaml +33 -0
- package/rules/go/go.testing.time-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
- package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
- package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
- package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
- package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
- package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
- package/rules/java/java.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/java/java.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/java/java.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/java/java.security.android-screenshot-exposure.rule.yaml +48 -0
- package/rules/java/java.security.android-world-readable-mode.rule.yaml +48 -0
- package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
- package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
- package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
- package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
- package/rules/java/java.security.jpa-concatenated-query.rule.yaml +60 -0
- package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
- package/rules/java/java.security.null-cipher.rule.yaml +52 -0
- package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
- package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
- package/rules/java/java.security.reflected-output-from-request.rule.yaml +45 -0
- package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +48 -0
- package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
- package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +53 -0
- package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +53 -0
- package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +62 -0
- package/rules/java/java.security.spring-debug-exposure.rule.yaml +48 -0
- package/rules/java/java.security.spring-permit-all-default.rule.yaml +60 -0
- package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +60 -0
- package/rules/java/java.security.template-unescaped-user-output.rule.yaml +59 -0
- package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
- package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
- package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
- package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
- package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
- package/rules/java/java.testing.disabled-without-ticket-reference.rule.yaml +33 -0
- package/rules/java/java.testing.http-client-in-unit-test.rule.yaml +33 -0
- package/rules/java/java.testing.thread-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
- package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
- package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
- package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
- package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
- package/rules/php/php.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/php/php.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/php/php.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
- package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +51 -0
- package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +52 -0
- package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +55 -0
- package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +55 -0
- package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +58 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
- package/rules/php/php.security.sensitive-data-egress.rule.yaml +52 -0
- package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +55 -0
- package/rules/php/php.security.symfony-debug-exposure.rule.yaml +57 -0
- package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +51 -0
- package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
- package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
- package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +55 -0
- package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +55 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
- package/rules/php/php.testing.curl-in-unit-test.rule.yaml +33 -0
- package/rules/php/php.testing.mark-test-skipped-without-ticket-reference.rule.yaml +33 -0
- package/rules/php/php.testing.sleep-in-unit-test.rule.yaml +33 -0
- package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
- package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
- package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
- package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
- package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
- package/rules/python/py.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/python/py.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/python/py.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
- package/rules/python/py.security.debugger-import.rule.yaml +55 -0
- package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +59 -0
- package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
- package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
- package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +60 -0
- package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
- package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +60 -0
- package/rules/python/py.security.drf-allow-any-default.rule.yaml +59 -0
- package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +59 -0
- package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
- package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +56 -0
- package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
- package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +57 -0
- package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +57 -0
- package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +57 -0
- package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
- package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
- package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
- package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
- package/rules/python/py.testing.pytest-skip-without-ticket-reference.rule.yaml +33 -0
- package/rules/python/py.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/python/py.testing.time-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/ruby/ruby.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/ruby/ruby.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/ruby/ruby.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +57 -0
- package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +59 -0
- package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +59 -0
- package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +55 -0
- package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +55 -0
- package/rules/ruby/ruby.testing.focused-example.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.pending-without-ticket-reference.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.skip-without-ticket-reference.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.sleep-in-unit-test.rule.yaml +33 -0
- package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
- package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
- package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
- package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
- package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
- package/rules/rust/rust.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/rust/rust.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/rust/rust.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +60 -0
- package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +58 -0
- package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +60 -0
- package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
- package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
- package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
- package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +58 -0
- package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +60 -0
- package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
- package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +60 -0
- package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +57 -0
- package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
- package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +58 -0
- package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
- package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
- package/rules/rust/rust.testing.ignore-without-ticket-reference.rule.yaml +33 -0
- package/rules/rust/rust.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/rust/rust.testing.thread-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/shared/security.archive-path-traversal.rule.yaml +51 -0
- package/rules/shared/security.external-file-upload.rule.yaml +50 -0
- package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
- package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
- package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
- package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
- package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
- package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
- package/rules/shared/security.permissive-file-permissions.rule.yaml +50 -0
- package/rules/shared/security.sensitive-data-egress.rule.yaml +46 -0
- package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
- package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
- package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.assignment-in-condition.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.assignment-to-import-binding.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.async-promise-executor.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-function-parameter.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-import-source.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.duplicate-object-key.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.duplicate-switch-case.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.empty-block-statement.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.identical-comparison-operands.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.reassign-catch-binding.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.regexp-pattern-unusual-control-character.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.self-assignment.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
- package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +48 -0
- package/rules/typescript/ts.performance.no-array-spread-in-hot-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-cache-miss-from-unstable-key.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-expensive-sort-in-render-path.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-json-parse-stringify-clone.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-large-object-spread-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-n-plus-one-await-in-map.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-redundant-network-fetch.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-regex-construction-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-sync-fs-in-request-path.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-unbounded-concurrency.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-ambiguous-abbreviations.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-barrel-file-cycle.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-boolean-parameter-trap.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-dead-export.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-hidden-side-effect-import.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-inconsistent-error-shape.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-mixed-abstraction-level.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-primitive-obsession-in-domain-model.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-temporal-coupling.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-wide-public-surface.rule.yaml +27 -0
- package/rules/typescript/ts.react.no-accessibility-label-missing.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-activedescendant-on-non-focusable-host.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-click-without-keyboard-handler.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-deprecated-create-factory.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-deprecated-react-dom-root-api.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-derived-state-from-props.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-effect-fetch-without-cancellation.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-find-dom-node.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-img-missing-alt-text.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-index-as-key-in-dynamic-list.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-interactive-role-on-static-semantics.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-invalid-anchor-href.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-keyboard-interaction-without-widget-role.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-legacy-lifecycle.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-missing-error-boundary.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-positive-tabindex.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-static-element-with-synthetic-handlers.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-string-ref.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
- package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-uncontrolled-to-controlled-input.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-widget-role-without-tabindex.rule.yaml +36 -0
- package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
- package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +44 -0
- package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +48 -0
- package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +52 -0
- package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +52 -0
- package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +51 -0
- package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +51 -0
- package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +52 -0
- package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
- package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +46 -0
- package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +45 -0
- package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +45 -0
- package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +45 -0
- package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +48 -0
- package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
- package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +51 -0
- package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
- package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +51 -0
- package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +50 -0
- package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +51 -0
- package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
- package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +50 -0
- package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +54 -0
- package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
- package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +52 -0
- package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
- package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
- package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +45 -0
- package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +45 -0
- package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +46 -0
- package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
- package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +45 -0
- package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
- package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +45 -0
- package/rules/typescript/ts.security.log-injection.rule.yaml +46 -0
- package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
- package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +50 -0
- package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +51 -0
- package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +51 -0
- package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +52 -0
- package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
- package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
- package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
- package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +51 -0
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
- package/rules/typescript/ts.security.open-redirect.rule.yaml +12 -0
- package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +43 -0
- package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +11 -0
- package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
- package/rules/typescript/ts.security.ssrf.rule.yaml +11 -0
- package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
- package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
- package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +46 -0
- package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +46 -0
- package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
- package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +45 -0
- package/rules/typescript/ts.testing.no-flaky-timer-test.rule.yaml +38 -0
- package/rules/typescript/ts.testing.no-focused-test.rule.yaml +34 -0
- package/rules/typescript/ts.testing.no-missing-edge-case-tests.rule.yaml +35 -0
- package/rules/typescript/ts.testing.no-network-call-in-unit-test.rule.yaml +38 -0
- package/rules/typescript/ts.testing.no-skipped-test-without-ticket.rule.yaml +34 -0
- package/rules/typescript/ts.testing.no-snapshot-without-intent.rule.yaml +34 -0
- package/rules/typescript/ts.testing.no-test-only-code-in-production.rule.yaml +38 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.performance.no-sync-fs-in-request-path
|
|
5
|
+
title: Avoid no sync fs in request path
|
|
6
|
+
summary: Performance hygiene signal for python sources.
|
|
7
|
+
rationale: Performance hygiene signal for python sources.
|
|
8
|
+
tags:
|
|
9
|
+
- performance
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: experimental
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: py.performance.no-sync-fs-in-request-path
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: performance.io
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.66
|
|
26
|
+
tags:
|
|
27
|
+
- performance
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Avoid no sync fs in request path in `python` code
|
|
31
|
+
summary: "`${captures.issue.text}` matches py.performance.no-sync-fs-in-request-path."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Refactor this path to reduce avoidable runtime overhead.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.performance.no-unbounded-concurrency
|
|
5
|
+
title: Avoid no unbounded concurrency
|
|
6
|
+
summary: Performance hygiene signal for python sources.
|
|
7
|
+
rationale: Performance hygiene signal for python sources.
|
|
8
|
+
tags:
|
|
9
|
+
- performance
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: experimental
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: py.performance.no-unbounded-concurrency
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: performance.async
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.66
|
|
26
|
+
tags:
|
|
27
|
+
- performance
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Avoid no unbounded concurrency in `python` code
|
|
31
|
+
summary: "`${captures.issue.text}` matches py.performance.no-unbounded-concurrency."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Refactor this path to reduce avoidable runtime overhead.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.bind-all-interfaces
|
|
5
|
+
title: Avoid binding Python services to all interfaces
|
|
6
|
+
summary: Python network services should avoid explicit binds to `0.0.0.0` or `::` unless public exposure is intentional and controlled.
|
|
7
|
+
rationale: Binding every interface can unintentionally expose internal services beyond expected trust boundaries.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-668
|
|
13
|
+
title: Exposure of Resource to Wrong Sphere
|
|
14
|
+
- kind: url
|
|
15
|
+
title: CWE-668 Exposure of Resource to Wrong Sphere
|
|
16
|
+
url: https://cwe.mitre.org/data/definitions/668.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- python
|
|
20
|
+
- network
|
|
21
|
+
- exposure
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- python
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.py"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/test_*.py"
|
|
34
|
+
- "**/*_test.py"
|
|
35
|
+
- "**/migrations/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: python.security.bind-all-interfaces
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.network
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.9
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- python
|
|
48
|
+
- network
|
|
49
|
+
- exposure
|
|
50
|
+
message:
|
|
51
|
+
title: Restrict interface bind in `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` binds a service to all network interfaces."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: Prefer loopback or an explicit interface bind unless broad exposure is required and defended by network controls.
|
|
55
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.debugger-import
|
|
5
|
+
title: Remove debugger imports from production code
|
|
6
|
+
summary: Production Python modules should not ship with interactive debugger imports.
|
|
7
|
+
rationale: Debugger modules can expose introspection hooks and halt execution paths in deployed environments.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-209
|
|
13
|
+
title: Generation of Error Message Containing Sensitive Information
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Error Handling Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- python
|
|
20
|
+
- debugging
|
|
21
|
+
- hardening
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- python
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.py"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/test_*.py"
|
|
34
|
+
- "**/*_test.py"
|
|
35
|
+
- "**/migrations/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: python.security.debugger-import
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.misconfiguration
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.86
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- python
|
|
48
|
+
- debugging
|
|
49
|
+
- hardening
|
|
50
|
+
message:
|
|
51
|
+
title: Remove debugger import `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` imports a debugger module in runtime code."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: Remove debugger imports from committed runtime modules and gate debugging tools to local-only workflows.
|
|
55
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.django-csrf-exempt-state-changing
|
|
5
|
+
title: Avoid CSRF exemptions on state-changing Django views
|
|
6
|
+
summary: Browser-facing Django views that change state should remain CSRF-protected unless they are explicitly token-authenticated APIs.
|
|
7
|
+
rationale: >-
|
|
8
|
+
Using django.decorators.csrf.csrf_exempt removes CSRF defenses for session-backed browsers,
|
|
9
|
+
enabling cross-site request forgery against unsafe methods.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-352
|
|
15
|
+
title: Cross-Site Request Forgery (CSRF)
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross-Site Request Forgery Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Django deployment checklist
|
|
21
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- python
|
|
25
|
+
- django
|
|
26
|
+
- csrf
|
|
27
|
+
- rules-catalog
|
|
28
|
+
stability: stable
|
|
29
|
+
appliesTo: block
|
|
30
|
+
scope:
|
|
31
|
+
languages:
|
|
32
|
+
- python
|
|
33
|
+
paths:
|
|
34
|
+
include:
|
|
35
|
+
- "**/*.py"
|
|
36
|
+
exclude:
|
|
37
|
+
- "**/tests/**"
|
|
38
|
+
- "**/test_*.py"
|
|
39
|
+
- "**/*_test.py"
|
|
40
|
+
- "**/migrations/**"
|
|
41
|
+
match:
|
|
42
|
+
fact:
|
|
43
|
+
kind: python.security.django-csrf-exempt-state-changing
|
|
44
|
+
bind: issue
|
|
45
|
+
emit:
|
|
46
|
+
finding:
|
|
47
|
+
category: security.authentication
|
|
48
|
+
severity: high
|
|
49
|
+
confidence: 0.82
|
|
50
|
+
tags:
|
|
51
|
+
- security
|
|
52
|
+
- django
|
|
53
|
+
- csrf
|
|
54
|
+
message:
|
|
55
|
+
title: Review CSRF exemption `${captures.issue.text}`
|
|
56
|
+
summary: "`${captures.issue.text}` is applied near code that handles POST/PUT/PATCH/DELETE or `request.POST`, which is risky for browser sessions."
|
|
57
|
+
remediation:
|
|
58
|
+
summary: Remove `@csrf_exempt`, enforce CSRF tokens for browser views, or constrain the endpoint to non-session authentication with explicit CSRF policy.
|
|
59
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.django-format-html-unsafe
|
|
5
|
+
title: Review dynamic interpolation in Django format_html
|
|
6
|
+
summary: Django `format_html` calls with placeholder templates and dynamic arguments should be reviewed for unsafe output composition.
|
|
7
|
+
rationale: Unsafe interpolation patterns can still produce dangerous HTML when trusted and untrusted fragments are mixed incorrectly.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-79
|
|
13
|
+
title: Cross-site Scripting (XSS)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- xss
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/*.py"
|
|
34
|
+
exclude:
|
|
35
|
+
- "**/tests/**"
|
|
36
|
+
- "**/test_*.py"
|
|
37
|
+
- "**/*_test.py"
|
|
38
|
+
match:
|
|
39
|
+
fact:
|
|
40
|
+
kind: python.security.django-format-html-unsafe
|
|
41
|
+
bind: issue
|
|
42
|
+
emit:
|
|
43
|
+
finding:
|
|
44
|
+
category: security.output-encoding
|
|
45
|
+
severity: high
|
|
46
|
+
confidence: 0.8
|
|
47
|
+
tags:
|
|
48
|
+
- security
|
|
49
|
+
- django
|
|
50
|
+
- xss
|
|
51
|
+
message:
|
|
52
|
+
title: Audit Django HTML interpolation `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` interpolates dynamic values into `format_html`; confirm values are safe for the rendered context."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: Keep templates static, ensure interpolated values are trusted for the target context, and avoid assembling HTML from user-controlled fragments.
|
|
56
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.django-mark-safe
|
|
5
|
+
title: Avoid Django mark_safe for dynamic content
|
|
6
|
+
summary: "Django responses should avoid `mark_safe` when content can include untrusted input."
|
|
7
|
+
rationale: "`mark_safe` bypasses Django escaping and can introduce cross-site scripting when values are not strictly trusted."
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-79
|
|
13
|
+
title: Cross-site Scripting (XSS)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- xss
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/*.py"
|
|
34
|
+
exclude:
|
|
35
|
+
- "**/tests/**"
|
|
36
|
+
- "**/test_*.py"
|
|
37
|
+
- "**/*_test.py"
|
|
38
|
+
match:
|
|
39
|
+
fact:
|
|
40
|
+
kind: python.security.django-mark-safe
|
|
41
|
+
bind: issue
|
|
42
|
+
emit:
|
|
43
|
+
finding:
|
|
44
|
+
category: security.output-encoding
|
|
45
|
+
severity: high
|
|
46
|
+
confidence: 0.88
|
|
47
|
+
tags:
|
|
48
|
+
- security
|
|
49
|
+
- django
|
|
50
|
+
- xss
|
|
51
|
+
message:
|
|
52
|
+
title: Remove unsafe HTML trust `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` bypasses escaping and can expose XSS when rendered with variable data."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: "Prefer Django auto-escaping or sanitize untrusted values before rendering instead of forcing trust with `mark_safe`."
|
|
56
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.django-missing-csrf-middleware
|
|
5
|
+
title: Enable Django CSRF middleware for browser apps
|
|
6
|
+
summary: Django projects using cookie-backed sessions should include `CsrfViewMiddleware` in `MIDDLEWARE`.
|
|
7
|
+
rationale: Without CSRF middleware, Django cannot enforce CSRF tokens on unsafe HTTP methods for browser clients.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-352
|
|
13
|
+
title: Cross-Site Request Forgery (CSRF)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross-Site Request Forgery Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- csrf
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/settings/**/*.py"
|
|
34
|
+
- "**/*settings*.py"
|
|
35
|
+
exclude:
|
|
36
|
+
- "**/settings/local.py"
|
|
37
|
+
- "**/settings/dev.py"
|
|
38
|
+
- "**/tests/**"
|
|
39
|
+
- "**/test_*.py"
|
|
40
|
+
- "**/*_test.py"
|
|
41
|
+
- "**/migrations/**"
|
|
42
|
+
match:
|
|
43
|
+
fact:
|
|
44
|
+
kind: python.security.django-missing-csrf-middleware
|
|
45
|
+
bind: issue
|
|
46
|
+
emit:
|
|
47
|
+
finding:
|
|
48
|
+
category: security.misconfiguration
|
|
49
|
+
severity: medium
|
|
50
|
+
confidence: 0.78
|
|
51
|
+
tags:
|
|
52
|
+
- security
|
|
53
|
+
- django
|
|
54
|
+
- csrf
|
|
55
|
+
message:
|
|
56
|
+
title: Add CSRF middleware to Django `${captures.issue.text}`
|
|
57
|
+
summary: "`MIDDLEWARE` is declared without `django.middleware.csrf.CsrfViewMiddleware`, which disables framework CSRF checks."
|
|
58
|
+
remediation:
|
|
59
|
+
summary: Insert `django.middleware.csrf.CsrfViewMiddleware` into `MIDDLEWARE` according to the Django deployment checklist ordering guidance.
|
|
60
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.django-security-middleware-missing
|
|
5
|
+
title: Include Django SecurityMiddleware in middleware stack
|
|
6
|
+
summary: Django settings should include `django.middleware.security.SecurityMiddleware` in `MIDDLEWARE`.
|
|
7
|
+
rationale: Missing SecurityMiddleware can disable key hardening controls such as transport, header, and redirect protections.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-16
|
|
13
|
+
title: Configuration
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Secure Configuration Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- configuration
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/settings/**/*.py"
|
|
34
|
+
- "**/*settings*.py"
|
|
35
|
+
exclude:
|
|
36
|
+
- "**/settings/local.py"
|
|
37
|
+
- "**/settings/dev.py"
|
|
38
|
+
- "**/tests/**"
|
|
39
|
+
- "**/test_*.py"
|
|
40
|
+
- "**/*_test.py"
|
|
41
|
+
- "**/migrations/**"
|
|
42
|
+
match:
|
|
43
|
+
fact:
|
|
44
|
+
kind: python.security.django-security-middleware-missing
|
|
45
|
+
bind: issue
|
|
46
|
+
emit:
|
|
47
|
+
finding:
|
|
48
|
+
category: security.misconfiguration
|
|
49
|
+
severity: high
|
|
50
|
+
confidence: 0.9
|
|
51
|
+
tags:
|
|
52
|
+
- security
|
|
53
|
+
- django
|
|
54
|
+
- configuration
|
|
55
|
+
message:
|
|
56
|
+
title: Add Django SecurityMiddleware near `${captures.issue.text}`
|
|
57
|
+
summary: "`MIDDLEWARE` is declared without `django.middleware.security.SecurityMiddleware`."
|
|
58
|
+
remediation:
|
|
59
|
+
summary: Add `django.middleware.security.SecurityMiddleware` to `MIDDLEWARE` following Django ordering guidance.
|
|
60
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.django-unsafe-production-settings
|
|
5
|
+
title: Avoid unsafe Django production settings
|
|
6
|
+
summary: Production Django settings should disable debug mode, restrict hosts, protect secrets, and enable HTTPS-aligned cookie flags.
|
|
7
|
+
rationale: Misconfigured Django defaults expose debug traces, enable host header attacks, leak secrets, and weaken cookie transport protections.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-16
|
|
13
|
+
title: Configuration
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Secure Configuration Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- configuration
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/settings/**/*.py"
|
|
34
|
+
- "**/*settings*.py"
|
|
35
|
+
exclude:
|
|
36
|
+
- "**/settings/local.py"
|
|
37
|
+
- "**/settings/dev.py"
|
|
38
|
+
- "**/tests/**"
|
|
39
|
+
- "**/test_*.py"
|
|
40
|
+
- "**/*_test.py"
|
|
41
|
+
- "**/migrations/**"
|
|
42
|
+
match:
|
|
43
|
+
fact:
|
|
44
|
+
kind: python.security.django-unsafe-production-settings
|
|
45
|
+
bind: issue
|
|
46
|
+
emit:
|
|
47
|
+
finding:
|
|
48
|
+
category: security.misconfiguration
|
|
49
|
+
severity: high
|
|
50
|
+
confidence: 0.88
|
|
51
|
+
tags:
|
|
52
|
+
- security
|
|
53
|
+
- django
|
|
54
|
+
- configuration
|
|
55
|
+
message:
|
|
56
|
+
title: Fix risky Django setting `${captures.issue.text}`
|
|
57
|
+
summary: "`${captures.issue.text}` weakens production security posture for Django deployment."
|
|
58
|
+
remediation:
|
|
59
|
+
summary: Align settings with your deployment checklist—disable DEBUG, pin ALLOWED_HOSTS, load secrets from the environment, and enable secure cookie and HTTPS flags.
|
|
60
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.drf-allow-any-default
|
|
5
|
+
title: Avoid AllowAny as DRF default permission
|
|
6
|
+
summary: Django REST Framework APIs should default to authenticated permission classes instead of `AllowAny`.
|
|
7
|
+
rationale: Default `AllowAny` exposes mutation-heavy APIs unless every view overrides permissions explicitly.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-862
|
|
13
|
+
title: Missing Authorization
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Authorization Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- drf
|
|
25
|
+
- authorization
|
|
26
|
+
- rules-catalog
|
|
27
|
+
stability: stable
|
|
28
|
+
appliesTo: block
|
|
29
|
+
scope:
|
|
30
|
+
languages:
|
|
31
|
+
- python
|
|
32
|
+
paths:
|
|
33
|
+
include:
|
|
34
|
+
- "**/*.py"
|
|
35
|
+
exclude:
|
|
36
|
+
- "**/tests/**"
|
|
37
|
+
- "**/test_*.py"
|
|
38
|
+
- "**/*_test.py"
|
|
39
|
+
- "**/migrations/**"
|
|
40
|
+
match:
|
|
41
|
+
fact:
|
|
42
|
+
kind: python.security.drf-allow-any-default
|
|
43
|
+
bind: issue
|
|
44
|
+
emit:
|
|
45
|
+
finding:
|
|
46
|
+
category: security.authorization
|
|
47
|
+
severity: high
|
|
48
|
+
confidence: 0.85
|
|
49
|
+
tags:
|
|
50
|
+
- security
|
|
51
|
+
- django
|
|
52
|
+
- drf
|
|
53
|
+
- authorization
|
|
54
|
+
message:
|
|
55
|
+
title: Replace permissive DRF defaults `${captures.issue.text}`
|
|
56
|
+
summary: "`REST_FRAMEWORK` enables `AllowAny` via `DEFAULT_PERMISSION_CLASSES`, which is unsafe for default API posture."
|
|
57
|
+
remediation:
|
|
58
|
+
summary: Prefer `IsAuthenticated` or another restrictive default, then opt-in public access only where documented.
|
|
59
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.drf-allow-any-unsafe-method
|
|
5
|
+
title: Avoid AllowAny on unsafe DRF methods
|
|
6
|
+
summary: DRF views that accept POST, PUT, PATCH, or DELETE should not declare `AllowAny` unless the endpoint is intentionally public.
|
|
7
|
+
rationale: Open unsafe methods allow unauthenticated clients to mutate data and violate least-privilege API access.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-862
|
|
13
|
+
title: Missing Authorization
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Authorization Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Django deployment checklist
|
|
19
|
+
url: https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- django
|
|
24
|
+
- drf
|
|
25
|
+
- authorization
|
|
26
|
+
- rules-catalog
|
|
27
|
+
stability: stable
|
|
28
|
+
appliesTo: block
|
|
29
|
+
scope:
|
|
30
|
+
languages:
|
|
31
|
+
- python
|
|
32
|
+
paths:
|
|
33
|
+
include:
|
|
34
|
+
- "**/*.py"
|
|
35
|
+
exclude:
|
|
36
|
+
- "**/tests/**"
|
|
37
|
+
- "**/test_*.py"
|
|
38
|
+
- "**/*_test.py"
|
|
39
|
+
- "**/migrations/**"
|
|
40
|
+
match:
|
|
41
|
+
fact:
|
|
42
|
+
kind: python.security.drf-allow-any-unsafe-method
|
|
43
|
+
bind: issue
|
|
44
|
+
emit:
|
|
45
|
+
finding:
|
|
46
|
+
category: security.authorization
|
|
47
|
+
severity: high
|
|
48
|
+
confidence: 0.8
|
|
49
|
+
tags:
|
|
50
|
+
- security
|
|
51
|
+
- django
|
|
52
|
+
- drf
|
|
53
|
+
- authorization
|
|
54
|
+
message:
|
|
55
|
+
title: Tighten permissions around `${captures.issue.text}`
|
|
56
|
+
summary: "`${captures.issue.text}` combines `AllowAny` with an unsafe HTTP method declaration."
|
|
57
|
+
remediation:
|
|
58
|
+
summary: Require authentication or scoped permissions for unsafe verbs unless the handler is explicitly public and documented.
|
|
59
|
+
|