@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,40 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.correctness.empty-catch
|
|
5
|
+
title: Do not use empty catch blocks
|
|
6
|
+
summary: Catch blocks should handle or rethrow exceptions.
|
|
7
|
+
rationale: Empty catches hide failures and make debugging difficult.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- java
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- java
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.java"
|
|
20
|
+
exclude:
|
|
21
|
+
- "**/src/test/**"
|
|
22
|
+
- "**/tests/**"
|
|
23
|
+
- "**/*Test.java"
|
|
24
|
+
match:
|
|
25
|
+
fact:
|
|
26
|
+
kind: java.correctness.empty-catch
|
|
27
|
+
bind: issue
|
|
28
|
+
emit:
|
|
29
|
+
finding:
|
|
30
|
+
category: correctness.exceptions
|
|
31
|
+
severity: medium
|
|
32
|
+
confidence: 0.88
|
|
33
|
+
tags:
|
|
34
|
+
- correctness
|
|
35
|
+
- java
|
|
36
|
+
message:
|
|
37
|
+
title: Handle exception in `${captures.issue.text}`
|
|
38
|
+
summary: "A catch block swallows an exception without handling it."
|
|
39
|
+
remediation:
|
|
40
|
+
summary: Log, recover, or rethrow the exception with context.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.correctness.equals-on-array
|
|
5
|
+
title: Compare arrays with Arrays.equals
|
|
6
|
+
summary: Array.equals compares references, not contents.
|
|
7
|
+
rationale: Reference equality on arrays is almost always a logic bug.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- java
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- java
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.java"
|
|
20
|
+
exclude:
|
|
21
|
+
- "**/src/test/**"
|
|
22
|
+
- "**/tests/**"
|
|
23
|
+
- "**/*Test.java"
|
|
24
|
+
match:
|
|
25
|
+
fact:
|
|
26
|
+
kind: java.correctness.equals-on-array
|
|
27
|
+
bind: issue
|
|
28
|
+
emit:
|
|
29
|
+
finding:
|
|
30
|
+
category: correctness.equality
|
|
31
|
+
severity: medium
|
|
32
|
+
confidence: 0.88
|
|
33
|
+
tags:
|
|
34
|
+
- correctness
|
|
35
|
+
- java
|
|
36
|
+
message:
|
|
37
|
+
title: Fix array comparison in `${captures.issue.text}`
|
|
38
|
+
summary: "Array.equals compares references instead of elements."
|
|
39
|
+
remediation:
|
|
40
|
+
summary: Use Arrays.equals or Arrays.deepEquals for array content comparison.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.correctness.return-in-finally
|
|
5
|
+
title: Avoid control flow in finally blocks
|
|
6
|
+
summary: return, break, continue, and throw in finally alter normal flow.
|
|
7
|
+
rationale: Control flow in finally can suppress exceptions and confuse readers.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- java
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- java
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.java"
|
|
20
|
+
exclude:
|
|
21
|
+
- "**/src/test/**"
|
|
22
|
+
- "**/tests/**"
|
|
23
|
+
- "**/*Test.java"
|
|
24
|
+
match:
|
|
25
|
+
fact:
|
|
26
|
+
kind: java.correctness.return-in-finally
|
|
27
|
+
bind: issue
|
|
28
|
+
emit:
|
|
29
|
+
finding:
|
|
30
|
+
category: correctness.control-flow
|
|
31
|
+
severity: medium
|
|
32
|
+
confidence: 0.88
|
|
33
|
+
tags:
|
|
34
|
+
- correctness
|
|
35
|
+
- java
|
|
36
|
+
message:
|
|
37
|
+
title: Remove control flow from finally in `${captures.issue.text}`
|
|
38
|
+
summary: "A finally block contains return, break, continue, or throw."
|
|
39
|
+
remediation:
|
|
40
|
+
summary: Keep finally blocks limited to cleanup without altering control flow.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.correctness.sync-on-string-literal
|
|
5
|
+
title: Do not synchronize on string literals
|
|
6
|
+
summary: String literals are interned and shared across the JVM.
|
|
7
|
+
rationale: Synchronizing on interned strings can cause unexpected deadlocks.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- java
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- java
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.java"
|
|
20
|
+
exclude:
|
|
21
|
+
- "**/src/test/**"
|
|
22
|
+
- "**/tests/**"
|
|
23
|
+
- "**/*Test.java"
|
|
24
|
+
match:
|
|
25
|
+
fact:
|
|
26
|
+
kind: java.correctness.sync-on-string-literal
|
|
27
|
+
bind: issue
|
|
28
|
+
emit:
|
|
29
|
+
finding:
|
|
30
|
+
category: correctness.concurrency
|
|
31
|
+
severity: medium
|
|
32
|
+
confidence: 0.88
|
|
33
|
+
tags:
|
|
34
|
+
- correctness
|
|
35
|
+
- java
|
|
36
|
+
message:
|
|
37
|
+
title: Avoid synchronizing on string literal in `${captures.issue.text}`
|
|
38
|
+
summary: "A synchronized block locks on a string literal."
|
|
39
|
+
remediation:
|
|
40
|
+
summary: Synchronize on a private final lock object instead.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.correctness.unsafe-optional-get
|
|
5
|
+
title: Check Optional before calling get
|
|
6
|
+
summary: Optional.get without a presence check can throw.
|
|
7
|
+
rationale: Unchecked Optional access causes runtime failures.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- java
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- java
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.java"
|
|
20
|
+
exclude:
|
|
21
|
+
- "**/src/test/**"
|
|
22
|
+
- "**/tests/**"
|
|
23
|
+
- "**/*Test.java"
|
|
24
|
+
match:
|
|
25
|
+
fact:
|
|
26
|
+
kind: java.correctness.unsafe-optional-get
|
|
27
|
+
bind: issue
|
|
28
|
+
emit:
|
|
29
|
+
finding:
|
|
30
|
+
category: correctness.nullability
|
|
31
|
+
severity: medium
|
|
32
|
+
confidence: 0.88
|
|
33
|
+
tags:
|
|
34
|
+
- correctness
|
|
35
|
+
- java
|
|
36
|
+
message:
|
|
37
|
+
title: Guard Optional.get in `${captures.issue.text}`
|
|
38
|
+
summary: "Optional.get is called without a nearby presence check."
|
|
39
|
+
remediation:
|
|
40
|
+
summary: Use orElse, orElseThrow, or isPresent before calling get.
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Protect sensitive Android screens from screenshots and recents
|
|
6
6
|
summary: Sensitive activities should enable FLAG_SECURE or avoid clearing it so screen content is harder to capture.
|
|
7
7
|
rationale: Finance, authentication, and secret-bearing screens can leak through screenshots, screen recording, and recent-task previews when FLAG_SECURE is missing or cleared.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-200
|
|
13
|
+
title: Exposure of Sensitive Information to an Unauthorized Actor
|
|
14
|
+
- kind: url
|
|
15
|
+
title: Android App Security Best Practices
|
|
16
|
+
url: https://developer.android.com/privacy-and-security/risks
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Android app security best practices
|
|
19
|
+
url: https://developer.android.com/privacy-and-security/risk
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- privacy
|
|
@@ -33,3 +45,4 @@ emit:
|
|
|
33
45
|
summary: "`${captures.issue.text}` appears on a sensitive Android surface without an effective FLAG_SECURE posture."
|
|
34
46
|
remediation:
|
|
35
47
|
summary: Enable FLAG_SECURE for sensitive screens, avoid clearing it at runtime, and document exceptions only after explicit threat modeling.
|
|
48
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Avoid Android world-readable or world-writable IO modes
|
|
6
6
|
summary: Context files and shared preferences must not use MODE_WORLD_READABLE or MODE_WORLD_WRITABLE.
|
|
7
7
|
rationale: Legacy Android modes expose application data to other packages on the device and break sandbox expectations for secrets.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-732
|
|
13
|
+
title: Incorrect Permission Assignment for Critical Resource
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Permission
|
|
16
|
+
url: https://owasp.org/www-community/vulnerabilities/Improper_File_Permissions
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Android app security best practices
|
|
19
|
+
url: https://developer.android.com/privacy-and-security/risk
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- privacy
|
|
@@ -33,3 +45,4 @@ emit:
|
|
|
33
45
|
summary: "`${captures.issue.text}` opts into MODE_WORLD_READABLE or MODE_WORLD_WRITABLE, which weakens app sandbox isolation."
|
|
34
46
|
remediation:
|
|
35
47
|
summary: Use MODE_PRIVATE or scoped storage APIs instead of world-readable or world-writable modes.
|
|
48
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.hibernate-sql-concatenation
|
|
5
|
+
title: Bind Hibernate query parameters instead of concatenating SQL
|
|
6
|
+
summary: >-
|
|
7
|
+
Hibernate `Session.createQuery`, `createNativeQuery`, and `createSQLQuery` calls must not build their query text from string concatenation or `String.format`.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Dynamic SQL fragments stitched into Hibernate query strings are an injection sink whenever any segment came from request, environment, or upload input.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-89
|
|
15
|
+
title: SQL Injection
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: SQL Injection Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Spring Boot security
|
|
21
|
+
url: https://docs.spring.io/spring-boot/reference/web/spring-security.html
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- java
|
|
25
|
+
- hibernate
|
|
26
|
+
- sql-injection
|
|
27
|
+
- rules-catalog
|
|
28
|
+
stability: stable
|
|
29
|
+
appliesTo: block
|
|
30
|
+
scope:
|
|
31
|
+
languages:
|
|
32
|
+
- java
|
|
33
|
+
paths:
|
|
34
|
+
include:
|
|
35
|
+
- "**/*.java"
|
|
36
|
+
exclude:
|
|
37
|
+
- "**/src/test/**"
|
|
38
|
+
- "**/tests/**"
|
|
39
|
+
- "**/*Test.java"
|
|
40
|
+
- "**/*Tests.java"
|
|
41
|
+
match:
|
|
42
|
+
fact:
|
|
43
|
+
kind: java.security.hibernate-sql-concatenation
|
|
44
|
+
bind: issue
|
|
45
|
+
emit:
|
|
46
|
+
finding:
|
|
47
|
+
category: security.sql-injection
|
|
48
|
+
severity: critical
|
|
49
|
+
confidence: 0.84
|
|
50
|
+
tags:
|
|
51
|
+
- security
|
|
52
|
+
- java
|
|
53
|
+
- hibernate
|
|
54
|
+
- sql-injection
|
|
55
|
+
message:
|
|
56
|
+
title: Bind parameters in Hibernate query at `${captures.issue.text}`
|
|
57
|
+
summary: >-
|
|
58
|
+
`${captures.issue.text}` constructs a Hibernate query by concatenating or formatting strings instead of binding parameters.
|
|
59
|
+
remediation:
|
|
60
|
+
summary: >-
|
|
61
|
+
Use named or positional parameters via `setParameter`, the Criteria API, or typed query DSLs instead of interpolating values into the HQL or SQL text.
|
|
62
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.insecure-cipher-mode
|
|
5
|
+
title: Avoid insecure cipher transformations
|
|
6
|
+
summary: "Java `Cipher.getInstance` should not request ECB mode or legacy algorithms like DES and RC4."
|
|
7
|
+
rationale: ECB mode leaks structure across blocks, while DES and RC4 are broken or deprecated and unsuitable for confidentiality.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-327
|
|
13
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cryptographic Storage Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- java
|
|
20
|
+
- cryptography
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- java
|
|
27
|
+
paths:
|
|
28
|
+
include:
|
|
29
|
+
- "**/*.java"
|
|
30
|
+
exclude:
|
|
31
|
+
- "**/src/test/**"
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/*Test.java"
|
|
34
|
+
match:
|
|
35
|
+
fact:
|
|
36
|
+
kind: java.security.insecure-cipher-mode
|
|
37
|
+
bind: issue
|
|
38
|
+
emit:
|
|
39
|
+
finding:
|
|
40
|
+
category: security.cryptography
|
|
41
|
+
severity: high
|
|
42
|
+
confidence: 0.92
|
|
43
|
+
tags:
|
|
44
|
+
- security
|
|
45
|
+
- java
|
|
46
|
+
- cryptography
|
|
47
|
+
message:
|
|
48
|
+
title: Replace insecure cipher transformation in `${captures.issue.text}`
|
|
49
|
+
summary: "`${captures.issue.text}` requests an insecure cipher mode or algorithm."
|
|
50
|
+
remediation:
|
|
51
|
+
summary: "Use authenticated modes such as `AES/GCM/NoPadding` and modern algorithms; avoid ECB, DES, and RC4."
|
|
52
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.insecure-network-protocol
|
|
5
|
+
title: Avoid plaintext or legacy network protocols
|
|
6
|
+
summary: "URL/URI literals should not use `ftp://`, `telnet://`, or `jar:http://`."
|
|
7
|
+
rationale: These schemes transmit credentials and payloads in cleartext or load remote archives without integrity checks.
|
|
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
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- java
|
|
20
|
+
- transport
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- java
|
|
27
|
+
paths:
|
|
28
|
+
include:
|
|
29
|
+
- "**/*.java"
|
|
30
|
+
exclude:
|
|
31
|
+
- "**/src/test/**"
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/*Test.java"
|
|
34
|
+
match:
|
|
35
|
+
fact:
|
|
36
|
+
kind: java.security.insecure-network-protocol
|
|
37
|
+
bind: issue
|
|
38
|
+
emit:
|
|
39
|
+
finding:
|
|
40
|
+
category: security.transport
|
|
41
|
+
severity: high
|
|
42
|
+
confidence: 0.92
|
|
43
|
+
tags:
|
|
44
|
+
- security
|
|
45
|
+
- java
|
|
46
|
+
- transport
|
|
47
|
+
message:
|
|
48
|
+
title: Use a secure protocol instead of `${captures.issue.text}`
|
|
49
|
+
summary: "`${captures.issue.text}` opens a URL or URI with a plaintext or legacy protocol."
|
|
50
|
+
remediation:
|
|
51
|
+
summary: "Use `https://`, `sftp://`, or `ssh://` and verify integrity for remote archives instead of `jar:http://`."
|
|
52
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.insecure-ssl-context
|
|
5
|
+
title: Avoid deprecated TLS/SSL protocol versions
|
|
6
|
+
summary: "`SSLContext.getInstance` should not request SSL, SSLv2, SSLv3, TLSv1.0, or TLSv1.1."
|
|
7
|
+
rationale: Pre-TLSv1.2 protocols are deprecated and vulnerable to known attacks such as POODLE and BEAST.
|
|
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
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- java
|
|
20
|
+
- tls
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- java
|
|
27
|
+
paths:
|
|
28
|
+
include:
|
|
29
|
+
- "**/*.java"
|
|
30
|
+
exclude:
|
|
31
|
+
- "**/src/test/**"
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/*Test.java"
|
|
34
|
+
match:
|
|
35
|
+
fact:
|
|
36
|
+
kind: java.security.insecure-ssl-context
|
|
37
|
+
bind: issue
|
|
38
|
+
emit:
|
|
39
|
+
finding:
|
|
40
|
+
category: security.transport
|
|
41
|
+
severity: high
|
|
42
|
+
confidence: 0.95
|
|
43
|
+
tags:
|
|
44
|
+
- security
|
|
45
|
+
- java
|
|
46
|
+
- tls
|
|
47
|
+
message:
|
|
48
|
+
title: Replace deprecated SSL/TLS protocol `${captures.issue.text}`
|
|
49
|
+
summary: "`${captures.issue.text}` selects a deprecated TLS/SSL protocol version."
|
|
50
|
+
remediation:
|
|
51
|
+
summary: "Use `SSLContext.getInstance(\"TLSv1.2\")` or `\"TLSv1.3\"` and rely on platform defaults where possible."
|
|
52
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
`createQuery`, `createNativeQuery`, `JdbcTemplate` calls, and string-based `@Query` values must not stitch SQL with request data using `+`, `String.format`, or similar.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Dynamic SQL built from untrusted fragments is a direct injection surface; parameterized queries and named parameters are the safe default.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-89
|
|
15
|
+
title: SQL Injection
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: SQL Injection Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Spring Boot security
|
|
21
|
+
url: https://docs.spring.io/spring-boot/reference/web/spring-security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- java
|
|
@@ -45,3 +57,4 @@ emit:
|
|
|
45
57
|
remediation:
|
|
46
58
|
summary: >-
|
|
47
59
|
Use JPQL named parameters, `CriteriaUpdate`, or prepared JDBC statements with bound parameters; never interpolate request values into query text.
|
|
60
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.jwt-without-verification
|
|
5
|
+
title: Verify JWT signatures before trusting claims
|
|
6
|
+
summary: Decoding a JWT without verifying its signature allows attackers to forge tokens and impersonate users.
|
|
7
|
+
rationale: Methods like `JWT.decode` and `Jwts.parser().parseClaimsJwt` do not check the cryptographic signature; downstream claims cannot be trusted.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-287
|
|
13
|
+
title: Improper Authentication
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: JSON Web Token Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- java
|
|
20
|
+
- jwt
|
|
21
|
+
- authentication
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- java
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.java"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/src/test/**"
|
|
33
|
+
- "**/tests/**"
|
|
34
|
+
- "**/*Test.java"
|
|
35
|
+
match:
|
|
36
|
+
fact:
|
|
37
|
+
kind: java.security.jwt-without-verification
|
|
38
|
+
bind: issue
|
|
39
|
+
emit:
|
|
40
|
+
finding:
|
|
41
|
+
category: security.authentication
|
|
42
|
+
severity: high
|
|
43
|
+
confidence: 0.88
|
|
44
|
+
tags:
|
|
45
|
+
- security
|
|
46
|
+
- java
|
|
47
|
+
- jwt
|
|
48
|
+
message:
|
|
49
|
+
title: Verify JWT signature near `${captures.issue.text}`
|
|
50
|
+
summary: "`${captures.issue.text}` reads a JWT without verifying its signature."
|
|
51
|
+
remediation:
|
|
52
|
+
summary: "Use `JWT.require(algorithm).build().verify(token)` or `Jwts.parser().setSigningKey(key).parseClaimsJws(token)` to authenticate the token before trusting claims."
|
|
53
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.null-cipher
|
|
5
|
+
title: Do not use NullCipher
|
|
6
|
+
summary: "Constructing `new NullCipher()` or `Cipher.getInstance(\"Null\")` performs no encryption."
|
|
7
|
+
rationale: NullCipher returns plaintext unchanged, providing no confidentiality and often disguising an intentional bypass of crypto.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-327
|
|
13
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cryptographic Storage Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- java
|
|
20
|
+
- cryptography
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- java
|
|
27
|
+
paths:
|
|
28
|
+
include:
|
|
29
|
+
- "**/*.java"
|
|
30
|
+
exclude:
|
|
31
|
+
- "**/src/test/**"
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/*Test.java"
|
|
34
|
+
match:
|
|
35
|
+
fact:
|
|
36
|
+
kind: java.security.null-cipher
|
|
37
|
+
bind: issue
|
|
38
|
+
emit:
|
|
39
|
+
finding:
|
|
40
|
+
category: security.cryptography
|
|
41
|
+
severity: critical
|
|
42
|
+
confidence: 0.97
|
|
43
|
+
tags:
|
|
44
|
+
- security
|
|
45
|
+
- java
|
|
46
|
+
- cryptography
|
|
47
|
+
message:
|
|
48
|
+
title: Replace NullCipher usage `${captures.issue.text}`
|
|
49
|
+
summary: "`${captures.issue.text}` uses NullCipher, which leaves data unencrypted."
|
|
50
|
+
remediation:
|
|
51
|
+
summary: "Use an authenticated cipher such as `AES/GCM/NoPadding` with a properly managed key."
|
|
52
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.security.permissive-cors
|
|
5
|
+
title: Avoid wildcard CORS allow-origins
|
|
6
|
+
summary: "Spring `@CrossOrigin(\"*\")`, `allowedOrigins(\"*\")`, and `addAllowedOriginPattern(\"*\")` open the API to any origin."
|
|
7
|
+
rationale: Wildcard origins disable browser-enforced same-origin protection and can allow untrusted sites to call the API with credentials.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-942
|
|
13
|
+
title: Permissive Cross-domain Policy with Untrusted Domains
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross-Origin Resource Sharing (CORS)
|
|
16
|
+
url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- java
|
|
20
|
+
- spring
|
|
21
|
+
- cors
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- java
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.java"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/src/test/**"
|
|
33
|
+
- "**/tests/**"
|
|
34
|
+
- "**/*Test.java"
|
|
35
|
+
match:
|
|
36
|
+
fact:
|
|
37
|
+
kind: java.security.permissive-cors
|
|
38
|
+
bind: issue
|
|
39
|
+
emit:
|
|
40
|
+
finding:
|
|
41
|
+
category: security.web
|
|
42
|
+
severity: high
|
|
43
|
+
confidence: 0.9
|
|
44
|
+
tags:
|
|
45
|
+
- security
|
|
46
|
+
- java
|
|
47
|
+
- cors
|
|
48
|
+
message:
|
|
49
|
+
title: Restrict CORS allow-origin near `${captures.issue.text}`
|
|
50
|
+
summary: "`${captures.issue.text}` accepts every origin via a wildcard CORS configuration."
|
|
51
|
+
remediation:
|
|
52
|
+
summary: "Allow only the specific origins your service trusts; never combine `allowCredentials(true)` with a wildcard origin."
|
|
53
|
+
|