@critiq/rules 0.1.0 → 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 +1 -1
- package/catalog.yaml +617 -0
- package/package.json +1 -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.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +10 -0
- package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +10 -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 +10 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
- package/rules/go/go.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/go/go.security.tar-path-traversal.rule.yaml +10 -0
- package/rules/go/go.security.template-unescaped-request-value.rule.yaml +10 -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/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.security.android-screenshot-exposure.rule.yaml +13 -0
- package/rules/java/java.security.android-world-readable-mode.rule.yaml +13 -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 +13 -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 +10 -0
- package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +13 -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 +13 -0
- package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +13 -0
- package/rules/java/java.security.spring-debug-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-permit-all-default.rule.yaml +13 -0
- package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +13 -0
- package/rules/java/java.security.template-unescaped-user-output.rule.yaml +10 -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/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.security.debug-function-exposure.rule.yaml +55 -0
- package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +10 -0
- package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +10 -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 +10 -0
- package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +13 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
- package/rules/php/php.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +13 -0
- package/rules/php/php.security.symfony-debug-exposure.rule.yaml +13 -0
- package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +10 -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 +13 -0
- package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +13 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +53 -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.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 +13 -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 +13 -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 +13 -0
- package/rules/python/py.security.drf-allow-any-default.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +13 -0
- package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
- package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +13 -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 +13 -0
- package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +13 -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/ruby/ruby.security.rails-csrf-disabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +13 -0
- package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +10 -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.security.actix-wildcard-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +13 -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 +13 -0
- package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +13 -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 +13 -0
- package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +10 -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 +13 -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/shared/security.archive-path-traversal.rule.yaml +10 -0
- package/rules/shared/security.external-file-upload.rule.yaml +10 -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 +10 -0
- package/rules/shared/security.sensitive-data-egress.rule.yaml +10 -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.control-flow-in-finally.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -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.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 +13 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -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-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-jsx-props-spread.rule.yaml +35 -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-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.runtime.no-process-exit.rule.yaml +44 -0
- package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +13 -0
- package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +16 -0
- package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +13 -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 +10 -0
- package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +13 -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 +16 -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 +16 -0
- package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
- package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +16 -0
- package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +16 -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 +16 -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 +10 -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 +10 -0
- package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +10 -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 +10 -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 +10 -0
- package/rules/typescript/ts.security.log-injection.rule.yaml +10 -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 +16 -0
- package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +16 -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 +13 -0
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
- package/rules/typescript/ts.security.open-redirect.rule.yaml +10 -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 +10 -0
- package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +10 -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 +10 -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 +10 -0
- package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +10 -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 +10 -0
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
WordPress SQL calls should not interpolate request values directly into query strings.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Dynamic SQL without `$wpdb->prepare` enables injection and unauthorized data access/manipulation.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-89
|
|
15
|
+
title: SQL Injection
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: SQL Injection Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: WordPress plugin security
|
|
21
|
+
url: https://developer.wordpress.org/apis/security/
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -40,3 +52,4 @@ emit:
|
|
|
40
52
|
remediation:
|
|
41
53
|
summary: >-
|
|
42
54
|
Build SQL through `$wpdb->prepare` placeholders and sanitize scalar inputs before passing them to query execution calls.
|
|
55
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.security.xml-external-entity
|
|
5
|
+
title: Harden PHP XML parsing against external entities
|
|
6
|
+
summary: >-
|
|
7
|
+
XML parsing should disable external entities and avoid LIBXML_NOENT or libxml_disable_entity_loader(false).
|
|
8
|
+
rationale: >-
|
|
9
|
+
Unsafe XML parser configuration enables XXE attacks that can leak files and reach internal services.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-611
|
|
15
|
+
title: Improper Restriction of XML External Entity Reference
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: XML External Entity (XXE) Processing
|
|
18
|
+
url: https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- php
|
|
22
|
+
- xml
|
|
23
|
+
- xxe
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: stable
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- php
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.php"
|
|
33
|
+
match:
|
|
34
|
+
fact:
|
|
35
|
+
kind: php.security.xml-external-entity
|
|
36
|
+
bind: issue
|
|
37
|
+
emit:
|
|
38
|
+
finding:
|
|
39
|
+
category: security.injection
|
|
40
|
+
severity: high
|
|
41
|
+
confidence: 0.9
|
|
42
|
+
tags:
|
|
43
|
+
- security
|
|
44
|
+
- php
|
|
45
|
+
- xml
|
|
46
|
+
- xxe
|
|
47
|
+
message:
|
|
48
|
+
title: Harden XML parsing in `${captures.issue.text}`
|
|
49
|
+
summary: "`${captures.issue.text}` parses XML without external-entity protections."
|
|
50
|
+
remediation:
|
|
51
|
+
summary: >-
|
|
52
|
+
Call libxml_disable_entity_loader(true) before parsing and pass LIBXML_NONET; never enable LIBXML_NOENT.
|
|
53
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.correctness.assert-on-tuple
|
|
5
|
+
title: Avoid tuple expression in assert
|
|
6
|
+
summary: Asserting a tuple literal-like expression is usually always truthy and can mask failing checks.
|
|
7
|
+
rationale: A non-empty tuple evaluates to true, so tuple assertions often pass even when the intended condition is false.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: python.correctness.assert-on-tuple
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness.logic
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.95
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Fix tuple-style assert `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` asserts a tuple expression, which may always evaluate to truthy."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Assert a single boolean predicate or split checks into separate assert statements.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.correctness.bare-except
|
|
5
|
+
title: Avoid bare except handlers
|
|
6
|
+
summary: Bare exception handlers catch all errors and hide root causes.
|
|
7
|
+
rationale: Catching every throwable without narrowing can swallow interruptions and make failures hard to diagnose.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: python.correctness.bare-except
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness.control-flow
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.96
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Replace bare except `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` catches every exception type without restriction."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Catch specific expected exceptions and let unexpected failures propagate.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.correctness.broad-exception-handler
|
|
5
|
+
title: Avoid overly broad exception handlers
|
|
6
|
+
summary: Catching `Exception` or `BaseException` makes error handling too broad.
|
|
7
|
+
rationale: Broad handlers hide programming errors and can interfere with expected process-level exceptions.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: python.correctness.broad-exception-handler
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness.control-flow
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.95
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Narrow exception scope `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` catches a broad exception base type."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Catch only the concrete exception classes this block can recover from.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.correctness.dangerous-mutable-default
|
|
5
|
+
title: Avoid mutable default function arguments
|
|
6
|
+
summary: Mutable defaults in function signatures retain state across calls.
|
|
7
|
+
rationale: Reusing the same list, dict, or set instance can leak data between calls and produce non-deterministic behavior.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: python.correctness.dangerous-mutable-default
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness.language
|
|
24
|
+
severity: high
|
|
25
|
+
confidence: 0.96
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Replace mutable default `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` defines a mutable default argument that persists across invocations."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Use `None` as the default and construct a fresh mutable object inside the function.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.correctness.duplicate-dict-key
|
|
5
|
+
title: Avoid duplicate keys in dict literals
|
|
6
|
+
summary: Repeated keys in a dict literal overwrite earlier entries.
|
|
7
|
+
rationale: Silent key replacement hides bugs and can invalidate intended configuration values.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- python
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- python
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: python.correctness.duplicate-dict-key
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: correctness.language
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.95
|
|
26
|
+
tags:
|
|
27
|
+
- correctness
|
|
28
|
+
- python
|
|
29
|
+
message:
|
|
30
|
+
title: Resolve duplicate dict key `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` appears multiple times in a single dict literal."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Keep each key unique and merge or rename entries so earlier values are not silently replaced.
|
|
@@ -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
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
rationale: >-
|
|
8
8
|
Using django.decorators.csrf.csrf_exempt removes CSRF defenses for session-backed browsers,
|
|
9
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/
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- python
|
|
@@ -44,3 +56,4 @@ emit:
|
|
|
44
56
|
summary: "`${captures.issue.text}` is applied near code that handles POST/PUT/PATCH/DELETE or `request.POST`, which is risky for browser sessions."
|
|
45
57
|
remediation:
|
|
46
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
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Enable Django CSRF middleware for browser apps
|
|
6
6
|
summary: Django projects using cookie-backed sessions should include `CsrfViewMiddleware` in `MIDDLEWARE`.
|
|
7
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/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -45,3 +57,4 @@ emit:
|
|
|
45
57
|
summary: "`MIDDLEWARE` is declared without `django.middleware.csrf.CsrfViewMiddleware`, which disables framework CSRF checks."
|
|
46
58
|
remediation:
|
|
47
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
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Avoid unsafe Django production settings
|
|
6
6
|
summary: Production Django settings should disable debug mode, restrict hosts, protect secrets, and enable HTTPS-aligned cookie flags.
|
|
7
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/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -45,3 +57,4 @@ emit:
|
|
|
45
57
|
summary: "`${captures.issue.text}` weakens production security posture for Django deployment."
|
|
46
58
|
remediation:
|
|
47
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
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Avoid AllowAny as DRF default permission
|
|
6
6
|
summary: Django REST Framework APIs should default to authenticated permission classes instead of `AllowAny`.
|
|
7
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/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -44,3 +56,4 @@ emit:
|
|
|
44
56
|
summary: "`REST_FRAMEWORK` enables `AllowAny` via `DEFAULT_PERMISSION_CLASSES`, which is unsafe for default API posture."
|
|
45
57
|
remediation:
|
|
46
58
|
summary: Prefer `IsAuthenticated` or another restrictive default, then opt-in public access only where documented.
|
|
59
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Avoid AllowAny on unsafe DRF methods
|
|
6
6
|
summary: DRF views that accept POST, PUT, PATCH, or DELETE should not declare `AllowAny` unless the endpoint is intentionally public.
|
|
7
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/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -44,3 +56,4 @@ emit:
|
|
|
44
56
|
summary: "`${captures.issue.text}` combines `AllowAny` with an unsafe HTTP method declaration."
|
|
45
57
|
remediation:
|
|
46
58
|
summary: Require authentication or scoped permissions for unsafe verbs unless the handler is explicitly public and documented.
|
|
59
|
+
|