@critiq/rules 0.0.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -4
- package/catalog.yaml +1775 -192
- package/package.json +6 -1
- package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
- package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
- package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
- package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
- package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
- package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
- package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
- package/rules/go/go.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/go/go.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/go/go.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +56 -0
- package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +55 -0
- package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +55 -0
- package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +55 -0
- package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +55 -0
- package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +55 -0
- package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +57 -0
- package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
- package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
- package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
- package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +55 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
- package/rules/go/go.security.sensitive-data-egress.rule.yaml +56 -0
- package/rules/go/go.security.tar-path-traversal.rule.yaml +55 -0
- package/rules/go/go.security.template-unescaped-request-value.rule.yaml +55 -0
- package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
- package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
- package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
- package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
- package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
- package/rules/go/go.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/go/go.testing.t-skip-without-ticket-reference.rule.yaml +33 -0
- package/rules/go/go.testing.time-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
- package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
- package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
- package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
- package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
- package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
- package/rules/java/java.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/java/java.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/java/java.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/java/java.security.android-screenshot-exposure.rule.yaml +48 -0
- package/rules/java/java.security.android-world-readable-mode.rule.yaml +48 -0
- package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
- package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
- package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
- package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
- package/rules/java/java.security.jpa-concatenated-query.rule.yaml +60 -0
- package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
- package/rules/java/java.security.null-cipher.rule.yaml +52 -0
- package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
- package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
- package/rules/java/java.security.reflected-output-from-request.rule.yaml +45 -0
- package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +48 -0
- package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
- package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +53 -0
- package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +53 -0
- package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +62 -0
- package/rules/java/java.security.spring-debug-exposure.rule.yaml +48 -0
- package/rules/java/java.security.spring-permit-all-default.rule.yaml +60 -0
- package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +60 -0
- package/rules/java/java.security.template-unescaped-user-output.rule.yaml +59 -0
- package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
- package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
- package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
- package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
- package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
- package/rules/java/java.testing.disabled-without-ticket-reference.rule.yaml +33 -0
- package/rules/java/java.testing.http-client-in-unit-test.rule.yaml +33 -0
- package/rules/java/java.testing.thread-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
- package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
- package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
- package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
- package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
- package/rules/php/php.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/php/php.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/php/php.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
- package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +51 -0
- package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +52 -0
- package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +55 -0
- package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +55 -0
- package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +58 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
- package/rules/php/php.security.sensitive-data-egress.rule.yaml +52 -0
- package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +55 -0
- package/rules/php/php.security.symfony-debug-exposure.rule.yaml +57 -0
- package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +51 -0
- package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
- package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
- package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +55 -0
- package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +55 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
- package/rules/php/php.testing.curl-in-unit-test.rule.yaml +33 -0
- package/rules/php/php.testing.mark-test-skipped-without-ticket-reference.rule.yaml +33 -0
- package/rules/php/php.testing.sleep-in-unit-test.rule.yaml +33 -0
- package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
- package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
- package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
- package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
- package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
- package/rules/python/py.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/python/py.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/python/py.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
- package/rules/python/py.security.debugger-import.rule.yaml +55 -0
- package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +59 -0
- package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
- package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
- package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +60 -0
- package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
- package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +60 -0
- package/rules/python/py.security.drf-allow-any-default.rule.yaml +59 -0
- package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +59 -0
- package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
- package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +56 -0
- package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
- package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +57 -0
- package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +57 -0
- package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +57 -0
- package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
- package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
- package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
- package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
- package/rules/python/py.testing.pytest-skip-without-ticket-reference.rule.yaml +33 -0
- package/rules/python/py.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/python/py.testing.time-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/ruby/ruby.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/ruby/ruby.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/ruby/ruby.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +57 -0
- package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +59 -0
- package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +58 -0
- package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +59 -0
- package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +55 -0
- package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +55 -0
- package/rules/ruby/ruby.testing.focused-example.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.pending-without-ticket-reference.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.skip-without-ticket-reference.rule.yaml +33 -0
- package/rules/ruby/ruby.testing.sleep-in-unit-test.rule.yaml +33 -0
- package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
- package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
- package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
- package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
- package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
- package/rules/rust/rust.performance.no-regex-construction-in-loop.rule.yaml +33 -0
- package/rules/rust/rust.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
- package/rules/rust/rust.performance.no-unbounded-concurrency.rule.yaml +33 -0
- package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +60 -0
- package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +58 -0
- package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +60 -0
- package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
- package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
- package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
- package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +58 -0
- package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +60 -0
- package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
- package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +60 -0
- package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +57 -0
- package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
- package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +58 -0
- package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
- package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
- package/rules/rust/rust.testing.ignore-without-ticket-reference.rule.yaml +33 -0
- package/rules/rust/rust.testing.real-network-in-unit-test.rule.yaml +33 -0
- package/rules/rust/rust.testing.thread-sleep-in-unit-test.rule.yaml +33 -0
- package/rules/shared/security.archive-path-traversal.rule.yaml +51 -0
- package/rules/shared/security.external-file-upload.rule.yaml +50 -0
- package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
- package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
- package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
- package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
- package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
- package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
- package/rules/shared/security.permissive-file-permissions.rule.yaml +50 -0
- package/rules/shared/security.sensitive-data-egress.rule.yaml +46 -0
- package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
- package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
- package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.assignment-in-condition.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.assignment-to-import-binding.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.async-promise-executor.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-function-parameter.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-import-source.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.duplicate-object-key.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.duplicate-switch-case.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.empty-block-statement.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.identical-comparison-operands.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.reassign-catch-binding.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.regexp-pattern-unusual-control-character.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.self-assignment.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
- package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +48 -0
- package/rules/typescript/ts.performance.no-array-spread-in-hot-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-cache-miss-from-unstable-key.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-expensive-sort-in-render-path.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-json-parse-stringify-clone.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-large-object-spread-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-n-plus-one-await-in-map.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-redundant-network-fetch.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-regex-construction-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-sync-fs-in-request-path.rule.yaml +32 -0
- package/rules/typescript/ts.performance.no-unbounded-concurrency.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-ambiguous-abbreviations.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-barrel-file-cycle.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-boolean-parameter-trap.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-dead-export.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-hidden-side-effect-import.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-inconsistent-error-shape.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-mixed-abstraction-level.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-primitive-obsession-in-domain-model.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-temporal-coupling.rule.yaml +27 -0
- package/rules/typescript/ts.quality.no-wide-public-surface.rule.yaml +27 -0
- package/rules/typescript/ts.react.no-accessibility-label-missing.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-activedescendant-on-non-focusable-host.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-click-without-keyboard-handler.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-deprecated-create-factory.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-deprecated-react-dom-root-api.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-derived-state-from-props.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-effect-fetch-without-cancellation.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-find-dom-node.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-img-missing-alt-text.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-index-as-key-in-dynamic-list.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-interactive-role-on-static-semantics.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-invalid-anchor-href.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-keyboard-interaction-without-widget-role.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-legacy-lifecycle.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-missing-error-boundary.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-positive-tabindex.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-static-element-with-synthetic-handlers.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-string-ref.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
- package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-uncontrolled-to-controlled-input.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-widget-role-without-tabindex.rule.yaml +36 -0
- package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
- package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +44 -0
- package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +48 -0
- package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +52 -0
- package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +52 -0
- package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +51 -0
- package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +51 -0
- package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +52 -0
- package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
- package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +46 -0
- package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +45 -0
- package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +45 -0
- package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +45 -0
- package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +48 -0
- package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
- package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +51 -0
- package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
- package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +51 -0
- package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +50 -0
- package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +51 -0
- package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
- package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +50 -0
- package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +54 -0
- package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
- package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +52 -0
- package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
- package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
- package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +45 -0
- package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +45 -0
- package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +46 -0
- package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
- package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +45 -0
- package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
- package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +45 -0
- package/rules/typescript/ts.security.log-injection.rule.yaml +46 -0
- package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
- package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +50 -0
- package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +51 -0
- package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +51 -0
- package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +52 -0
- package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
- package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
- package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
- package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +51 -0
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
- package/rules/typescript/ts.security.open-redirect.rule.yaml +12 -0
- package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +43 -0
- package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +11 -0
- package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
- package/rules/typescript/ts.security.ssrf.rule.yaml +11 -0
- package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
- package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
- package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +46 -0
- package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +46 -0
- package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
- package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +45 -0
- package/rules/typescript/ts.testing.no-flaky-timer-test.rule.yaml +38 -0
- package/rules/typescript/ts.testing.no-focused-test.rule.yaml +34 -0
- package/rules/typescript/ts.testing.no-missing-edge-case-tests.rule.yaml +35 -0
- package/rules/typescript/ts.testing.no-network-call-in-unit-test.rule.yaml +38 -0
- package/rules/typescript/ts.testing.no-skipped-test-without-ticket.rule.yaml +34 -0
- package/rules/typescript/ts.testing.no-snapshot-without-intent.rule.yaml +34 -0
- package/rules/typescript/ts.testing.no-test-only-code-in-production.rule.yaml +38 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.fiber-unsafe-multipart-upload
|
|
5
|
+
title: Harden Fiber multipart uploads
|
|
6
|
+
summary: >-
|
|
7
|
+
Fiber upload helpers should enforce size limits and never persist client-controlled filenames without normalization.
|
|
8
|
+
rationale: >-
|
|
9
|
+
`FormFile`/`SaveFile` flows that concatenate `Filename` into paths or skip `filepath.Base` are a common path traversal and storage abuse vector.
|
|
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
|
+
- fiber
|
|
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.fiber-unsafe-multipart-upload
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.filesystem
|
|
43
|
+
severity: high
|
|
44
|
+
confidence: 0.76
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- fiber
|
|
49
|
+
message:
|
|
50
|
+
title: Harden Fiber upload handling in `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` handles multipart uploads without basename hardening or byte limits in the local handler window."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Apply `filepath.Base`, cap reader sizes, allowlist extensions, and store uploads using server-generated object keys.
|
|
55
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.gin-sensitive-binding-without-validation
|
|
5
|
+
title: Gin handlers should validate sensitive request bodies
|
|
6
|
+
summary: >-
|
|
7
|
+
Sensitive Gin binds should use `binding` or validator tags so authentication and mutation payloads cannot be silently empty.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Regex heuristics flag `ShouldBindJSON`/`BindJSON` usage when structs in the same file omit `binding`/`validate` tags on sensitive fields such as passwords or roles.
|
|
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
|
+
- gin
|
|
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.gin-sensitive-binding-without-validation
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.input-validation
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.74
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- gin
|
|
49
|
+
message:
|
|
50
|
+
title: Add validation tags for sensitive Gin binds in `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` binds JSON without validation tags on sensitive struct fields."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Add `binding`/`validate` tags, register validators, or reject requests before they reach persistence layers.
|
|
55
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.gin-trust-all-proxies
|
|
5
|
+
title: Avoid trust-all Gin reverse proxy settings
|
|
6
|
+
summary: >-
|
|
7
|
+
`SetTrustedProxies` should list real upstreams instead of `nil` or `0.0.0.0/0` style catch-alls that spoof `X-Forwarded-For`.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Trusting every proxy allows clients to forge client IP headers and bypass IP-based controls or auditing.
|
|
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
|
+
- gin
|
|
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.gin-trust-all-proxies
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.misconfiguration
|
|
43
|
+
severity: high
|
|
44
|
+
confidence: 0.86
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- gin
|
|
49
|
+
message:
|
|
50
|
+
title: Restrict Gin trusted proxies in `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` trusts all proxies or nil, which enables forwarded header spoofing."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Replace catch-all trusted proxy lists with explicit CIDRs for your ingress tier and document the expected hop count.
|
|
55
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.gin-wildcard-cors-with-credentials
|
|
5
|
+
title: Avoid wildcard CORS origins with credentials in Gin
|
|
6
|
+
summary: >-
|
|
7
|
+
`gin-contrib/cors` configurations must not combine wildcard origins with `AllowCredentials: true`.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Wildcard origins with credentials violate browser CORS safety expectations and often mask missing origin allowlists in APIs that should be locked down.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-942
|
|
15
|
+
title: Permissive Cross-domain Policy with Untrusted Domains
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross-Origin Resource Sharing (CORS)
|
|
18
|
+
url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- gin
|
|
23
|
+
- cors
|
|
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.gin-wildcard-cors-with-credentials
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.misconfiguration
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.82
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- gin
|
|
50
|
+
- cors
|
|
51
|
+
message:
|
|
52
|
+
title: Fix permissive CORS with credentials in `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` pairs wildcard origins with `AllowCredentials`, which is unsafe for browser clients."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Replace wildcard origins with explicit HTTPS origins, disable credentials when public anonymous access is intended, or move token APIs to header-only auth without credentialed CORS.
|
|
57
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.insecure-rand-seed
|
|
5
|
+
title: Do not seed math/rand for security-sensitive randomness
|
|
6
|
+
summary: >-
|
|
7
|
+
`rand.Seed` from `math/rand` produces predictable streams; security-sensitive code must use `crypto/rand`.
|
|
8
|
+
rationale: >-
|
|
9
|
+
`math/rand` is a PRNG and remains predictable regardless of seed; tokens, secrets, and keys must come from `crypto/rand.Reader`.
|
|
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
|
+
- 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.insecure-rand-seed
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.cryptography
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.72
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- cryptography
|
|
49
|
+
message:
|
|
50
|
+
title: Replace `${captures.issue.text}` with cryptographic randomness
|
|
51
|
+
summary: "`${captures.issue.text}` seeds `math/rand`, which is not a secure source of randomness."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Use `crypto/rand.Reader` (or `crypto/rand.Read`) to generate secrets, tokens, and keys. `math/rand` should only be used for non-security-sensitive randomness and does not need seeding in Go 1.20+.
|
|
55
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.insecure-ssh-host-key
|
|
5
|
+
title: Verify SSH host keys instead of ignoring them
|
|
6
|
+
summary: >-
|
|
7
|
+
`ssh.InsecureIgnoreHostKey()` disables host key verification and exposes SSH clients to man-in-the-middle attacks.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Skipping host key verification lets any network attacker impersonate the remote host and steal credentials or hijack sessions.
|
|
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
|
+
- ssh
|
|
23
|
+
- transport
|
|
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-ssh-host-key
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.transport
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.95
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- ssh
|
|
50
|
+
- transport
|
|
51
|
+
message:
|
|
52
|
+
title: Replace insecure host-key callback at `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` disables SSH host key verification."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: >-
|
|
56
|
+
Use `ssh.FixedHostKey`, `knownhosts.New`, or a callback that compares the remote host key to a trusted pin before completing the handshake.
|
|
57
|
+
|
|
@@ -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
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.net-http-missing-timeouts
|
|
5
|
+
title: Configure HTTP server timeouts for public listeners
|
|
6
|
+
summary: >-
|
|
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
|
+
rationale: >-
|
|
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
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- net/http
|
|
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.net-http-missing-timeouts
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.misconfiguration
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.7
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- go
|
|
48
|
+
- net/http
|
|
49
|
+
message:
|
|
50
|
+
title: Add HTTP timeouts around `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` exposes a listener without full `http.Server` timeout coverage suitable for public networks."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
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
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: go.security.sensitive-data-egress
|
|
5
|
+
title: Avoid relaying request-controlled data through outbound Go HTTP clients
|
|
6
|
+
summary: >-
|
|
7
|
+
Outbound `http.Post` bodies should not be built directly from request values without validation or redaction.
|
|
8
|
+
rationale: >-
|
|
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
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- go
|
|
22
|
+
- privacy
|
|
23
|
+
- egress
|
|
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: security.sensitive-data-egress
|
|
40
|
+
bind: issue
|
|
41
|
+
emit:
|
|
42
|
+
finding:
|
|
43
|
+
category: security.privacy
|
|
44
|
+
severity: high
|
|
45
|
+
confidence: 0.78
|
|
46
|
+
tags:
|
|
47
|
+
- security
|
|
48
|
+
- go
|
|
49
|
+
- privacy
|
|
50
|
+
message:
|
|
51
|
+
title: Validate outbound HTTP payloads in `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` forwards tainted values into an outbound HTTP client body."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: >-
|
|
55
|
+
Allowlist outbound hosts, strip secrets from relayed payloads, and route integrations through audited helpers.
|
|
56
|
+
|