@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,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.insecure-ssl-protocol
|
|
5
|
+
title: Reject SSLv2 and SSLv3 protocols
|
|
6
|
+
summary: >-
|
|
7
|
+
`tls.VersionSSL30`, SSLv2, or SSLv3 string literals indicate use of broken legacy protocols.
|
|
8
|
+
rationale: >-
|
|
9
|
+
SSLv2 and SSLv3 contain unrecoverable cryptographic weaknesses (POODLE, DROWN) and must not be negotiated.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-319
|
|
15
|
+
title: Cleartext Transmission of Sensitive Information
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Transport Layer Security Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- tls
|
|
23
|
+
- cryptography
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.insecure-ssl-protocol
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.cryptography
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.9
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- tls
|
|
50
|
+
message:
|
|
51
|
+
title: Remove SSL legacy protocol from `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` references a broken SSLv2/SSLv3 protocol."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: >-
|
|
55
|
+
Use `tls.VersionTLS12` or `tls.VersionTLS13` instead of SSL legacy constants or string literals.
|
|
56
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.insecure-temp-file
|
|
5
|
+
title: Avoid deprecated `ioutil` temporary file helpers
|
|
6
|
+
summary: >-
|
|
7
|
+
Go code should use `os.CreateTemp` and `os.MkdirTemp` instead of the deprecated `ioutil.TempFile` / `ioutil.TempDir` helpers.
|
|
8
|
+
rationale: >-
|
|
9
|
+
The `ioutil` temp helpers are deprecated and frequently appear alongside race-prone temp-file patterns; the `os` replacements receive ongoing security fixes.
|
|
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
|
+
- go
|
|
22
|
+
- filesystem
|
|
23
|
+
- tempfile
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.insecure-temp-file
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.filesystem
|
|
44
|
+
severity: medium
|
|
45
|
+
confidence: 0.88
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- filesystem
|
|
50
|
+
- tempfile
|
|
51
|
+
message:
|
|
52
|
+
title: Replace deprecated temp helper at `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` uses a deprecated `ioutil` temporary file helper."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Switch to `os.CreateTemp(dir, pattern)` or `os.MkdirTemp(dir, pattern)` and ensure the pattern includes a `*` so a random component is generated.
|
|
57
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.jwt-without-verification
|
|
5
|
+
title: Verify JWT signatures before trusting claims
|
|
6
|
+
summary: >-
|
|
7
|
+
Parsing JWTs with `jwt.Parse` and a nil keyfunc, `jwt.ParseUnverified`, or `jwt.Decode` skips signature verification and lets attackers forge tokens.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Trusting unverified JWTs allows attackers to impersonate users or escalate privileges by crafting tokens with arbitrary claims.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-287
|
|
15
|
+
title: Improper Authentication
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: JSON Web Token Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- jwt
|
|
23
|
+
- authentication
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.jwt-without-verification
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.authentication
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.85
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- jwt
|
|
50
|
+
message:
|
|
51
|
+
title: Verify JWT signature near `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` parses a JWT without verifying its signature."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: >-
|
|
55
|
+
Provide a non-nil keyfunc to `jwt.Parse` (or `jwt.ParseWithClaims`) and validate the returned token's `.Valid` flag before reading claims.
|
|
56
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Public Go HTTP servers should use `http.Server` with read, write, idle, and header timeouts instead of convenience `ListenAndServe` helpers or incomplete literals.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Missing timeouts enable slowloris-style resource exhaustion and hung connections on internet-facing services.
|
|
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
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- go
|
|
@@ -43,3 +52,4 @@ emit:
|
|
|
43
52
|
remediation:
|
|
44
53
|
summary: >-
|
|
45
54
|
Construct `http.Server` with `ReadHeaderTimeout`, `ReadTimeout`, `WriteTimeout`, and `IdleTimeout`, and prefer `ListenAndServe` on that configured instance.
|
|
55
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.pprof-exposed
|
|
5
|
+
title: Do not expose pprof endpoints on shared HTTP mux
|
|
6
|
+
summary: >-
|
|
7
|
+
Importing `net/http/pprof` or registering `/debug/pprof` handlers on the default mux exposes debugging endpoints to remote callers.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Exposed pprof endpoints leak heap, goroutine, and CPU profiles and can be used for denial-of-service or sensitive data harvesting.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-16
|
|
15
|
+
title: Configuration
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Secure Configuration Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- net/http
|
|
23
|
+
- pprof
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.pprof-exposed
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.misconfiguration
|
|
44
|
+
severity: medium
|
|
45
|
+
confidence: 0.78
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- net/http
|
|
50
|
+
message:
|
|
51
|
+
title: Move pprof off the public mux near `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` exposes profiler endpoints without an authentication guard."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: >-
|
|
55
|
+
Register pprof handlers on a private mux bound to localhost or a separate listener, and gate them behind authentication.
|
|
56
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Outbound `http.Post` bodies should not be built directly from request values without validation or redaction.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Tainted POST bodies can exfiltrate secrets, replay cookies, or forward attacker payloads to internal integrations.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-200
|
|
15
|
+
title: Exposure of Sensitive Information to an Unauthorized Actor
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Logging Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- go
|
|
@@ -44,3 +53,4 @@ emit:
|
|
|
44
53
|
remediation:
|
|
45
54
|
summary: >-
|
|
46
55
|
Allowlist outbound hosts, strip secrets from relayed payloads, and route integrations through audited helpers.
|
|
56
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Tar extraction must normalize `header.Name` with `filepath.Base` or `filepath.Clean` before opening destination files.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Writing `hdr.Name` directly enables `../` traversal that escapes intended extraction directories.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-22
|
|
15
|
+
title: Path Traversal
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Path Traversal
|
|
18
|
+
url: https://owasp.org/www-community/attacks/Path_Traversal
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- go
|
|
@@ -43,3 +52,4 @@ emit:
|
|
|
43
52
|
remediation:
|
|
44
53
|
summary: >-
|
|
45
54
|
Join destinations using a fixed root with `filepath.Join`, reject absolute paths, and always apply `filepath.Base` before `os.Create`.
|
|
55
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
`template.HTML`, `template.JS`, and `template.CSS` should not wrap request-derived strings unless they were sanitized first.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Trusted template types disable escaping and turn reflected input into cross-site scripting when executed in browsers.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-79
|
|
15
|
+
title: Cross-site Scripting (XSS)
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- go
|
|
@@ -43,3 +52,4 @@ emit:
|
|
|
43
52
|
remediation:
|
|
44
53
|
summary: >-
|
|
45
54
|
Run untrusted strings through an HTML sanitizer such as bluemonday, prefer typed templates, or keep data in plain escaped fields.
|
|
55
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.tls-missing-min-version
|
|
5
|
+
title: Set a TLS minimum version on `tls.Config`
|
|
6
|
+
summary: >-
|
|
7
|
+
`tls.Config` literals should set `MinVersion` to a modern protocol (`tls.VersionTLS12` or newer) to avoid downgrade attacks.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Without `MinVersion`, the Go standard library accepts legacy TLS versions that are vulnerable to known protocol attacks.
|
|
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
|
+
- go
|
|
22
|
+
- tls
|
|
23
|
+
- rules-catalog
|
|
24
|
+
stability: experimental
|
|
25
|
+
appliesTo: block
|
|
26
|
+
scope:
|
|
27
|
+
languages:
|
|
28
|
+
- go
|
|
29
|
+
paths:
|
|
30
|
+
include:
|
|
31
|
+
- "**/*.go"
|
|
32
|
+
exclude:
|
|
33
|
+
- "**/*_test.go"
|
|
34
|
+
- "**/testdata/**"
|
|
35
|
+
- "**/vendor/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: go.security.tls-missing-min-version
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.cryptography
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.8
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- tls
|
|
49
|
+
message:
|
|
50
|
+
title: Set `MinVersion` on TLS config
|
|
51
|
+
summary: "`${captures.issue.text}` constructs a `tls.Config` without an explicit `MinVersion`."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Add `MinVersion: tls.VersionTLS12` (or `tls.VersionTLS13`) to the configuration to enforce a modern protocol baseline.
|
|
55
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.unsafe-package-import
|
|
5
|
+
title: Avoid the `unsafe` package outside vetted boundaries
|
|
6
|
+
summary: >-
|
|
7
|
+
Production Go code should not import the `unsafe` package, which bypasses the type system and memory safety guarantees.
|
|
8
|
+
rationale: >-
|
|
9
|
+
`unsafe.Pointer` lets callers reinterpret arbitrary memory, hiding undefined behaviour and creating vulnerabilities that escape Go's compiler checks.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-20
|
|
15
|
+
title: Improper Input Validation
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Input Validation Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- memory-safety
|
|
23
|
+
- rules-catalog
|
|
24
|
+
stability: experimental
|
|
25
|
+
appliesTo: block
|
|
26
|
+
scope:
|
|
27
|
+
languages:
|
|
28
|
+
- go
|
|
29
|
+
paths:
|
|
30
|
+
include:
|
|
31
|
+
- "**/*.go"
|
|
32
|
+
exclude:
|
|
33
|
+
- "**/*_test.go"
|
|
34
|
+
- "**/testdata/**"
|
|
35
|
+
- "**/vendor/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: go.security.unsafe-package-import
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.memory-safety
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.9
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- memory-safety
|
|
49
|
+
message:
|
|
50
|
+
title: Remove `unsafe` import at `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` imports `unsafe`, which bypasses Go's memory safety guarantees."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Replace `unsafe.Pointer` usage with typed APIs from `reflect`, `encoding/binary`, or `cgo` boundaries that explicitly document and contain the unsafe scope.
|
|
55
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.weak-bcrypt-cost
|
|
5
|
+
title: Use a strong bcrypt cost factor
|
|
6
|
+
summary: >-
|
|
7
|
+
`bcrypt.GenerateFromPassword` (and similar helpers) must use a cost factor of at least `bcrypt.DefaultCost` (10).
|
|
8
|
+
rationale: >-
|
|
9
|
+
Low bcrypt costs make password hashes cheap to crack offline and undermine credential storage protections.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-327
|
|
15
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cryptographic Storage Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- cryptography
|
|
23
|
+
- passwords
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.weak-bcrypt-cost
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.cryptography
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.9
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- passwords
|
|
50
|
+
message:
|
|
51
|
+
title: Raise bcrypt cost in `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` hashes passwords with a cost below the bcrypt default."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: >-
|
|
55
|
+
Pass `bcrypt.DefaultCost` (or a higher value tuned to your performance budget) instead of a literal cost less than 10.
|
|
56
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.weak-crypto-import
|
|
5
|
+
title: Avoid importing broken or deprecated crypto packages
|
|
6
|
+
summary: >-
|
|
7
|
+
Production Go code should not import `crypto/md5`, `crypto/sha1`, `crypto/des`, or `crypto/rc4` for security-sensitive purposes.
|
|
8
|
+
rationale: >-
|
|
9
|
+
MD5 and SHA-1 are broken hash functions, DES has an obsolete key size, and RC4 has known biases; using them as cryptographic primitives degrades confidentiality and integrity.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-327
|
|
15
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cryptographic Storage Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- cryptography
|
|
23
|
+
- hash
|
|
24
|
+
- cipher
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: experimental
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- go
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/*.go"
|
|
34
|
+
exclude:
|
|
35
|
+
- "**/*_test.go"
|
|
36
|
+
- "**/testdata/**"
|
|
37
|
+
- "**/vendor/**"
|
|
38
|
+
match:
|
|
39
|
+
fact:
|
|
40
|
+
kind: go.security.weak-crypto-import
|
|
41
|
+
bind: issue
|
|
42
|
+
emit:
|
|
43
|
+
finding:
|
|
44
|
+
category: security.cryptography
|
|
45
|
+
severity: medium
|
|
46
|
+
confidence: 0.9
|
|
47
|
+
tags:
|
|
48
|
+
- security
|
|
49
|
+
- go
|
|
50
|
+
- cryptography
|
|
51
|
+
message:
|
|
52
|
+
title: Replace weak crypto import at `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` imports a broken or deprecated crypto package."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Use `crypto/sha256` or `crypto/sha512` for hashing, `crypto/aes` with GCM mode for ciphers, and avoid RC4 entirely.
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.weak-rsa-key-size
|
|
5
|
+
title: Use at least 2048-bit RSA keys
|
|
6
|
+
summary: >-
|
|
7
|
+
`rsa.GenerateKey` and `rsa.GenerateMultiPrimeKey` should request a key size of 2048 bits or higher.
|
|
8
|
+
rationale: >-
|
|
9
|
+
RSA moduli below 2048 bits are considered cryptographically weak and feasible to attack with modern resources.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-327
|
|
15
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cryptographic Storage Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- cryptography
|
|
23
|
+
- rsa
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.weak-rsa-key-size
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.cryptography
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.9
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- cryptography
|
|
50
|
+
- rsa
|
|
51
|
+
message:
|
|
52
|
+
title: Increase RSA key size near `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` initializes RSA with fewer than 2048 bits."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Generate RSA keys with at least 2048 bits, or prefer Ed25519/ECDSA for new code where appropriate.
|
|
57
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.weak-tls-cipher
|
|
5
|
+
title: Remove weak TLS cipher suites
|
|
6
|
+
summary: >-
|
|
7
|
+
`tls.Config.CipherSuites` should not include RC4, DES, 3DES, NULL, or export-grade cipher constants.
|
|
8
|
+
rationale: >-
|
|
9
|
+
These ciphers are deprecated and break confidentiality (RC4 biases, Sweet32 against 3DES, NULL/export-grade weaknesses).
|
|
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
|
+
- go
|
|
22
|
+
- tls
|
|
23
|
+
- cryptography
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: experimental
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- go
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.go"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/*_test.go"
|
|
35
|
+
- "**/testdata/**"
|
|
36
|
+
- "**/vendor/**"
|
|
37
|
+
match:
|
|
38
|
+
fact:
|
|
39
|
+
kind: go.security.weak-tls-cipher
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.cryptography
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.88
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- tls
|
|
50
|
+
message:
|
|
51
|
+
title: Remove deprecated cipher from TLS configuration
|
|
52
|
+
summary: "`${captures.issue.text}` enables a weak or deprecated cipher suite in `tls.Config.CipherSuites`."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: >-
|
|
55
|
+
Drop RC4/DES/3DES/NULL/export ciphers. Prefer the TLS 1.3 defaults or modern AEAD suites such as `TLS_AES_128_GCM_SHA256`.
|
|
56
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: java.correctness.catch-null-pointer
|
|
5
|
+
title: Do not catch NullPointerException
|
|
6
|
+
summary: NullPointerException indicates a programming error.
|
|
7
|
+
rationale: Catching NPE masks bugs that should be fixed at the source.
|
|
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.catch-null-pointer
|
|
27
|
+
bind: issue
|
|
28
|
+
emit:
|
|
29
|
+
finding:
|
|
30
|
+
category: correctness.exceptions
|
|
31
|
+
severity: low
|
|
32
|
+
confidence: 0.88
|
|
33
|
+
tags:
|
|
34
|
+
- correctness
|
|
35
|
+
- java
|
|
36
|
+
message:
|
|
37
|
+
title: Remove NullPointerException catch in `${captures.issue.text}`
|
|
38
|
+
summary: "NullPointerException is caught instead of preventing null access."
|
|
39
|
+
remediation:
|
|
40
|
+
summary: Add null checks or Optional handling at the source of the failure.
|