@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,44 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-arguments-callee
|
|
5
|
+
title: Avoid `arguments.callee` and `arguments.caller`
|
|
6
|
+
summary: Do not read `arguments.callee` or `arguments.caller` in functions.
|
|
7
|
+
rationale: These legacy properties break optimizations, leak stack details, and are restricted in strict mode.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-94
|
|
13
|
+
title: Improper Control of Generation of Code
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Code Injection
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Code_Injection
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- language
|
|
20
|
+
- rules-catalog
|
|
21
|
+
stability: stable
|
|
22
|
+
appliesTo: block
|
|
23
|
+
scope:
|
|
24
|
+
languages:
|
|
25
|
+
- typescript
|
|
26
|
+
- javascript
|
|
27
|
+
match:
|
|
28
|
+
fact:
|
|
29
|
+
kind: security.arguments-callee-or-caller
|
|
30
|
+
bind: issue
|
|
31
|
+
emit:
|
|
32
|
+
finding:
|
|
33
|
+
category: security.language
|
|
34
|
+
severity: medium
|
|
35
|
+
confidence: 0.95
|
|
36
|
+
tags:
|
|
37
|
+
- security
|
|
38
|
+
- language
|
|
39
|
+
message:
|
|
40
|
+
title: Avoid `${captures.issue.text}`
|
|
41
|
+
summary: "`${captures.issue.text}` relies on deprecated `arguments` metadata and should not be used."
|
|
42
|
+
remediation:
|
|
43
|
+
summary: Use named function expressions or arrow functions instead of `arguments.callee` or `arguments.caller`.
|
|
44
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-assign-mutable-export
|
|
5
|
+
title: Avoid mutable module exports
|
|
6
|
+
summary: Shared module state should not be exported with `let`/`var` or reassigned after export.
|
|
7
|
+
rationale: Mutable exports make it easy for unrelated modules to change shared security or configuration state at runtime.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-16
|
|
13
|
+
title: Configuration
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Secure Configuration Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- express
|
|
20
|
+
- maintainability
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- typescript
|
|
27
|
+
- javascript
|
|
28
|
+
match:
|
|
29
|
+
fact:
|
|
30
|
+
kind: security.mutable-module-export
|
|
31
|
+
bind: issue
|
|
32
|
+
emit:
|
|
33
|
+
finding:
|
|
34
|
+
category: security.maintainability
|
|
35
|
+
severity: low
|
|
36
|
+
confidence: 0.84
|
|
37
|
+
tags:
|
|
38
|
+
- security
|
|
39
|
+
- module-boundary
|
|
40
|
+
message:
|
|
41
|
+
title: Keep exported module state immutable for `${captures.issue.text}`
|
|
42
|
+
summary: "`${captures.issue.text}` is exported with a mutable binding that can change at runtime."
|
|
43
|
+
remediation:
|
|
44
|
+
summary: Export read-only values, freeze shared objects, or expose accessors instead of mutable bindings.
|
|
45
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Eval or dynamic code execution
|
|
6
6
|
summary: Eval-like helpers, `vm` execution APIs, and string-evaluated timers should not execute dynamic code.
|
|
7
7
|
rationale: Dynamic execution turns data into code, widens the attack surface, and bypasses normal control flow.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-94
|
|
13
|
+
title: Improper Control of Generation of Code
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Code Injection
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Code_Injection
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- execution
|
|
@@ -32,3 +41,4 @@ emit:
|
|
|
32
41
|
summary: "`${captures.issue.text}` executes dynamic code and should be replaced with a safer alternative."
|
|
33
42
|
remediation:
|
|
34
43
|
summary: Replace dynamic execution with explicit parsing, fixed dispatch tables, or normal function callbacks.
|
|
44
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-fs-readfile-sync-in-handler
|
|
5
|
+
title: Avoid synchronous file reads in HTTP handlers
|
|
6
|
+
summary: Request handlers should not call `readFileSync` or equivalent blocking file APIs.
|
|
7
|
+
rationale: Blocking disk I/O inside request handlers stalls the Node.js event loop and hurts availability under load.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-16
|
|
13
|
+
title: Configuration
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Secure Configuration Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- express
|
|
20
|
+
- performance
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- typescript
|
|
27
|
+
- javascript
|
|
28
|
+
match:
|
|
29
|
+
fact:
|
|
30
|
+
kind: security.readfile-sync-in-request-handler
|
|
31
|
+
bind: issue
|
|
32
|
+
emit:
|
|
33
|
+
finding:
|
|
34
|
+
category: security.availability
|
|
35
|
+
severity: medium
|
|
36
|
+
confidence: 0.86
|
|
37
|
+
tags:
|
|
38
|
+
- security
|
|
39
|
+
- express
|
|
40
|
+
- filesystem
|
|
41
|
+
message:
|
|
42
|
+
title: Replace blocking file read `${captures.issue.text}` in this handler
|
|
43
|
+
summary: "`${captures.issue.text}` performs synchronous disk I/O on the request path."
|
|
44
|
+
remediation:
|
|
45
|
+
summary: Use `fs.promises.readFile`, streams, or preload static assets outside the hot request path.
|
|
46
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-global-native-reassignment
|
|
5
|
+
title: Do not reassign global native bindings
|
|
6
|
+
summary: Do not assign to global native bindings such as `Object`, `Array`, or `undefined`.
|
|
7
|
+
rationale: Reassigning global natives breaks language invariants and can disable security checks that rely on them.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-94
|
|
13
|
+
title: Improper Control of Generation of Code
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Code Injection
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Code_Injection
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- language
|
|
20
|
+
- rules-catalog
|
|
21
|
+
stability: stable
|
|
22
|
+
appliesTo: block
|
|
23
|
+
scope:
|
|
24
|
+
languages:
|
|
25
|
+
- typescript
|
|
26
|
+
- javascript
|
|
27
|
+
match:
|
|
28
|
+
fact:
|
|
29
|
+
kind: security.global-native-reassignment
|
|
30
|
+
bind: issue
|
|
31
|
+
emit:
|
|
32
|
+
finding:
|
|
33
|
+
category: security.language
|
|
34
|
+
severity: high
|
|
35
|
+
confidence: 0.97
|
|
36
|
+
tags:
|
|
37
|
+
- security
|
|
38
|
+
- language
|
|
39
|
+
message:
|
|
40
|
+
title: Do not reassign global native bindings
|
|
41
|
+
summary: "`${captures.issue.text}` reassigns a global native binding and can break runtime guarantees."
|
|
42
|
+
remediation:
|
|
43
|
+
summary: Use local variables with distinct names instead of overwriting global natives.
|
|
44
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid unsafe `innerHTML` assignment
|
|
6
6
|
summary: "`innerHTML` assignments should only use fixed or explicitly sanitized HTML."
|
|
7
7
|
rationale: Direct HTML injection can allow untrusted or weakly reviewed content to execute in the browser.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-79
|
|
13
|
+
title: Cross-site Scripting (XSS)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- output-encoding
|
|
@@ -34,3 +43,4 @@ emit:
|
|
|
34
43
|
summary: "`${captures.issue.text}` inserts non-literal, non-sanitized HTML into `innerHTML`."
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Prefer text-only rendering APIs or assign only fixed or explicitly sanitized HTML.
|
|
46
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-javascript-url
|
|
5
|
+
title: Avoid `javascript:` URLs
|
|
6
|
+
summary: Do not use `javascript:` URLs in string literals, template literals, or JSX link attributes.
|
|
7
|
+
rationale: "`javascript:` URLs execute attacker-controlled code when used as navigation targets."
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-79
|
|
13
|
+
title: Cross-site Scripting (XSS)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- xss
|
|
20
|
+
- rules-catalog
|
|
21
|
+
stability: stable
|
|
22
|
+
appliesTo: block
|
|
23
|
+
scope:
|
|
24
|
+
languages:
|
|
25
|
+
- typescript
|
|
26
|
+
- javascript
|
|
27
|
+
match:
|
|
28
|
+
fact:
|
|
29
|
+
kind: security.javascript-url
|
|
30
|
+
bind: issue
|
|
31
|
+
emit:
|
|
32
|
+
finding:
|
|
33
|
+
category: security.output-encoding
|
|
34
|
+
severity: high
|
|
35
|
+
confidence: 0.94
|
|
36
|
+
tags:
|
|
37
|
+
- security
|
|
38
|
+
- xss
|
|
39
|
+
message:
|
|
40
|
+
title: "Avoid `javascript:` URLs"
|
|
41
|
+
summary: "`${captures.issue.text}` uses a `javascript:` URL that can execute arbitrary script."
|
|
42
|
+
remediation:
|
|
43
|
+
summary: "Use safe HTTPS links, in-app handlers, or explicit event callbacks instead of `javascript:` URLs."
|
|
44
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-native-prototype-extension
|
|
5
|
+
title: Do not extend native prototypes
|
|
6
|
+
summary: Do not assign properties on built-in prototype objects such as `Array.prototype`.
|
|
7
|
+
rationale: Mutating native prototypes affects every consumer of that type and can introduce subtle security bugs across the runtime.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-94
|
|
13
|
+
title: Improper Control of Generation of Code
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Code Injection
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Code_Injection
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- language
|
|
20
|
+
- rules-catalog
|
|
21
|
+
stability: stable
|
|
22
|
+
appliesTo: block
|
|
23
|
+
scope:
|
|
24
|
+
languages:
|
|
25
|
+
- typescript
|
|
26
|
+
- javascript
|
|
27
|
+
match:
|
|
28
|
+
fact:
|
|
29
|
+
kind: security.native-prototype-extension
|
|
30
|
+
bind: issue
|
|
31
|
+
emit:
|
|
32
|
+
finding:
|
|
33
|
+
category: security.language
|
|
34
|
+
severity: high
|
|
35
|
+
confidence: 0.96
|
|
36
|
+
tags:
|
|
37
|
+
- security
|
|
38
|
+
- language
|
|
39
|
+
message:
|
|
40
|
+
title: Do not extend native prototypes
|
|
41
|
+
summary: "`${captures.issue.text}` mutates a built-in prototype and can change behavior globally."
|
|
42
|
+
remediation:
|
|
43
|
+
summary: Use utility functions or wrapper types instead of modifying native prototypes.
|
|
44
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-sync-child-process-exec
|
|
5
|
+
title: Avoid synchronous child process execution with dynamic commands
|
|
6
|
+
summary: execSync and spawnSync should not run commands built from variables or template strings.
|
|
7
|
+
rationale: Synchronous shell execution blocks the event loop and dynamic command strings are a common command-injection surface.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-78
|
|
13
|
+
title: OS Command Injection
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: OS Command Injection Defense Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- express
|
|
20
|
+
- child-process
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- typescript
|
|
27
|
+
- javascript
|
|
28
|
+
match:
|
|
29
|
+
fact:
|
|
30
|
+
kind: security.sync-child-process-exec
|
|
31
|
+
bind: issue
|
|
32
|
+
emit:
|
|
33
|
+
finding:
|
|
34
|
+
category: security.command-injection
|
|
35
|
+
severity: high
|
|
36
|
+
confidence: 0.88
|
|
37
|
+
tags:
|
|
38
|
+
- security
|
|
39
|
+
- child-process
|
|
40
|
+
message:
|
|
41
|
+
title: Avoid synchronous shell execution in `${captures.issue.text}`
|
|
42
|
+
summary: "`${captures.issue.text}` runs a child process synchronously with a non-literal command string."
|
|
43
|
+
remediation:
|
|
44
|
+
summary: Prefer async APIs with fixed command allowlists, or validate and normalize inputs before invoking shell commands.
|
|
45
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-throw-literal
|
|
5
|
+
title: Throw `Error` objects instead of literals
|
|
6
|
+
summary: Only throw `Error` instances (or subclasses), not strings, numbers, or plain objects.
|
|
7
|
+
rationale: Throwing literals loses stack traces and makes error handling inconsistent across callers.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-16
|
|
13
|
+
title: Configuration
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Secure Configuration Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- reliability
|
|
20
|
+
- rules-catalog
|
|
21
|
+
stability: stable
|
|
22
|
+
appliesTo: block
|
|
23
|
+
scope:
|
|
24
|
+
languages:
|
|
25
|
+
- typescript
|
|
26
|
+
- javascript
|
|
27
|
+
match:
|
|
28
|
+
fact:
|
|
29
|
+
kind: security.throw-literal
|
|
30
|
+
bind: issue
|
|
31
|
+
emit:
|
|
32
|
+
finding:
|
|
33
|
+
category: security.reliability
|
|
34
|
+
severity: medium
|
|
35
|
+
confidence: 0.9
|
|
36
|
+
tags:
|
|
37
|
+
- security
|
|
38
|
+
- reliability
|
|
39
|
+
message:
|
|
40
|
+
title: Throw an `Error` instead of a literal
|
|
41
|
+
summary: "`${captures.issue.text}` throws a non-`Error` value that is harder to inspect and handle safely."
|
|
42
|
+
remediation:
|
|
43
|
+
summary: Throw `new Error(...)` or a typed error subclass with a clear message.
|
|
44
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.no-with-statement
|
|
5
|
+
title: Avoid `with` statements
|
|
6
|
+
summary: "`with` statements make binding resolution unpredictable and are disallowed in strict mode."
|
|
7
|
+
rationale: The `with` statement introduces dynamic scope and makes static analysis, optimization, and security review unreliable.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-94
|
|
13
|
+
title: Improper Control of Generation of Code
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Code Injection
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Code_Injection
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- language
|
|
20
|
+
- rules-catalog
|
|
21
|
+
stability: stable
|
|
22
|
+
appliesTo: block
|
|
23
|
+
scope:
|
|
24
|
+
languages:
|
|
25
|
+
- typescript
|
|
26
|
+
- javascript
|
|
27
|
+
match:
|
|
28
|
+
fact:
|
|
29
|
+
kind: security.with-statement
|
|
30
|
+
bind: issue
|
|
31
|
+
emit:
|
|
32
|
+
finding:
|
|
33
|
+
category: security.language
|
|
34
|
+
severity: high
|
|
35
|
+
confidence: 0.98
|
|
36
|
+
tags:
|
|
37
|
+
- security
|
|
38
|
+
- language
|
|
39
|
+
message:
|
|
40
|
+
title: Avoid `with` statements
|
|
41
|
+
summary: "`${captures.issue.text}` uses a `with` statement that makes binding resolution unpredictable."
|
|
42
|
+
remediation:
|
|
43
|
+
summary: Replace the `with` block with explicit property access on a named object.
|
|
44
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid attacker-controlled filesystem read paths
|
|
6
6
|
summary: Direct filesystem read APIs should not consume request- or upload-controlled filenames.
|
|
7
7
|
rationale: Dynamic read paths can expose unintended local files or bypass expected file-selection constraints.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-434
|
|
13
|
+
title: Unrestricted Upload of File with Dangerous Type
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Upload Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- filesystem
|
|
@@ -34,3 +43,4 @@ emit:
|
|
|
34
43
|
summary: "`${captures.issue.text}` reads from a filename derived from external input."
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Resolve reads from a trusted allowlist or a validated server-controlled mapping instead of external filenames.
|
|
46
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.nuxt-public-runtime-secret
|
|
5
|
+
title: Keep secrets out of Nuxt public runtime config
|
|
6
|
+
summary: >-
|
|
7
|
+
Sensitive credentials must not be exposed through runtimeConfig.public, which is visible to client bundles.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Nuxt exposes runtimeConfig.public to the browser; placing secret material there leaks API keys, database passwords, and signing material to every visitor.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-798
|
|
15
|
+
title: Use of Hard-coded Credentials
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Secrets Management Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Node.js security best practices
|
|
21
|
+
url: https://nodejs.org/en/learn/getting-started/security-best-practices
|
|
22
|
+
tags:
|
|
23
|
+
- security
|
|
24
|
+
- nuxt
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: experimental
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- typescript
|
|
31
|
+
- javascript
|
|
32
|
+
match:
|
|
33
|
+
fact:
|
|
34
|
+
kind: security.nuxt-public-runtime-secret
|
|
35
|
+
bind: issue
|
|
36
|
+
emit:
|
|
37
|
+
finding:
|
|
38
|
+
category: security.misconfiguration
|
|
39
|
+
severity: high
|
|
40
|
+
confidence: 0.86
|
|
41
|
+
tags:
|
|
42
|
+
- security
|
|
43
|
+
- nuxt
|
|
44
|
+
message:
|
|
45
|
+
title: Move ${captures.issue.text} out of runtimeConfig.public
|
|
46
|
+
summary: >-
|
|
47
|
+
runtimeConfig.public declares ${captures.issue.text}, which looks like a secret or private credential.
|
|
48
|
+
remediation:
|
|
49
|
+
summary: >-
|
|
50
|
+
Keep secrets in the private runtimeConfig tree (non-public) and expose only publishable identifiers to the client after reviewing Nuxt runtime config documentation.
|
|
51
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Use constant-time secret comparison
|
|
6
6
|
summary: Secrets and tokens should not be compared with ordinary equality operators.
|
|
7
7
|
rationale: Ordinary string comparison can leak timing differences that help attackers guess secret material.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-327
|
|
13
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cryptographic Storage Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- cryptography
|
|
@@ -35,3 +44,4 @@ emit:
|
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Use a constant-time comparison helper such as `crypto.timingSafeEqual` for secrets, tokens, and password hashes.
|
|
37
46
|
|
|
47
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Open redirect via request-controlled target
|
|
6
6
|
summary: Redirect and navigation sinks should not use request-controlled destinations without validation.
|
|
7
7
|
rationale: Redirect targets that are derived from user input can send authenticated users to attacker-controlled destinations.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-601
|
|
13
|
+
title: URL Redirection to Untrusted Site
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Unvalidated Redirects and Forwards Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- input-validation
|
|
@@ -16,6 +25,8 @@ scope:
|
|
|
16
25
|
languages:
|
|
17
26
|
- typescript
|
|
18
27
|
- javascript
|
|
28
|
+
- java
|
|
29
|
+
- go
|
|
19
30
|
match:
|
|
20
31
|
fact:
|
|
21
32
|
kind: security.open-redirect
|
|
@@ -35,3 +46,4 @@ emit:
|
|
|
35
46
|
remediation:
|
|
36
47
|
summary: Normalize the target to an internal path or validate it against a trusted origin allowlist before redirecting.
|
|
37
48
|
|
|
49
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Do not allow every origin in CORS policy
|
|
6
6
|
summary: CORS should not fall back to wildcard or implicit allow-all origin settings.
|
|
7
7
|
rationale: Wildcard or implicit allow-all CORS policies expose authenticated browser responses across origins.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-942
|
|
13
|
+
title: Permissive Cross-domain Policy with Untrusted Domains
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross-Origin Resource Sharing (CORS)
|
|
16
|
+
url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- cors
|
|
@@ -34,3 +43,4 @@ emit:
|
|
|
34
43
|
summary: "`${captures.issue.text}` allows any origin through wildcard or implicit CORS policy."
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Configure an explicit allowlist or validated origin callback instead of allowing all origins.
|
|
46
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid permissive file modes
|
|
6
6
|
summary: Files that can carry user or security data should not be created with world-accessible modes.
|
|
7
7
|
rationale: Broad file permissions expose application data to local users or processes that should not read or modify it.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-732
|
|
13
|
+
title: Incorrect Permission Assignment for Critical Resource
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: File Permission
|
|
16
|
+
url: https://owasp.org/www-community/vulnerabilities/Improper_File_Permissions
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- filesystem
|
|
@@ -35,3 +44,4 @@ emit:
|
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Use the minimum required file mode and remove world-readable or world-writable bits.
|
|
37
46
|
|
|
47
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid wildcard `postMessage` targets
|
|
6
6
|
summary: "`postMessage` calls should not use `*` as the target origin when they carry application data."
|
|
7
7
|
rationale: Wildcard targets allow the browser to deliver the message to any origin that receives the window reference.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-79
|
|
13
|
+
title: Cross-site Scripting (XSS)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- browser
|
|
@@ -34,3 +43,4 @@ emit:
|
|
|
34
43
|
summary: "`${captures.issue.text}` uses `*` as the `postMessage` target origin."
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Set the target origin to a strict expected origin instead of `*`.
|
|
46
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid predictable token generation
|
|
6
6
|
summary: Tokens, reset links, and session secrets should be generated from cryptographically strong randomness.
|
|
7
7
|
rationale: Predictable token material makes it easier to guess reset links, invite codes, and session secrets.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-287
|
|
13
|
+
title: Improper Authentication
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: JSON Web Token Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- authentication
|
|
@@ -34,3 +43,4 @@ emit:
|
|
|
34
43
|
summary: "`${captures.issue.text}` builds a token-like value from predictable inputs."
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Generate the value with `crypto.randomBytes`, `crypto.randomUUID`, or an approved secure token source.
|
|
46
|
+
|
|
@@ -5,6 +5,15 @@ metadata:
|
|
|
5
5
|
title: Avoid raw HTML with request input
|
|
6
6
|
summary: Request-derived values should not be interpolated into raw HTML strings.
|
|
7
7
|
rationale: Raw HTML construction with request data is a common path to reflected and stored XSS.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-79
|
|
13
|
+
title: Cross-site Scripting (XSS)
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
8
17
|
tags:
|
|
9
18
|
- security
|
|
10
19
|
- xss
|
|
@@ -35,3 +44,4 @@ emit:
|
|
|
35
44
|
remediation:
|
|
36
45
|
summary: Use framework escaping, a trusted sanitizer, or safe DOM APIs instead of raw HTML interpolation.
|
|
37
46
|
|
|
47
|
+
|