@critiq/rules 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/catalog.yaml +617 -0
- package/package.json +1 -1
- package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
- package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
- package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
- package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
- package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
- package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
- package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
- package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +10 -0
- package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +10 -0
- package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +10 -0
- package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +10 -0
- package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
- package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
- package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
- package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +10 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
- package/rules/go/go.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/go/go.security.tar-path-traversal.rule.yaml +10 -0
- package/rules/go/go.security.template-unescaped-request-value.rule.yaml +10 -0
- package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
- package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
- package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
- package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
- package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
- package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
- package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
- package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
- package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
- package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
- package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
- package/rules/java/java.security.android-screenshot-exposure.rule.yaml +13 -0
- package/rules/java/java.security.android-world-readable-mode.rule.yaml +13 -0
- package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
- package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
- package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
- package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
- package/rules/java/java.security.jpa-concatenated-query.rule.yaml +13 -0
- package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
- package/rules/java/java.security.null-cipher.rule.yaml +52 -0
- package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
- package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
- package/rules/java/java.security.reflected-output-from-request.rule.yaml +10 -0
- package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +13 -0
- package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
- package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +13 -0
- package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +13 -0
- package/rules/java/java.security.spring-debug-exposure.rule.yaml +13 -0
- package/rules/java/java.security.spring-permit-all-default.rule.yaml +13 -0
- package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +13 -0
- package/rules/java/java.security.template-unescaped-user-output.rule.yaml +10 -0
- package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
- package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
- package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
- package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
- package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
- package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
- package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
- package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
- package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
- package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
- package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
- package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +10 -0
- package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +10 -0
- package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
- package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +10 -0
- package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +13 -0
- package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +13 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
- package/rules/php/php.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +13 -0
- package/rules/php/php.security.symfony-debug-exposure.rule.yaml +13 -0
- package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +10 -0
- package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
- package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
- package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +13 -0
- package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +13 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
- package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
- package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
- package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
- package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
- package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
- package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
- package/rules/python/py.security.debugger-import.rule.yaml +55 -0
- package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +13 -0
- package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
- package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
- package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +13 -0
- package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
- package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-default.rule.yaml +13 -0
- package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +13 -0
- package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
- package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +13 -0
- package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
- package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +13 -0
- package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +13 -0
- package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
- package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
- package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
- package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
- package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +13 -0
- package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +13 -0
- package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +10 -0
- package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
- package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
- package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
- package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
- package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
- package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
- package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +13 -0
- package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +13 -0
- package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
- package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
- package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
- package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
- package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +13 -0
- package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +13 -0
- package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
- package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +13 -0
- package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +10 -0
- package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
- package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +13 -0
- package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
- package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
- package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
- package/rules/shared/security.archive-path-traversal.rule.yaml +10 -0
- package/rules/shared/security.external-file-upload.rule.yaml +10 -0
- package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
- package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
- package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
- package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
- package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
- package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
- package/rules/shared/security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/shared/security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
- package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
- package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
- package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
- package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
- package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +13 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
- package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
- package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
- package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
- package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
- package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +13 -0
- package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +16 -0
- package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +16 -0
- package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +13 -0
- package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
- package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
- package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
- package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +10 -0
- package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +13 -0
- package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
- package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
- package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +16 -0
- package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
- package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +16 -0
- package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +16 -0
- package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
- package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +16 -0
- package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
- package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
- package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +10 -0
- package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
- package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
- package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
- package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
- package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +10 -0
- package/rules/typescript/ts.security.log-injection.rule.yaml +10 -0
- package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
- package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
- package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +16 -0
- package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +16 -0
- package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
- package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
- package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
- package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
- package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
- package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
- package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +13 -0
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
- package/rules/typescript/ts.security.open-redirect.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
- package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
- package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
- package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
- package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
- package/rules/typescript/ts.security.ssrf.rule.yaml +10 -0
- package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
- package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
- package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
- package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
- package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
- package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
- package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +10 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.dynamic-code-execution
|
|
5
|
+
title: Avoid dynamic code execution with eval or exec
|
|
6
|
+
summary: Python services should not execute runtime-generated code via `eval` or `exec`.
|
|
7
|
+
rationale: Dynamic code execution turns untrusted data into executable behavior and expands code-injection risk.
|
|
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
|
+
- python
|
|
20
|
+
- execution
|
|
21
|
+
- injection
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- python
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.py"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/test_*.py"
|
|
34
|
+
- "**/*_test.py"
|
|
35
|
+
- "**/migrations/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: python.security.dynamic-code-execution
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.execution
|
|
43
|
+
severity: high
|
|
44
|
+
confidence: 0.95
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- python
|
|
48
|
+
- execution
|
|
49
|
+
- injection
|
|
50
|
+
message:
|
|
51
|
+
title: Avoid dynamic execution in `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` executes code dynamically with `eval` or `exec`."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: Replace dynamic execution with explicit parsing, allowlisted operations, or fixed function dispatch tables.
|
|
55
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Avoid permissive FastAPI CORS with credentials
|
|
6
6
|
summary: FastAPI `CORSMiddleware` should not combine wildcard origins, methods, or headers with `allow_credentials=True`.
|
|
7
7
|
rationale: Wildcard CORS policies plus credentials mirror insecure browser CORS combinations that attackers can abuse from malicious 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
|
|
17
|
+
- kind: url
|
|
18
|
+
title: FastAPI security
|
|
19
|
+
url: https://fastapi.tiangolo.com/tutorial/security/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -41,3 +53,4 @@ emit:
|
|
|
41
53
|
summary: "`${captures.issue.text}` configures `CORSMiddleware` with wildcards while credentials are enabled."
|
|
42
54
|
remediation:
|
|
43
55
|
summary: Replace wildcard origins, methods, and headers with explicit allowlists when credentials are required.
|
|
56
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.flask-debug-enabled
|
|
5
|
+
title: Disable Flask debug mode in runtime configuration
|
|
6
|
+
summary: Flask applications should not enable debug mode through `app.run`, config assignment, or `FLASK_DEBUG`.
|
|
7
|
+
rationale: Debug mode can expose interactive tracebacks and internal application state to external users.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-209
|
|
13
|
+
title: Generation of Error Message Containing Sensitive Information
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Error Handling Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Flask security considerations
|
|
19
|
+
url: https://flask.palletsprojects.com/en/stable/security/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- flask
|
|
24
|
+
- configuration
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/*.py"
|
|
34
|
+
exclude:
|
|
35
|
+
- "**/tests/**"
|
|
36
|
+
- "**/test_*.py"
|
|
37
|
+
- "**/*_test.py"
|
|
38
|
+
match:
|
|
39
|
+
fact:
|
|
40
|
+
kind: python.security.flask-debug-enabled
|
|
41
|
+
bind: issue
|
|
42
|
+
emit:
|
|
43
|
+
finding:
|
|
44
|
+
category: security.misconfiguration
|
|
45
|
+
severity: high
|
|
46
|
+
confidence: 0.9
|
|
47
|
+
tags:
|
|
48
|
+
- security
|
|
49
|
+
- flask
|
|
50
|
+
- configuration
|
|
51
|
+
message:
|
|
52
|
+
title: Disable Flask debug setting `${captures.issue.text}`
|
|
53
|
+
summary: "`${captures.issue.text}` enables Flask debug behavior that should remain off outside local development."
|
|
54
|
+
remediation:
|
|
55
|
+
summary: Remove debug flags from runtime code and environment assignments, then gate development-only behavior behind safe configuration.
|
|
56
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Set Flask MAX_CONTENT_LENGTH for uploads
|
|
6
6
|
summary: Flask apps handling uploads should configure `MAX_CONTENT_LENGTH` to bound request bodies.
|
|
7
7
|
rationale: Missing upload limits enables trivial denial-of-service via oversized multipart payloads.
|
|
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
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Flask security considerations
|
|
19
|
+
url: https://flask.palletsprojects.com/en/stable/security/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -42,3 +54,4 @@ emit:
|
|
|
42
54
|
summary: "Upload handling references `${captures.issue.text}` but no `MAX_CONTENT_LENGTH` configuration was detected in this file."
|
|
43
55
|
remediation:
|
|
44
56
|
summary: Set `app.config["MAX_CONTENT_LENGTH"]` (or equivalent) to a bounded maximum aligned with product limits.
|
|
57
|
+
|
|
@@ -6,6 +6,18 @@ metadata:
|
|
|
6
6
|
summary: Flask responses should not bypass escaping when interpolating `request` input into HTML helpers or template strings.
|
|
7
7
|
rationale: >-
|
|
8
8
|
Markup helpers, render_template_string, and Jinja safe filters bypass escaping and commonly become XSS sinks.
|
|
9
|
+
detection:
|
|
10
|
+
kind: pattern
|
|
11
|
+
references:
|
|
12
|
+
- kind: cwe
|
|
13
|
+
id: CWE-79
|
|
14
|
+
title: Cross-site Scripting (XSS)
|
|
15
|
+
- kind: owasp
|
|
16
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
17
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
18
|
+
- kind: url
|
|
19
|
+
title: Flask security considerations
|
|
20
|
+
url: https://flask.palletsprojects.com/en/stable/security/
|
|
9
21
|
tags:
|
|
10
22
|
- security
|
|
11
23
|
- python
|
|
@@ -42,3 +54,4 @@ emit:
|
|
|
42
54
|
summary: "`${captures.issue.text}` mixes request-controlled values with markup helpers or unescaped template paths."
|
|
43
55
|
remediation:
|
|
44
56
|
summary: Use automatic escaping, `render_template` with trusted contexts, or a vetted sanitizer instead of raw markup shortcuts.
|
|
57
|
+
|
|
@@ -5,6 +5,18 @@ metadata:
|
|
|
5
5
|
title: Sanitize Flask upload filenames before saving
|
|
6
6
|
summary: Flask upload handlers should pass filenames through `secure_filename` (or equivalent) before persisting to disk.
|
|
7
7
|
rationale: Attacker-controlled filenames enable traversal sequences, extension spoofing, and collisions when saved verbatim.
|
|
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
|
|
17
|
+
- kind: url
|
|
18
|
+
title: Flask security considerations
|
|
19
|
+
url: https://flask.palletsprojects.com/en/stable/security/
|
|
8
20
|
tags:
|
|
9
21
|
- security
|
|
10
22
|
- python
|
|
@@ -42,3 +54,4 @@ emit:
|
|
|
42
54
|
summary: "`${captures.issue.text}` persists uploads using an unsanitized client-provided filename."
|
|
43
55
|
remediation:
|
|
44
56
|
summary: Generate trusted server-side names or wrap uploads with `werkzeug.utils.secure_filename` before calling `save`.
|
|
57
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.insecure-temp-file
|
|
5
|
+
title: Avoid insecure temporary file name helpers
|
|
6
|
+
summary: Python temporary files should not use `mktemp` or `tempnam` helpers that create race-prone filenames.
|
|
7
|
+
rationale: Predictable temporary filenames can enable symlink races and unauthorized file access before creation.
|
|
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
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- python
|
|
20
|
+
- filesystem
|
|
21
|
+
- tempfile
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- python
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.py"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/test_*.py"
|
|
34
|
+
- "**/*_test.py"
|
|
35
|
+
- "**/migrations/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: python.security.insecure-temp-file
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.filesystem
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.92
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- python
|
|
48
|
+
- filesystem
|
|
49
|
+
- tempfile
|
|
50
|
+
message:
|
|
51
|
+
title: Replace insecure temp helper `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` uses an insecure temporary filename API."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: Use `tempfile.NamedTemporaryFile` or `tempfile.mkstemp` to create secure files atomically.
|
|
55
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.insecure-yaml-load
|
|
5
|
+
title: Use SafeLoader with yaml.load
|
|
6
|
+
summary: Python YAML parsing should use `SafeLoader` when calling `yaml.load`.
|
|
7
|
+
rationale: Unsafe YAML deserialization can instantiate arbitrary Python objects and lead to unexpected code paths.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-502
|
|
13
|
+
title: Deserialization of Untrusted Data
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Deserialization Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- python
|
|
20
|
+
- yaml
|
|
21
|
+
- deserialization
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- python
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.py"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/test_*.py"
|
|
34
|
+
- "**/*_test.py"
|
|
35
|
+
- "**/migrations/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: python.security.insecure-yaml-load
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.input-validation
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.9
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- python
|
|
48
|
+
- yaml
|
|
49
|
+
- deserialization
|
|
50
|
+
message:
|
|
51
|
+
title: Use a safe YAML loader in `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` calls `yaml.load` without a safe loader."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: Prefer `yaml.safe_load` or pass `Loader=yaml.SafeLoader` explicitly for trusted-safe parsing behavior.
|
|
55
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.jinja-autoescape-disabled
|
|
5
|
+
title: Avoid disabling Jinja autoescape
|
|
6
|
+
summary: Jinja2 environments should keep autoescaping enabled for HTML rendering contexts.
|
|
7
|
+
rationale: Disabling autoescape can allow untrusted template data to render as executable markup in browser clients.
|
|
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
|
+
- kind: url
|
|
18
|
+
title: Flask security considerations
|
|
19
|
+
url: https://flask.palletsprojects.com/en/stable/security/
|
|
20
|
+
tags:
|
|
21
|
+
- security
|
|
22
|
+
- python
|
|
23
|
+
- jinja
|
|
24
|
+
- xss
|
|
25
|
+
- rules-catalog
|
|
26
|
+
stability: stable
|
|
27
|
+
appliesTo: block
|
|
28
|
+
scope:
|
|
29
|
+
languages:
|
|
30
|
+
- python
|
|
31
|
+
paths:
|
|
32
|
+
include:
|
|
33
|
+
- "**/*.py"
|
|
34
|
+
exclude:
|
|
35
|
+
- "**/tests/**"
|
|
36
|
+
- "**/test_*.py"
|
|
37
|
+
- "**/*_test.py"
|
|
38
|
+
- "**/migrations/**"
|
|
39
|
+
match:
|
|
40
|
+
fact:
|
|
41
|
+
kind: python.security.jinja-autoescape-disabled
|
|
42
|
+
bind: issue
|
|
43
|
+
emit:
|
|
44
|
+
finding:
|
|
45
|
+
category: security.output-encoding
|
|
46
|
+
severity: medium
|
|
47
|
+
confidence: 0.9
|
|
48
|
+
tags:
|
|
49
|
+
- security
|
|
50
|
+
- python
|
|
51
|
+
- jinja
|
|
52
|
+
- xss
|
|
53
|
+
message:
|
|
54
|
+
title: Enable Jinja autoescape in `${captures.issue.text}`
|
|
55
|
+
summary: "`${captures.issue.text}` configures a Jinja environment with `autoescape=False`."
|
|
56
|
+
remediation:
|
|
57
|
+
summary: Keep `autoescape` enabled for HTML templates and isolate trusted non-HTML rendering pipelines explicitly.
|
|
58
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: py.security.subprocess-shell-enabled
|
|
5
|
+
title: Avoid enabling shell mode in subprocess calls
|
|
6
|
+
summary: Python process execution should avoid `shell=True` unless shell interpretation is explicitly required and tightly controlled.
|
|
7
|
+
rationale: Shell-enabled process execution introduces command parsing behavior that increases injection and execution risk.
|
|
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
|
+
- python
|
|
20
|
+
- subprocess
|
|
21
|
+
- execution
|
|
22
|
+
- rules-catalog
|
|
23
|
+
stability: stable
|
|
24
|
+
appliesTo: block
|
|
25
|
+
scope:
|
|
26
|
+
languages:
|
|
27
|
+
- python
|
|
28
|
+
paths:
|
|
29
|
+
include:
|
|
30
|
+
- "**/*.py"
|
|
31
|
+
exclude:
|
|
32
|
+
- "**/tests/**"
|
|
33
|
+
- "**/test_*.py"
|
|
34
|
+
- "**/*_test.py"
|
|
35
|
+
- "**/migrations/**"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: python.security.subprocess-shell-enabled
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.execution
|
|
43
|
+
severity: high
|
|
44
|
+
confidence: 0.93
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- python
|
|
48
|
+
- subprocess
|
|
49
|
+
- execution
|
|
50
|
+
message:
|
|
51
|
+
title: Review shell-enabled process call `${captures.issue.text}`
|
|
52
|
+
summary: "`${captures.issue.text}` enables shell interpretation via `shell=True`."
|
|
53
|
+
remediation:
|
|
54
|
+
summary: Use argument-list execution with `shell=False` by default, and only allow fixed commands when shell mode is unavoidable.
|
|
55
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Browser-facing Rails controllers should keep forgery protection enabled with a safe strategy.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Skipping CSRF verification or downgrading to `null_session` lets attackers replay cross-site requests against authenticated sessions.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-352
|
|
15
|
+
title: Cross-Site Request Forgery (CSRF)
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross-Site Request Forgery Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -43,3 +55,4 @@ emit:
|
|
|
43
55
|
remediation:
|
|
44
56
|
summary: >-
|
|
45
57
|
Remove broad `skip_forgery_protection` usage, prefer `protect_from_forgery with: :exception`, and keep `verify_authenticity_token` enabled for state-changing browser actions.
|
|
58
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Production environments should not enable local-style exception pages or verbose Action Dispatch exception rendering.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Detailed exceptions leak stack traces, secrets, and implementation details that attackers can use to refine exploits.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-209
|
|
15
|
+
title: Generation of Error Message Containing Sensitive Information
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Error Handling Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -42,3 +54,4 @@ emit:
|
|
|
42
54
|
remediation:
|
|
43
55
|
summary: >-
|
|
44
56
|
Set `consider_all_requests_local` and `show_detailed_exceptions` to safe defaults, route errors through monitored handlers, and keep `config.action_dispatch.show_exceptions` off verbose modes in production.
|
|
57
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Redirect helpers must not send users to hosts or paths derived directly from request input without validation.
|
|
8
8
|
rationale: >-
|
|
9
9
|
`redirect_to` and `redirect_back` calls that honor `params`, `request` URLs, or `allow_other_host: true` with tainted data are a common phishing and OAuth bypass vector.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-601
|
|
15
|
+
title: URL Redirection to Untrusted Site
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Unvalidated Redirects and Forwards Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -43,3 +55,4 @@ emit:
|
|
|
43
55
|
remediation:
|
|
44
56
|
summary: >-
|
|
45
57
|
Use an allowlisted path helper, reject off-host targets, and avoid pairing `allow_other_host: true` with user-controlled URLs.
|
|
58
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Do not mark request-driven strings as HTML safe or bypass sanitization in views or helpers.
|
|
8
8
|
rationale: >-
|
|
9
9
|
`raw`, `html_safe`, `sanitize: false`, and ERB double-equals disable escaping and commonly become reflected XSS sinks.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-79
|
|
15
|
+
title: Cross-site Scripting (XSS)
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -44,3 +56,4 @@ emit:
|
|
|
44
56
|
remediation:
|
|
45
57
|
summary: >-
|
|
46
58
|
Prefer default escaping, pass sanitized fragments, or centralize HTML generation through a vetted sanitizer instead of `raw`/`html_safe`.
|
|
59
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
`render` options such as `html:`, `plain:`, or `inline:` must not consume unvalidated request data.
|
|
8
8
|
rationale: >-
|
|
9
9
|
These render modes bypass templates and can reflect attacker-controlled markup or scripts when fed tainted strings.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-79
|
|
15
|
+
title: Cross-site Scripting (XSS)
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross Site Scripting Prevention Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -43,3 +55,4 @@ emit:
|
|
|
43
55
|
remediation:
|
|
44
56
|
summary: >-
|
|
45
57
|
Prefer templates with escaping, sanitize any rich text, or map request identifiers to trusted server-side content instead of rendering raw params.
|
|
58
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Session and signed cookie stores should not persist raw `params` blobs that attackers can influence.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Writing `params` directly into `session` or `cookies` enables tampering, fixation, and oversized payload attacks unless additional integrity controls exist.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-614
|
|
15
|
+
title: Sensitive Cookie Without Secure Attribute
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Session Management Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
|
|
19
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -43,3 +55,4 @@ emit:
|
|
|
43
55
|
remediation:
|
|
44
56
|
summary: >-
|
|
45
57
|
Store opaque identifiers, use signed or encrypted cookie jars appropriately, and validate any user-derived values before persistence.
|
|
58
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Strong parameters and mass assignment sinks should not accept unfiltered request hashes or privileged attributes.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Permissive `permit!`, privileged `permit` fields, and direct `params` mass assignment enable attackers to escalate privileges or overwrite protected columns.
|
|
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
|
+
- kind: url
|
|
20
|
+
title: Ruby on Rails security guide
|
|
21
|
+
url: https://guides.rubyonrails.org/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- ruby
|
|
@@ -44,3 +56,4 @@ emit:
|
|
|
44
56
|
remediation:
|
|
45
57
|
summary: >-
|
|
46
58
|
Replace `permit!` with an explicit attribute list, drop privileged symbols from `permit`, and route updates through vetted strong-parameter helpers instead of raw `params`.
|
|
59
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Outbound HTTP helpers should not receive URLs or bodies directly from `params` or other tainted sources without validation.
|
|
8
8
|
rationale: >-
|
|
9
9
|
User-controlled egress enables SSRF, data exfiltration, and token theft when combined with open HTTP clients.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-200
|
|
15
|
+
title: Exposure of Sensitive Information to an Unauthorized Actor
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Logging Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- ruby
|
|
@@ -43,3 +52,4 @@ emit:
|
|
|
43
52
|
remediation:
|
|
44
53
|
summary: >-
|
|
45
54
|
Allowlist hosts, strip secrets from outbound payloads, and route external calls through audited integration points.
|
|
55
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Sidekiq Web must not be exposed on public routes without an authentication or network guard.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Unauthenticated Sidekiq Web consoles expose queues and often lead to remote code execution via job replay or configuration changes.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-862
|
|
15
|
+
title: Missing Authorization
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Authorization Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- ruby
|
|
@@ -43,3 +52,4 @@ emit:
|
|
|
43
52
|
remediation:
|
|
44
53
|
summary: >-
|
|
45
54
|
Wrap mounts in `authenticate`, add route constraints, use basic auth or VPN-only routing, and keep consoles off public networks.
|
|
55
|
+
|