@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.
Files changed (299) hide show
  1. package/README.md +1 -1
  2. package/catalog.yaml +617 -0
  3. package/package.json +1 -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.security.bind-all-interfaces.rule.yaml +57 -0
  12. package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +10 -0
  13. package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +10 -0
  14. package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +10 -0
  15. package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +10 -0
  16. package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +10 -0
  17. package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +10 -0
  18. package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +10 -0
  19. package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
  20. package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
  21. package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
  22. package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
  23. package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
  24. package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +10 -0
  25. package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
  26. package/rules/go/go.security.sensitive-data-egress.rule.yaml +10 -0
  27. package/rules/go/go.security.tar-path-traversal.rule.yaml +10 -0
  28. package/rules/go/go.security.template-unescaped-request-value.rule.yaml +10 -0
  29. package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
  30. package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
  31. package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
  32. package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
  33. package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
  34. package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
  35. package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
  36. package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
  37. package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
  38. package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
  39. package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
  40. package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
  41. package/rules/java/java.security.android-screenshot-exposure.rule.yaml +13 -0
  42. package/rules/java/java.security.android-world-readable-mode.rule.yaml +13 -0
  43. package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
  44. package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
  45. package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
  46. package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
  47. package/rules/java/java.security.jpa-concatenated-query.rule.yaml +13 -0
  48. package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
  49. package/rules/java/java.security.null-cipher.rule.yaml +52 -0
  50. package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
  51. package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
  52. package/rules/java/java.security.reflected-output-from-request.rule.yaml +10 -0
  53. package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +13 -0
  54. package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
  55. package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +13 -0
  56. package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +13 -0
  57. package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +13 -0
  58. package/rules/java/java.security.spring-debug-exposure.rule.yaml +13 -0
  59. package/rules/java/java.security.spring-permit-all-default.rule.yaml +13 -0
  60. package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +13 -0
  61. package/rules/java/java.security.template-unescaped-user-output.rule.yaml +10 -0
  62. package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
  63. package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
  64. package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
  65. package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
  66. package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
  67. package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
  68. package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
  69. package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
  70. package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
  71. package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
  72. package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
  73. package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +10 -0
  74. package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +10 -0
  75. package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
  76. package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +10 -0
  77. package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +13 -0
  78. package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +13 -0
  79. package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +13 -0
  80. package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
  81. package/rules/php/php.security.sensitive-data-egress.rule.yaml +10 -0
  82. package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +13 -0
  83. package/rules/php/php.security.symfony-debug-exposure.rule.yaml +13 -0
  84. package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +10 -0
  85. package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
  86. package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
  87. package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +13 -0
  88. package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +13 -0
  89. package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
  90. package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
  91. package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
  92. package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
  93. package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
  94. package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
  95. package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
  96. package/rules/python/py.security.debugger-import.rule.yaml +55 -0
  97. package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +13 -0
  98. package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
  99. package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
  100. package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +13 -0
  101. package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
  102. package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +13 -0
  103. package/rules/python/py.security.drf-allow-any-default.rule.yaml +13 -0
  104. package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +13 -0
  105. package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
  106. package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +13 -0
  107. package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
  108. package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +13 -0
  109. package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +13 -0
  110. package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +13 -0
  111. package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
  112. package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
  113. package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
  114. package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
  115. package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +13 -0
  116. package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +13 -0
  117. package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +13 -0
  118. package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +13 -0
  119. package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +13 -0
  120. package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +13 -0
  121. package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +13 -0
  122. package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +10 -0
  123. package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +10 -0
  124. package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
  125. package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
  126. package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
  127. package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
  128. package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
  129. package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
  130. package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
  131. package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +13 -0
  132. package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +13 -0
  133. package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +13 -0
  134. package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
  135. package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
  136. package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
  137. package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
  138. package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
  139. package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
  140. package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
  141. package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +13 -0
  142. package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +13 -0
  143. package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
  144. package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +13 -0
  145. package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +10 -0
  146. package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
  147. package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +13 -0
  148. package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
  149. package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
  150. package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
  151. package/rules/shared/security.archive-path-traversal.rule.yaml +10 -0
  152. package/rules/shared/security.external-file-upload.rule.yaml +10 -0
  153. package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
  154. package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
  155. package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
  156. package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
  157. package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
  158. package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
  159. package/rules/shared/security.permissive-file-permissions.rule.yaml +10 -0
  160. package/rules/shared/security.sensitive-data-egress.rule.yaml +10 -0
  161. package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
  162. package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
  163. package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
  164. package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
  165. package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
  166. package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
  167. package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
  168. package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
  169. package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
  170. package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
  171. package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
  172. package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
  173. package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
  174. package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
  175. package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
  176. package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
  177. package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
  178. package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
  179. package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
  180. package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +13 -0
  181. package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
  182. package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
  183. package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
  184. package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
  185. package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
  186. package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
  187. package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
  188. package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
  189. package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
  190. package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
  191. package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
  192. package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
  193. package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +10 -0
  194. package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +13 -0
  195. package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +16 -0
  196. package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +16 -0
  197. package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +16 -0
  198. package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +16 -0
  199. package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +13 -0
  200. package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
  201. package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
  202. package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
  203. package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
  204. package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
  205. package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
  206. package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +10 -0
  207. package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
  208. package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +10 -0
  209. package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +10 -0
  210. package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +10 -0
  211. package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +13 -0
  212. package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
  213. package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
  214. package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
  215. package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
  216. package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +16 -0
  217. package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
  218. package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
  219. package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
  220. package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
  221. package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
  222. package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
  223. package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
  224. package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +16 -0
  225. package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +16 -0
  226. package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +16 -0
  227. package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
  228. package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +16 -0
  229. package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +16 -0
  230. package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
  231. package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
  232. package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
  233. package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +16 -0
  234. package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
  235. package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
  236. package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +10 -0
  237. package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
  238. package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
  239. package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
  240. package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
  241. package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +10 -0
  242. package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +10 -0
  243. package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
  244. package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
  245. package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
  246. package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +10 -0
  247. package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
  248. package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
  249. package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +10 -0
  250. package/rules/typescript/ts.security.log-injection.rule.yaml +10 -0
  251. package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
  252. package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
  253. package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
  254. package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
  255. package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
  256. package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
  257. package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +16 -0
  258. package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +16 -0
  259. package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +16 -0
  260. package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +16 -0
  261. package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
  262. package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
  263. package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
  264. package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
  265. package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
  266. package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
  267. package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
  268. package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
  269. package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
  270. package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
  271. package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
  272. package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
  273. package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
  274. package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +13 -0
  275. package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
  276. package/rules/typescript/ts.security.open-redirect.rule.yaml +10 -0
  277. package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
  278. package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
  279. package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
  280. package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
  281. package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
  282. package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +10 -0
  283. package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +10 -0
  284. package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
  285. package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
  286. package/rules/typescript/ts.security.ssrf.rule.yaml +10 -0
  287. package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
  288. package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
  289. package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
  290. package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +10 -0
  291. package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +10 -0
  292. package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
  293. package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
  294. package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
  295. package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
  296. package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
  297. package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
  298. package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
  299. package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +10 -0
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Add GraphQL query depth or complexity controls
6
6
  summary: Apollo Server bootstrap should declare validation rules or plugins that bound query cost.
