@critiq/rules 0.1.0 → 0.3.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 (495) hide show
  1. package/README.md +3 -2
  2. package/catalog.yaml +1415 -0
  3. package/package.json +1 -1
  4. package/rules/cfn/cfn.correctness.attributedefinitions-keyschemas-mismatch.rule.yaml +49 -0
  5. package/rules/cfn/cfn.correctness.base64-validation-of-parameters.rule.yaml +49 -0
  6. package/rules/cfn/cfn.correctness.basic-cloudformation-resource-check.rule.yaml +49 -0
  7. package/rules/cfn/cfn.correctness.basic-cloudformation-template-configuration.rule.yaml +49 -0
  8. package/rules/cfn/cfn.correctness.cannot-reference-resources-in-the-conditions-block-of-the-template.rule.yaml +49 -0
  9. package/rules/cfn/cfn.correctness.check-at-least-one-essential-container-is-specified.rule.yaml +49 -0
  10. package/rules/cfn/cfn.correctness.check-deletionpolicy-values-for-resources.rule.yaml +49 -0
  11. package/rules/cfn/cfn.correctness.check-dependson-values-for-resources.rule.yaml +49 -0
  12. package/rules/cfn/cfn.correctness.check-ec2-ebs-properties.rule.yaml +49 -0
  13. package/rules/cfn/cfn.correctness.check-elastic-cache-redis-cluster-settings.rule.yaml +49 -0
  14. package/rules/cfn/cfn.correctness.check-events-rule-targets-are-less-than-or-equal-to-5.rule.yaml +49 -0
  15. package/rules/cfn/cfn.correctness.check-fargate-service-scheduling-strategy.rule.yaml +49 -0
  16. package/rules/cfn/cfn.correctness.check-fn-and-structure-for-validity.rule.yaml +49 -0
  17. package/rules/cfn/cfn.correctness.check-fn-equals-structure-for-validity.rule.yaml +49 -0
  18. package/rules/cfn/cfn.correctness.check-fn-if-structure-for-validity.rule.yaml +49 -0
  19. package/rules/cfn/cfn.correctness.check-fn-not-structure-for-validity.rule.yaml +49 -0
  20. package/rules/cfn/cfn.correctness.check-fn-or-structure-for-validity.rule.yaml +49 -0
  21. package/rules/cfn/cfn.correctness.check-for-subscriptionfilters-have-beyond-2-attachments-to-a-cloudwatch-log-group.rule.yaml +49 -0
  22. package/rules/cfn/cfn.correctness.check-if-a-json-object-is-within-size-limits.rule.yaml +49 -0
  23. package/rules/cfn/cfn.correctness.check-if-a-list-has-between-min-and-max-number-of-values-specified.rule.yaml +49 -0
  24. package/rules/cfn/cfn.correctness.check-if-a-list-has-duplicate-values.rule.yaml +49 -0
  25. package/rules/cfn/cfn.correctness.check-if-a-number-is-between-min-and-max.rule.yaml +49 -0
  26. package/rules/cfn/cfn.correctness.check-if-a-string-has-between-min-and-max-number-of-values-specified.rule.yaml +49 -0
  27. package/rules/cfn/cfn.correctness.check-if-eol-lambda-function-runtimes-are-used.rule.yaml +49 -0
  28. package/rules/cfn/cfn.correctness.check-if-properties-have-a-valid-value.rule.yaml +49 -0
  29. package/rules/cfn/cfn.correctness.check-if-property-values-adhere-to-a-specific-pattern.rule.yaml +49 -0
  30. package/rules/cfn/cfn.correctness.check-if-refing-to-a-iam-resource-with-path-set.rule.yaml +49 -0
  31. package/rules/cfn/cfn.correctness.check-if-refs-exist.rule.yaml +49 -0
  32. package/rules/cfn/cfn.correctness.check-if-serverless-resources-have-serverless-transform.rule.yaml +49 -0
  33. package/rules/cfn/cfn.correctness.check-if-the-referenced-conditions-are-defined.rule.yaml +49 -0
  34. package/rules/cfn/cfn.correctness.check-minimum-90-period-is-met-between-backupplan-cold-and-delete.rule.yaml +49 -0
  35. package/rules/cfn/cfn.correctness.check-properties-that-are-mutually-exclusive.rule.yaml +49 -0
  36. package/rules/cfn/cfn.correctness.check-properties-that-are-required-together.rule.yaml +49 -0
  37. package/rules/cfn/cfn.correctness.check-properties-that-need-at-least-one-of-a-list-of-properties.rule.yaml +49 -0
  38. package/rules/cfn/cfn.correctness.check-properties-that-need-only-one-of-a-list-of-properties.rule.yaml +49 -0
  39. package/rules/cfn/cfn.correctness.check-resource-properties-values.rule.yaml +49 -0
  40. package/rules/cfn/cfn.correctness.check-state-machine-definition-for-proper-syntax.rule.yaml +49 -0
  41. package/rules/cfn/cfn.correctness.check-that-modules-resources-are-valid.rule.yaml +49 -0
  42. package/rules/cfn/cfn.correctness.check-the-configuration-of-a-resources-updatepolicy.rule.yaml +49 -0
  43. package/rules/cfn/cfn.correctness.check-updatereplacepolicy-values-for-resources.rule.yaml +49 -0
  44. package/rules/cfn/cfn.correctness.check-values-of-properties-for-valid-refs-and-getatts.rule.yaml +49 -0
  45. package/rules/cfn/cfn.correctness.cidr-validation-of-parameters.rule.yaml +49 -0
  46. package/rules/cfn/cfn.correctness.cloudfront-aliases.rule.yaml +49 -0
  47. package/rules/cfn/cfn.correctness.codepipeline-stage-actions.rule.yaml +49 -0
  48. package/rules/cfn/cfn.correctness.codepipeline-stages.rule.yaml +49 -0
  49. package/rules/cfn/cfn.correctness.conditions-have-appropriate-properties.rule.yaml +49 -0
  50. package/rules/cfn/cfn.correctness.default-value-cannot-use-refs.rule.yaml +49 -0
  51. package/rules/cfn/cfn.correctness.default-value-is-within-parameter-constraints.rule.yaml +49 -0
  52. package/rules/cfn/cfn.correctness.error-processing-rule-on-the-template.rule.yaml +49 -0
  53. package/rules/cfn/cfn.correctness.findinmap-validation-of-configuration.rule.yaml +49 -0
  54. package/rules/cfn/cfn.correctness.getatt-validation-of-parameters.rule.yaml +49 -0
  55. package/rules/cfn/cfn.correctness.getaz-validation-of-parameters.rule.yaml +49 -0
  56. package/rules/cfn/cfn.correctness.importvalue-validation-of-parameters.rule.yaml +49 -0
  57. package/rules/cfn/cfn.correctness.join-validation-of-parameters.rule.yaml +49 -0
  58. package/rules/cfn/cfn.correctness.length-validation-of-parameters.rule.yaml +49 -0
  59. package/rules/cfn/cfn.correctness.mapping-attribute-limit-not-exceeded.rule.yaml +49 -0
  60. package/rules/cfn/cfn.correctness.mapping-keys-are-strings-and-alphanumeric.rule.yaml +49 -0
  61. package/rules/cfn/cfn.correctness.mapping-limit-not-exceeded.rule.yaml +49 -0
  62. package/rules/cfn/cfn.correctness.mapping-name-limit-not-exceeded.rule.yaml +49 -0
  63. package/rules/cfn/cfn.correctness.mappings-are-appropriately-configured.rule.yaml +49 -0
  64. package/rules/cfn/cfn.correctness.mappings-have-appropriate-names.rule.yaml +49 -0
  65. package/rules/cfn/cfn.correctness.metadata-interface-have-appropriate-properties.rule.yaml +49 -0
  66. package/rules/cfn/cfn.correctness.output-description-limit-not-exceeded.rule.yaml +49 -0
  67. package/rules/cfn/cfn.correctness.output-limit-not-exceeded.rule.yaml +49 -0
  68. package/rules/cfn/cfn.correctness.output-name-limit-not-exceeded.rule.yaml +49 -0
  69. package/rules/cfn/cfn.correctness.outputs-descriptions-can-only-be-strings.rule.yaml +49 -0
  70. package/rules/cfn/cfn.correctness.outputs-have-appropriate-names.rule.yaml +49 -0
  71. package/rules/cfn/cfn.correctness.outputs-have-appropriate-properties.rule.yaml +49 -0
  72. package/rules/cfn/cfn.correctness.outputs-have-required-properties.rule.yaml +49 -0
  73. package/rules/cfn/cfn.correctness.outputs-have-values-of-strings.rule.yaml +49 -0
  74. package/rules/cfn/cfn.correctness.parameter-limit-not-exceeded.rule.yaml +49 -0
  75. package/rules/cfn/cfn.correctness.parameter-name-limit-not-exceeded.rule.yaml +49 -0
  76. package/rules/cfn/cfn.correctness.parameter-value-limit-not-exceeded.rule.yaml +49 -0
  77. package/rules/cfn/cfn.correctness.parameters-have-appropriate-names.rule.yaml +49 -0
  78. package/rules/cfn/cfn.correctness.parameters-have-appropriate-properties.rule.yaml +49 -0
  79. package/rules/cfn/cfn.correctness.parameters-have-appropriate-type.rule.yaml +49 -0
  80. package/rules/cfn/cfn.correctness.property-is-required-based-on-another-properties-value.rule.yaml +49 -0
  81. package/rules/cfn/cfn.correctness.property-is-unwanted-based-on-another-properties-value.rule.yaml +49 -0
  82. package/rules/cfn/cfn.correctness.rds-instance-type-is-compatible-with-the-rds-type.rule.yaml +49 -0
  83. package/rules/cfn/cfn.correctness.recordset-hostedzonename-is-a-superdomain-of-name.rule.yaml +49 -0
  84. package/rules/cfn/cfn.correctness.ref-validation-of-value.rule.yaml +49 -0
  85. package/rules/cfn/cfn.correctness.required-resource-properties-are-missing.rule.yaml +49 -0
  86. package/rules/cfn/cfn.correctness.resource-dependencies-are-not-circular.rule.yaml +49 -0
  87. package/rules/cfn/cfn.correctness.resource-ec2-security-group-ingress-properties.rule.yaml +49 -0
  88. package/rules/cfn/cfn.correctness.resource-elb-properties.rule.yaml +49 -0
  89. package/rules/cfn/cfn.correctness.resource-limit-not-exceeded.rule.yaml +49 -0
  90. package/rules/cfn/cfn.correctness.resource-name-limit-not-exceeded.rule.yaml +49 -0
  91. package/rules/cfn/cfn.correctness.resource-properties-are-invalid.rule.yaml +49 -0
  92. package/rules/cfn/cfn.correctness.resource-schema.rule.yaml +49 -0
  93. package/rules/cfn/cfn.correctness.resource-subnetroutetableassociation-properties.rule.yaml +49 -0
  94. package/rules/cfn/cfn.correctness.resources-have-appropriate-names.rule.yaml +49 -0
  95. package/rules/cfn/cfn.correctness.select-validation-of-parameters.rule.yaml +49 -0
  96. package/rules/cfn/cfn.correctness.snapstart-supports-the-configured-runtime.rule.yaml +49 -0
  97. package/rules/cfn/cfn.correctness.split-validation-of-parameters.rule.yaml +49 -0
  98. package/rules/cfn/cfn.correctness.sub-is-required-if-a-variable-is-used-in-a-string.rule.yaml +49 -0
  99. package/rules/cfn/cfn.correctness.sub-validation-of-parameters.rule.yaml +49 -0
  100. package/rules/cfn/cfn.correctness.template-description-can-only-be-a-string.rule.yaml +49 -0
  101. package/rules/cfn/cfn.correctness.template-description-limit.rule.yaml +49 -0
  102. package/rules/cfn/cfn.correctness.template-size-limit.rule.yaml +49 -0
  103. package/rules/cfn/cfn.correctness.tojsonstring-validation-of-parameters.rule.yaml +49 -0
  104. package/rules/cfn/cfn.correctness.unique-resource-and-parameter-names.rule.yaml +49 -0
  105. package/rules/cfn/cfn.correctness.validate-accesscontrol-are-set-with-ownershipcontrols.rule.yaml +49 -0
  106. package/rules/cfn/cfn.correctness.validate-aws-event-scheduleexpression-format.rule.yaml +49 -0
  107. package/rules/cfn/cfn.correctness.validate-parameters-for-in-a-nested-stack.rule.yaml +49 -0
  108. package/rules/cfn/cfn.correctness.validate-route53-recordsets.rule.yaml +49 -0
  109. package/rules/cfn/cfn.correctness.validate-the-configuration-of-the-metadata-section.rule.yaml +49 -0
  110. package/rules/cfn/cfn.correctness.validates-foreach-functions.rule.yaml +49 -0
  111. package/rules/cfn/cfn.correctness.validation-not-function-configuration.rule.yaml +49 -0
  112. package/rules/cfn/cfn.correctness.validationdomain-is-superdomain-of-domainname.rule.yaml +49 -0
  113. package/rules/cfn/cfn.maintainability.arns-should-use-correctly-placed-pseudo-parameters.rule.yaml +49 -0
  114. package/rules/cfn/cfn.maintainability.availability-zone-parameters-should-not-be-hardcoded.rule.yaml +49 -0
  115. package/rules/cfn/cfn.maintainability.check-iam-resource-policies-syntax.rule.yaml +49 -0
  116. package/rules/cfn/cfn.maintainability.check-if-a-list-that-allows-duplicates-has-any-duplicates.rule.yaml +49 -0
  117. package/rules/cfn/cfn.maintainability.check-if-conditions-are-used.rule.yaml +49 -0
  118. package/rules/cfn/cfn.maintainability.check-if-eol-lambda-function-runtimes-are-used-w2531.rule.yaml +49 -0
  119. package/rules/cfn/cfn.maintainability.check-if-imageid-parameters-have-the-correct-type.rule.yaml +49 -0
  120. package/rules/cfn/cfn.maintainability.check-if-mappings-are-used.rule.yaml +49 -0
  121. package/rules/cfn/cfn.maintainability.check-if-parameters-are-used.rule.yaml +49 -0
  122. package/rules/cfn/cfn.maintainability.check-if-parameters-have-a-valid-value-based-on-an-allowed-pattern.rule.yaml +49 -0
  123. package/rules/cfn/cfn.maintainability.check-if-parameters-have-a-valid-value.rule.yaml +49 -0
  124. package/rules/cfn/cfn.maintainability.check-obsolete-dependson-configuration-for-resources.rule.yaml +49 -0
  125. package/rules/cfn/cfn.maintainability.check-outputs-using-importvalue.rule.yaml +49 -0
  126. package/rules/cfn/cfn.maintainability.check-required-properties-for-lambda-if-the-deployment-package-is-a-zip-file.rule.yaml +49 -0
  127. package/rules/cfn/cfn.maintainability.check-resources-with-auto-expiring-content-have-explicit-retention-period.rule.yaml +49 -0
  128. package/rules/cfn/cfn.maintainability.check-resources-with-updatereplacepolicy-deletionpolicy-have-both.rule.yaml +49 -0
  129. package/rules/cfn/cfn.maintainability.check-stateful-resources-have-a-set-updatereplacepolicy-deletionpolicy.rule.yaml +49 -0
  130. package/rules/cfn/cfn.maintainability.checks-for-legacy-instance-type-generations.rule.yaml +49 -0
  131. package/rules/cfn/cfn.maintainability.findinmap-keys-exist-in-the-map.rule.yaml +49 -0
  132. package/rules/cfn/cfn.maintainability.fn-equals-will-always-return-true-or-false.rule.yaml +49 -0
  133. package/rules/cfn/cfn.maintainability.mapping-attribute-limit.rule.yaml +49 -0
  134. package/rules/cfn/cfn.maintainability.mapping-limit.rule.yaml +49 -0
  135. package/rules/cfn/cfn.maintainability.mapping-name-limit.rule.yaml +49 -0
  136. package/rules/cfn/cfn.maintainability.metadata-interface-parameters-exist.rule.yaml +49 -0
  137. package/rules/cfn/cfn.maintainability.output-description-limit.rule.yaml +49 -0
  138. package/rules/cfn/cfn.maintainability.output-limit.rule.yaml +49 -0
  139. package/rules/cfn/cfn.maintainability.output-name-limit.rule.yaml +49 -0
  140. package/rules/cfn/cfn.maintainability.parameter-limit.rule.yaml +49 -0
  141. package/rules/cfn/cfn.maintainability.parameter-memory-size-attributes-should-have-max-and-min.rule.yaml +49 -0
  142. package/rules/cfn/cfn.maintainability.parameter-name-limit.rule.yaml +49 -0
  143. package/rules/cfn/cfn.maintainability.parameter-value-limit.rule.yaml +49 -0
  144. package/rules/cfn/cfn.maintainability.ref-getatt-to-resource-that-is-available-when-conditions-are-applied.rule.yaml +49 -0
  145. package/rules/cfn/cfn.maintainability.resource-limit.rule.yaml +49 -0
  146. package/rules/cfn/cfn.maintainability.resource-name-limit.rule.yaml +49 -0
  147. package/rules/cfn/cfn.maintainability.sub-isn-t-needed-if-it-doesn-t-have-a-variable-defined.rule.yaml +49 -0
  148. package/rules/cfn/cfn.maintainability.sub-validation-of-parameters-w1019.rule.yaml +49 -0
  149. package/rules/cfn/cfn.maintainability.template-description-limit-i1003.rule.yaml +49 -0
  150. package/rules/cfn/cfn.maintainability.template-size-limit-i1002.rule.yaml +49 -0
  151. package/rules/cfn/cfn.maintainability.use-sub-instead-of-join.rule.yaml +49 -0
  152. package/rules/cfn/cfn.maintainability.validate-that-snapstart-is-configured-for-java11-runtimes.rule.yaml +49 -0
  153. package/rules/cfn/cfn.maintainability.validate-that-snapstart-is-properly-configured.rule.yaml +49 -0
  154. package/rules/cfn/cfn.maintainability.warn-when-properties-are-configured-to-only-work-with-the-package-command.rule.yaml +49 -0
  155. package/rules/cfn/cfn.security.check-dynamic-references-secure-strings-are-in-supported-locations.rule.yaml +53 -0
  156. package/rules/cfn/cfn.security.check-for-noecho-references.rule.yaml +53 -0
  157. package/rules/cfn/cfn.security.check-iam-permission-configuration.rule.yaml +53 -0
  158. package/rules/cfn/cfn.security.check-if-iam-policies-are-properly-configured.rule.yaml +53 -0
  159. package/rules/cfn/cfn.security.check-if-password-properties-are-correctly-configured.rule.yaml +53 -0
  160. package/rules/cfn/cfn.security.controlling-access-to-an-s3-bucket-should-be-done-with-bucket-policies.rule.yaml +53 -0
  161. package/rules/go/go.correctness.defer-close-before-check.rule.yaml +44 -0
  162. package/rules/go/go.correctness.defer-in-loop.rule.yaml +47 -0
  163. package/rules/go/go.correctness.nil-context-passed.rule.yaml +43 -0
  164. package/rules/go/go.correctness.nil-map-assignment.rule.yaml +42 -0
  165. package/rules/go/go.correctness.time-tick-leak.rule.yaml +44 -0
  166. package/rules/go/go.correctness.unused-append-result.rule.yaml +43 -0
  167. package/rules/go/go.correctness.waitgroup-add-in-goroutine.rule.yaml +45 -0
  168. package/rules/go/go.security.bind-all-interfaces.rule.yaml +57 -0
  169. package/rules/go/go.security.echo-sensitive-binding-without-validation.rule.yaml +10 -0
  170. package/rules/go/go.security.echo-unsafe-multipart-upload.rule.yaml +10 -0
  171. package/rules/go/go.security.fiber-sensitive-binding-without-validation.rule.yaml +10 -0
  172. package/rules/go/go.security.fiber-unsafe-multipart-upload.rule.yaml +10 -0
  173. package/rules/go/go.security.gin-sensitive-binding-without-validation.rule.yaml +10 -0
  174. package/rules/go/go.security.gin-trust-all-proxies.rule.yaml +10 -0
  175. package/rules/go/go.security.gin-wildcard-cors-with-credentials.rule.yaml +10 -0
  176. package/rules/go/go.security.insecure-rand-seed.rule.yaml +55 -0
  177. package/rules/go/go.security.insecure-ssh-host-key.rule.yaml +57 -0
  178. package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +56 -0
  179. package/rules/go/go.security.insecure-temp-file.rule.yaml +57 -0
  180. package/rules/go/go.security.jwt-without-verification.rule.yaml +56 -0
  181. package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +10 -0
  182. package/rules/go/go.security.pprof-exposed.rule.yaml +56 -0
  183. package/rules/go/go.security.sensitive-data-egress.rule.yaml +10 -0
  184. package/rules/go/go.security.tar-path-traversal.rule.yaml +10 -0
  185. package/rules/go/go.security.template-unescaped-request-value.rule.yaml +10 -0
  186. package/rules/go/go.security.tls-missing-min-version.rule.yaml +55 -0
  187. package/rules/go/go.security.unsafe-package-import.rule.yaml +55 -0
  188. package/rules/go/go.security.weak-bcrypt-cost.rule.yaml +56 -0
  189. package/rules/go/go.security.weak-crypto-import.rule.yaml +57 -0
  190. package/rules/go/go.security.weak-rsa-key-size.rule.yaml +57 -0
  191. package/rules/go/go.security.weak-tls-cipher.rule.yaml +56 -0
  192. package/rules/java/java.correctness.catch-null-pointer.rule.yaml +40 -0
  193. package/rules/java/java.correctness.empty-catch.rule.yaml +40 -0
  194. package/rules/java/java.correctness.equals-on-array.rule.yaml +40 -0
  195. package/rules/java/java.correctness.return-in-finally.rule.yaml +40 -0
  196. package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +40 -0
  197. package/rules/java/java.correctness.unsafe-optional-get.rule.yaml +40 -0
  198. package/rules/java/java.security.android-screenshot-exposure.rule.yaml +13 -0
  199. package/rules/java/java.security.android-world-readable-mode.rule.yaml +13 -0
  200. package/rules/java/java.security.hibernate-sql-concatenation.rule.yaml +62 -0
  201. package/rules/java/java.security.insecure-cipher-mode.rule.yaml +52 -0
  202. package/rules/java/java.security.insecure-network-protocol.rule.yaml +52 -0
  203. package/rules/java/java.security.insecure-ssl-context.rule.yaml +52 -0
  204. package/rules/java/java.security.jpa-concatenated-query.rule.yaml +13 -0
  205. package/rules/java/java.security.jwt-without-verification.rule.yaml +53 -0
  206. package/rules/java/java.security.null-cipher.rule.yaml +52 -0
  207. package/rules/java/java.security.permissive-cors.rule.yaml +53 -0
  208. package/rules/java/java.security.predictable-securerandom.rule.yaml +59 -0
  209. package/rules/java/java.security.reflected-output-from-request.rule.yaml +10 -0
  210. package/rules/java/java.security.servlet-insecure-cookie.rule.yaml +13 -0
  211. package/rules/java/java.security.shell-runtime-exec.rule.yaml +58 -0
  212. package/rules/java/java.security.spring-actuator-health-details-always.rule.yaml +13 -0
  213. package/rules/java/java.security.spring-actuator-sensitive-exposure.rule.yaml +13 -0
  214. package/rules/java/java.security.spring-csrf-globally-disabled.rule.yaml +13 -0
  215. package/rules/java/java.security.spring-debug-exposure.rule.yaml +13 -0
  216. package/rules/java/java.security.spring-permit-all-default.rule.yaml +13 -0
  217. package/rules/java/java.security.spring-webmvc-unrestricted-data-binding.rule.yaml +13 -0
  218. package/rules/java/java.security.template-unescaped-user-output.rule.yaml +10 -0
  219. package/rules/java/java.security.trust-all-certificates.rule.yaml +52 -0
  220. package/rules/java/java.security.unsafe-jackson-deserialization.rule.yaml +59 -0
  221. package/rules/java/java.security.weak-rsa-key-size.rule.yaml +54 -0
  222. package/rules/java/java.security.xxe-document-builder.rule.yaml +59 -0
  223. package/rules/java/java.security.xxe-xml-input-factory.rule.yaml +59 -0
  224. package/rules/php/php.correctness.abstract-method-outside-abstract-class.rule.yaml +36 -0
  225. package/rules/php/php.correctness.break-continue-outside-loop.rule.yaml +36 -0
  226. package/rules/php/php.correctness.case-insensitive-define.rule.yaml +36 -0
  227. package/rules/php/php.correctness.default-parameter-not-last.rule.yaml +36 -0
  228. package/rules/php/php.correctness.deprecated-filter-constant.rule.yaml +36 -0
  229. package/rules/php/php.correctness.deprecated-libxml-entity-loader.rule.yaml +36 -0
  230. package/rules/php/php.correctness.deprecated-unset-cast.rule.yaml +36 -0
  231. package/rules/php/php.correctness.duplicate-array-key.rule.yaml +36 -0
  232. package/rules/php/php.correctness.duplicate-declaration.rule.yaml +36 -0
  233. package/rules/php/php.correctness.empty-array-literal-slot.rule.yaml +36 -0
  234. package/rules/php/php.correctness.empty-bracket-array-access.rule.yaml +36 -0
  235. package/rules/php/php.correctness.empty-code-block.rule.yaml +36 -0
  236. package/rules/php/php.correctness.empty-function-body.rule.yaml +36 -0
  237. package/rules/php/php.correctness.error-suppression-operator.rule.yaml +36 -0
  238. package/rules/php/php.correctness.function-comparison.rule.yaml +36 -0
  239. package/rules/php/php.correctness.invalid-cookie-options.rule.yaml +36 -0
  240. package/rules/php/php.correctness.invalid-regex-literal.rule.yaml +36 -0
  241. package/rules/php/php.correctness.missing-member-visibility.rule.yaml +36 -0
  242. package/rules/php/php.correctness.nested-function-declaration.rule.yaml +36 -0
  243. package/rules/php/php.correctness.nested-switch.rule.yaml +36 -0
  244. package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +36 -0
  245. package/rules/php/php.correctness.redundant-string-cast-concat.rule.yaml +36 -0
  246. package/rules/php/php.correctness.self-assignment.rule.yaml +36 -0
  247. package/rules/php/php.correctness.switch-multiple-default.rule.yaml +36 -0
  248. package/rules/php/php.correctness.todo-fixme-marker.rule.yaml +36 -0
  249. package/rules/php/php.correctness.unknown-magic-method.rule.yaml +36 -0
  250. package/rules/php/php.correctness.unreachable-after-return.rule.yaml +36 -0
  251. package/rules/php/php.correctness.useless-post-increment.rule.yaml +36 -0
  252. package/rules/php/php.correctness.useless-unset.rule.yaml +36 -0
  253. package/rules/php/php.performance.expensive-loop-condition.rule.yaml +36 -0
  254. package/rules/php/php.security.debug-function-exposure.rule.yaml +55 -0
  255. package/rules/php/php.security.insecure-cors-wildcard-with-credentials.rule.yaml +10 -0
  256. package/rules/php/php.security.insecure-mail-or-file-transport.rule.yaml +10 -0
  257. package/rules/php/php.security.insecure-session-id-generation.rule.yaml +51 -0
  258. package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +10 -0
  259. package/rules/php/php.security.laravel-sensitive-csrf-exclusion.rule.yaml +13 -0
  260. package/rules/php/php.security.laravel-unsafe-blade-output.rule.yaml +13 -0
  261. package/rules/php/php.security.laravel-unsafe-mass-assignment.rule.yaml +13 -0
  262. package/rules/php/php.security.no-dynamic-eval.rule.yaml +52 -0
  263. package/rules/php/php.security.sensitive-data-egress.rule.yaml +10 -0
  264. package/rules/php/php.security.symfony-csrf-disabled.rule.yaml +13 -0
  265. package/rules/php/php.security.symfony-debug-exposure.rule.yaml +13 -0
  266. package/rules/php/php.security.unsafe-file-upload-handling.rule.yaml +10 -0
  267. package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +52 -0
  268. package/rules/php/php.security.unsafe-new-static.rule.yaml +42 -0
  269. package/rules/php/php.security.weak-cipher.rule.yaml +51 -0
  270. package/rules/php/php.security.wordpress-missing-nonce-or-capability.rule.yaml +13 -0
  271. package/rules/php/php.security.wordpress-unprepared-sql.rule.yaml +13 -0
  272. package/rules/php/php.security.xml-external-entity.rule.yaml +53 -0
  273. package/rules/python/py.correctness.assert-on-tuple.rule.yaml +33 -0
  274. package/rules/python/py.correctness.bare-except.rule.yaml +33 -0
  275. package/rules/python/py.correctness.broad-exception-handler.rule.yaml +33 -0
  276. package/rules/python/py.correctness.dangerous-mutable-default.rule.yaml +33 -0
  277. package/rules/python/py.correctness.duplicate-dict-key.rule.yaml +33 -0
  278. package/rules/python/py.security.bind-all-interfaces.rule.yaml +55 -0
  279. package/rules/python/py.security.debugger-import.rule.yaml +55 -0
  280. package/rules/python/py.security.django-csrf-exempt-state-changing.rule.yaml +13 -0
  281. package/rules/python/py.security.django-format-html-unsafe.rule.yaml +56 -0
  282. package/rules/python/py.security.django-mark-safe.rule.yaml +56 -0
  283. package/rules/python/py.security.django-missing-csrf-middleware.rule.yaml +13 -0
  284. package/rules/python/py.security.django-security-middleware-missing.rule.yaml +60 -0
  285. package/rules/python/py.security.django-unsafe-production-settings.rule.yaml +13 -0
  286. package/rules/python/py.security.drf-allow-any-default.rule.yaml +13 -0
  287. package/rules/python/py.security.drf-allow-any-unsafe-method.rule.yaml +13 -0
  288. package/rules/python/py.security.dynamic-code-execution.rule.yaml +55 -0
  289. package/rules/python/py.security.fastapi-insecure-cors.rule.yaml +13 -0
  290. package/rules/python/py.security.flask-debug-enabled.rule.yaml +56 -0
  291. package/rules/python/py.security.flask-missing-upload-body-limit.rule.yaml +13 -0
  292. package/rules/python/py.security.flask-unsafe-html-output.rule.yaml +13 -0
  293. package/rules/python/py.security.flask-unsafe-upload-filename.rule.yaml +13 -0
  294. package/rules/python/py.security.insecure-temp-file.rule.yaml +55 -0
  295. package/rules/python/py.security.insecure-yaml-load.rule.yaml +55 -0
  296. package/rules/python/py.security.jinja-autoescape-disabled.rule.yaml +58 -0
  297. package/rules/python/py.security.subprocess-shell-enabled.rule.yaml +55 -0
  298. package/rules/ruby/ruby.bug-risk.assignment-in-condition.rule.yaml +42 -0
  299. package/rules/ruby/ruby.bug-risk.deprecated-uri-escape.rule.yaml +42 -0
  300. package/rules/ruby/ruby.bug-risk.division-by-zero.rule.yaml +42 -0
  301. package/rules/ruby/ruby.bug-risk.duplicate-hash-keys.rule.yaml +42 -0
  302. package/rules/ruby/ruby.bug-risk.exception-class-overwritten.rule.yaml +42 -0
  303. package/rules/ruby/ruby.bug-risk.raw-sql-without-squish.rule.yaml +42 -0
  304. package/rules/ruby/ruby.security.debugger-call.rule.yaml +53 -0
  305. package/rules/ruby/ruby.security.dynamic-code-execution.rule.yaml +54 -0
  306. package/rules/ruby/ruby.security.insecure-json-load.rule.yaml +53 -0
  307. package/rules/ruby/ruby.security.kernel-open.rule.yaml +53 -0
  308. package/rules/ruby/ruby.security.plaintext-password-in-callback.rule.yaml +46 -0
  309. package/rules/ruby/ruby.security.rails-csrf-disabled.rule.yaml +13 -0
  310. package/rules/ruby/ruby.security.rails-detailed-exceptions-enabled.rule.yaml +13 -0
  311. package/rules/ruby/ruby.security.rails-link-to-blank-without-noopener.rule.yaml +48 -0
  312. package/rules/ruby/ruby.security.rails-open-redirect.rule.yaml +13 -0
  313. package/rules/ruby/ruby.security.rails-output-unsafe.rule.yaml +47 -0
  314. package/rules/ruby/ruby.security.rails-unsafe-html-output.rule.yaml +13 -0
  315. package/rules/ruby/ruby.security.rails-unsafe-render.rule.yaml +13 -0
  316. package/rules/ruby/ruby.security.rails-unsafe-session-or-cookie-store.rule.yaml +13 -0
  317. package/rules/ruby/ruby.security.rails-unsafe-strong-parameters.rule.yaml +13 -0
  318. package/rules/ruby/ruby.security.sensitive-data-egress.rule.yaml +10 -0
  319. package/rules/ruby/ruby.security.sidekiq-web-unauthenticated-mount.rule.yaml +10 -0
  320. package/rules/rust/rust.correctness.block-on-in-async.rule.yaml +48 -0
  321. package/rules/rust/rust.correctness.forget-join-handle.rule.yaml +48 -0
  322. package/rules/rust/rust.correctness.mutex-held-across-await.rule.yaml +48 -0
  323. package/rules/rust/rust.correctness.std-mutex-in-async-fn.rule.yaml +48 -0
  324. package/rules/rust/rust.correctness.thread-sleep-in-async.rule.yaml +48 -0
  325. package/rules/rust/rust.correctness.unbounded-channel.rule.yaml +49 -0
  326. package/rules/rust/rust.correctness.unchecked-index.rule.yaml +46 -0
  327. package/rules/rust/rust.security.actix-wildcard-cors-with-credentials.rule.yaml +13 -0
  328. package/rules/rust/rust.security.axum-body-limit-disabled.rule.yaml +13 -0
  329. package/rules/rust/rust.security.axum-insecure-cors-with-credentials.rule.yaml +13 -0
  330. package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +57 -0
  331. package/rules/rust/rust.security.insecure-ssh-host-key.rule.yaml +57 -0
  332. package/rules/rust/rust.security.insecure-ssl-protocol.rule.yaml +57 -0
  333. package/rules/rust/rust.security.insecure-temp-file.rule.yaml +57 -0
  334. package/rules/rust/rust.security.insecure-yaml-load.rule.yaml +57 -0
  335. package/rules/rust/rust.security.jwt-without-verification.rule.yaml +57 -0
  336. package/rules/rust/rust.security.panic-in-async-handler.rule.yaml +57 -0
  337. package/rules/rust/rust.security.rocket-panic-prone-request-handler.rule.yaml +13 -0
  338. package/rules/rust/rust.security.rocket-unsafe-template-output.rule.yaml +13 -0
  339. package/rules/rust/rust.security.shell-command-spawn.rule.yaml +57 -0
  340. package/rules/rust/rust.security.sqlx-diesel-raw-interpolated-query.rule.yaml +13 -0
  341. package/rules/rust/rust.security.template-unescaped-request-value.rule.yaml +10 -0
  342. package/rules/rust/rust.security.tls-missing-min-version.rule.yaml +57 -0
  343. package/rules/rust/rust.security.warp-blocking-or-panic-in-async-handler.rule.yaml +13 -0
  344. package/rules/rust/rust.security.weak-crypto-import.rule.yaml +55 -0
  345. package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +57 -0
  346. package/rules/rust/rust.security.weak-tls-cipher.rule.yaml +57 -0
  347. package/rules/shared/security.archive-path-traversal.rule.yaml +10 -0
  348. package/rules/shared/security.external-file-upload.rule.yaml +10 -0
  349. package/rules/shared/security.insecure-http-transport.rule.yaml +10 -0
  350. package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +10 -0
  351. package/rules/shared/security.no-hardcoded-credentials.rule.yaml +10 -0
  352. package/rules/shared/security.no-request-path-file-read.rule.yaml +10 -0
  353. package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +10 -0
  354. package/rules/shared/security.no-sql-interpolation.rule.yaml +10 -0
  355. package/rules/shared/security.permissive-file-permissions.rule.yaml +10 -0
  356. package/rules/shared/security.sensitive-data-egress.rule.yaml +10 -0
  357. package/rules/shared/security.tls-verification-disabled.rule.yaml +10 -0
  358. package/rules/shared/security.unsafe-deserialization.rule.yaml +10 -0
  359. package/rules/shared/security.weak-hash-algorithm.rule.yaml +10 -0
  360. package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +35 -0
  361. package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +35 -0
  362. package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +35 -0
  363. package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +35 -0
  364. package/rules/typescript/ts.correctness.for-in-on-array.rule.yaml +35 -0
  365. package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +32 -0
  366. package/rules/typescript/ts.correctness.invalid-await-expression.rule.yaml +32 -0
  367. package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +35 -0
  368. package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +32 -0
  369. package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +35 -0
  370. package/rules/typescript/ts.correctness.no-floating-promise-in-function.rule.yaml +32 -0
  371. package/rules/typescript/ts.correctness.no-misused-promises.rule.yaml +32 -0
  372. package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +35 -0
  373. package/rules/typescript/ts.correctness.this-before-super.rule.yaml +35 -0
  374. package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +32 -0
  375. package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +35 -0
  376. package/rules/typescript/ts.next.server-action-missing-local-auth.rule.yaml +13 -0
  377. package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +32 -0
  378. package/rules/typescript/ts.quality.no-empty-function.rule.yaml +32 -0
  379. package/rules/typescript/ts.react.no-bind-in-jsx-props.rule.yaml +36 -0
  380. package/rules/typescript/ts.react.no-children-prop.rule.yaml +34 -0
  381. package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +34 -0
  382. package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +34 -0
  383. package/rules/typescript/ts.react.no-jsx-props-spread.rule.yaml +35 -0
  384. package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +34 -0
  385. package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +34 -0
  386. package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +46 -0
  387. package/rules/typescript/ts.react.no-this-in-function-component.rule.yaml +34 -0
  388. package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +44 -0
  389. package/rules/typescript/ts.security.ajv-insecure-configuration.rule.yaml +10 -0
  390. package/rules/typescript/ts.security.angular-dom-sanitizer-bypass-untrusted-input.rule.yaml +13 -0
  391. package/rules/typescript/ts.security.apollo-server-csrf-disabled.rule.yaml +16 -0
  392. package/rules/typescript/ts.security.apollo-server-graphql-dev-tooling-exposure.rule.yaml +16 -0
  393. package/rules/typescript/ts.security.apollo-server-introspection-exposure.rule.yaml +16 -0
  394. package/rules/typescript/ts.security.apollo-server-missing-query-limits.rule.yaml +16 -0
  395. package/rules/typescript/ts.security.astro-vite-public-secret-define.rule.yaml +13 -0
  396. package/rules/typescript/ts.security.bind-to-all-interfaces.rule.yaml +10 -0
  397. package/rules/typescript/ts.security.browser-token-storage.rule.yaml +10 -0
  398. package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +10 -0
  399. package/rules/typescript/ts.security.dangerously-set-inner-html.rule.yaml +10 -0
  400. package/rules/typescript/ts.security.datadog-browser-track-user-interactions.rule.yaml +10 -0
  401. package/rules/typescript/ts.security.debug-mode-enabled.rule.yaml +10 -0
  402. package/rules/typescript/ts.security.debug-statement-in-source.rule.yaml +10 -0
  403. package/rules/typescript/ts.security.dynamodb-query-injection.rule.yaml +10 -0
  404. package/rules/typescript/ts.security.electron-dangerous-webpreferences.rule.yaml +10 -0
  405. package/rules/typescript/ts.security.electron-insecure-local-state.rule.yaml +10 -0
  406. package/rules/typescript/ts.security.electron-missing-ipc-origin-check.rule.yaml +10 -0
  407. package/rules/typescript/ts.security.electron-shell-open-external-unvalidated.rule.yaml +13 -0
  408. package/rules/typescript/ts.security.exposed-directory-listing.rule.yaml +10 -0
  409. package/rules/typescript/ts.security.express-cookie-missing-http-only.rule.yaml +16 -0
  410. package/rules/typescript/ts.security.express-default-cookie-config.rule.yaml +16 -0
  411. package/rules/typescript/ts.security.express-default-session-config.rule.yaml +16 -0
  412. package/rules/typescript/ts.security.express-error-handler-information-disclosure.rule.yaml +16 -0
  413. package/rules/typescript/ts.security.express-insecure-cookie.rule.yaml +16 -0
  414. package/rules/typescript/ts.security.express-missing-helmet.rule.yaml +16 -0
  415. package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -0
  416. package/rules/typescript/ts.security.express-permissive-cookie-config.rule.yaml +16 -0
  417. package/rules/typescript/ts.security.express-permissive-cors.rule.yaml +52 -0
  418. package/rules/typescript/ts.security.express-reduce-fingerprint.rule.yaml +16 -0
  419. package/rules/typescript/ts.security.express-static-assets-after-session.rule.yaml +16 -0
  420. package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +16 -0
  421. package/rules/typescript/ts.security.express-unbounded-body-parser.rule.yaml +16 -0
  422. package/rules/typescript/ts.security.express-user-controlled-static-mount.rule.yaml +16 -0
  423. package/rules/typescript/ts.security.external-file-upload.rule.yaml +10 -0
  424. package/rules/typescript/ts.security.fastify-excessive-body-limit.rule.yaml +16 -0
  425. package/rules/typescript/ts.security.fastify-public-bind-without-trust-proxy.rule.yaml +16 -0
  426. package/rules/typescript/ts.security.file-generation.rule.yaml +10 -0
  427. package/rules/typescript/ts.security.format-string-using-user-input.rule.yaml +10 -0
  428. package/rules/typescript/ts.security.frontend-only-authorization.rule.yaml +10 -0
  429. package/rules/typescript/ts.security.graphql-upload-without-csrf-guard.rule.yaml +16 -0
  430. package/rules/typescript/ts.security.handlebars-no-escape.rule.yaml +10 -0
  431. package/rules/typescript/ts.security.hardcoded-auth-secret.rule.yaml +10 -0
  432. package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +10 -0
  433. package/rules/typescript/ts.security.import-using-user-input.rule.yaml +10 -0
  434. package/rules/typescript/ts.security.information-leakage.rule.yaml +10 -0
  435. package/rules/typescript/ts.security.insecure-allow-origin.rule.yaml +10 -0
  436. package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +10 -0
  437. package/rules/typescript/ts.security.insecure-content-security-policy-literal.rule.yaml +10 -0
  438. package/rules/typescript/ts.security.insecure-helmet-hardening-options.rule.yaml +10 -0
  439. package/rules/typescript/ts.security.insecure-password-hash-configuration.rule.yaml +10 -0
  440. package/rules/typescript/ts.security.insecure-websocket-transport.rule.yaml +10 -0
  441. package/rules/typescript/ts.security.insufficiently-random-values.rule.yaml +10 -0
  442. package/rules/typescript/ts.security.jwt-insecure-signing-algorithm.rule.yaml +10 -0
  443. package/rules/typescript/ts.security.jwt-not-revoked.rule.yaml +10 -0
  444. package/rules/typescript/ts.security.jwt-sensitive-claims.rule.yaml +10 -0
  445. package/rules/typescript/ts.security.legacy-buffer-constructor.rule.yaml +10 -0
  446. package/rules/typescript/ts.security.log-injection.rule.yaml +10 -0
  447. package/rules/typescript/ts.security.manual-html-sanitization.rule.yaml +10 -0
  448. package/rules/typescript/ts.security.missing-authorization-before-sensitive-action.rule.yaml +10 -0
  449. package/rules/typescript/ts.security.missing-integrity-check.rule.yaml +10 -0
  450. package/rules/typescript/ts.security.missing-message-origin-check.rule.yaml +10 -0
  451. package/rules/typescript/ts.security.missing-ownership-validation.rule.yaml +10 -0
  452. package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +10 -0
  453. package/rules/typescript/ts.security.nestjs-helmet-after-route-mount.rule.yaml +16 -0
  454. package/rules/typescript/ts.security.nestjs-missing-global-validation-pipe.rule.yaml +16 -0
  455. package/rules/typescript/ts.security.nestjs-skip-throttle-sensitive-route.rule.yaml +16 -0
  456. package/rules/typescript/ts.security.nestjs-validation-pipe-without-whitelist.rule.yaml +16 -0
  457. package/rules/typescript/ts.security.no-alert-confirm-prompt.rule.yaml +44 -0
  458. package/rules/typescript/ts.security.no-arguments-callee.rule.yaml +44 -0
  459. package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +45 -0
  460. package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +10 -0
  461. package/rules/typescript/ts.security.no-fs-readfile-sync-in-handler.rule.yaml +46 -0
  462. package/rules/typescript/ts.security.no-global-native-reassignment.rule.yaml +44 -0
  463. package/rules/typescript/ts.security.no-innerhtml-assignment.rule.yaml +10 -0
  464. package/rules/typescript/ts.security.no-javascript-url.rule.yaml +44 -0
  465. package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +44 -0
  466. package/rules/typescript/ts.security.no-sync-child-process-exec.rule.yaml +45 -0
  467. package/rules/typescript/ts.security.no-throw-literal.rule.yaml +44 -0
  468. package/rules/typescript/ts.security.no-with-statement.rule.yaml +44 -0
  469. package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +10 -0
  470. package/rules/typescript/ts.security.nuxt-public-runtime-secret.rule.yaml +13 -0
  471. package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +10 -0
  472. package/rules/typescript/ts.security.open-redirect.rule.yaml +10 -0
  473. package/rules/typescript/ts.security.permissive-allow-origin.rule.yaml +10 -0
  474. package/rules/typescript/ts.security.permissive-file-permissions.rule.yaml +10 -0
  475. package/rules/typescript/ts.security.postmessage-wildcard-origin.rule.yaml +10 -0
  476. package/rules/typescript/ts.security.predictable-token-generation.rule.yaml +10 -0
  477. package/rules/typescript/ts.security.raw-html-using-user-input.rule.yaml +10 -0
  478. package/rules/typescript/ts.security.request-driven-array-index-access.rule.yaml +10 -0
  479. package/rules/typescript/ts.security.sensitive-data-egress.rule.yaml +10 -0
  480. package/rules/typescript/ts.security.sensitive-data-in-exception.rule.yaml +10 -0
  481. package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +10 -0
  482. package/rules/typescript/ts.security.ssrf.rule.yaml +10 -0
  483. package/rules/typescript/ts.security.token-or-session-not-validated.rule.yaml +10 -0
  484. package/rules/typescript/ts.security.ui-redress.rule.yaml +10 -0
  485. package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +44 -0
  486. package/rules/typescript/ts.security.unsafe-dompurify-version.rule.yaml +10 -0
  487. package/rules/typescript/ts.security.unsafe-marked-version.rule.yaml +10 -0
  488. package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +10 -0
  489. package/rules/typescript/ts.security.unvalidated-external-input.rule.yaml +10 -0
  490. package/rules/typescript/ts.security.user-controlled-sendfile.rule.yaml +10 -0
  491. package/rules/typescript/ts.security.user-controlled-view-render.rule.yaml +10 -0
  492. package/rules/typescript/ts.security.weak-cipher-or-mode.rule.yaml +10 -0
  493. package/rules/typescript/ts.security.weak-key-strength.rule.yaml +10 -0
  494. package/rules/typescript/ts.security.weak-tls-version.rule.yaml +10 -0
  495. package/rules/typescript/ts.security.xml-parse-string-with-untrusted-input.rule.yaml +10 -0
