@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,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.template-unescaped-request-value
|
|
5
|
+
title: Sanitize request data before unescaped template output in Rust
|
|
6
|
+
summary: >-
|
|
7
|
+
Tera, Maud, and similar engines should not insert request-sourced strings into contexts or `PreEscaped`/`raw` sinks without sanitization.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Template `safe`/raw sinks disable escaping; feeding path, query, form, or JSON extractors there is a direct XSS vector.
|
|
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
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- templates
|
|
23
|
+
- xss
|
|
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.template-unescaped-request-value
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.output-encoding
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.74
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- rust
|
|
49
|
+
- templates
|
|
50
|
+
- xss
|
|
51
|
+
message:
|
|
52
|
+
title: Escape or sanitize before `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` feeds request-derived data into an unescaped template context."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
HTML-escape with a vetted policy (for example `ammonia::clean`), keep auto-escaping on, and avoid `PreEscaped`/`Markup::raw` for untrusted strings.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.tls-missing-min-version
|
|
5
|
+
title: Set a minimum TLS protocol version in Rust TLS configs
|
|
6
|
+
summary: >-
|
|
7
|
+
Rust TLS client and server configuration should set an explicit minimum protocol version (TLS 1.2 or newer).
|
|
8
|
+
rationale: >-
|
|
9
|
+
Without a minimum version, legacy SSL/TLS protocols may be negotiated, weakening transport security.
|
|
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.tls-missing-min-version
|
|
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: Set minimum TLS version near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` configures TLS without an explicit minimum protocol version."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Set `min_protocol_version` (rustls) or `min_tls_version` (reqwest) to TLS 1.2 or newer.
|
|
57
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.warp-blocking-or-panic-in-async-handler
|
|
5
|
+
title: Avoid blocking I/O and infallible unwraps in async Warp handlers
|
|
6
|
+
summary: >-
|
|
7
|
+
Warp filters and handlers run on the async runtime; avoid `std::fs`, `thread::sleep`, and `unwrap` on request paths without `spawn_blocking` or proper errors.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Blocking the runtime reduces availability and unwraps turn parse errors into panics; both are amplified under load and hostile traffic.
|
|
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
|
+
- 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
|
+
- warp
|
|
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.warp-blocking-or-panic-in-async-handler
|
|
42
|
+
bind: issue
|
|
43
|
+
emit:
|
|
44
|
+
finding:
|
|
45
|
+
category: security.availability
|
|
46
|
+
severity: medium
|
|
47
|
+
confidence: 0.72
|
|
48
|
+
tags:
|
|
49
|
+
- security
|
|
50
|
+
- rust
|
|
51
|
+
- warp
|
|
52
|
+
message:
|
|
53
|
+
title: Refactor async Warp handler around `${captures.issue.text}`
|
|
54
|
+
summary: "`${captures.issue.text}` blocks the async executor or can panic inside a Warp async handler."
|
|
55
|
+
remediation:
|
|
56
|
+
summary: >-
|
|
57
|
+
Use `tokio::fs`, offload blocking work with `spawn_blocking`, and propagate errors with `Rejection` instead of `unwrap`.
|
|
58
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.weak-crypto-import
|
|
5
|
+
title: Avoid importing broken or deprecated crypto crates
|
|
6
|
+
summary: >-
|
|
7
|
+
Production Rust code should not import `md5`, `sha1`, `des`, or `rc4` for security-sensitive purposes.
|
|
8
|
+
rationale: >-
|
|
9
|
+
MD5 and SHA-1 are broken hash functions, DES has an obsolete key size, and RC4 has known biases.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-327
|
|
15
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cryptographic Storage Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- cryptography
|
|
23
|
+
- rules-catalog
|
|
24
|
+
stability: experimental
|
|
25
|
+
appliesTo: block
|
|
26
|
+
scope:
|
|
27
|
+
languages:
|
|
28
|
+
- rust
|
|
29
|
+
paths:
|
|
30
|
+
include:
|
|
31
|
+
- "**/*.rs"
|
|
32
|
+
exclude:
|
|
33
|
+
- "**/tests/**"
|
|
34
|
+
- "**/*_test.rs"
|
|
35
|
+
- "**/examples/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: rust.security.weak-crypto-import
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.cryptography
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.85
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- rust
|
|
48
|
+
- cryptography
|
|
49
|
+
message:
|
|
50
|
+
title: Replace weak crypto import at `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` imports a broken or deprecated crypto crate."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Use `sha2`, `blake3`, or `aes-gcm` for modern cryptographic primitives.
|
|
55
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.weak-rsa-key-size
|
|
5
|
+
title: Use RSA keys of at least 2048 bits
|
|
6
|
+
summary: >-
|
|
7
|
+
RSA key generation must use at least 2048 bits.
|
|
8
|
+
rationale: >-
|
|
9
|
+
RSA keys shorter than 2048 bits are vulnerable to factorization attacks with modern compute.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-327
|
|
15
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cryptographic Storage Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- rust
|
|
22
|
+
- cryptography
|
|
23
|
+
- rsa
|
|
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.weak-rsa-key-size
|
|
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
|
+
- cryptography
|
|
50
|
+
- rsa
|
|
51
|
+
message:
|
|
52
|
+
title: Increase RSA key size near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` generates an RSA key smaller than 2048 bits."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Generate RSA keys with at least 2048 bits, or prefer Ed25519/ECDSA for new designs.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.security.weak-tls-cipher
|
|
5
|
+
title: Avoid weak TLS cipher suites
|
|
6
|
+
summary: >-
|
|
7
|
+
Rust TLS configuration must not include cipher suites using RC4, 3DES, NULL, or EXPORT algorithms.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Weak cipher suites are vulnerable to practical attacks and should not be negotiated.
|
|
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.weak-tls-cipher
|
|
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: Replace weak TLS cipher near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` references a weak TLS cipher suite."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Use modern AEAD cipher suites such as TLS_AES_128_GCM_SHA256 or TLS_CHACHA20_POLY1305_SHA256.
|
|
57
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.testing.ignore-without-ticket-reference
|
|
5
|
+
title: "Rust #[ignore] tests should cite a ticket"
|
|
6
|
+
summary: Ignored tests without a nearby tracker comment are easy to lose.
|
|
7
|
+
rationale: Ignored tests should carry reviewable intent like skips in other ecosystems.
|
|
8
|
+
tags:
|
|
9
|
+
- testing
|
|
10
|
+
- rust
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: experimental
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- rust
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: rust.testing.ignore-without-ticket-reference
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: quality.testing
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.62
|
|
26
|
+
tags:
|
|
27
|
+
- testing
|
|
28
|
+
- rust
|
|
29
|
+
message:
|
|
30
|
+
title: Add a ticket comment near `${captures.issue.text}`
|
|
31
|
+
summary: "`#[ignore]` is present without a nearby issue key or accepted suppression comment."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Document the ignore with a tracker id or remove the attribute when the test is ready.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.testing.real-network-in-unit-test
|
|
5
|
+
title: Avoid live reqwest clients in Rust unit tests
|
|
6
|
+
summary: reqwest usage in tests should target local servers or fakes.
|
|
7
|
+
rationale: Live HTTP couples CI to the network.
|
|
8
|
+
tags:
|
|
9
|
+
- testing
|
|
10
|
+
- rust
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: experimental
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- rust
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: rust.testing.real-network-in-unit-test
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: quality.testing
|
|
24
|
+
severity: medium
|
|
25
|
+
confidence: 0.64
|
|
26
|
+
tags:
|
|
27
|
+
- testing
|
|
28
|
+
- rust
|
|
29
|
+
message:
|
|
30
|
+
title: Stub outbound HTTP in `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` references `reqwest` inside a test-like path."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Use wiremock, axum test servers, or injected clients with deterministic responses.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.testing.thread-sleep-in-unit-test
|
|
5
|
+
title: Avoid thread::sleep in Rust unit tests
|
|
6
|
+
summary: Sleeping in tests slows CI and hides synchronization bugs.
|
|
7
|
+
rationale: Prefer deterministic synchronization or tokio time advances.
|
|
8
|
+
tags:
|
|
9
|
+
- testing
|
|
10
|
+
- rust
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: experimental
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- rust
|
|
17
|
+
match:
|
|
18
|
+
fact:
|
|
19
|
+
kind: rust.testing.thread-sleep-in-unit-test
|
|
20
|
+
bind: issue
|
|
21
|
+
emit:
|
|
22
|
+
finding:
|
|
23
|
+
category: quality.testing
|
|
24
|
+
severity: low
|
|
25
|
+
confidence: 0.6
|
|
26
|
+
tags:
|
|
27
|
+
- testing
|
|
28
|
+
- rust
|
|
29
|
+
message:
|
|
30
|
+
title: Replace sleep in `${captures.issue.text}`
|
|
31
|
+
summary: "`${captures.issue.text}` blocks on real wall-clock time inside a test-like path."
|
|
32
|
+
remediation:
|
|
33
|
+
summary: Use `tokio::time::pause`, condvars, or scoped integration tests for real delays.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: security.archive-path-traversal
|
|
5
|
+
title: Sanitize archive entry paths before writing
|
|
6
|
+
summary: Archive extraction should not write entry names directly to the filesystem.
|
|
7
|
+
rationale: Archive entries can contain traversal paths that overwrite files outside the intended extraction directory.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-22
|
|
13
|
+
title: Path Traversal
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Path Traversal
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Path_Traversal
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- filesystem
|
|
20
|
+
- archive
|
|
21
|
+
- path-traversal
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: experimental
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- go
|
|
28
|
+
- java
|
|
29
|
+
- php
|
|
30
|
+
- python
|
|
31
|
+
- ruby
|
|
32
|
+
- rust
|
|
33
|
+
match:
|
|
34
|
+
fact:
|
|
35
|
+
kind: security.archive-path-traversal
|
|
36
|
+
bind: issue
|
|
37
|
+
emit:
|
|
38
|
+
finding:
|
|
39
|
+
category: security.filesystem
|
|
40
|
+
severity: high
|
|
41
|
+
confidence: 0.82
|
|
42
|
+
tags:
|
|
43
|
+
- security
|
|
44
|
+
- filesystem
|
|
45
|
+
- archive
|
|
46
|
+
message:
|
|
47
|
+
title: Check archive containment for `${captures.issue.text}`
|
|
48
|
+
summary: "`${captures.issue.text}` may write an archive-controlled path without a containment check."
|
|
49
|
+
remediation:
|
|
50
|
+
summary: Normalize each entry path against a trusted extraction root and reject paths that escape it.
|
|
51
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: security.external-file-upload
|
|
5
|
+
title: Do not persist upload filenames directly
|
|
6
|
+
summary: Upload handlers should not store attacker-controlled filenames without generating or validating a safe local name.
|
|
7
|
+
rationale: Upload filenames can carry traversal payloads, collisions, or misleading extensions that break local containment.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-434
|
|
13
|
+
title: Unrestricted Upload of File with Dangerous Type
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Upload Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- filesystem
|
|
20
|
+
- upload
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: experimental
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- go
|
|
27
|
+
- java
|
|
28
|
+
- php
|
|
29
|
+
- python
|
|
30
|
+
- ruby
|
|
31
|
+
- rust
|
|
32
|
+
match:
|
|
33
|
+
fact:
|
|
34
|
+
kind: security.external-file-upload
|
|
35
|
+
bind: issue
|
|
36
|
+
emit:
|
|
37
|
+
finding:
|
|
38
|
+
category: security.filesystem
|
|
39
|
+
severity: high
|
|
40
|
+
confidence: 0.82
|
|
41
|
+
tags:
|
|
42
|
+
- security
|
|
43
|
+
- filesystem
|
|
44
|
+
- upload
|
|
45
|
+
message:
|
|
46
|
+
title: Generate a trusted local filename for `${captures.issue.text}`
|
|
47
|
+
summary: "`${captures.issue.text}` persists an upload filename derived from attacker-controlled input."
|
|
48
|
+
remediation:
|
|
49
|
+
summary: Generate a server-side filename or apply a strict allowlist before storing uploaded content.
|
|
50
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Insecure HTTP transport
|
|
6
6
|
summary: Outbound transport should not use plain HTTP for sensitive requests.
|
|
7
7
|
rationale: Plain HTTP exposes traffic to interception and tampering.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-319
|
|
13
|
+
title: Cleartext Transmission of Sensitive Information
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Transport Layer Security Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- transport
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.issue.text}` sends an outbound request over plain HTTP."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Use HTTPS or a trusted local-development exception for non-production endpoints.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Command execution using untrusted input
|
|
6
6
|
summary: Process execution helpers must not receive request-controlled executables or shell-interpreted arguments.
|
|
7
7
|
rationale: Request-controlled process execution can become remote code execution when attackers choose the binary or influence shell parsing.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-78
|
|
13
|
+
title: OS Command Injection
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: OS Command Injection Defense Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- injection
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.execCall.text}` executes a process using request-controlled command data."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Dispatch only allowlisted binaries, keep shell mode disabled, and validate or constrain subcommands before execution.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Hardcoded API keys or credentials
|
|
6
6
|
summary: Source files should not embed credential-like string literals.
|
|
7
7
|
rationale: Hardcoded credentials are difficult to rotate and are easily leaked through source control.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-798
|
|
13
|
+
title: Use of Hard-coded Credentials
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Secrets Management Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- secrets
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.credential.text}` appears to embed a credential-like literal in source code."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Move the secret to a secure runtime secret store or environment-backed config path.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Path traversal via user input
|
|
6
6
|
summary: File access calls must not use request-controlled paths directly.
|
|
7
7
|
rationale: User-controlled paths can escape the intended directory and expose sensitive files.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-434
|
|
13
|
+
title: Unrestricted Upload of File with Dangerous Type
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Upload Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- filesystem
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.fileRead.text}` reads from a path derived from request data without an allowlist or boundary check."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Resolve the path against a trusted base directory and reject values that escape it.
|
|
52
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid sensitive data in logs and telemetry
|
|
6
6
|
summary: Sensitive fields should not be sent to logging, tracing, or analytics sinks.
|
|
7
7
|
rationale: Observability payloads often leave the service boundary and can expose secrets, account identifiers, or personal data if they carry raw request or user fields.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-532
|
|
13
|
+
title: Insertion of Sensitive Information into Log File
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Logging Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- privacy
|
|
@@ -42,3 +51,4 @@ emit:
|
|
|
42
51
|
summary: "`${captures.issue.text}` reaches a logging or telemetry sink with sensitive data."
|
|
43
52
|
remediation:
|
|
44
53
|
summary: Redact, hash, or drop the sensitive field before it reaches the sink.
|
|
54
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid raw or interpolated SQL
|
|
6
6
|
summary: Database query sinks must not receive request-driven or dynamically interpolated SQL text.
|
|
7
7
|
rationale: Raw or interpolated SQL can let attackers control query structure when values are not passed separately.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-89
|
|
13
|
+
title: SQL Injection
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: SQL Injection Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- sql
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
summary: "`${captures.queryCall.text}` builds or forwards SQL text directly into a raw query sink."
|
|
41
50
|
remediation:
|
|
42
51
|
summary: Use prepared statements, placeholder parameters, or a typed query builder instead of executing raw SQL text.
|
|
52
|
+
|