7
7
  rationale: Without depth, complexity, persisted operations, or gateway limits, GraphQL endpoints are easier to abuse with expensive queries.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-400
13
+ title: Uncontrolled Resource Consumption
14
+ - kind: owasp
15
+ title: GraphQL Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Apollo Server security
22
+ url: https://www.apollographql.com/docs/apollo-server/security/security
8
23
  tags:
9
24
  - security
10
25
  - graphql
@@ -33,3 +48,4 @@ emit:
33
48
  summary: Apollo Server is constructed without recognizable validation rules or protective plugins.
34
49
  remediation:
35
50
  summary: Add depth limits, query complexity rules, persisted operations, rate limits, or terminate behind a gateway/WAF that enforces GraphQL policies.
51
+
@@ -7,6 +7,18 @@ metadata:
7
7
  Astro and Vite define entries for import.meta.env.PUBLIC_* must not map to high-risk process.env secrets.
8
8
  rationale: >-
9
9
  PUBLIC_* keys are intended for browser-visible configuration; wiring database passwords or API secrets through vite.define exposes them to client bundles.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-798
15
+ title: Use of Hard-coded Credentials
16
+ - kind: owasp
17
+ title: Secrets Management Cheat Sheet
18
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html
19
+ - kind: url
20
+ title: Node.js security best practices
21
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
10
22
  tags:
11
23
  - security
12
24
  - astro
@@ -37,3 +49,4 @@ emit:
37
49
  remediation:
38
50
  summary: >-
39
51
  Keep secrets on the server, use private server-only env vars, and reserve PUBLIC_* keys for intentionally public identifiers such as analytics IDs.
