@critiq/rules 0.0.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/README.md +52 -4
  2. package/catalog.yaml +1775 -192
  3. package/package.json +6 -1
  4. package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
  5. package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
  6. package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
  7. package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
  8. package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
  9. package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
  10. package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
  11. package/rules/go/go.performance.no-regex-construction-in-loop.rule.yaml +33 -0
  12. package/rules/go/go.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
  13. package/rules/go/go.performance.no-unbounded-concurrency.rule.yaml +33 -0
  14. package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
  15. package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +56 -0
  16. package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +55 -0
  17. package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +55 -0
  18. package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +55 -0
  19. package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +55 -0
  20. package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +55 -0
  21. package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +57 -0
  22. package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
  23. package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
  24. package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
  25. package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
  26. package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
  27. package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +55 -0
  28. package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
  29. package/rules/go/go.security.sensitive-data-egress.rule.yaml +56 -0
  30. package/rules/go/go.security.tar-path-traversal.rule.yaml +55 -0
  31. package/rules/go/go.security.template-unescaped-request-value.rule.yaml +55 -0
  32. package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
  33. package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
  34. package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
  35. package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
  36. package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
  37. package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
  38. package/rules/go/go.testing.real-network-in-unit-test.rule.yaml +33 -0
  39. package/rules/go/go.testing.t-skip-without-ticket-reference.rule.yaml +33 -0
  40. package/rules/go/go.testing.time-sleep-in-unit-test.rule.yaml +33 -0
  41. package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
  42. package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
  43. package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
  44. package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
  45. package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
  46. package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
  47. package/rules/java/java.performance.no-regex-construction-in-loop.rule.yaml +33 -0
  48. package/rules/java/java.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
  49. package/rules/java/java.performance.no-unbounded-concurrency.rule.yaml +33 -0
  50. package/rules/java/java.security.android-screenshot-exposure.rule.yaml +48 -0
  51. package/rules/java/java.security.android-world-readable-mode.rule.yaml +48 -0
  52. package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
  53. package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
  54. package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
  55. package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
  56. package/rules/java/java.security.jpa-concatenated-query.rule.yaml +60 -0
  57. package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
  58. package/rules/java/java.security.null-cipher.rule.yaml +52 -0
  59. package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
  60. package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
  61. package/rules/java/java.security.reflected-output-from-request.rule.yaml +45 -0
  62. package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +48 -0
  63. package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
  64. package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +53 -0
  65. package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +53 -0
  66. package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +62 -0
  67. package/rules/java/java.security.spring-debug-exposure.rule.yaml +48 -0
  68. package/rules/java/java.security.spring-permit-all-default.rule.yaml +60 -0
  69. package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +60 -0
  70. package/rules/java/java.security.template-unescaped-user-output.rule.yaml +59 -0
  71. package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
  72. package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
  73. package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
  74. package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
  75. package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
  76. package/rules/java/java.testing.disabled-without-ticket-reference.rule.yaml +33 -0
  77. package/rules/java/java.testing.http-client-in-unit-test.rule.yaml +33 -0
  78. package/rules/java/java.testing.thread-sleep-in-unit-test.rule.yaml +33 -0
  79. package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
  80. package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
  81. package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
  82. package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
  83. package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
  84. package/rules/php/php.performance.no-regex-construction-in-loop.rule.yaml +33 -0
  85. package/rules/php/php.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
  86. package/rules/php/php.performance.no-unbounded-concurrency.rule.yaml +33 -0
  87. package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
  88. package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +51 -0
  89. package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +51 -0
  90. package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
  91. package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +52 -0
  92. package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +55 -0
  93. package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +55 -0
  94. package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +58 -0
  95. package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
  96. package/rules/php/php.security.sensitive-data-egress.rule.yaml +52 -0
  97. package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +55 -0
  98. package/rules/php/php.security.symfony-debug-exposure.rule.yaml +57 -0
  99. package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +51 -0
  100. package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
  101. package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
  102. package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +55 -0
  103. package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +55 -0
  104. package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
  105. package/rules/php/php.testing.curl-in-unit-test.rule.yaml +33 -0
  106. package/rules/php/php.testing.mark-test-skipped-without-ticket-reference.rule.yaml +33 -0
  107. package/rules/php/php.testing.sleep-in-unit-test.rule.yaml +33 -0
  108. package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
  109. package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
  110. package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
  111. package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
  112. package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
  113. package/rules/python/py.performance.no-regex-construction-in-loop.rule.yaml +33 -0
  114. package/rules/python/py.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
  115. package/rules/python/py.performance.no-unbounded-concurrency.rule.yaml +33 -0
  116. package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
  117. package/rules/python/py.security.debugger-import.rule.yaml +55 -0
  118. package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +59 -0
  119. package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
  120. package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
  121. package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +60 -0
  122. package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
  123. package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +60 -0
  124. package/rules/python/py.security.drf-allow-any-default.rule.yaml +59 -0
  125. package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +59 -0
  126. package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
  127. package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +56 -0
  128. package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
  129. package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +57 -0
  130. package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +57 -0
  131. package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +57 -0
  132. package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
  133. package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
  134. package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
  135. package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
  136. package/rules/python/py.testing.pytest-skip-without-ticket-reference.rule.yaml +33 -0
  137. package/rules/python/py.testing.real-network-in-unit-test.rule.yaml +33 -0
  138. package/rules/python/py.testing.time-sleep-in-unit-test.rule.yaml +33 -0
  139. package/rules/ruby/ruby.performance.no-regex-construction-in-loop.rule.yaml +33 -0
  140. package/rules/ruby/ruby.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
  141. package/rules/ruby/ruby.performance.no-unbounded-concurrency.rule.yaml +33 -0
  142. package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +58 -0
  143. package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +57 -0
  144. package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +58 -0
  145. package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +59 -0
  146. package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +58 -0
  147. package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +58 -0
  148. package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +59 -0
  149. package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +55 -0
  150. package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +55 -0
  151. package/rules/ruby/ruby.testing.focused-example.rule.yaml +33 -0
  152. package/rules/ruby/ruby.testing.pending-without-ticket-reference.rule.yaml +33 -0
  153. package/rules/ruby/ruby.testing.real-network-in-unit-test.rule.yaml +33 -0
  154. package/rules/ruby/ruby.testing.skip-without-ticket-reference.rule.yaml +33 -0
  155. package/rules/ruby/ruby.testing.sleep-in-unit-test.rule.yaml +33 -0
  156. package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
  157. package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
  158. package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
  159. package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
  160. package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
  161. package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
  162. package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
  163. package/rules/rust/rust.performance.no-regex-construction-in-loop.rule.yaml +33 -0
  164. package/rules/rust/rust.performance.no-sync-fs-in-request-path.rule.yaml +33 -0
  165. package/rules/rust/rust.performance.no-unbounded-concurrency.rule.yaml +33 -0
  166. package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +60 -0
  167. package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +58 -0
  168. package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +60 -0
  169. package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
  170. package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
  171. package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
  172. package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
  173. package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
  174. package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
  175. package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
  176. package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +58 -0
  177. package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +60 -0
  178. package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
  179. package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +60 -0
  180. package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +57 -0
  181. package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
  182. package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +58 -0
  183. package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
  184. package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
  185. package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
  186. package/rules/rust/rust.testing.ignore-without-ticket-reference.rule.yaml +33 -0
  187. package/rules/rust/rust.testing.real-network-in-unit-test.rule.yaml +33 -0
  188. package/rules/rust/rust.testing.thread-sleep-in-unit-test.rule.yaml +33 -0
  189. package/rules/shared/security.archive-path-traversal.rule.yaml +51 -0
  190. package/rules/shared/security.external-file-upload.rule.yaml +50 -0
  191. package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
  192. package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
  193. package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
  194. package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
  195. package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
  196. package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
  197. package/rules/shared/security.permissive-file-permissions.rule.yaml +50 -0
  198. package/rules/shared/security.sensitive-data-egress.rule.yaml +46 -0
  199. package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
  200. package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
  201. package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
  202. package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
  203. package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
  204. package/rules/typescript/ts.correctness.assignment-in-condition.rule.yaml +36 -0
  205. package/rules/typescript/ts.correctness.assignment-to-import-binding.rule.yaml +36 -0
  206. package/rules/typescript/ts.correctness.async-promise-executor.rule.yaml +36 -0
  207. package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
  208. package/rules/typescript/ts.correctness.duplicate-function-parameter.rule.yaml +36 -0
  209. package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
  210. package/rules/typescript/ts.correctness.duplicate-import-source.rule.yaml +36 -0
  211. package/rules/typescript/ts.correctness.duplicate-object-key.rule.yaml +36 -0
  212. package/rules/typescript/ts.correctness.duplicate-switch-case.rule.yaml +36 -0
  213. package/rules/typescript/ts.correctness.empty-block-statement.rule.yaml +35 -0
  214. package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
  215. package/rules/typescript/ts.correctness.identical-comparison-operands.rule.yaml +36 -0
  216. package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
  217. package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
  218. package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
  219. package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
  220. package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
  221. package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
  222. package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
  223. package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
  224. package/rules/typescript/ts.correctness.reassign-catch-binding.rule.yaml +35 -0
  225. package/rules/typescript/ts.correctness.regexp-pattern-unusual-control-character.rule.yaml +35 -0
  226. package/rules/typescript/ts.correctness.self-assignment.rule.yaml +36 -0
  227. package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
  228. package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
  229. package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
  230. package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +48 -0
  231. package/rules/typescript/ts.performance.no-array-spread-in-hot-loop.rule.yaml +32 -0
  232. package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
  233. package/rules/typescript/ts.performance.no-cache-miss-from-unstable-key.rule.yaml +32 -0
  234. package/rules/typescript/ts.performance.no-expensive-sort-in-render-path.rule.yaml +32 -0
  235. package/rules/typescript/ts.performance.no-json-parse-stringify-clone.rule.yaml +32 -0
  236. package/rules/typescript/ts.performance.no-large-object-spread-in-loop.rule.yaml +32 -0
  237. package/rules/typescript/ts.performance.no-n-plus-one-await-in-map.rule.yaml +32 -0
  238. package/rules/typescript/ts.performance.no-redundant-network-fetch.rule.yaml +32 -0
  239. package/rules/typescript/ts.performance.no-regex-construction-in-loop.rule.yaml +32 -0
  240. package/rules/typescript/ts.performance.no-sync-fs-in-request-path.rule.yaml +32 -0
  241. package/rules/typescript/ts.performance.no-unbounded-concurrency.rule.yaml +32 -0
  242. package/rules/typescript/ts.quality.no-ambiguous-abbreviations.rule.yaml +27 -0
  243. package/rules/typescript/ts.quality.no-barrel-file-cycle.rule.yaml +27 -0
  244. package/rules/typescript/ts.quality.no-boolean-parameter-trap.rule.yaml +27 -0
  245. package/rules/typescript/ts.quality.no-dead-export.rule.yaml +27 -0
  246. package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
  247. package/rules/typescript/ts.quality.no-hidden-side-effect-import.rule.yaml +27 -0
  248. package/rules/typescript/ts.quality.no-inconsistent-error-shape.rule.yaml +27 -0
  249. package/rules/typescript/ts.quality.no-mixed-abstraction-level.rule.yaml +27 -0
  250. package/rules/typescript/ts.quality.no-primitive-obsession-in-domain-model.rule.yaml +27 -0
  251. package/rules/typescript/ts.quality.no-temporal-coupling.rule.yaml +27 -0
  252. package/rules/typescript/ts.quality.no-wide-public-surface.rule.yaml +27 -0
  253. package/rules/typescript/ts.react.no-accessibility-label-missing.rule.yaml +36 -0
  254. package/rules/typescript/ts.react.no-activedescendant-on-non-focusable-host.rule.yaml +36 -0
  255. package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
  256. package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
  257. package/rules/typescript/ts.react.no-click-without-keyboard-handler.rule.yaml +36 -0
  258. package/rules/typescript/ts.react.no-deprecated-create-factory.rule.yaml +34 -0
  259. package/rules/typescript/ts.react.no-deprecated-react-dom-root-api.rule.yaml +34 -0
  260. package/rules/typescript/ts.react.no-derived-state-from-props.rule.yaml +34 -0
  261. package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
  262. package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
  263. package/rules/typescript/ts.react.no-effect-fetch-without-cancellation.rule.yaml +35 -0
  264. package/rules/typescript/ts.react.no-find-dom-node.rule.yaml +34 -0
  265. package/rules/typescript/ts.react.no-img-missing-alt-text.rule.yaml +36 -0
  266. package/rules/typescript/ts.react.no-index-as-key-in-dynamic-list.rule.yaml +34 -0
  267. package/rules/typescript/ts.react.no-interactive-role-on-static-semantics.rule.yaml +36 -0
  268. package/rules/typescript/ts.react.no-invalid-anchor-href.rule.yaml +36 -0
  269. package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
  270. package/rules/typescript/ts.react.no-keyboard-interaction-without-widget-role.rule.yaml +36 -0
  271. package/rules/typescript/ts.react.no-legacy-lifecycle.rule.yaml +34 -0
  272. package/rules/typescript/ts.react.no-missing-error-boundary.rule.yaml +36 -0
  273. package/rules/typescript/ts.react.no-positive-tabindex.rule.yaml +36 -0
  274. package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
  275. package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
  276. package/rules/typescript/ts.react.no-static-element-with-synthetic-handlers.rule.yaml +36 -0
  277. package/rules/typescript/ts.react.no-string-ref.rule.yaml +34 -0
  278. package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
  279. package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
  280. package/rules/typescript/ts.react.no-uncontrolled-to-controlled-input.rule.yaml +34 -0
  281. package/rules/typescript/ts.react.no-widget-role-without-tabindex.rule.yaml +36 -0
  282. package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
  283. package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +44 -0
  284. package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +48 -0
  285. package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +52 -0
  286. package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +52 -0
  287. package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +51 -0
  288. package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +51 -0
  289. package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +52 -0
  290. package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
  291. package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
  292. package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
  293. package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
  294. package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
  295. package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
  296. package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +46 -0
  297. package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
  298. package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +45 -0
  299. package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +45 -0
  300. package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +45 -0
  301. package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +48 -0
  302. package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
  303. package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
  304. package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
  305. package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
  306. package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +51 -0
  307. package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
  308. package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
  309. package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
  310. package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
  311. package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
  312. package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
  313. package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
  314. package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +51 -0
  315. package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +50 -0
  316. package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +51 -0
  317. package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
  318. package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +50 -0
  319. package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +54 -0
  320. package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
  321. package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
  322. package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
  323. package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +52 -0
  324. package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
  325. package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
  326. package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +45 -0
  327. package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
  328. package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
  329. package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
  330. package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
  331. package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +45 -0
  332. package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +46 -0
  333. package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
  334. package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
  335. package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
  336. package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +45 -0
  337. package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
  338. package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
  339. package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +45 -0
  340. package/rules/typescript/ts.security.log-injection.rule.yaml +46 -0
  341. package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
  342. package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
  343. package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
  344. package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
  345. package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
  346. package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
  347. package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +50 -0
  348. package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +51 -0
  349. package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +51 -0
  350. package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +52 -0
  351. package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
  352. package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
  353. package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
  354. package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
  355. package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
  356. package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
  357. package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
  358. package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
  359. package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
  360. package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
  361. package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
  362. package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
  363. package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
  364. package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +51 -0
  365. package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
  366. package/rules/typescript/ts.security.open-redirect.rule.yaml +12 -0
  367. package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
  368. package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
  369. package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
  370. package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
  371. package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
  372. package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +43 -0
  373. package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +11 -0
  374. package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
  375. package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
  376. package/rules/typescript/ts.security.ssrf.rule.yaml +11 -0
  377. package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
  378. package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
  379. package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
  380. package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +46 -0
  381. package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +46 -0
  382. package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
  383. package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
  384. package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
  385. package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
  386. package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
  387. package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
  388. package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
  389. package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +45 -0
  390. package/rules/typescript/ts.testing.no-flaky-timer-test.rule.yaml +38 -0
  391. package/rules/typescript/ts.testing.no-focused-test.rule.yaml +34 -0
  392. package/rules/typescript/ts.testing.no-missing-edge-case-tests.rule.yaml +35 -0
  393. package/rules/typescript/ts.testing.no-network-call-in-unit-test.rule.yaml +38 -0
  394. package/rules/typescript/ts.testing.no-skipped-test-without-ticket.rule.yaml +34 -0
  395. package/rules/typescript/ts.testing.no-snapshot-without-intent.rule.yaml +34 -0
  396. package/rules/typescript/ts.testing.no-test-only-code-in-production.rule.yaml +38 -0
