@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,60 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.axum-insecure-cors-with-credentials
|
|
5
|
+
title: Avoid permissive tower-http CORS with credentials in Axum
|
|
6
|
+
summary: >-
|
|
7
|
+
Do not pair wildcard or `very_permissive` origin policies with credentialed CORS or private-network access in `tower-http`.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Browsers treat credentialed CORS as trusted cross-origin behavior; permissive origin lists undermine that contract and often hide missing explicit allowlists.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-942
|
|
15
|
+
title: Permissive Cross-domain Policy with Untrusted Domains
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross-Origin Resource Sharing (CORS)
|
|
18
|
+
url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
|
|
19
|
+
- kind: url
|
|
20
|
+
title: ANSSI Rust secure development guidelines
|
|
21
|
+
url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- rust
|
|
25
|
+
- axum
|
|
26
|
+
- cors
|
|
27
|
+
- rules-catalog
|
|
28
|
+
stability: experimental
|
|
29
|
+
appliesTo: block
|
|
30
|
+
scope:
|
|
31
|
+
languages:
|
|
32
|
+
- rust
|
|
33
|
+
paths:
|
|
34
|
+
include:
|
|
35
|
+
- "**/*.rs"
|
|
36
|
+
exclude:
|
|
37
|
+
- "**/tests/**"
|
|
38
|
+
- "**/*_test.rs"
|
|
39
|
+
- "**/examples/**"
|
|
40
|
+
match:
|
|
41
|
+
fact:
|
|
42
|
+
kind: rust.security.axum-insecure-cors-with-credentials
|
|
43
|
+
bind: issue
|
|
44
|
+
emit:
|
|
45
|
+
finding:
|
|
46
|
+
category: security.misconfiguration
|
|
47
|
+
severity: high
|
|
48
|
+
confidence: 0.8
|
|
49
|
+
tags:
|
|
50
|
+
- security
|
|
51
|
+
- rust
|
|
52
|
+
- axum
|
|
53
|
+
- cors
|
|
54
|
+
message:
|
|
55
|
+
title: Tighten CORS configuration around `${captures.issue.text}`
|
|
56
|
+
summary: "`${captures.issue.text}` combines permissive origins with credentialed or private-network CORS behavior."
|
|
57
|
+
remediation:
|
|
58
|
+
summary: >-
|
|
59
|
+
Prefer explicit HTTPS `AllowOrigin` lists, avoid `CorsLayer::very_permissive` with `allow_credentials(true)`, and only enable `allow_private_network` with strict origin controls.
|
|
60
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.bind-all-interfaces
|
|
5
|
+
title: Avoid binding Rust services to all interfaces
|
|
6
|
+
summary: >-
|
|
7
|
+
Rust network services should avoid explicit binds to `0.0.0.0`, `::`, or `[::]` unless public exposure is intentional and controlled.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Binding every interface can unintentionally expose internal services beyond expected trust boundaries.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-668
|
|
15
|
+
title: Exposure of Resource to Wrong Sphere
|
|
16
|
+
- kind: url
|
|
17
|
+
title: CWE-668 Exposure of Resource to Wrong Sphere
|
|
18
|
+
url: https://cwe.mitre.org/data/definitions/668.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- network
|
|
23
|
+
- exposure
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.bind-all-interfaces
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.network
|
|
44
|
+
severity: medium
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- network
|
|
50
|
+
- exposure
|
|
51
|
+
message:
|
|
52
|
+
title: Restrict interface bind in `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` binds a service to all network interfaces."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Prefer loopback or an explicit interface bind unless broad exposure is required and defended by network controls.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.insecure-ssh-host-key
|
|
5
|
+
title: Verify SSH host keys before connecting
|
|
6
|
+
summary: >-
|
|
7
|
+
SSH clients must not disable host key verification.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Skipping host key checks enables person-in-the-middle attacks against SSH sessions.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-668
|
|
15
|
+
title: Exposure of Resource to Wrong Sphere
|
|
16
|
+
- kind: url
|
|
17
|
+
title: CWE-668 Exposure of Resource to Wrong Sphere
|
|
18
|
+
url: https://cwe.mitre.org/data/definitions/668.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- ssh
|
|
23
|
+
- network
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.insecure-ssh-host-key
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.network
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- ssh
|
|
50
|
+
- network
|
|
51
|
+
message:
|
|
52
|
+
title: Enable SSH host key verification near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` disables SSH host key verification."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Keep host key checking enabled and pin known host keys or use a trusted known_hosts store.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.insecure-ssl-protocol
|
|
5
|
+
title: Reject deprecated SSL/TLS protocol versions
|
|
6
|
+
summary: >-
|
|
7
|
+
Rust code must not enable SSLv3, TLS 1.0, or TLS 1.1 in TLS configuration.
|
|
8
|
+
rationale: >-
|
|
9
|
+
These protocol versions have known weaknesses and are deprecated for secure transport.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-319
|
|
15
|
+
title: Cleartext Transmission of Sensitive Information
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Transport Layer Security Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- tls
|
|
23
|
+
- cryptography
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.insecure-ssl-protocol
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.cryptography
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- tls
|
|
50
|
+
- cryptography
|
|
51
|
+
message:
|
|
52
|
+
title: Remove insecure TLS protocol near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` references a deprecated SSL/TLS protocol version."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Require TLS 1.2 or TLS 1.3 and remove SSLv3, TLS 1.0, and TLS 1.1 from allowed protocol lists.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.insecure-temp-file
|
|
5
|
+
title: Avoid predictable or permissionless temporary files
|
|
6
|
+
summary: >-
|
|
7
|
+
Temporary file creation should use secure helpers with random suffixes and restrictive permissions.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Predictable temp paths and default-permission temp files enable symlink races and information disclosure.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-434
|
|
15
|
+
title: Unrestricted Upload of File with Dangerous Type
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: File Upload Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- filesystem
|
|
23
|
+
- tempfile
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.insecure-temp-file
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.filesystem
|
|
44
|
+
severity: medium
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- filesystem
|
|
50
|
+
- tempfile
|
|
51
|
+
message:
|
|
52
|
+
title: Use secure temp file creation near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` creates a temporary file with an insecure pattern."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Use `tempfile::Builder` with explicit permissions and patterns containing `*`, or `std::env::temp_dir` with random names.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.insecure-yaml-load
|
|
5
|
+
title: Avoid untyped YAML deserialization
|
|
6
|
+
summary: >-
|
|
7
|
+
Untyped `serde_yaml` deserialization can instantiate arbitrary types from untrusted input.
|
|
8
|
+
rationale: >-
|
|
9
|
+
YAML loaders without strict typing enable unsafe object graphs and unexpected type coercion.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-502
|
|
15
|
+
title: Deserialization of Untrusted Data
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Deserialization Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- yaml
|
|
23
|
+
- deserialization
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.insecure-yaml-load
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.deserialization
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- yaml
|
|
50
|
+
- deserialization
|
|
51
|
+
message:
|
|
52
|
+
title: Use typed YAML parsing near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` deserializes YAML without a constrained target type."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Deserialize into explicit structs or enums and validate input before use.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.jwt-without-verification
|
|
5
|
+
title: Verify JWT signatures before trusting claims
|
|
6
|
+
summary: >-
|
|
7
|
+
JWT parsing must use a verification key and must not disable signature validation.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Trusting unverified JWTs allows attackers to forge tokens with arbitrary claims.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-287
|
|
15
|
+
title: Improper Authentication
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: JSON Web Token Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- jwt
|
|
23
|
+
- authentication
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.jwt-without-verification
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.authentication
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- jwt
|
|
50
|
+
- authentication
|
|
51
|
+
message:
|
|
52
|
+
title: Verify JWT signature near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` parses a JWT without verifying its signature."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Pass a `DecodingKey` to `decode` and validate claims with a strict `Validation` configuration.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.panic-in-async-handler
|
|
5
|
+
title: Avoid panic and unwrap in async handlers
|
|
6
|
+
summary: >-
|
|
7
|
+
Async request handlers should propagate errors instead of panicking or unwrapping Results.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Panics in async handlers can abort tasks and leak error details under load.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-16
|
|
15
|
+
title: Configuration
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Secure Configuration Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- async
|
|
23
|
+
- reliability
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.panic-in-async-handler
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.reliability
|
|
44
|
+
severity: medium
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- async
|
|
50
|
+
- reliability
|
|
51
|
+
message:
|
|
52
|
+
title: Handle errors in async handler near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` panics or unwraps inside an async function."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Return `Result` from async handlers and map errors to appropriate HTTP responses.
|
|
57
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.rocket-panic-prone-request-handler
|
|
5
|
+
title: Avoid panicking on request-derived data in Rocket handlers
|
|
6
|
+
summary: >-
|
|
7
|
+
Rocket route handlers should not `unwrap`, `expect`, or otherwise panic on values derived from the HTTP request.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Panics become hard failures and can be abused for denial-of-service or to leak error detail; prefer `Result` and typed rejections.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-209
|
|
15
|
+
title: Generation of Error Message Containing Sensitive Information
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Error Handling Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: ANSSI Rust secure development guidelines
|
|
21
|
+
url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- rust
|
|
25
|
+
- rocket
|
|
26
|
+
- rules-catalog
|
|
27
|
+
stability: experimental
|
|
28
|
+
appliesTo: block
|
|
29
|
+
scope:
|
|
30
|
+
languages:
|
|
31
|
+
- rust
|
|
32
|
+
paths:
|
|
33
|
+
include:
|
|
34
|
+
- "**/*.rs"
|
|
35
|
+
exclude:
|
|
36
|
+
- "**/tests/**"
|
|
37
|
+
- "**/*_test.rs"
|
|
38
|
+
- "**/examples/**"
|
|
39
|
+
match:
|
|
40
|
+
fact:
|
|
41
|
+
kind: rust.security.rocket-panic-prone-request-handler
|
|
42
|
+
bind: issue
|
|
43
|
+
emit:
|
|
44
|
+
finding:
|
|
45
|
+
category: security.error-handling
|
|
46
|
+
severity: medium
|
|
47
|
+
confidence: 0.74
|
|
48
|
+
tags:
|
|
49
|
+
- security
|
|
50
|
+
- rust
|
|
51
|
+
- rocket
|
|
52
|
+
message:
|
|
53
|
+
title: Replace infallible unwraps in Rocket handler near `${captures.issue.text}`
|
|
54
|
+
summary: "`${captures.issue.text}` can panic on malformed or hostile input in a Rocket request handler."
|
|
55
|
+
remediation:
|
|
56
|
+
summary: >-
|
|
57
|
+
Return `Result`, `Option`, or `status::Custom`, map errors to HTTP responses, and reserve `unwrap` for tests or statically known invariants.
|
|
58
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.rocket-unsafe-template-output
|
|
5
|
+
title: Avoid raw HTML built from Rocket route parameters
|
|
6
|
+
summary: >-
|
|
7
|
+
Do not wrap request-sourced strings in `RawHtml` (or similar) without escaping in Rocket handlers.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Raw HTML bypasses Rocket's escaping defaults and is a common XSS footgun when fed from path, query, or body inputs.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-79
|
|
15
|
+
title: Cross-site Scripting (XSS)
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: ANSSI Rust secure development guidelines
|
|
21
|
+
url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- rust
|
|
25
|
+
- rocket
|
|
26
|
+
- xss
|
|
27
|
+
- rules-catalog
|
|
28
|
+
stability: experimental
|
|
29
|
+
appliesTo: block
|
|
30
|
+
scope:
|
|
31
|
+
languages:
|
|
32
|
+
- rust
|
|
33
|
+
paths:
|
|
34
|
+
include:
|
|
35
|
+
- "**/*.rs"
|
|
36
|
+
exclude:
|
|
37
|
+
- "**/tests/**"
|
|
38
|
+
- "**/*_test.rs"
|
|
39
|
+
- "**/examples/**"
|
|
40
|
+
match:
|
|
41
|
+
fact:
|
|
42
|
+
kind: rust.security.rocket-unsafe-template-output
|
|
43
|
+
bind: issue
|
|
44
|
+
emit:
|
|
45
|
+
finding:
|
|
46
|
+
category: security.output-encoding
|
|
47
|
+
severity: high
|
|
48
|
+
confidence: 0.76
|
|
49
|
+
tags:
|
|
50
|
+
- security
|
|
51
|
+
- rust
|
|
52
|
+
- rocket
|
|
53
|
+
- xss
|
|
54
|
+
message:
|
|
55
|
+
title: Escape or sanitize before `${captures.issue.text}`
|
|
56
|
+
summary: "`${captures.issue.text}` emits raw HTML from handler parameters without an obvious sanitizer."
|
|
57
|
+
remediation:
|
|
58
|
+
summary: >-
|
|
59
|
+
Prefer typed templates with auto-escaping, sanitize with a vetted HTML policy crate, or return plain text/JSON instead of `RawHtml`.
|
|
60
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.shell-command-spawn
|
|
5
|
+
title: Avoid shell invocation via Command
|
|
6
|
+
summary: >-
|
|
7
|
+
Spawning `/bin/sh` or `bash` with `-c` enables shell metacharacter injection.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Shell interpretation expands attacker-controlled input into arbitrary command execution.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-78
|
|
15
|
+
title: OS Command Injection
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: OS Command Injection Defense Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- command-injection
|
|
23
|
+
- shell
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- rust
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.rs"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.rs"
|
|
36
|
+
- "**/examples/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: rust.security.shell-command-spawn
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.command-injection
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- command-injection
|
|
50
|
+
- shell
|
|
51
|
+
message:
|
|
52
|
+
title: Avoid shell spawn near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` spawns a shell with `-c`, enabling command injection."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Invoke binaries directly with explicit arguments instead of routing through a shell.
|
|
57
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.sqlx-diesel-raw-interpolated-query
|
|
5
|
+
title: Avoid dynamic SQL built with format! for SQLx or Diesel
|
|
6
|
+
summary: >-
|
|
7
|
+
Do not pass `format!(...)` (or equivalent string concatenation) into `sqlx::query` or `diesel::sql_query` sinks.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Interpolated SQL is the primary SQL injection pattern in Rust ORMs; compile-time macros and bind parameters keep queries safe.
|
|
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: ANSSI Rust secure development guidelines
|
|
21
|
+
url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- rust
|
|
25
|
+
- sqlx
|
|
26
|
+
- diesel
|
|
27
|
+
- rules-catalog
|
|
28
|
+
stability: experimental
|
|
29
|
+
appliesTo: block
|
|
30
|
+
scope:
|
|
31
|
+
languages:
|
|
32
|
+
- rust
|
|
33
|
+
paths:
|
|
34
|
+
include:
|
|
35
|
+
- "**/*.rs"
|
|
36
|
+
exclude:
|
|
37
|
+
- "**/tests/**"
|
|
38
|
+
- "**/*_test.rs"
|
|
39
|
+
- "**/examples/**"
|
|
40
|
+
match:
|
|
41
|
+
fact:
|
|
42
|
+
kind: rust.security.sqlx-diesel-raw-interpolated-query
|
|
43
|
+
bind: issue
|
|
44
|
+
emit:
|
|
45
|
+
finding:
|
|
46
|
+
category: security.sql-injection
|
|
47
|
+
severity: high
|
|
48
|
+
confidence: 0.88
|
|
49
|
+
tags:
|
|
50
|
+
- security
|
|
51
|
+
- rust
|
|
52
|
+
- sqlx
|
|
53
|
+
- diesel
|
|
54
|
+
message:
|
|
55
|
+
title: Replace interpolated SQL at `${captures.issue.text}`
|
|
56
|
+
summary: "`${captures.issue.text}` builds SQL with `format!` instead of bound parameters or compile-time checked macros."
|
|
57
|
+
remediation:
|
|
58
|
+
summary: >-
|
|
59
|
+
Prefer `sqlx::query!` / `query_as!`, use `.bind(...)` on typed query builders, or Diesel's query DSL with bound parameters instead of raw interpolated strings.
|
|
60
|
+
|