52
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid binding to all interfaces
6
6
  summary: Network-facing services should not explicitly bind to every interface unless public exposure is intentional and protected.
7
7
  rationale: Binding to `0.0.0.0` or `::` can expose a service beyond the expected trust boundary and widen the reachable attack surface.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-668
13
+ title: Exposure of Resource to Wrong Sphere
14
+ - kind: url
15
+ title: CWE-668 Exposure of Resource to Wrong Sphere
16
+ url: https://cwe.mitre.org/data/definitions/668.html
8
17
  tags:
9
18
  - security
10
19
  - network
@@ -34,3 +43,4 @@ emit:
34
43
  summary: "`${captures.issue.text}` explicitly binds a network-facing service to every interface."
35
44
  remediation:
36
45
  summary: Bind to loopback or a specific interface unless public exposure is an intentional deployment requirement with compensating controls.
46
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid browser token storage
6
6
  summary: Access and session tokens should not be stored in long-lived browser storage.
7
7
  rationale: Long-lived browser storage exposes tokens to script access and increases the impact of XSS or device compromise.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-200
13
+ title: Exposure of Sensitive Information to an Unauthorized Actor
14
+ - kind: owasp
15
+ title: Logging Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - authentication
@@ -35,3 +44,4 @@ emit:
35
44
  remediation:
36
45
  summary: Keep tokens in HttpOnly cookies or in memory, and avoid long-lived cleartext browser storage.
37
46
 
47
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid unsafe DOM HTML insertion sinks
6
6
  summary: "`outerHTML`, `document.write*`, and `insertAdjacentHTML` should only receive fixed or explicitly sanitized HTML."
7
7
  rationale: HTML-capable DOM insertion sinks can execute attacker-controlled markup unless the HTML is fixed or strongly sanitized first.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-79
13
+ title: Cross-site Scripting (XSS)
14
+ - kind: owasp
15
+ title: Cross Site Scripting Prevention Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - xss
@@ -34,3 +43,4 @@ emit:
34
43
  summary: "`${captures.issue.text}` uses an HTML-capable DOM sink with non-literal, non-sanitized content."
35
44
  remediation:
36
45
  summary: Insert text with safe DOM APIs, or pass only fixed or explicitly sanitized HTML to the sink.
46
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid unsafe `dangerouslySetInnerHTML`
6
6
  summary: React `dangerouslySetInnerHTML` should only render fixed or explicitly sanitized HTML.
7
7
  rationale: React bypasses its normal escaping model when `dangerouslySetInnerHTML` is used, which makes unsanitized HTML a direct XSS sink.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-79
13
+ title: Cross-site Scripting (XSS)
14
+ - kind: owasp
15
+ title: Cross Site Scripting Prevention Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - xss
@@ -36,3 +45,4 @@ emit:
36
45
  summary: "`${captures.issue.text}` bypasses React escaping with non-literal, non-sanitized HTML."
37
46
  remediation:
38
47
  summary: Prefer normal React rendering, or pass only fixed or explicitly sanitized HTML to `dangerouslySetInnerHTML`.
48
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Review Datadog RUM user interaction capture
6
6
  summary: Datadog Browser RUM should not enable broad user interaction capture without a privacy review.
7
7
  rationale: Automatic interaction capture can leak sensitive page content or element labels to third-party telemetry.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-200
13
+ title: Exposure of Sensitive Information to an Unauthorized Actor
14
+ - kind: owasp
15
+ title: Logging Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - privacy
@@ -35,3 +44,4 @@ emit:
35
44
  remediation:
36
45
  summary: Disable broad interaction capture or add explicit scrubbing and allowlisted action naming before enabling it.
37
46
 
47
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Do not expose debug routes or middleware in production
6
6
  summary: Debug handlers, stack-showing middleware, and diagnostic endpoints should stay behind explicit development-only guards.
7
7
  rationale: Debug endpoints and stack-showing middleware can disclose internal topology, environment details, and request data with very little attacker effort.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-209
13
+ title: Generation of Error Message Containing Sensitive Information
14
+ - kind: owasp
15
+ title: Error Handling Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - express
@@ -36,3 +45,4 @@ emit:
36
45
  summary: "`${captures.issue.text}` enables debug or diagnostic exposure without a visible same-file development guard."
37
46
  remediation:
38
47
  summary: Wrap the registration in an explicit development-only guard or remove the endpoint or middleware from production builds.
