@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,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.correctness.error-suppression-operator
|
|
5
|
+
title: Avoid the error suppression operator
|
|
6
|
+
summary: The `@` operator hides warnings and errors instead of handling them explicitly.
|
|
7
|
+
rationale: Suppressed failures make debugging harder and can mask security or data integrity issues.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- php
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- php
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.php"
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: php.correctness.error-suppression-operator
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.error-handling
|
|
27
|
+
severity: medium
|
|
28
|
+
confidence: 0.9
|
|
29
|
+
tags:
|
|
30
|
+
- correctness
|
|
31
|
+
- php
|
|
32
|
+
message:
|
|
33
|
+
title: Remove error suppression in `${captures.issue.text}`
|
|
34
|
+
summary: "`${captures.issue.text}` uses `@` to suppress PHP errors or warnings."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Handle expected failures with explicit checks, try/catch where appropriate, or fix the underlying condition instead of silencing errors.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.correctness.nullsafe-returned-by-reference
|
|
5
|
+
title: Do not return nullsafe access by reference
|
|
6
|
+
summary: By-reference arrow functions cannot safely return nullsafe property access.
|
|
7
|
+
rationale: Nullsafe access may evaluate to null, which cannot be returned by reference and triggers runtime errors.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- php
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- php
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.php"
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: php.correctness.nullsafe-returned-by-reference
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.language
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.92
|
|
29
|
+
tags:
|
|
30
|
+
- correctness
|
|
31
|
+
- php
|
|
32
|
+
message:
|
|
33
|
+
title: Fix by-reference arrow function using nullsafe access
|
|
34
|
+
summary: "`${captures.issue.text}` returns a nullsafe property access by reference."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Return a value by copy, guard against null before returning a reference, or avoid by-reference arrow functions for nullable targets.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.correctness.switch-multiple-default
|
|
5
|
+
title: Use only one default case per switch
|
|
6
|
+
summary: A switch statement must not declare more than one default branch.
|
|
7
|
+
rationale: Multiple default cases are invalid PHP and indicate a copy-paste or merge mistake.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- php
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- php
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.php"
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: php.correctness.switch-multiple-default
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.language
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.98
|
|
29
|
+
tags:
|
|
30
|
+
- correctness
|
|
31
|
+
- php
|
|
32
|
+
message:
|
|
33
|
+
title: Remove extra default case in switch
|
|
34
|
+
summary: "This switch declares more than one `default` branch."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Keep a single default case and move additional logic into earlier cases or refactor the control flow.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.correctness.unreachable-after-return
|
|
5
|
+
title: Remove unreachable statements after return or throw
|
|
6
|
+
summary: Code after `return` or `throw` in the same block never runs.
|
|
7
|
+
rationale: Unreachable statements usually indicate dead code, incomplete refactors, or missing control-flow fixes.
|
|
8
|
+
tags:
|
|
9
|
+
- correctness
|
|
10
|
+
- php
|
|
11
|
+
- rules-catalog
|
|
12
|
+
stability: stable
|
|
13
|
+
appliesTo: block
|
|
14
|
+
scope:
|
|
15
|
+
languages:
|
|
16
|
+
- php
|
|
17
|
+
paths:
|
|
18
|
+
include:
|
|
19
|
+
- "**/*.php"
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: php.correctness.unreachable-after-return
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.control-flow
|
|
27
|
+
severity: low
|
|
28
|
+
confidence: 0.85
|
|
29
|
+
tags:
|
|
30
|
+
- correctness
|
|
31
|
+
- php
|
|
32
|
+
message:
|
|
33
|
+
title: Remove unreachable statement
|
|
34
|
+
summary: "This statement appears after a `return` or `throw` in the same block and will not execute."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Delete the dead code or move it before the terminal statement if it is still required.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.security.debug-function-exposure
|
|
5
|
+
title: Remove debug dump helpers from production PHP
|
|
6
|
+
summary: >-
|
|
7
|
+
var_dump, print_r, debug_zval_dump, and xdebug helpers should not ship in application code paths.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Debug helpers can leak secrets, PII, and internal object state to logs or HTTP responses.
|
|
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
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- php
|
|
22
|
+
- debug
|
|
23
|
+
- information-leakage
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: stable
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- php
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.php"
|
|
33
|
+
exclude:
|
|
34
|
+
- "**/tests/**"
|
|
35
|
+
- "**/*_test.php"
|
|
36
|
+
match:
|
|
37
|
+
fact:
|
|
38
|
+
kind: php.security.debug-function-exposure
|
|
39
|
+
bind: issue
|
|
40
|
+
emit:
|
|
41
|
+
finding:
|
|
42
|
+
category: security.information-leakage
|
|
43
|
+
severity: medium
|
|
44
|
+
confidence: 0.86
|
|
45
|
+
tags:
|
|
46
|
+
- security
|
|
47
|
+
- php
|
|
48
|
+
- debug
|
|
49
|
+
message:
|
|
50
|
+
title: Remove debug helper in `${captures.issue.text}`
|
|
51
|
+
summary: "`${captures.issue.text}` uses a debug dump helper in non-test code."
|
|
52
|
+
remediation:
|
|
53
|
+
summary: >-
|
|
54
|
+
Remove debug helpers from production paths or route diagnostics through structured logging with redaction.
|
|
55
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
PHP CORS responses should not allow credentials when origin is set to `*`.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Wildcard origins with credential support break origin isolation and can expose authenticated data cross-site.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-942
|
|
15
|
+
title: Permissive Cross-domain Policy with Untrusted Domains
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cross-Origin Resource Sharing (CORS)
|
|
18
|
+
url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- php
|
|
@@ -39,3 +48,4 @@ emit:
|
|
|
39
48
|
remediation:
|
|
40
49
|
summary: >-
|
|
41
50
|
Replace wildcard origins with explicit allowlists and keep credentials disabled unless strictly required.
|
|
51
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Outbound mail/file transfer code should not rely on plaintext transport endpoints for sensitive traffic.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Unencrypted transfer channels expose credentials and payloads to interception or tampering.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-668
|
|
15
|
+
title: Exposure of Resource to Wrong Sphere
|
|
16
|
+
- kind: url
|
|
17
|
+
title: CWE-668 Exposure of Resource to Wrong Sphere
|
|
18
|
+
url: https://cwe.mitre.org/data/definitions/668.html
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- php
|
|
@@ -39,3 +48,4 @@ emit:
|
|
|
39
48
|
remediation:
|
|
40
49
|
summary: >-
|
|
41
50
|
Use encrypted transport endpoints and modern client libraries with certificate validation enabled.
|
|
51
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.security.insecure-session-id-generation
|
|
5
|
+
title: Avoid predictable or user-supplied session IDs
|
|
6
|
+
summary: >-
|
|
7
|
+
session_id must not be set from weak hash helpers, uniqid, or request-derived values.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Predictable or attacker-controlled session identifiers enable fixation and session hijacking.
|
|
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
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- php
|
|
22
|
+
- session
|
|
23
|
+
- rules-catalog
|
|
24
|
+
stability: stable
|
|
25
|
+
appliesTo: block
|
|
26
|
+
scope:
|
|
27
|
+
languages:
|
|
28
|
+
- php
|
|
29
|
+
paths:
|
|
30
|
+
include:
|
|
31
|
+
- "**/*.php"
|
|
32
|
+
match:
|
|
33
|
+
fact:
|
|
34
|
+
kind: php.security.insecure-session-id-generation
|
|
35
|
+
bind: issue
|
|
36
|
+
emit:
|
|
37
|
+
finding:
|
|
38
|
+
category: security.session-management
|
|
39
|
+
severity: high
|
|
40
|
+
confidence: 0.88
|
|
41
|
+
tags:
|
|
42
|
+
- security
|
|
43
|
+
- php
|
|
44
|
+
- session
|
|
45
|
+
message:
|
|
46
|
+
title: Harden session ID generation in `${captures.issue.text}`
|
|
47
|
+
summary: "`${captures.issue.text}` sets session_id from weak or untrusted input."
|
|
48
|
+
remediation:
|
|
49
|
+
summary: >-
|
|
50
|
+
Let PHP generate session identifiers with session_start, or use random_bytes and bin2hex for custom IDs.
|
|
51
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Session/cookie configuration should keep secure, httpOnly, and safe same-site posture for authenticated contexts.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Weak cookie/session flags increase theft and replay risk across XSS, mixed transport, and cross-site request contexts.
|
|
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
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- php
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
remediation:
|
|
41
50
|
summary: >-
|
|
42
51
|
Set `secure=true`, `httponly=true`, and a restrictive same-site policy for authentication cookies in production traffic.
|
|
52
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Wildcard CSRF exclusions should not cover account, billing, admin, password, or profile endpoints.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Over-broad CSRF exemptions remove request integrity checks from high-impact authenticated actions.
|
|
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: Laravel security
|
|
21
|
+
url: https://laravel.com/docs/master/security
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -40,3 +52,4 @@ emit:
|
|
|
40
52
|
remediation:
|
|
41
53
|
summary: >-
|
|
42
54
|
Limit CSRF exceptions to explicitly signed webhook endpoints and avoid wildcard exclusions on authenticated user flows.
|
|
55
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Raw Blade rendering (`{!! !!}`) should not directly render request, model, or translated user content.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Unescaped template output can enable stored or reflected XSS when user-controlled values are rendered as HTML.
|
|
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: Laravel security
|
|
21
|
+
url: https://laravel.com/docs/master/security
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -40,3 +52,4 @@ emit:
|
|
|
40
52
|
remediation:
|
|
41
53
|
summary: >-
|
|
42
54
|
Prefer escaped Blade output (`{{ }}`) and sanitizer wrappers before rendering user-influenced HTML.
|
|
55
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Eloquent writes should not use `$request->all()` or fully unguarded models for sensitive records.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Raw request mass assignment lets attackers set privileged fields like role or account ownership.
|
|
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: Laravel security
|
|
21
|
+
url: https://laravel.com/docs/master/security
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -43,3 +55,4 @@ emit:
|
|
|
43
55
|
remediation:
|
|
44
56
|
summary: >-
|
|
45
57
|
Use validated DTO/request objects and explicit allowlists (`only`) for model writes, and avoid `$guarded = []` on sensitive models.
|
|
58
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.security.no-dynamic-eval
|
|
5
|
+
title: Avoid dynamic PHP code execution
|
|
6
|
+
summary: >-
|
|
7
|
+
Do not execute runtime-generated PHP via eval, string assert, or create_function.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Dynamic execution turns untrusted or mutable input into executable code and expands injection risk.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-94
|
|
15
|
+
title: Improper Control of Generation of Code
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Code Injection
|
|
18
|
+
url: https://owasp.org/www-community/attacks/Code_Injection
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- php
|
|
22
|
+
- execution
|
|
23
|
+
- injection
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: stable
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- php
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.php"
|
|
33
|
+
match:
|
|
34
|
+
fact:
|
|
35
|
+
kind: php.security.no-dynamic-eval
|
|
36
|
+
bind: issue
|
|
37
|
+
emit:
|
|
38
|
+
finding:
|
|
39
|
+
category: security.execution
|
|
40
|
+
severity: high
|
|
41
|
+
confidence: 0.94
|
|
42
|
+
tags:
|
|
43
|
+
- security
|
|
44
|
+
- php
|
|
45
|
+
- execution
|
|
46
|
+
message:
|
|
47
|
+
title: Remove dynamic execution in `${captures.issue.text}`
|
|
48
|
+
summary: "`${captures.issue.text}` executes PHP code dynamically."
|
|
49
|
+
remediation:
|
|
50
|
+
summary: >-
|
|
51
|
+
Replace eval, string assert, and create_function with explicit control flow, parsing, or allowlisted dispatch.
|
|
52
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
Outbound HTTP clients should not forward tainted request/session material without validation or redaction.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Unchecked egress forwarding can leak tokens, credentials, or personal data to external systems.
|
|
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
|
- php
|
|
@@ -40,3 +49,4 @@ emit:
|
|
|
40
49
|
remediation:
|
|
41
50
|
summary: >-
|
|
42
51
|
Scrub secrets, restrict outbound destinations, and centralize external integrations behind audited request builders.
|
|
52
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Symfony forms and controllers handling state changes should not disable CSRF protection without a clear API token boundary.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Disabling CSRF for authenticated browser flows enables cross-site request forgery on sensitive actions.
|
|
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: Symfony security
|
|
21
|
+
url: https://symfony.com/doc/current/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -40,3 +52,4 @@ emit:
|
|
|
40
52
|
remediation:
|
|
41
53
|
summary: >-
|
|
42
54
|
Keep CSRF enabled for browser forms/controllers and only exempt endpoints that are explicitly authenticated by signed tokens.
|
|
55
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
Production-like Symfony configuration should not enable debug mode or web profiler surfaces.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Debug and profiler exposure can leak internals, stack traces, secrets, and request details.
|
|
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: Symfony security
|
|
21
|
+
url: https://symfony.com/doc/current/security.html
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -42,3 +54,4 @@ emit:
|
|
|
42
54
|
remediation:
|
|
43
55
|
summary: >-
|
|
44
56
|
Keep `APP_DEBUG=0` in production and disable profiler bundles/toolbars outside local dev/test environments.
|
|
57
|
+
|
|
@@ -7,6 +7,15 @@ metadata:
|
|
|
7
7
|
PHP upload handlers should not persist raw `$_FILES` names without validation and normalization.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Unsafely handled uploads can enable path traversal, executable file placement, and malicious payload storage.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-434
|
|
15
|
+
title: Unrestricted Upload of File with Dangerous Type
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: File Upload Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
10
19
|
tags:
|
|
11
20
|
- security
|
|
12
21
|
- php
|
|
@@ -39,3 +48,4 @@ emit:
|
|
|
39
48
|
remediation:
|
|
40
49
|
summary: >-
|
|
41
50
|
Normalize filenames, enforce extension and MIME allowlists, and route uploads through dedicated validated storage helpers.
|
|
51
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.security.unsafe-include-with-user-input
|
|
5
|
+
title: Avoid include/require with user-controlled paths
|
|
6
|
+
summary: >-
|
|
7
|
+
Include and require statements must not load files from request-derived or tainted path values.
|
|
8
|
+
rationale: >-
|
|
9
|
+
User-controlled includes can load attacker-chosen PHP and lead to remote code execution.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-20
|
|
15
|
+
title: Improper Input Validation
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Input Validation Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- php
|
|
22
|
+
- inclusion
|
|
23
|
+
- injection
|
|
24
|
+
- rules-catalog
|
|
25
|
+
stability: stable
|
|
26
|
+
appliesTo: block
|
|
27
|
+
scope:
|
|
28
|
+
languages:
|
|
29
|
+
- php
|
|
30
|
+
paths:
|
|
31
|
+
include:
|
|
32
|
+
- "**/*.php"
|
|
33
|
+
match:
|
|
34
|
+
fact:
|
|
35
|
+
kind: php.security.unsafe-include-with-user-input
|
|
36
|
+
bind: issue
|
|
37
|
+
emit:
|
|
38
|
+
finding:
|
|
39
|
+
category: security.injection
|
|
40
|
+
severity: high
|
|
41
|
+
confidence: 0.9
|
|
42
|
+
tags:
|
|
43
|
+
- security
|
|
44
|
+
- php
|
|
45
|
+
- inclusion
|
|
46
|
+
message:
|
|
47
|
+
title: Harden include path in `${captures.issue.text}`
|
|
48
|
+
summary: "`${captures.issue.text}` includes or requires a path influenced by untrusted input."
|
|
49
|
+
remediation:
|
|
50
|
+
summary: >-
|
|
51
|
+
Map user input to an allowlisted template name and include only fixed, reviewed file paths.
|
|
52
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: php.security.weak-cipher
|
|
5
|
+
title: Avoid weak PHP cipher algorithms
|
|
6
|
+
summary: >-
|
|
7
|
+
OpenSSL and mcrypt usage should not rely on DES, RC4, Blowfish, ECB mode, or legacy mcrypt APIs.
|
|
8
|
+
rationale: >-
|
|
9
|
+
Weak ciphers and modes are vulnerable to practical cryptanalysis and do not meet modern confidentiality standards.
|
|
10
|
+
detection:
|
|
11
|
+
kind: pattern
|
|
12
|
+
references:
|
|
13
|
+
- kind: cwe
|
|
14
|
+
id: CWE-327
|
|
15
|
+
title: Use of a Broken or Risky Cryptographic Algorithm
|
|
16
|
+
- kind: owasp
|
|
17
|
+
title: Cryptographic Storage Cheat Sheet
|
|
18
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html
|
|
19
|
+
tags:
|
|
20
|
+
- security
|
|
21
|
+
- php
|
|
22
|
+
- crypto
|
|
23
|
+
- rules-catalog
|
|
24
|
+
stability: stable
|
|
25
|
+
appliesTo: block
|
|
26
|
+
scope:
|
|
27
|
+
languages:
|
|
28
|
+
- php
|
|
29
|
+
paths:
|
|
30
|
+
include:
|
|
31
|
+
- "**/*.php"
|
|
32
|
+
match:
|
|
33
|
+
fact:
|
|
34
|
+
kind: php.security.weak-cipher
|
|
35
|
+
bind: issue
|
|
36
|
+
emit:
|
|
37
|
+
finding:
|
|
38
|
+
category: security.weak-crypto
|
|
39
|
+
severity: high
|
|
40
|
+
confidence: 0.9
|
|
41
|
+
tags:
|
|
42
|
+
- security
|
|
43
|
+
- php
|
|
44
|
+
- crypto
|
|
45
|
+
message:
|
|
46
|
+
title: Replace weak cipher usage in `${captures.issue.text}`
|
|
47
|
+
summary: "`${captures.issue.text}` uses a weak cipher algorithm or mode."
|
|
48
|
+
remediation:
|
|
49
|
+
summary: >-
|
|
50
|
+
Use modern authenticated encryption (for example AES-GCM) via sodium or OpenSSL with vetted algorithms and modes.
|
|
51
|
+
|
|
@@ -7,6 +7,18 @@ metadata:
|
|
|
7
7
|
WordPress admin/AJAX mutation callbacks should verify nonce tokens and enforce capability checks.
|
|
8
8
|
rationale: >-
|
|
9
9
|
Missing nonce or authorization checks let attackers trigger privileged actions through forged or unauthorized requests.
|
|
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
|
|
19
|
+
- kind: url
|
|
20
|
+
title: WordPress plugin security
|
|
21
|
+
url: https://developer.wordpress.org/apis/security/
|
|
10
22
|
tags:
|
|
11
23
|
- security
|
|
12
24
|
- php
|
|
@@ -40,3 +52,4 @@ emit:
|
|
|
40
52
|
remediation:
|
|
41
53
|
summary: >-
|
|
42
54
|
Add nonce verification (`check_ajax_referer`/`check_admin_referer`) and explicit capability checks (`current_user_can`) before performing mutations.
|
|
55
|
+
|