@@ -0,0 +1,60 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.axum-insecure-cors-with-credentials
5
+ title: Avoid permissive tower-http CORS with credentials in Axum
6
+ summary: >-
7
+ Do not pair wildcard or `very_permissive` origin policies with credentialed CORS or private-network access in `tower-http`.
8
+ rationale: >-
9
+ Browsers treat credentialed CORS as trusted cross-origin behavior; permissive origin lists undermine that contract and often hide missing explicit allowlists.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-942
15
+ title: Permissive Cross-domain Policy with Untrusted Domains
16
+ - kind: owasp
17
+ title: Cross-Origin Resource Sharing (CORS)
18
+ url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
19
+ - kind: url
20
+ title: ANSSI Rust secure development guidelines
21
+ url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
22
+ tags:
23
+ - security
24
+ - rust
25
+ - axum
26
+ - cors
27
+ - rules-catalog
28
+ stability: experimental
29
+ appliesTo: block
30
+ scope:
31
+ languages:
32
+ - rust
33
+ paths:
34
+ include:
35
+ - "**/*.rs"
36
+ exclude:
37
+ - "**/tests/**"
38
+ - "**/*_test.rs"
39
+ - "**/examples/**"
40
+ match:
41
+ fact:
42
+ kind: rust.security.axum-insecure-cors-with-credentials
43
+ bind: issue
44
+ emit:
45
+ finding:
46
+ category: security.misconfiguration
47
+ severity: high
48
+ confidence: 0.8
49
+ tags:
50
+ - security
51
+ - rust
52
+ - axum
53
+ - cors
54
+ message:
55
+ title: Tighten CORS configuration around `${captures.issue.text}`
56
+ summary: "`${captures.issue.text}` combines permissive origins with credentialed or private-network CORS behavior."
57
+ remediation:
58
+ summary: >-
59
+ Prefer explicit HTTPS `AllowOrigin` lists, avoid `CorsLayer::very_permissive` with `allow_credentials(true)`, and only enable `allow_private_network` with strict origin controls.
60
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.bind-all-interfaces
5
+ title: Avoid binding Rust services to all interfaces
6
+ summary: >-
7
+ Rust network services should avoid explicit binds to `0.0.0.0`, `::`, or `[::]` unless public exposure is intentional and controlled.
8
+ rationale: >-
9
+ Binding every interface can unintentionally expose internal services beyond expected trust boundaries.
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
19
+ tags:
20
+ - security
21
+ - rust
22
+ - network
23
+ - exposure
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.bind-all-interfaces
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.network
44
+ severity: medium
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - network
50
+ - exposure
51
+ message:
52
+ title: Restrict interface bind in `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` binds a service to all network interfaces."
54
+ remediation:
55
+ summary: >-
56
+ Prefer loopback or an explicit interface bind unless broad exposure is required and defended by network controls.
57
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.insecure-ssh-host-key
5
+ title: Verify SSH host keys before connecting
6
+ summary: >-
7
+ SSH clients must not disable host key verification.
8
+ rationale: >-
9
+ Skipping host key checks enables person-in-the-middle attacks against SSH sessions.
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
19
+ tags:
20
+ - security
21
+ - rust
22
+ - ssh
23
+ - network
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.insecure-ssh-host-key
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.network
44
+ severity: high
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - ssh
50
+ - network
51
+ message:
52
+ title: Enable SSH host key verification near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` disables SSH host key verification."
54
+ remediation:
55
+ summary: >-
56
+ Keep host key checking enabled and pin known host keys or use a trusted known_hosts store.
57
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.insecure-ssl-protocol
5
+ title: Reject deprecated SSL/TLS protocol versions
6
+ summary: >-
7
+ Rust code must not enable SSLv3, TLS 1.0, or TLS 1.1 in TLS configuration.
8
+ rationale: >-
9
+ These protocol versions have known weaknesses and are deprecated for secure transport.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-319
15
+ title: Cleartext Transmission of Sensitive Information
16
+ - kind: owasp
17
+ title: Transport Layer Security Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html
19
+ tags:
20
+ - security
21
+ - rust
22
+ - tls
23
+ - cryptography
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.insecure-ssl-protocol
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.cryptography
44
+ severity: high
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - tls
50
+ - cryptography
51
+ message:
52
+ title: Remove insecure TLS protocol near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` references a deprecated SSL/TLS protocol version."
54
+ remediation:
55
+ summary: >-
56
+ Require TLS 1.2 or TLS 1.3 and remove SSLv3, TLS 1.0, and TLS 1.1 from allowed protocol lists.
57
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.insecure-temp-file
5
+ title: Avoid predictable or permissionless temporary files
6
+ summary: >-
7
+ Temporary file creation should use secure helpers with random suffixes and restrictive permissions.
8
+ rationale: >-
9
+ Predictable temp paths and default-permission temp files enable symlink races and information disclosure.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-434
15
+ title: Unrestricted Upload of File with Dangerous Type
16
+ - kind: owasp
17
+ title: File Upload Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
19
+ tags:
20
+ - security
21
+ - rust
22
+ - filesystem
23
+ - tempfile
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.insecure-temp-file
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.filesystem
44
+ severity: medium
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - filesystem
50
+ - tempfile
51
+ message:
52
+ title: Use secure temp file creation near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` creates a temporary file with an insecure pattern."
54
+ remediation:
55
+ summary: >-
56
+ Use `tempfile::Builder` with explicit permissions and patterns containing `*`, or `std::env::temp_dir` with random names.
57
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.insecure-yaml-load
5
+ title: Avoid untyped YAML deserialization
6
+ summary: >-
7
+ Untyped `serde_yaml` deserialization can instantiate arbitrary types from untrusted input.
8
+ rationale: >-
9
+ YAML loaders without strict typing enable unsafe object graphs and unexpected type coercion.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-502
15
+ title: Deserialization of Untrusted Data
16
+ - kind: owasp
17
+ title: Deserialization Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
19
+ tags:
20
+ - security
21
+ - rust
22
+ - yaml
23
+ - deserialization
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.insecure-yaml-load
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.deserialization
44
+ severity: high
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - yaml
50
+ - deserialization
51
+ message:
52
+ title: Use typed YAML parsing near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` deserializes YAML without a constrained target type."
54
+ remediation:
55
+ summary: >-
56
+ Deserialize into explicit structs or enums and validate input before use.
57
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.jwt-without-verification
5
+ title: Verify JWT signatures before trusting claims
6
+ summary: >-
7
+ JWT parsing must use a verification key and must not disable signature validation.
8
+ rationale: >-
9
+ Trusting unverified JWTs allows attackers to forge tokens with arbitrary claims.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-287
15
+ title: Improper Authentication
16
+ - kind: owasp
17
+ title: JSON Web Token Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html
19
+ tags:
20
+ - security
21
+ - rust
22
+ - jwt
23
+ - authentication
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.jwt-without-verification
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.authentication
44
+ severity: high
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - jwt
50
+ - authentication
51
+ message:
52
+ title: Verify JWT signature near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` parses a JWT without verifying its signature."
54
+ remediation:
55
+ summary: >-
56
+ Pass a `DecodingKey` to `decode` and validate claims with a strict `Validation` configuration.
57
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.panic-in-async-handler
5
+ title: Avoid panic and unwrap in async handlers
6
+ summary: >-
7
+ Async request handlers should propagate errors instead of panicking or unwrapping Results.
8
+ rationale: >-
9
+ Panics in async handlers can abort tasks and leak error details under load.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-16
15
+ title: Configuration
16
+ - kind: owasp
17
+ title: Secure Configuration Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
19
+ tags:
20
+ - security
21
+ - rust
22
+ - async
23
+ - reliability
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.panic-in-async-handler
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.reliability
44
+ severity: medium
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - async
50
+ - reliability
51
+ message:
52
+ title: Handle errors in async handler near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` panics or unwraps inside an async function."
54
+ remediation:
55
+ summary: >-
56
+ Return `Result` from async handlers and map errors to appropriate HTTP responses.
57
+
@@ -0,0 +1,58 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.rocket-panic-prone-request-handler
5
+ title: Avoid panicking on request-derived data in Rocket handlers
6
+ summary: >-
7
+ Rocket route handlers should not `unwrap`, `expect`, or otherwise panic on values derived from the HTTP request.
8
+ rationale: >-
9
+ Panics become hard failures and can be abused for denial-of-service or to leak error detail; prefer `Result` and typed rejections.
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: ANSSI Rust secure development guidelines
21
+ url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
22
+ tags:
23
+ - security
24
+ - rust
25
+ - rocket
26
+ - rules-catalog
27
+ stability: experimental
28
+ appliesTo: block
29
+ scope:
30
+ languages:
31
+ - rust
32
+ paths:
33
+ include:
34
+ - "**/*.rs"
35
+ exclude:
36
+ - "**/tests/**"
37
+ - "**/*_test.rs"
38
+ - "**/examples/**"
39
+ match:
40
+ fact:
41
+ kind: rust.security.rocket-panic-prone-request-handler
42
+ bind: issue
43
+ emit:
44
+ finding:
45
+ category: security.error-handling
46
+ severity: medium
47
+ confidence: 0.74
48
+ tags:
49
+ - security
50
+ - rust
51
+ - rocket
52
+ message:
53
+ title: Replace infallible unwraps in Rocket handler near `${captures.issue.text}`
54
+ summary: "`${captures.issue.text}` can panic on malformed or hostile input in a Rocket request handler."
55
+ remediation:
56
+ summary: >-
57
+ Return `Result`, `Option`, or `status::Custom`, map errors to HTTP responses, and reserve `unwrap` for tests or statically known invariants.
58
+
@@ -0,0 +1,60 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.rocket-unsafe-template-output
5
+ title: Avoid raw HTML built from Rocket route parameters
6
+ summary: >-
7
+ Do not wrap request-sourced strings in `RawHtml` (or similar) without escaping in Rocket handlers.
8
+ rationale: >-
9
+ Raw HTML bypasses Rocket's escaping defaults and is a common XSS footgun when fed from path, query, or body inputs.
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: ANSSI Rust secure development guidelines
21
+ url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
22
+ tags:
23
+ - security
24
+ - rust
25
+ - rocket
26
+ - xss
27
+ - rules-catalog
28
+ stability: experimental
29
+ appliesTo: block
30
+ scope:
31
+ languages:
32
+ - rust
33
+ paths:
34
+ include:
35
+ - "**/*.rs"
36
+ exclude:
37
+ - "**/tests/**"
38
+ - "**/*_test.rs"
39
+ - "**/examples/**"
40
+ match:
41
+ fact:
42
+ kind: rust.security.rocket-unsafe-template-output
43
+ bind: issue
44
+ emit:
45
+ finding:
46
+ category: security.output-encoding
47
+ severity: high
48
+ confidence: 0.76
49
+ tags:
50
+ - security
51
+ - rust
52
+ - rocket
53
+ - xss
54
+ message:
55
+ title: Escape or sanitize before `${captures.issue.text}`
56
+ summary: "`${captures.issue.text}` emits raw HTML from handler parameters without an obvious sanitizer."
57
+ remediation:
58
+ summary: >-
59
+ Prefer typed templates with auto-escaping, sanitize with a vetted HTML policy crate, or return plain text/JSON instead of `RawHtml`.
60
+
@@ -0,0 +1,57 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.shell-command-spawn
5
+ title: Avoid shell invocation via Command
6
+ summary: >-
7
+ Spawning `/bin/sh` or `bash` with `-c` enables shell metacharacter injection.
8
+ rationale: >-
9
+ Shell interpretation expands attacker-controlled input into arbitrary command execution.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-78
15
+ title: OS Command Injection
16
+ - kind: owasp
17
+ title: OS Command Injection Defense Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
19
+ tags:
20
+ - security
21
+ - rust
22
+ - command-injection
23
+ - shell
24
+ - rules-catalog
25
+ stability: experimental
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - rust
30
+ paths:
31
+ include:
32
+ - "**/*.rs"
33
+ exclude:
34
+ - "**/tests/**"
35
+ - "**/*_test.rs"
36
+ - "**/examples/**"
37
+ match:
38
+ fact:
39
+ kind: rust.security.shell-command-spawn
40
+ bind: issue
41
+ emit:
42
+ finding:
43
+ category: security.command-injection
44
+ severity: high
45
+ confidence: 0.85
46
+ tags:
47
+ - security
48
+ - rust
49
+ - command-injection
50
+ - shell
51
+ message:
52
+ title: Avoid shell spawn near `${captures.issue.text}`
53
+ summary: "`${captures.issue.text}` spawns a shell with `-c`, enabling command injection."
54
+ remediation:
55
+ summary: >-
56
+ Invoke binaries directly with explicit arguments instead of routing through a shell.
57
+
@@ -0,0 +1,60 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: rust.security.sqlx-diesel-raw-interpolated-query
5
+ title: Avoid dynamic SQL built with format! for SQLx or Diesel
6
+ summary: >-
7
+ Do not pass `format!(...)` (or equivalent string concatenation) into `sqlx::query` or `diesel::sql_query` sinks.
8
+ rationale: >-
9
+ Interpolated SQL is the primary SQL injection pattern in Rust ORMs; compile-time macros and bind parameters keep queries safe.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-89
15
+ title: SQL Injection
16
+ - kind: owasp
17
+ title: SQL Injection Prevention Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
19
+ - kind: url
20
+ title: ANSSI Rust secure development guidelines
21
+ url: https://anssi-fr.github.io/rust-guide/01-general-principles.html
22
+ tags:
23
+ - security
24
+ - rust
25
+ - sqlx
26
+ - diesel
27
+ - rules-catalog
28
+ stability: experimental
29
+ appliesTo: block
30
+ scope:
31
+ languages:
32
+ - rust
33
+ paths:
34
+ include:
35
+ - "**/*.rs"
36
+ exclude:
37
+ - "**/tests/**"
38
+ - "**/*_test.rs"
39
+ - "**/examples/**"
40
+ match:
41
+ fact:
42
+ kind: rust.security.sqlx-diesel-raw-interpolated-query
43
+ bind: issue
44
+ emit:
45
+ finding:
46
+ category: security.sql-injection
47
+ severity: high
48
+ confidence: 0.88
49
+ tags:
50
+ - security
51
+ - rust
52
+ - sqlx
53
+ - diesel
54
+ message:
55
+ title: Replace interpolated SQL at `${captures.issue.text}`
56
+ summary: "`${captures.issue.text}` builds SQL with `format!` instead of bound parameters or compile-time checked macros."
57
+ remediation:
58
+ summary: >-
59
+ Prefer `sqlx::query!` / `query_as!`, use `.bind(...)` on typed query builders, or Diesel's query DSL with bound parameters instead of raw interpolated strings.
60
+