48
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: "Remove leftover `console.trace` calls from production paths"
6
6
  summary: "`console.trace()` calls should not ship in production code outside an explicit dev-only branch."
7
7
  rationale: "`console.trace` dumps a stack trace to stdout/stderr and is almost always leftover developer instrumentation. Stack traces in shipped output disclose internal call structure and inflate logs."
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-209
13
+ title: Generation of Error Message Containing Sensitive Information
14
+ - kind: owasp
15
+ title: Error Handling Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - logging
@@ -34,3 +43,4 @@ emit:
34
43
  summary: "`${captures.issue.text}` is leftover developer instrumentation that ships a stack trace to stdout or stderr."
35
44
  remediation:
36
45
  summary: Remove the call or guard it behind an explicit dev-only check (`process.env.NODE_ENV !== 'production'`, `import.meta.env.DEV`, or `__DEV__`).
46
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid request-driven DynamoDB queries
6
6
  summary: DynamoDB query and scan inputs should not be built directly from request input.
7
7
  rationale: Raw request data in DynamoDB helpers can widen query scope or let attackers control expressions, filters, and key conditions.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-89
13
+ title: SQL Injection
14
+ - kind: owasp
15
+ title: SQL Injection Prevention Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - injection
@@ -34,3 +43,4 @@ emit:
34
43
  summary: "`${captures.issue.text}` receives request-controlled DynamoDB input without narrowing it to trusted expressions or key maps."
35
44
  remediation:
36
45
  summary: Build DynamoDB requests from fixed expressions and allowlisted fields instead of forwarding request-shaped input.
46
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Harden Electron webPreferences
6
6
  summary: Electron renderers should not run with unsafe webPreferences that weaken isolation or transport protection.
7
7
  rationale: Options such as nodeIntegration, contextIsolation, and webSecurity directly control whether renderer compromise becomes host compromise.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-749
13
+ title: Exposed Dangerous Method or Function
14
+ - kind: url
15
+ title: Electron Security
16
+ url: https://www.electronjs.org/docs/latest/tutorial/security
8
17
  tags:
9
18
  - security
10
19
  - electron
@@ -33,3 +42,4 @@ emit:
33
42
  summary: "${captures.issue.text} weakens Electron renderer isolation or transport protection."
34
43
  remediation:
35
44
  summary: Keep contextIsolation and webSecurity enabled, disable nodeIntegration and enableRemoteModule, and prefer sandbox true.
45
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid storing secrets in Electron local stores without hardening
6
6
  summary: electron-store writes that look like credentials should use OS-level secret storage instead.
7
7
  rationale: Local JSON stores are readable by other processes and backups unless encrypted with platform APIs.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-749
13
+ title: Exposed Dangerous Method or Function
14
+ - kind: url
15
+ title: Electron Security
16
+ url: https://www.electronjs.org/docs/latest/tutorial/security
8
17
  tags:
9
18
  - security
10
19
  - electron
@@ -33,3 +42,4 @@ emit:
33
42
  summary: "${captures.issue.text} persists sensitive-looking data through electron-store."
34
43
  remediation:
35
44
  summary: Prefer OS keychains, encrypted vaults, or short-lived session material instead of long-lived plaintext secrets on disk.
45
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Validate IPC sender origins in Electron
6
6
  summary: Privileged ipcMain handlers should validate event.sender origins before acting.
7
7
  rationale: Missing origin checks let any loaded renderer invoke privileged main-process behavior.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-749
13
+ title: Exposed Dangerous Method or Function
14
+ - kind: url
15
+ title: Electron Security
16
+ url: https://www.electronjs.org/docs/latest/tutorial/security
8
17
  tags:
9
18
  - security
10
19
  - electron
@@ -33,3 +42,4 @@ emit:
33
42
  summary: "${captures.issue.text} handles privileged IPC without validating the sender frame origin."
34
43
  remediation:
35
44
  summary: Assert trusted origins or channels before running privileged logic and reject unexpected senders early.
45
+
@@ -5,6 +5,18 @@ metadata:
5
5
  title: Do not open external URLs from request data in Electron
6
6
  summary: shell.openExternal should not receive request-controlled URLs without validation.
7
7
  rationale: Open redirects and SSRF-style flows in the main process can pivot to arbitrary system browsers or handlers.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-78
13
+ title: OS Command Injection
14
+ - kind: owasp
15
+ title: OS Command Injection Defense Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Electron security tutorial
19
+ url: https://www.electronjs.org/docs/latest/tutorial/security
8
20
  tags:
