@critiq/rules 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/catalog.yaml +617 -0
- package/package.json +1 -1
- package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
- package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
- package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
- package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
- package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
- package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
- package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
- package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +10 -0
- package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +10 -0
- package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
- package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
- package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
- package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +10 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
- package/rules/go/go.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/go/go.security.tar-path-traversal.rule.yaml +10 -0
- package/rules/go/go.security.template-unescaped-request-value.rule.yaml +10 -0
- package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
- package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
- package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
- package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
- package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
- package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
- package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
- package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
- package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
- package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
- package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
- package/rules/java/java.security.android-screenshot-exposure.rule.yaml +13 -0
- package/rules/java/java.security.android-world-readable-mode.rule.yaml +13 -0
- package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
- package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
- package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
- package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
- package/rules/java/java.security.jpa-concatenated-query.rule.yaml +13 -0
- package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
- package/rules/java/java.security.null-cipher.rule.yaml +52 -0
- package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
- package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
- package/rules/java/java.security.reflected-output-from-request.rule.yaml +10 -0
- package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +13 -0
- package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
- package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +13 -0
- package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +13 -0
- package/rules/java/java.security.spring-debug-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-permit-all-default.rule.yaml +13 -0
- package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +13 -0
- package/rules/java/java.security.template-unescaped-user-output.rule.yaml +10 -0
- package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
- package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
- package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
- package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
- package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
- package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
- package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
- package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
- package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
- package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
- package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
- package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +10 -0
- package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +10 -0
- package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +10 -0
- package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +13 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
- package/rules/php/php.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +13 -0
- package/rules/php/php.security.symfony-debug-exposure.rule.yaml +13 -0
- package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +10 -0
- package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
- package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
- package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +13 -0
- package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +13 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
- package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
- package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
- package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
- package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
- package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
- package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
- package/rules/python/py.security.debugger-import.rule.yaml +55 -0
- package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +13 -0
- package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
- package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
- package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +13 -0
- package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
- package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-default.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +13 -0
- package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
- package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +13 -0
- package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
- package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +13 -0
- package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
- package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
- package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
- package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
- package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +13 -0
- package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +10 -0
- package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
- package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
- package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
- package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
- package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
- package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
- package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
- package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
- package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +13 -0
- package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +13 -0
- package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
- package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +13 -0
- package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +10 -0
- package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
- package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +13 -0
- package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
- package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
- package/rules/shared/security.archive-path-traversal.rule.yaml +10 -0
- package/rules/shared/security.external-file-upload.rule.yaml +10 -0
- package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
- package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
- package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
- package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
- package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
- package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
- package/rules/shared/security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/shared/security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
- package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
- package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
- package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +13 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
- package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
- package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
- package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
- package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +13 -0
- package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +16 -0
- package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +13 -0
- package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
- package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +10 -0
- package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +13 -0
- package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
- package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
- package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
- package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +16 -0
- package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +16 -0
- package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
- package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +16 -0
- package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
- package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
- package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +10 -0
- package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
- package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
- package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +10 -0
- package/rules/typescript/ts.security.log-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
- package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +16 -0
- package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
- package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
- package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
- package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +13 -0
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
- package/rules/typescript/ts.security.open-redirect.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
- package/rules/typescript/ts.security.ssrf.rule.yaml +10 -0
- package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
- package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
- package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
- package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +10 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.block-on-in-async
|
|
5
|
+
title: Avoid block_on inside async functions
|
|
6
|
+
summary: Calling block_on from async code can deadlock the runtime.
|
|
7
|
+
rationale: >-
|
|
8
|
+
`Handle::current().block_on`, `Runtime::block_on`, and `futures::executor::block_on`
|
|
9
|
+
block the async executor thread and can deadlock when invoked from `async fn`.
|
|
10
|
+
tags:
|
|
11
|
+
- correctness
|
|
12
|
+
- rust
|
|
13
|
+
- concurrency
|
|
14
|
+
- rules-catalog
|
|
15
|
+
stability: stable
|
|
16
|
+
appliesTo: block
|
|
17
|
+
scope:
|
|
18
|
+
languages:
|
|
19
|
+
- rust
|
|
20
|
+
paths:
|
|
21
|
+
include:
|
|
22
|
+
- "**/*.rs"
|
|
23
|
+
exclude:
|
|
24
|
+
- "**/tests/**"
|
|
25
|
+
- "**/test/**"
|
|
26
|
+
- "**/testdata/**"
|
|
27
|
+
- "**/examples/**"
|
|
28
|
+
- "**/benches/**"
|
|
29
|
+
- "**/*_test.rs"
|
|
30
|
+
- "**/*.spec.rs"
|
|
31
|
+
match:
|
|
32
|
+
fact:
|
|
33
|
+
kind: rust.correctness.block-on-in-async
|
|
34
|
+
bind: issue
|
|
35
|
+
emit:
|
|
36
|
+
finding:
|
|
37
|
+
category: correctness.concurrency
|
|
38
|
+
severity: high
|
|
39
|
+
confidence: 0.85
|
|
40
|
+
tags:
|
|
41
|
+
- correctness
|
|
42
|
+
- rust
|
|
43
|
+
- concurrency
|
|
44
|
+
message:
|
|
45
|
+
title: Remove block_on from async code
|
|
46
|
+
summary: "`${captures.issue.text}` can deadlock the async runtime."
|
|
47
|
+
remediation:
|
|
48
|
+
summary: Await the future directly or run blocking work on a dedicated runtime thread.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.forget-join-handle
|
|
5
|
+
title: Do not forget spawned task handles
|
|
6
|
+
summary: Forgetting a JoinHandle leaks the task and drops panic propagation.
|
|
7
|
+
rationale: >-
|
|
8
|
+
`std::mem::forget` on a `tokio::spawn` return value or `JoinHandle` abandons
|
|
9
|
+
the task without awaiting completion or observing panics.
|
|
10
|
+
tags:
|
|
11
|
+
- correctness
|
|
12
|
+
- rust
|
|
13
|
+
- concurrency
|
|
14
|
+
- rules-catalog
|
|
15
|
+
stability: stable
|
|
16
|
+
appliesTo: block
|
|
17
|
+
scope:
|
|
18
|
+
languages:
|
|
19
|
+
- rust
|
|
20
|
+
paths:
|
|
21
|
+
include:
|
|
22
|
+
- "**/*.rs"
|
|
23
|
+
exclude:
|
|
24
|
+
- "**/tests/**"
|
|
25
|
+
- "**/test/**"
|
|
26
|
+
- "**/testdata/**"
|
|
27
|
+
- "**/examples/**"
|
|
28
|
+
- "**/benches/**"
|
|
29
|
+
- "**/*_test.rs"
|
|
30
|
+
- "**/*.spec.rs"
|
|
31
|
+
match:
|
|
32
|
+
fact:
|
|
33
|
+
kind: rust.correctness.forget-join-handle
|
|
34
|
+
bind: issue
|
|
35
|
+
emit:
|
|
36
|
+
finding:
|
|
37
|
+
category: correctness.concurrency
|
|
38
|
+
severity: medium
|
|
39
|
+
confidence: 0.85
|
|
40
|
+
tags:
|
|
41
|
+
- correctness
|
|
42
|
+
- rust
|
|
43
|
+
- concurrency
|
|
44
|
+
message:
|
|
45
|
+
title: Await or detach spawned tasks explicitly
|
|
46
|
+
summary: "`${captures.issue.text}` forgets a task handle instead of awaiting it."
|
|
47
|
+
remediation:
|
|
48
|
+
summary: Store the `JoinHandle`, await it, or use a structured shutdown path.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.mutex-held-across-await
|
|
5
|
+
title: Do not hold a Mutex guard across await
|
|
6
|
+
summary: Holding a std::sync::Mutex guard across an await point can deadlock the async executor.
|
|
7
|
+
rationale: >-
|
|
8
|
+
A `std::sync::Mutex` guard must not be held while the task yields at `.await`.
|
|
9
|
+
Use an async mutex or release the guard before awaiting.
|
|
10
|
+
tags:
|
|
11
|
+
- correctness
|
|
12
|
+
- rust
|
|
13
|
+
- concurrency
|
|
14
|
+
- rules-catalog
|
|
15
|
+
stability: stable
|
|
16
|
+
appliesTo: block
|
|
17
|
+
scope:
|
|
18
|
+
languages:
|
|
19
|
+
- rust
|
|
20
|
+
paths:
|
|
21
|
+
include:
|
|
22
|
+
- "**/*.rs"
|
|
23
|
+
exclude:
|
|
24
|
+
- "**/tests/**"
|
|
25
|
+
- "**/test/**"
|
|
26
|
+
- "**/testdata/**"
|
|
27
|
+
- "**/examples/**"
|
|
28
|
+
- "**/benches/**"
|
|
29
|
+
- "**/*_test.rs"
|
|
30
|
+
- "**/*.spec.rs"
|
|
31
|
+
match:
|
|
32
|
+
fact:
|
|
33
|
+
kind: rust.correctness.mutex-held-across-await
|
|
34
|
+
bind: issue
|
|
35
|
+
emit:
|
|
36
|
+
finding:
|
|
37
|
+
category: correctness.concurrency
|
|
38
|
+
severity: high
|
|
39
|
+
confidence: 0.85
|
|
40
|
+
tags:
|
|
41
|
+
- correctness
|
|
42
|
+
- rust
|
|
43
|
+
- concurrency
|
|
44
|
+
message:
|
|
45
|
+
title: Release the mutex guard before `${captures.issue.text}`
|
|
46
|
+
summary: A `std::sync::Mutex` guard from `.lock().unwrap()` or `.lock().expect(...)` is still used after `.await`.
|
|
47
|
+
remediation:
|
|
48
|
+
summary: Drop the guard before awaiting or switch to `tokio::sync::Mutex` for async code.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.std-mutex-in-async-fn
|
|
5
|
+
title: Prefer async mutex primitives in async functions
|
|
6
|
+
summary: std::sync::Mutex in async code encourages blocking and await deadlocks.
|
|
7
|
+
rationale: >-
|
|
8
|
+
`std::sync::Mutex` blocks the executor when contended. In `async fn`, prefer
|
|
9
|
+
`tokio::sync::Mutex` or `async_lock` primitives that cooperate with the runtime.
|
|
10
|
+
tags:
|
|
11
|
+
- correctness
|
|
12
|
+
- rust
|
|
13
|
+
- concurrency
|
|
14
|
+
- rules-catalog
|
|
15
|
+
stability: stable
|
|
16
|
+
appliesTo: block
|
|
17
|
+
scope:
|
|
18
|
+
languages:
|
|
19
|
+
- rust
|
|
20
|
+
paths:
|
|
21
|
+
include:
|
|
22
|
+
- "**/*.rs"
|
|
23
|
+
exclude:
|
|
24
|
+
- "**/tests/**"
|
|
25
|
+
- "**/test/**"
|
|
26
|
+
- "**/testdata/**"
|
|
27
|
+
- "**/examples/**"
|
|
28
|
+
- "**/benches/**"
|
|
29
|
+
- "**/*_test.rs"
|
|
30
|
+
- "**/*.spec.rs"
|
|
31
|
+
match:
|
|
32
|
+
fact:
|
|
33
|
+
kind: rust.correctness.std-mutex-in-async-fn
|
|
34
|
+
bind: issue
|
|
35
|
+
emit:
|
|
36
|
+
finding:
|
|
37
|
+
category: correctness.concurrency
|
|
38
|
+
severity: medium
|
|
39
|
+
confidence: 0.85
|
|
40
|
+
tags:
|
|
41
|
+
- correctness
|
|
42
|
+
- rust
|
|
43
|
+
- concurrency
|
|
44
|
+
message:
|
|
45
|
+
title: Replace std mutex in async code
|
|
46
|
+
summary: "`${captures.issue.text}` uses `std::sync::Mutex` inside an `async fn`."
|
|
47
|
+
remediation:
|
|
48
|
+
summary: Switch to `tokio::sync::Mutex` or keep blocking locks outside async contexts.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.thread-sleep-in-async
|
|
5
|
+
title: Avoid blocking thread sleep in async functions
|
|
6
|
+
summary: std::thread::sleep blocks the executor thread inside async code.
|
|
7
|
+
rationale: >-
|
|
8
|
+
`std::thread::sleep` blocks the current OS thread. Inside `async fn` this stalls
|
|
9
|
+
the runtime worker and harms throughput. Prefer `tokio::time::sleep` instead.
|
|
10
|
+
tags:
|
|
11
|
+
- correctness
|
|
12
|
+
- rust
|
|
13
|
+
- concurrency
|
|
14
|
+
- rules-catalog
|
|
15
|
+
stability: stable
|
|
16
|
+
appliesTo: block
|
|
17
|
+
scope:
|
|
18
|
+
languages:
|
|
19
|
+
- rust
|
|
20
|
+
paths:
|
|
21
|
+
include:
|
|
22
|
+
- "**/*.rs"
|
|
23
|
+
exclude:
|
|
24
|
+
- "**/tests/**"
|
|
25
|
+
- "**/test/**"
|
|
26
|
+
- "**/testdata/**"
|
|
27
|
+
- "**/examples/**"
|
|
28
|
+
- "**/benches/**"
|
|
29
|
+
- "**/*_test.rs"
|
|
30
|
+
- "**/*.spec.rs"
|
|
31
|
+
match:
|
|
32
|
+
fact:
|
|
33
|
+
kind: rust.correctness.thread-sleep-in-async
|
|
34
|
+
bind: issue
|
|
35
|
+
emit:
|
|
36
|
+
finding:
|
|
37
|
+
category: correctness.concurrency
|
|
38
|
+
severity: medium
|
|
39
|
+
confidence: 0.85
|
|
40
|
+
tags:
|
|
41
|
+
- correctness
|
|
42
|
+
- rust
|
|
43
|
+
- concurrency
|
|
44
|
+
message:
|
|
45
|
+
title: Replace blocking sleep in async code
|
|
46
|
+
summary: "`${captures.issue.text}` blocks an async executor thread."
|
|
47
|
+
remediation:
|
|
48
|
+
summary: Use `tokio::time::sleep` or move blocking work to `spawn_blocking`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.unbounded-channel
|
|
5
|
+
title: Avoid unbounded async channels
|
|
6
|
+
summary: Unbounded channels can grow without backpressure and exhaust memory.
|
|
7
|
+
rationale: >-
|
|
8
|
+
`tokio::sync::mpsc::unbounded_channel` and `futures::channel::mpsc::unbounded`
|
|
9
|
+
accept messages without capacity limits, which can cause unbounded memory growth
|
|
10
|
+
under load.
|
|
11
|
+
tags:
|
|
12
|
+
- correctness
|
|
13
|
+
- rust
|
|
14
|
+
- resource-leak
|
|
15
|
+
- rules-catalog
|
|
16
|
+
stability: stable
|
|
17
|
+
appliesTo: block
|
|
18
|
+
scope:
|
|
19
|
+
languages:
|
|
20
|
+
- rust
|
|
21
|
+
paths:
|
|
22
|
+
include:
|
|
23
|
+
- "**/*.rs"
|
|
24
|
+
exclude:
|
|
25
|
+
- "**/tests/**"
|
|
26
|
+
- "**/test/**"
|
|
27
|
+
- "**/testdata/**"
|
|
28
|
+
- "**/examples/**"
|
|
29
|
+
- "**/benches/**"
|
|
30
|
+
- "**/*_test.rs"
|
|
31
|
+
- "**/*.spec.rs"
|
|
32
|
+
match:
|
|
33
|
+
fact:
|
|
34
|
+
kind: rust.correctness.unbounded-channel
|
|
35
|
+
bind: issue
|
|
36
|
+
emit:
|
|
37
|
+
finding:
|
|
38
|
+
category: correctness.resource-leak
|
|
39
|
+
severity: medium
|
|
40
|
+
confidence: 0.85
|
|
41
|
+
tags:
|
|
42
|
+
- correctness
|
|
43
|
+
- rust
|
|
44
|
+
- resource-leak
|
|
45
|
+
message:
|
|
46
|
+
title: Prefer bounded channels for backpressure
|
|
47
|
+
summary: "`${captures.issue.text}` creates an unbounded channel."
|
|
48
|
+
remediation:
|
|
49
|
+
summary: Use a bounded `mpsc::channel` with an explicit capacity.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: rust.correctness.unchecked-index
|
|
5
|
+
title: Prefer fallible slice access for variable indices
|
|
6
|
+
summary: Direct indexing with a variable can panic when the index is out of bounds.
|
|
7
|
+
rationale: >-
|
|
8
|
+
Slice indexing with a non-literal index panics on bounds failure. Use `.get(index)`
|
|
9
|
+
when the index comes from a variable and handle `None` explicitly.
|
|
10
|
+
tags:
|
|
11
|
+
- correctness
|
|
12
|
+
- rust
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: stable
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- rust
|
|
19
|
+
paths:
|
|
20
|
+
include:
|
|
21
|
+
- "**/*.rs"
|
|
22
|
+
exclude:
|
|
23
|
+
- "**/tests/**"
|
|
24
|
+
- "**/test/**"
|
|
25
|
+
- "**/testdata/**"
|
|
26
|
+
- "**/examples/**"
|
|
27
|
+
- "**/benches/**"
|
|
28
|
+
- "**/*_test.rs"
|
|
29
|
+
- "**/*.spec.rs"
|
|
30
|
+
match:
|
|
31
|
+
fact:
|
|
32
|
+
kind: rust.correctness.unchecked-index
|
|
33
|
+
bind: issue
|
|
34
|
+
emit:
|
|
35
|
+
finding:
|
|
36
|
+
category: correctness.runtime
|
|
37
|
+
severity: medium
|
|
38
|
+
confidence: 0.8
|
|
39
|
+
tags:
|
|
40
|
+
- correctness
|
|
41
|
+
- rust
|
|
42
|
+
message:
|
|
43
|
+
title: Use fallible access for variable indices
|
|
44
|
+
summary: "`${captures.issue.text}` indexes a slice with a variable that may be out of bounds."
|
|
45
|
+
remediation:
|
|
46
|
+
summary: Replace direct indexing with `.get(index)` and handle the `None` case.
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
`actix_cors` configurations must not combine `allow_any_origin` with `supports_credentials`.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Wildcard origins with credentials violate browser CORS expectations and usually indicate a missing explicit origin allowlist.
|
|
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
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- rust
|
|
@@ -45,3 +57,4 @@ emit:
|
|
|
45
57
|
remediation:
|
|
46
58
|
summary: >-
|
|
47
59
|
Use `allowed_origin` with explicit HTTPS origins, or disable credentials when anonymous public access is intended.
|
|
60
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Axum apps should keep a finite `DefaultBodyLimit` (or equivalent) so request bodies cannot exhaust memory.
|
|
8
8
|
rationale: >-
|
|
9
9
|
`DefaultBodyLimit::disable()` removes the framework guardrail against huge bodies and is unsafe on routes that accept untrusted input.
|
|
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
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- rust
|
|
@@ -43,3 +55,4 @@ emit:
|
|
|
43
55
|
remediation:
|
|
44
56
|
summary: >-
|
|
45
57
|
Set an explicit max body size with `DefaultBodyLimit::max`, add `tower_http::limit::RequestBodyLimitLayer`, or enforce limits at your edge proxy before accepting large uploads.
|
|
58
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Do not pair wildcard or `very_permissive` origin policies with credentialed CORS or private-network access in `tower-http`.
|
|
8
8
|
rationale: >-
|
|
9
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
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- rust
|
|
@@ -45,3 +57,4 @@ emit:
|
|
|
45
57
|
remediation:
|
|
46
58
|
summary: >-
|
|
47
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
|
+
|