@@ -0,0 +1,55 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: py.security.insecure-temp-file
5
+ title: Avoid insecure temporary file name helpers
6
+ summary: Python temporary files should not use `mktemp` or `tempnam` helpers that create race-prone filenames.
7
+ rationale: Predictable temporary filenames can enable symlink races and unauthorized file access before creation.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-434
13
+ title: Unrestricted Upload of File with Dangerous Type
14
+ - kind: owasp
15
+ title: File Upload Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
17
+ tags:
18
+ - security
19
+ - python
20
+ - filesystem
21
+ - tempfile
22
+ - rules-catalog
23
+ stability: stable
24
+ appliesTo: block
25
+ scope:
26
+ languages:
27
+ - python
28
+ paths:
29
+ include:
30
+ - "**/*.py"
31
+ exclude:
32
+ - "**/tests/**"
33
+ - "**/test_*.py"
34
+ - "**/*_test.py"
35
+ - "**/migrations/**"
36
+ match:
37
+ fact:
38
+ kind: python.security.insecure-temp-file
39
+ bind: issue
40
+ emit:
41
+ finding:
42
+ category: security.filesystem
43
+ severity: medium
44
+ confidence: 0.92
45
+ tags:
46
+ - security
47
+ - python
48
+ - filesystem
49
+ - tempfile
50
+ message:
51
+ title: Replace insecure temp helper `${captures.issue.text}`
52
+ summary: "`${captures.issue.text}` uses an insecure temporary filename API."
53
+ remediation:
54
+ summary: Use `tempfile.NamedTemporaryFile` or `tempfile.mkstemp` to create secure files atomically.
55
+
@@ -0,0 +1,55 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: py.security.insecure-yaml-load
5
+ title: Use SafeLoader with yaml.load
6
+ summary: Python YAML parsing should use `SafeLoader` when calling `yaml.load`.
7
+ rationale: Unsafe YAML deserialization can instantiate arbitrary Python objects and lead to unexpected code paths.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-502
13
+ title: Deserialization of Untrusted Data
14
+ - kind: owasp
15
+ title: Deserialization Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
17
+ tags:
18
+ - security
19
+ - python
20
+ - yaml
21
+ - deserialization
22
+ - rules-catalog
23
+ stability: stable
24
+ appliesTo: block
25
+ scope:
26
+ languages:
27
+ - python
28
+ paths:
29
+ include:
30
+ - "**/*.py"
31
+ exclude:
32
+ - "**/tests/**"
33
+ - "**/test_*.py"
34
+ - "**/*_test.py"
35
+ - "**/migrations/**"
36
+ match:
37
+ fact:
38
+ kind: python.security.insecure-yaml-load
39
+ bind: issue
40
+ emit:
41
+ finding:
42
+ category: security.input-validation
43
+ severity: medium
44
+ confidence: 0.9
45
+ tags:
46
+ - security
47
+ - python
48
+ - yaml
49
+ - deserialization
50
+ message:
51
+ title: Use a safe YAML loader in `${captures.issue.text}`
52
+ summary: "`${captures.issue.text}` calls `yaml.load` without a safe loader."
53
+ remediation:
54
+ summary: Prefer `yaml.safe_load` or pass `Loader=yaml.SafeLoader` explicitly for trusted-safe parsing behavior.
55
+
@@ -0,0 +1,58 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: py.security.jinja-autoescape-disabled
5
+ title: Avoid disabling Jinja autoescape
6
+ summary: Jinja2 environments should keep autoescaping enabled for HTML rendering contexts.
7
+ rationale: Disabling autoescape can allow untrusted template data to render as executable markup in browser clients.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-79
13
+ title: Cross-site Scripting (XSS)
14
+ - kind: owasp
15
+ title: Cross Site Scripting Prevention Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
17
+ - kind: url
18
+ title: Flask security considerations
19
+ url: https://flask.palletsprojects.com/en/stable/security/
20
+ tags:
21
+ - security
22
+ - python
23
+ - jinja
24
+ - xss
25
+ - rules-catalog
26
+ stability: stable
27
+ appliesTo: block
28
+ scope:
29
+ languages:
30
+ - python
31
+ paths:
32
+ include:
33
+ - "**/*.py"
34
+ exclude:
35
+ - "**/tests/**"
36
+ - "**/test_*.py"
37
+ - "**/*_test.py"
38
+ - "**/migrations/**"
39
+ match:
40
+ fact:
41
+ kind: python.security.jinja-autoescape-disabled
42
+ bind: issue
43
+ emit:
44
+ finding:
45
+ category: security.output-encoding
46
+ severity: medium
47
+ confidence: 0.9
48
+ tags:
49
+ - security
50
+ - python
51
+ - jinja
52
+ - xss
53
+ message:
54
+ title: Enable Jinja autoescape in `${captures.issue.text}`
55
+ summary: "`${captures.issue.text}` configures a Jinja environment with `autoescape=False`."
56
+ remediation:
57
+ summary: Keep `autoescape` enabled for HTML templates and isolate trusted non-HTML rendering pipelines explicitly.
58
+
@@ -0,0 +1,55 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: py.security.subprocess-shell-enabled
5
+ title: Avoid enabling shell mode in subprocess calls
6
+ summary: Python process execution should avoid `shell=True` unless shell interpretation is explicitly required and tightly controlled.
7
+ rationale: Shell-enabled process execution introduces command parsing behavior that increases injection and execution risk.
8
+ detection:
9
+ kind: pattern
10
+ references:
11
+ - kind: cwe
12
+ id: CWE-78
13
+ title: OS Command Injection
14
+ - kind: owasp
15
+ title: OS Command Injection Defense Cheat Sheet
16
+ url: https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
17
+ tags:
18
+ - security
19
+ - python
20
+ - subprocess
21
+ - execution
22
+ - rules-catalog
23
+ stability: stable
24
+ appliesTo: block
25
+ scope:
26
+ languages:
27
+ - python
28
+ paths:
29
+ include:
30
+ - "**/*.py"
31
+ exclude:
32
+ - "**/tests/**"
33
+ - "**/test_*.py"
34
+ - "**/*_test.py"
35
+ - "**/migrations/**"
36
+ match:
37
+ fact:
38
+ kind: python.security.subprocess-shell-enabled
39
+ bind: issue
40
+ emit:
41
+ finding:
42
+ category: security.execution
43
+ severity: high
44
+ confidence: 0.93
45
+ tags:
46
+ - security
47
+ - python
48
+ - subprocess
49
+ - execution
50
+ message:
51
+ title: Review shell-enabled process call `${captures.issue.text}`
52
+ summary: "`${captures.issue.text}` enables shell interpretation via `shell=True`."
53
+ remediation:
54
+ summary: Use argument-list execution with `shell=False` by default, and only allow fixed commands when shell mode is unavoidable.
55
+
@@ -0,0 +1,42 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.bug-risk.assignment-in-condition
5
+ title: Avoid assignment inside conditionals
6
+ summary: >-
7
+ Extract assignments from if, unless, while, and until conditions.
8
+ rationale: >-
9
+ Assignment in conditions is easy to mistake for comparison.
10
+ detection:
11
+ kind: pattern
12
+ tags:
13
+ - rules-catalog
14
+ - ruby
15
+ stability: stable
16
+ appliesTo: block
17
+ scope:
18
+ languages:
19
+ - ruby
20
+ paths:
21
+ include:
22
+ - "**/*.rb"
23
+ exclude:
24
+ - "**/vendor/**"
25
+ - "**/node_modules/**"
26
+ match:
27
+ fact:
28
+ kind: ruby.bug-risk.assignment-in-condition
29
+ bind: issue
30
+ emit:
31
+ finding:
32
+ category: correctness.language
33
+ severity: medium
34
+ confidence: 0.9
35
+ tags:
36
+ - ruby
37
+ message:
38
+ title: Review `${captures.issue.text}`
39
+ summary: "`${captures.issue.text}` matches `ruby.bug-risk.assignment-in-condition`."
40
+ remediation:
41
+ summary: >-
42
+ Extract assignments from if, unless, while, and until conditions.
@@ -0,0 +1,42 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.bug-risk.deprecated-uri-escape
5
+ title: Avoid deprecated URI.escape helpers
6
+ summary: >-
7
+ Use CGI.escape, URI.encode_www_form_component, or Addressable instead.
8
+ rationale: >-
9
+ URI.escape and URI.unescape are deprecated and removed in modern Ruby.
10
+ detection:
11
+ kind: pattern
12
+ tags:
13
+ - rules-catalog
14
+ - ruby
15
+ stability: stable
16
+ appliesTo: block
17
+ scope:
18
+ languages:
19
+ - ruby
20
+ paths:
21
+ include:
22
+ - "**/*.rb"
23
+ exclude:
24
+ - "**/vendor/**"
25
+ - "**/node_modules/**"
26
+ match:
27
+ fact:
28
+ kind: ruby.bug-risk.deprecated-uri-escape
29
+ bind: issue
30
+ emit:
31
+ finding:
32
+ category: correctness.language
33
+ severity: low
34
+ confidence: 0.9
35
+ tags:
36
+ - ruby
37
+ message:
38
+ title: Review `${captures.issue.text}`
39
+ summary: "`${captures.issue.text}` matches `ruby.bug-risk.deprecated-uri-escape`."
40
+ remediation:
41
+ summary: >-
42
+ Use CGI.escape, URI.encode_www_form_component, or Addressable instead.
@@ -0,0 +1,42 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.bug-risk.division-by-zero
5
+ title: Avoid division by zero literals
6
+ summary: >-
7
+ Do not divide by literal zero.
8
+ rationale: >-
9
+ Division by zero raises ZeroDivisionError at runtime.
10
+ detection:
11
+ kind: pattern
12
+ tags:
13
+ - rules-catalog
14
+ - ruby
15
+ stability: stable
16
+ appliesTo: block
17
+ scope:
18
+ languages:
19
+ - ruby
20
+ paths:
21
+ include:
22
+ - "**/*.rb"
23
+ exclude:
24
+ - "**/vendor/**"
25
+ - "**/node_modules/**"
26
+ match:
27
+ fact:
28
+ kind: ruby.bug-risk.division-by-zero
29
+ bind: issue
30
+ emit:
31
+ finding:
32
+ category: correctness.language
33
+ severity: medium
34
+ confidence: 0.9
35
+ tags:
36
+ - ruby
37
+ message:
38
+ title: Review `${captures.issue.text}`
39
+ summary: "`${captures.issue.text}` matches `ruby.bug-risk.division-by-zero`."
40
+ remediation:
41
+ summary: >-
42
+ Do not divide by literal zero.
@@ -0,0 +1,42 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.bug-risk.duplicate-hash-keys
5
+ title: Avoid duplicate keys in hash literals
6
+ summary: >-
7
+ Remove duplicate symbol or string keys in the same hash literal.
8
+ rationale: >-
9
+ Later duplicate keys silently override earlier entries.
10
+ detection:
11
+ kind: pattern
12
+ tags:
13
+ - rules-catalog
14
+ - ruby
15
+ stability: stable
16
+ appliesTo: block
17
+ scope:
18
+ languages:
19
+ - ruby
20
+ paths:
21
+ include:
22
+ - "**/*.rb"
23
+ exclude:
24
+ - "**/vendor/**"
25
+ - "**/node_modules/**"
26
+ match:
27
+ fact:
28
+ kind: ruby.bug-risk.duplicate-hash-keys
29
+ bind: issue
30
+ emit:
31
+ finding:
32
+ category: correctness.language
33
+ severity: medium
34
+ confidence: 0.9
35
+ tags:
36
+ - ruby
37
+ message:
38
+ title: Review `${captures.issue.text}`
39
+ summary: "`${captures.issue.text}` matches `ruby.bug-risk.duplicate-hash-keys`."
40
+ remediation:
41
+ summary: >-
42
+ Remove duplicate symbol or string keys in the same hash literal.
@@ -0,0 +1,42 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.bug-risk.exception-class-overwritten
5
+ title: Do not assign rescue result to exception class names
6
+ summary: >-
7
+ Use rescue StandardError or rescue StandardError => e, not rescue => StandardError.
8
+ rationale: >-
9
+ rescue => StandardError shadows the exception class with the rescued value.
10
+ detection:
11
+ kind: pattern
12
+ tags:
13
+ - rules-catalog
14
+ - ruby
15
+ stability: stable
16
+ appliesTo: block
17
+ scope:
18
+ languages:
19
+ - ruby
20
+ paths:
21
+ include:
22
+ - "**/*.rb"
23
+ exclude:
24
+ - "**/vendor/**"
25
+ - "**/node_modules/**"
26
+ match:
27
+ fact:
28
+ kind: ruby.bug-risk.exception-class-overwritten
29
+ bind: issue
30
+ emit:
31
+ finding:
32
+ category: correctness.language
33
+ severity: medium
34
+ confidence: 0.9
35
+ tags:
36
+ - ruby
37
+ message:
38
+ title: Review `${captures.issue.text}`
39
+ summary: "`${captures.issue.text}` matches `ruby.bug-risk.exception-class-overwritten`."
40
+ remediation:
41
+ summary: >-
42
+ Use rescue StandardError or rescue StandardError => e, not rescue => StandardError.
@@ -0,0 +1,42 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.bug-risk.raw-sql-without-squish
5
+ title: Squish heredoc SQL passed to where
6
+ summary: >-
7
+ Normalize heredoc SQL with squish before passing to where or find_by_sql.
8
+ rationale: >-
9
+ Unsquished heredoc SQL preserves accidental whitespace and hurts readability.
10
+ detection:
11
+ kind: pattern
12
+ tags:
13
+ - rules-catalog
14
+ - ruby
15
+ stability: stable
16
+ appliesTo: block
17
+ scope:
18
+ languages:
19
+ - ruby
20
+ paths:
21
+ include:
22
+ - "**/*.rb"
23
+ exclude:
24
+ - "**/vendor/**"
25
+ - "**/node_modules/**"
26
+ match:
27
+ fact:
28
+ kind: ruby.bug-risk.raw-sql-without-squish
29
+ bind: issue
30
+ emit:
31
+ finding:
32
+ category: correctness.language
33
+ severity: low
34
+ confidence: 0.9
35
+ tags:
36
+ - ruby
37
+ message:
38
+ title: Review `${captures.issue.text}`
39
+ summary: "`${captures.issue.text}` matches `ruby.bug-risk.raw-sql-without-squish`."
40
+ remediation:
41
+ summary: >-
42
+ Normalize heredoc SQL with squish before passing to where or find_by_sql.
@@ -0,0 +1,53 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.security.debugger-call
5
+ title: Remove debugger calls from application code
6
+ summary: >-
7
+ Debugger breakpoints must not ship in non-test Ruby sources.
8
+ rationale: >-
9
+ Leftover `debugger`, `byebug`, or `binding.break` calls pause production workers and can expose live request state.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-489
15
+ title: Active Debug Code
16
+ tags:
17
+ - security
18
+ - ruby
19
+ - debug
20
+ - rules-catalog
21
+ stability: stable
22
+ appliesTo: block
23
+ scope:
24
+ languages:
25
+ - ruby
26
+ paths:
27
+ include:
28
+ - "**/*.rb"
29
+ exclude:
30
+ - "**/vendor/**"
31
+ - "**/node_modules/**"
32
+ - "**/spec/**"
33
+ - "**/test/**"
34
+ - "**/tests/**"
35
+ match:
36
+ fact:
37
+ kind: ruby.security.debugger-call
38
+ bind: issue
39
+ emit:
40
+ finding:
41
+ category: security.debug-exposure
42
+ severity: medium
43
+ confidence: 0.92
44
+ tags:
45
+ - security
46
+ - ruby
47
+ - debug
48
+ message:
49
+ title: Remove debugger call in `${captures.issue.text}`
50
+ summary: "`${captures.issue.text}` leaves an interactive debugger breakpoint in application code."
51
+ remediation:
52
+ summary: >-
53
+ Delete debugger statements before merge or gate them behind development-only configuration.
@@ -0,0 +1,54 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.security.dynamic-code-execution
5
+ title: Avoid dynamic Ruby code execution
6
+ summary: >-
7
+ Do not execute runtime-generated Ruby via eval, exec, or *_eval helpers.
8
+ rationale: >-
9
+ Dynamic execution turns untrusted or mutable input into executable code and expands injection risk.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-94
15
+ title: Improper Control of Generation of Code
16
+ - kind: owasp
17
+ title: Code Injection
18
+ url: https://owasp.org/www-community/attacks/Code_Injection
19
+ tags:
20
+ - security
21
+ - ruby
22
+ - execution
23
+ - injection
24
+ - rules-catalog
25
+ stability: stable
26
+ appliesTo: block
27
+ scope:
28
+ languages:
29
+ - ruby
30
+ paths:
31
+ include:
32
+ - "**/*.rb"
33
+ exclude:
34
+ - "**/vendor/**"
35
+ - "**/node_modules/**"
36
+ match:
37
+ fact:
38
+ kind: ruby.security.dynamic-code-execution
39
+ bind: issue
40
+ emit:
41
+ finding:
42
+ category: security.execution
43
+ severity: high
44
+ confidence: 0.94
45
+ tags:
46
+ - security
47
+ - ruby
48
+ - execution
49
+ message:
50
+ title: Remove dynamic execution in `${captures.issue.text}`
51
+ summary: "`${captures.issue.text}` executes Ruby code dynamically."
52
+ remediation:
53
+ summary: >-
54
+ Replace eval and *_eval calls with explicit parsing, allowlisted dispatch, or data structures that do not execute code.
@@ -0,0 +1,53 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.security.insecure-json-load
5
+ title: Avoid insecure JSON load helpers
6
+ summary: >-
7
+ Prefer `JSON.parse` over `JSON.load`, `JSON.restore`, or permissive Oj/MultiJson loaders.
8
+ rationale: >-
9
+ Load-style JSON APIs can deserialize arbitrary Ruby types and expand deserialization gadget risk.
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
+ - ruby
22
+ - deserialization
23
+ - rules-catalog
24
+ stability: stable
25
+ appliesTo: block
26
+ scope:
27
+ languages:
28
+ - ruby
29
+ paths:
30
+ include:
31
+ - "**/*.rb"
32
+ exclude:
33
+ - "**/vendor/**"
34
+ - "**/node_modules/**"
35
+ match:
36
+ fact:
37
+ kind: ruby.security.insecure-json-load
38
+ bind: issue
39
+ emit:
40
+ finding:
41
+ category: security.deserialization
42
+ severity: high
43
+ confidence: 0.9
44
+ tags:
45
+ - security
46
+ - ruby
47
+ - deserialization
48
+ message:
49
+ title: Use safe JSON parsing in `${captures.issue.text}`
50
+ summary: "`${captures.issue.text}` uses a JSON loader that can deserialize unsafe Ruby objects."
51
+ remediation:
52
+ summary: >-
53
+ Parse JSON with `JSON.parse` and validate the resulting structure; avoid `JSON.load`, `JSON.restore`, and default `Oj.load` on untrusted input.
@@ -0,0 +1,53 @@
1
+ apiVersion: critiq.dev/v1alpha1
2
+ kind: Rule
3
+ metadata:
4
+ id: ruby.security.kernel-open
5
+ title: Avoid Kernel.open pipe mode
6
+ summary: >-
7
+ Do not use `Kernel.open` with a leading pipe, which spawns a shell command.
8
+ rationale: >-
9
+ Pipe-mode `open` delegates to the shell and enables command injection when the argument is influenced by users.
10
+ detection:
11
+ kind: pattern
12
+ references:
13
+ - kind: cwe
14
+ id: CWE-78
15
+ title: Improper Neutralization of Special Elements used in an OS Command
16
+ - kind: owasp
17
+ title: Command Injection
18
+ url: https://owasp.org/www-community/attacks/Command_Injection
19
+ tags:
20
+ - security
21
+ - ruby
22
+ - command-execution
23
+ - rules-catalog
24
+ stability: stable
25
+ appliesTo: block
26
+ scope:
27
+ languages:
28
+ - ruby
29
+ paths:
30
+ include:
31
+ - "**/*.rb"
32
+ exclude:
33
+ - "**/vendor/**"
34
+ - "**/node_modules/**"
35
+ match:
36
+ fact:
37
+ kind: ruby.security.kernel-open
38
+ bind: issue
39
+ emit:
40
+ finding:
41
+ category: security.command-execution
42
+ severity: critical
43
+ confidence: 0.95
44
+ tags:
45
+ - security
46
+ - ruby
47
+ - command-execution
48
+ message:
49
+ title: Replace pipe-mode open in `${captures.issue.text}`
50
+ summary: "`${captures.issue.text}` uses `Kernel.open` pipe mode, which can execute shell commands."
51
+ remediation:
52
+ summary: >-
53
+ Use `IO.popen` only with a fixed argv array, `Open3` with explicit command arrays, or file APIs that do not invoke a shell.