9
21
  - security
10
22
  - electron
@@ -33,3 +45,4 @@ emit:
33
45
  summary: "${captures.issue.text} opens a URL derived from request-controlled input."
34
46
  remediation:
35
47
  summary: Allowlist URL schemes and hosts, normalize targets, and block private IP ranges before calling openExternal.
48
+
@@ -5,6 +5,15 @@ metadata:
5
5
  title: Avoid exposed directory listings
6
6
  summary: Directory listing middleware should not be enabled on public paths without a deliberate review.
7
7
  rationale: Directory listings expose internal file names and make unintended resources easier to discover and fetch.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-16
13
+ title: Configuration
14
+ - kind: owasp
15
+ title: Secure Configuration Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
8
17
  tags:
9
18
  - security
10
19
  - express
@@ -35,3 +44,4 @@ emit:
35
44
  remediation:
36
45
  summary: Remove directory listing middleware or protect it behind strict authorization and path scoping.
37
46
 
47
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Set `HttpOnly` on Express session cookies
6
6
  summary: Express session and cookie-session configs should not disable the `HttpOnly` flag.
7
7
  rationale: Script-readable session cookies are easier to steal after an XSS bug.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-614
13
+ title: Sensitive Cookie Without Secure Attribute
14
+ - kind: owasp
15
+ title: Session Management Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - authentication
@@ -34,3 +49,4 @@ emit:
34
49
  summary: "`${captures.issue.text}` disables the `HttpOnly` cookie flag in Express session configuration."
35
50
  remediation:
36
51
  summary: "Set `httpOnly: true` so browser scripts cannot read the session cookie."
52
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Override Express cookie defaults
6
6
  summary: Express session cookie settings should not omit explicit lifetime, scope, and transport attributes.
7
7
  rationale: Implicit cookie defaults vary by middleware and make auth state harder to audit consistently.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-614
13
+ title: Sensitive Cookie Without Secure Attribute
14
+ - kind: owasp
15
+ title: Session Management Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - authentication
@@ -37,3 +52,4 @@ emit:
37
52
  remediation:
38
53
  summary: Set explicit cookie lifetime, scope, and transport attributes instead of relying on middleware defaults.
39
54
 
55
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Override Express session defaults
6
6
  summary: Express session middleware should not rely on default session naming and configuration.
7
7
  rationale: Default session settings make applications easier to fingerprint and often skip explicit hardening choices.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-614
13
+ title: Sensitive Cookie Without Secure Attribute
14
+ - kind: owasp
15
+ title: Session Management Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - authentication
@@ -35,3 +50,4 @@ emit:
35
50
  remediation:
36
51
  summary: Set an explicit session name and hardening options instead of relying on middleware defaults.
37
52
 
53
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Avoid returning raw errors from Express error middleware
6
6
  summary: Express error handlers should not send the err object directly to clients in production paths.
7
7
  rationale: Returning raw errors leaks stack traces, internal identifiers, and implementation details to attackers.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-209
13
+ title: Generation of Error Message Containing Sensitive Information
14
+ - kind: owasp
15
+ title: Error Handling Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - express
@@ -33,3 +48,4 @@ emit:
33
48
  summary: "${captures.issue.text} forwards the caught error directly to res.send or res.json."
34
49
  remediation:
35
50
  summary: Log detailed errors server-side and return stable, generic client responses with correlation identifiers.
51
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Set `Secure` on Express session cookies
6
6
  summary: Express session and cookie-session configs should not disable the `Secure` flag.
7
7
  rationale: Cookies sent over non-HTTPS transport are easier to intercept or replay.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-614
13
+ title: Sensitive Cookie Without Secure Attribute
14
+ - kind: owasp
15
+ title: Session Management Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - authentication
@@ -34,3 +49,4 @@ emit:
34
49
  summary: "`${captures.issue.text}` disables the `Secure` cookie flag in Express session configuration."
35
50
  remediation:
36
51
  summary: "Set `secure: true` and serve the cookie only over HTTPS."
52
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Apply Helmet to Express apps
6
6
  summary: Express apps should use Helmet or equivalent header hardening middleware.
7
7
  rationale: Helmet packages several response-header protections that are easy to miss or drift when managed ad hoc.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-16
13
+ title: Configuration
14
+ - kind: owasp
15
+ title: Secure Configuration Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - express
@@ -35,3 +50,4 @@ emit:
35
50
  remediation:
36
51
  summary: Apply `helmet()` or an equivalent set of header protections near application startup.
37
52
 
53
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Avoid request-driven model queries
6
6
  summary: Express handlers should not pass raw request objects into NoSQL filters, query helpers, or aggregation pipelines.
7
7
  rationale: Request-shaped filters, operators, or pipelines can expand query scope and inject unintended behavior.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-89
13
+ title: SQL Injection
14
+ - kind: owasp
15
+ title: SQL Injection Prevention Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - injection
@@ -34,3 +49,4 @@ emit:
34
49
  summary: "`${captures.issue.text}` receives request-controlled query input without an allowlisted query or pipeline shape."
35
50
  remediation:
36
51
  summary: Build the NoSQL query or aggregation pipeline from fixed fields or validated filter builders instead of passing request data directly.
52
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Avoid permissive Express session cookie scope
6
6
  summary: Express session cookies should not explicitly opt into cross-site or wildcard-style scope.
7
7
  rationale: Broad cookie scope increases where session cookies are sent and makes cross-site misuse harder to contain.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-614
13
+ title: Sensitive Cookie Without Secure Attribute
14
+ - kind: owasp
15
+ title: Session Management Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - authentication
@@ -36,3 +51,4 @@ emit:
36
51
  summary: "`${captures.issue.text}` explicitly widens session cookie scope with cross-site or wildcard-style settings."
37
52
  remediation:
38
53
  summary: Prefer exact cookie domains and `SameSite=Lax` or `Strict` unless a reviewed cross-site requirement exists.
54
+
@@ -0,0 +1,52 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ts.security.express-permissive-cors
5
+ title: Do not combine permissive CORS origins with credentials
6
+ summary: CORS middleware must not reflect every origin or use a wildcard while `credentials` is enabled.
7
+ rationale: Allowing credentials with wildcard or reflected origins lets untrusted sites read authenticated browser responses.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-942
13
+ title: Permissive Cross-domain Policy with Untrusted Domains
14
+ - kind: owasp
15
+ title: Cross-Origin Resource Sharing (CORS)
16
+ url: https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
23
+ tags:
24
+ - security
25
+ - express
26
+ - cors
27
+ - rules-catalog
28
+ stability: stable
29
+ appliesTo: block
30
+ scope:
31
+ languages:
32
+ - typescript
33
+ - javascript
34
+ match:
35
+ fact:
36
+ kind: security.express-permissive-cors
37
+ bind: issue
38
+ emit:
39
+ finding:
40
+ category: security.misconfiguration
41
+ severity: high
42
+ confidence: 0.9
43
+ tags:
44
+ - security
45
+ - express
46
+ - cors
47
+ message:
48
+ title: Restrict CORS origins when `${captures.issue.text}` sends credentials
49
+ summary: "`${captures.issue.text}` enables credentials with a wildcard, implicit, or reflected origin policy."
50
+ remediation:
51
+ summary: Use an explicit trusted-origin allowlist and disable credentials unless every allowed origin is intentional.
52
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Reduce Express fingerprinting
6
6
  summary: Express apps should disable `x-powered-by` or equivalent fingerprinting headers.
7
7
  rationale: Framework fingerprinting gives attackers unnecessary detail about the stack they are targeting.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-16
13
+ title: Configuration
14
+ - kind: owasp
15
+ title: Secure Configuration Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Secure_Configuration_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - express
@@ -35,3 +50,4 @@ emit:
35
50
  remediation:
36
51
  summary: Disable `x-powered-by` or use equivalent middleware to reduce framework fingerprinting.
37
52
 
53
+
@@ -5,6 +5,21 @@ metadata:
5
5
  title: Serve static assets before session middleware
6
6
  summary: Static assets should be mounted before session middleware when they do not need session state.
7
7
  rationale: Serving public assets after session middleware broadens the session surface and adds unnecessary auth-state handling to static traffic.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-614
13
+ title: Sensitive Cookie Without Secure Attribute
14
+ - kind: owasp
15
+ title: Session Management Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Node.js security best practices
19
+ url: https://nodejs.org/en/learn/getting-started/security-best-practices
20
+ - kind: url
21
+ title: Express production security best practices
22
+ url: https://expressjs.com/en/advanced/best-practice-security.html
8
23
  tags:
9
24
  - security
10
25
  - express
@@ -35,3 +50,4 @@ emit:
35
50
  remediation:
36
51
  summary: Mount `express.static()` before session middleware unless the static path genuinely requires session state.
37
52
 
53
+