codeslick-cli 1.0.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 (455) hide show
  1. package/README.md +458 -0
  2. package/__tests__/cli-reporter.test.ts +86 -0
  3. package/__tests__/config-loader.test.ts +247 -0
  4. package/__tests__/local-scanner.test.ts +245 -0
  5. package/bin/codeslick.cjs +153 -0
  6. package/dist/packages/cli/src/commands/auth.d.ts +36 -0
  7. package/dist/packages/cli/src/commands/auth.d.ts.map +1 -0
  8. package/dist/packages/cli/src/commands/auth.js +226 -0
  9. package/dist/packages/cli/src/commands/auth.js.map +1 -0
  10. package/dist/packages/cli/src/commands/config.d.ts +37 -0
  11. package/dist/packages/cli/src/commands/config.d.ts.map +1 -0
  12. package/dist/packages/cli/src/commands/config.js +196 -0
  13. package/dist/packages/cli/src/commands/config.js.map +1 -0
  14. package/dist/packages/cli/src/commands/init.d.ts +32 -0
  15. package/dist/packages/cli/src/commands/init.d.ts.map +1 -0
  16. package/dist/packages/cli/src/commands/init.js +171 -0
  17. package/dist/packages/cli/src/commands/init.js.map +1 -0
  18. package/dist/packages/cli/src/commands/scan.d.ts +40 -0
  19. package/dist/packages/cli/src/commands/scan.d.ts.map +1 -0
  20. package/dist/packages/cli/src/commands/scan.js +204 -0
  21. package/dist/packages/cli/src/commands/scan.js.map +1 -0
  22. package/dist/packages/cli/src/config/config-loader.d.ts +67 -0
  23. package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -0
  24. package/dist/packages/cli/src/config/config-loader.js +146 -0
  25. package/dist/packages/cli/src/config/config-loader.js.map +1 -0
  26. package/dist/packages/cli/src/reporters/cli-reporter.d.ts +69 -0
  27. package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -0
  28. package/dist/packages/cli/src/reporters/cli-reporter.js +244 -0
  29. package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -0
  30. package/dist/packages/cli/src/scanner/local-scanner.d.ts +92 -0
  31. package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -0
  32. package/dist/packages/cli/src/scanner/local-scanner.js +221 -0
  33. package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -0
  34. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts +88 -0
  35. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -0
  36. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +371 -0
  37. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -0
  38. package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts +63 -0
  39. package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts.map +1 -0
  40. package/dist/src/lib/analyzers/helpers/jsx-helpers.js +95 -0
  41. package/dist/src/lib/analyzers/helpers/jsx-helpers.js.map +1 -0
  42. package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts +59 -0
  43. package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts.map +1 -0
  44. package/dist/src/lib/analyzers/helpers/variable-tracker.js +231 -0
  45. package/dist/src/lib/analyzers/helpers/variable-tracker.js.map +1 -0
  46. package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts +20 -0
  47. package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts.map +1 -0
  48. package/dist/src/lib/analyzers/java/security-checks/access-control.js +129 -0
  49. package/dist/src/lib/analyzers/java/security-checks/access-control.js.map +1 -0
  50. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts +25 -0
  51. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts.map +1 -0
  52. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js +221 -0
  53. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js.map +1 -0
  54. package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts +18 -0
  55. package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts.map +1 -0
  56. package/dist/src/lib/analyzers/java/security-checks/code-quality.js +84 -0
  57. package/dist/src/lib/analyzers/java/security-checks/code-quality.js.map +1 -0
  58. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts +18 -0
  59. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts.map +1 -0
  60. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js +161 -0
  61. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js.map +1 -0
  62. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts +20 -0
  63. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts.map +1 -0
  64. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js +163 -0
  65. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js.map +1 -0
  66. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts +24 -0
  67. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  68. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js +178 -0
  69. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js.map +1 -0
  70. package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts +25 -0
  71. package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts.map +1 -0
  72. package/dist/src/lib/analyzers/java/security-checks/exception-handling.js +179 -0
  73. package/dist/src/lib/analyzers/java/security-checks/exception-handling.js.map +1 -0
  74. package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts +17 -0
  75. package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts.map +1 -0
  76. package/dist/src/lib/analyzers/java/security-checks/file-operations.js +67 -0
  77. package/dist/src/lib/analyzers/java/security-checks/file-operations.js.map +1 -0
  78. package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts +25 -0
  79. package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts.map +1 -0
  80. package/dist/src/lib/analyzers/java/security-checks/framework-security.js +396 -0
  81. package/dist/src/lib/analyzers/java/security-checks/framework-security.js.map +1 -0
  82. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts +20 -0
  83. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -0
  84. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +123 -0
  85. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -0
  86. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts +23 -0
  87. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts.map +1 -0
  88. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js +201 -0
  89. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js.map +1 -0
  90. package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts +20 -0
  91. package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts.map +1 -0
  92. package/dist/src/lib/analyzers/java/security-checks/insecure-design.js +121 -0
  93. package/dist/src/lib/analyzers/java/security-checks/insecure-design.js.map +1 -0
  94. package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts +20 -0
  95. package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts.map +1 -0
  96. package/dist/src/lib/analyzers/java/security-checks/logging-failures.js +89 -0
  97. package/dist/src/lib/analyzers/java/security-checks/logging-failures.js.map +1 -0
  98. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts +26 -0
  99. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts.map +1 -0
  100. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js +309 -0
  101. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js.map +1 -0
  102. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts +18 -0
  103. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts.map +1 -0
  104. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js +114 -0
  105. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js.map +1 -0
  106. package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts +58 -0
  107. package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts.map +1 -0
  108. package/dist/src/lib/analyzers/java/utils/createVulnerability.js +71 -0
  109. package/dist/src/lib/analyzers/java/utils/createVulnerability.js.map +1 -0
  110. package/dist/src/lib/analyzers/java-analyzer.d.ts +209 -0
  111. package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -0
  112. package/dist/src/lib/analyzers/java-analyzer.js +1720 -0
  113. package/dist/src/lib/analyzers/java-analyzer.js.map +1 -0
  114. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +27 -0
  115. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -0
  116. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +123 -0
  117. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -0
  118. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts +44 -0
  119. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts.map +1 -0
  120. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js +224 -0
  121. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js.map +1 -0
  122. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts +50 -0
  123. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts.map +1 -0
  124. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js +284 -0
  125. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js.map +1 -0
  126. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts +27 -0
  127. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts.map +1 -0
  128. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js +86 -0
  129. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js.map +1 -0
  130. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts +32 -0
  131. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -0
  132. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +44 -0
  133. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -0
  134. package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts +22 -0
  135. package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts.map +1 -0
  136. package/dist/src/lib/analyzers/javascript/security-checks/access-control.js +168 -0
  137. package/dist/src/lib/analyzers/javascript/security-checks/access-control.js.map +1 -0
  138. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts +25 -0
  139. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -0
  140. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +232 -0
  141. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -0
  142. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts +27 -0
  143. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts.map +1 -0
  144. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js +222 -0
  145. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js.map +1 -0
  146. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts +28 -0
  147. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -0
  148. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +176 -0
  149. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -0
  150. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts +23 -0
  151. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  152. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js +113 -0
  153. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js.map +1 -0
  154. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts +28 -0
  155. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts.map +1 -0
  156. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js +227 -0
  157. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js.map +1 -0
  158. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts +32 -0
  159. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts.map +1 -0
  160. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js +260 -0
  161. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js.map +1 -0
  162. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts +26 -0
  163. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts.map +1 -0
  164. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js +164 -0
  165. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js.map +1 -0
  166. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts +26 -0
  167. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts.map +1 -0
  168. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js +775 -0
  169. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js.map +1 -0
  170. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts +25 -0
  171. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts.map +1 -0
  172. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js +168 -0
  173. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js.map +1 -0
  174. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts +27 -0
  175. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts.map +1 -0
  176. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js +108 -0
  177. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js.map +1 -0
  178. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts +28 -0
  179. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts.map +1 -0
  180. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js +143 -0
  181. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js.map +1 -0
  182. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts +53 -0
  183. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts.map +1 -0
  184. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js +144 -0
  185. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js.map +1 -0
  186. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts +72 -0
  187. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts.map +1 -0
  188. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js +314 -0
  189. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js.map +1 -0
  190. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts +58 -0
  191. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts.map +1 -0
  192. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js +71 -0
  193. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js.map +1 -0
  194. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts +36 -0
  195. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts.map +1 -0
  196. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js +70 -0
  197. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js.map +1 -0
  198. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts +29 -0
  199. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts.map +1 -0
  200. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js +55 -0
  201. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js.map +1 -0
  202. package/dist/src/lib/analyzers/javascript-analyzer.d.ts +95 -0
  203. package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -0
  204. package/dist/src/lib/analyzers/javascript-analyzer.js +2141 -0
  205. package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -0
  206. package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts +21 -0
  207. package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts.map +1 -0
  208. package/dist/src/lib/analyzers/python/security-checks/access-control.js +305 -0
  209. package/dist/src/lib/analyzers/python/security-checks/access-control.js.map +1 -0
  210. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts +25 -0
  211. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts.map +1 -0
  212. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js +242 -0
  213. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js.map +1 -0
  214. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts +24 -0
  215. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts.map +1 -0
  216. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js +207 -0
  217. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js.map +1 -0
  218. package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts +27 -0
  219. package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts.map +1 -0
  220. package/dist/src/lib/analyzers/python/security-checks/code-quality.js +206 -0
  221. package/dist/src/lib/analyzers/python/security-checks/code-quality.js.map +1 -0
  222. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts +24 -0
  223. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -0
  224. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +113 -0
  225. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -0
  226. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts +20 -0
  227. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts.map +1 -0
  228. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js +129 -0
  229. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js.map +1 -0
  230. package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts +19 -0
  231. package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts.map +1 -0
  232. package/dist/src/lib/analyzers/python/security-checks/data-integrity.js +90 -0
  233. package/dist/src/lib/analyzers/python/security-checks/data-integrity.js.map +1 -0
  234. package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts +20 -0
  235. package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts.map +1 -0
  236. package/dist/src/lib/analyzers/python/security-checks/deserialization.js +68 -0
  237. package/dist/src/lib/analyzers/python/security-checks/deserialization.js.map +1 -0
  238. package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts +25 -0
  239. package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts.map +1 -0
  240. package/dist/src/lib/analyzers/python/security-checks/django-security.js +180 -0
  241. package/dist/src/lib/analyzers/python/security-checks/django-security.js.map +1 -0
  242. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts +23 -0
  243. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  244. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js +127 -0
  245. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js.map +1 -0
  246. package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts +23 -0
  247. package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts.map +1 -0
  248. package/dist/src/lib/analyzers/python/security-checks/exception-handling.js +120 -0
  249. package/dist/src/lib/analyzers/python/security-checks/exception-handling.js.map +1 -0
  250. package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts +24 -0
  251. package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts.map +1 -0
  252. package/dist/src/lib/analyzers/python/security-checks/flask-security.js +143 -0
  253. package/dist/src/lib/analyzers/python/security-checks/flask-security.js.map +1 -0
  254. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +28 -0
  255. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -0
  256. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +174 -0
  257. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -0
  258. package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts +20 -0
  259. package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts.map +1 -0
  260. package/dist/src/lib/analyzers/python/security-checks/insecure-design.js +160 -0
  261. package/dist/src/lib/analyzers/python/security-checks/insecure-design.js.map +1 -0
  262. package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts +20 -0
  263. package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts.map +1 -0
  264. package/dist/src/lib/analyzers/python/security-checks/logging-failures.js +121 -0
  265. package/dist/src/lib/analyzers/python/security-checks/logging-failures.js.map +1 -0
  266. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts +26 -0
  267. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts.map +1 -0
  268. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js +248 -0
  269. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js.map +1 -0
  270. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts +26 -0
  271. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts.map +1 -0
  272. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js +375 -0
  273. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js.map +1 -0
  274. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts +26 -0
  275. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts.map +1 -0
  276. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js +160 -0
  277. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js.map +1 -0
  278. package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts +23 -0
  279. package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts.map +1 -0
  280. package/dist/src/lib/analyzers/python/security-checks/web-security.js +117 -0
  281. package/dist/src/lib/analyzers/python/security-checks/web-security.js.map +1 -0
  282. package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts +58 -0
  283. package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts.map +1 -0
  284. package/dist/src/lib/analyzers/python/utils/createVulnerability.js +71 -0
  285. package/dist/src/lib/analyzers/python/utils/createVulnerability.js.map +1 -0
  286. package/dist/src/lib/analyzers/python-analyzer.d.ts +111 -0
  287. package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -0
  288. package/dist/src/lib/analyzers/python-analyzer.js +1600 -0
  289. package/dist/src/lib/analyzers/python-analyzer.js.map +1 -0
  290. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +14 -0
  291. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -0
  292. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js +47 -0
  293. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js.map +1 -0
  294. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +13 -0
  295. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -0
  296. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js +36 -0
  297. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js.map +1 -0
  298. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +15 -0
  299. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -0
  300. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js +68 -0
  301. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js.map +1 -0
  302. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +15 -0
  303. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -0
  304. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js +68 -0
  305. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js.map +1 -0
  306. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +12 -0
  307. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -0
  308. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js +45 -0
  309. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js.map +1 -0
  310. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +14 -0
  311. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -0
  312. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js +47 -0
  313. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js.map +1 -0
  314. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +13 -0
  315. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -0
  316. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js +36 -0
  317. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js.map +1 -0
  318. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +15 -0
  319. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -0
  320. package/dist/src/lib/analyzers/secrets/patterns/api-keys.js +32 -0
  321. package/dist/src/lib/analyzers/secrets/patterns/api-keys.js.map +1 -0
  322. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +15 -0
  323. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -0
  324. package/dist/src/lib/analyzers/secrets/patterns/credentials.js +68 -0
  325. package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -0
  326. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +16 -0
  327. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -0
  328. package/dist/src/lib/analyzers/secrets/patterns/private-keys.js +79 -0
  329. package/dist/src/lib/analyzers/secrets/patterns/private-keys.js.map +1 -0
  330. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +15 -0
  331. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -0
  332. package/dist/src/lib/analyzers/secrets/patterns/tokens.js +58 -0
  333. package/dist/src/lib/analyzers/secrets/patterns/tokens.js.map +1 -0
  334. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +88 -0
  335. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -0
  336. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +162 -0
  337. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -0
  338. package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts +56 -0
  339. package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -0
  340. package/dist/src/lib/analyzers/secrets/validators/context-checker.js +199 -0
  341. package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -0
  342. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts +56 -0
  343. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts.map +1 -0
  344. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js +102 -0
  345. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js.map +1 -0
  346. package/dist/src/lib/analyzers/security-checks/es6-security.d.ts +38 -0
  347. package/dist/src/lib/analyzers/security-checks/es6-security.d.ts.map +1 -0
  348. package/dist/src/lib/analyzers/security-checks/es6-security.js +125 -0
  349. package/dist/src/lib/analyzers/security-checks/es6-security.js.map +1 -0
  350. package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts +46 -0
  351. package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts.map +1 -0
  352. package/dist/src/lib/analyzers/security-checks/python-async-security.js +92 -0
  353. package/dist/src/lib/analyzers/security-checks/python-async-security.js.map +1 -0
  354. package/dist/src/lib/analyzers/security-checks/react-security.d.ts +49 -0
  355. package/dist/src/lib/analyzers/security-checks/react-security.d.ts.map +1 -0
  356. package/dist/src/lib/analyzers/security-checks/react-security.js +125 -0
  357. package/dist/src/lib/analyzers/security-checks/react-security.js.map +1 -0
  358. package/dist/src/lib/analyzers/types.d.ts +92 -0
  359. package/dist/src/lib/analyzers/types.d.ts.map +1 -0
  360. package/dist/src/lib/analyzers/types.js +3 -0
  361. package/dist/src/lib/analyzers/types.js.map +1 -0
  362. package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts +19 -0
  363. package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts.map +1 -0
  364. package/dist/src/lib/analyzers/typescript/security-checks/access-control.js +210 -0
  365. package/dist/src/lib/analyzers/typescript/security-checks/access-control.js.map +1 -0
  366. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts +25 -0
  367. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -0
  368. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +242 -0
  369. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -0
  370. package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts +28 -0
  371. package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts.map +1 -0
  372. package/dist/src/lib/analyzers/typescript/security-checks/authentication.js +357 -0
  373. package/dist/src/lib/analyzers/typescript/security-checks/authentication.js.map +1 -0
  374. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts +26 -0
  375. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts.map +1 -0
  376. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js +380 -0
  377. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js.map +1 -0
  378. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts +23 -0
  379. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts.map +1 -0
  380. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js +109 -0
  381. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js.map +1 -0
  382. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts +21 -0
  383. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -0
  384. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +153 -0
  385. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -0
  386. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts +23 -0
  387. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  388. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js +146 -0
  389. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js.map +1 -0
  390. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts +23 -0
  391. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts.map +1 -0
  392. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js +187 -0
  393. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js.map +1 -0
  394. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts +19 -0
  395. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts.map +1 -0
  396. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js +97 -0
  397. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js.map +1 -0
  398. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts +29 -0
  399. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts.map +1 -0
  400. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js +319 -0
  401. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js.map +1 -0
  402. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts +21 -0
  403. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts.map +1 -0
  404. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js +121 -0
  405. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js.map +1 -0
  406. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts +27 -0
  407. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -0
  408. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +213 -0
  409. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -0
  410. package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts +19 -0
  411. package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -0
  412. package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +59 -0
  413. package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -0
  414. package/dist/src/lib/analyzers/typescript/type-checker.d.ts +17 -0
  415. package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -0
  416. package/dist/src/lib/analyzers/typescript/type-checker.js +515 -0
  417. package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -0
  418. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts +58 -0
  419. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts.map +1 -0
  420. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js +71 -0
  421. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js.map +1 -0
  422. package/dist/src/lib/analyzers/typescript-analyzer.d.ts +116 -0
  423. package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -0
  424. package/dist/src/lib/analyzers/typescript-analyzer.js +1660 -0
  425. package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -0
  426. package/dist/src/lib/security/compliance-mapping.d.ts +29 -0
  427. package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -0
  428. package/dist/src/lib/security/compliance-mapping.js +1342 -0
  429. package/dist/src/lib/security/compliance-mapping.js.map +1 -0
  430. package/dist/src/lib/security/severity-scoring.d.ts +47 -0
  431. package/dist/src/lib/security/severity-scoring.d.ts.map +1 -0
  432. package/dist/src/lib/security/severity-scoring.js +965 -0
  433. package/dist/src/lib/security/severity-scoring.js.map +1 -0
  434. package/dist/src/lib/standards/references.d.ts +16 -0
  435. package/dist/src/lib/standards/references.d.ts.map +1 -0
  436. package/dist/src/lib/standards/references.js +1161 -0
  437. package/dist/src/lib/standards/references.js.map +1 -0
  438. package/dist/src/lib/types/index.d.ts +167 -0
  439. package/dist/src/lib/types/index.d.ts.map +1 -0
  440. package/dist/src/lib/types/index.js +3 -0
  441. package/dist/src/lib/types/index.js.map +1 -0
  442. package/dist/src/lib/utils/code-cleaner.d.ts +59 -0
  443. package/dist/src/lib/utils/code-cleaner.d.ts.map +1 -0
  444. package/dist/src/lib/utils/code-cleaner.js +283 -0
  445. package/dist/src/lib/utils/code-cleaner.js.map +1 -0
  446. package/package.json +51 -0
  447. package/src/commands/auth.ts +308 -0
  448. package/src/commands/config.ts +226 -0
  449. package/src/commands/init.ts +202 -0
  450. package/src/commands/scan.ts +238 -0
  451. package/src/config/config-loader.ts +175 -0
  452. package/src/reporters/cli-reporter.ts +282 -0
  453. package/src/scanner/local-scanner.ts +250 -0
  454. package/tsconfig.json +24 -0
  455. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-misconfiguration.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/security-misconfiguration.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAqBH,sEAq0BC;AAv1BD,sEAAqF;AAErF;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,6BAA6B,CAC3C,KAAe;IAEf,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,iBAAiB,GAAG,KAAK,CAAC,CAAC,iCAAiC;IAChE,IAAI,eAAe,GAAG,KAAK,CAAC,CAAC,0CAA0C;IACvE,IAAI,aAAa,GAAG,KAAK,CAAC,CAAC,6BAA6B;IACxD,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,6BAA6B;IAEtD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,wDAAwD;QACxD,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,kBAAkB,GAAG,KAAK,CAAC;YAC3B,OAAO,CAAC,wBAAwB;QAClC,CAAC;QAED,+EAA+E;QAC/E,IAAI,CAAC,WAAW;YACZ,kBAAkB;YAClB,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;YAC5B,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAE5C,iCAAiC;QACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACpH,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,6BAA6B;QAC7B,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACnI,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChG,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,mEAAmE;QACnE,uGAAuG;QACvG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1D,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACpE,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACrE,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9E,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpF,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,qDAAqD;gBAC9D,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,8EAA8E;gBAC1F,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,yEAAyE;oBACtF,MAAM,EAAE,+BAA+B;oBACvC,KAAK,EAAE,sDAAsD;iBAC9D;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,+FAA+F;oBAC5G,eAAe,EAAE;wBACf,+CAA+C;wBAC/C,+CAA+C;wBAC/C,6CAA6C;wBAC7C,uCAAuC;qBACxC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,qDAAqD;QACrD,kFAAkF;QAClF,sFAAsF;QACtF,MAAM,aAAa,GAAG,+CAA+C,CAAC,IAAI,CAAC,WAAW,CAAC;YACjE,oDAAoD,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7F,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YACpE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAElG,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;YACtC,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,yCAAyC;gBAClD,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,yEAAyE;gBACrF,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,kGAAkG;oBAC/G,MAAM,EAAE,iCAAiC;oBACzC,KAAK,EAAE,kEAAkE;iBAC1E;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,mFAAmF;oBAChG,eAAe,EAAE;wBACf,+CAA+C;wBAC/C,+BAA+B;wBAC/B,4CAA4C;wBAC5C,iCAAiC;qBAClC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACxF,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC1E,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBACjD,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9D,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,mDAAmD;gBAC5D,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,2CAA2C;gBACvD,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,6DAA6D;oBAC1E,MAAM,EAAE,gCAAgC;oBACxC,KAAK,EAAE,2DAA2D;iBACnE;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,4EAA4E;oBACzF,eAAe,EAAE;wBACf,2CAA2C;wBAC3C,sCAAsC;wBACtC,8CAA8C;wBAC9C,wCAAwC;qBACzC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,wEAAwE;QACxE,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3D,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChF,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,2CAA2C;gBACpD,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,sEAAsE;gBAClF,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,6EAA6E;oBAC1F,MAAM,EAAE,wCAAwC;oBAChD,KAAK,EAAE,2DAA2D;iBACnE;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,qEAAqE;oBAClF,eAAe,EAAE;wBACf,+CAA+C;wBAC/C,4CAA4C;wBAC5C,wCAAwC;wBACxC,kCAAkC;qBACnC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,sEAAsE;QACtE,IAAI,aAAa,IAAI,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;YACrD,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,qDAAqD;gBAC9D,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,0EAA0E;gBACtF,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,+GAA+G;oBAC5H,MAAM,EAAE,wCAAwC;oBAChD,KAAK,EAAE,sJAAsJ;iBAC9J;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,yDAAyD;oBACtE,eAAe,EAAE;wBACf,8BAA8B;wBAC9B,6BAA6B;wBAC7B,mCAAmC;wBACnC,yBAAyB;wBACzB,eAAe;qBAChB;iBACF;aACF,CAAC,CACH,CAAC;YACF,mBAAmB;YACnB,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,2CAA2C;QAC3C,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACpE,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,uCAAuC;gBAChD,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,sDAAsD;gBAClE,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,8EAA8E;oBAC3F,MAAM,EAAE,kEAAkE;oBAC1E,KAAK,EAAE,gEAAgE;iBACxE;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,wEAAwE;oBACrF,eAAe,EAAE;wBACf,gDAAgD;wBAChD,sCAAsC;wBACtC,wCAAwC;wBACxC,0CAA0C;qBAC3C;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9B,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC9D,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC9B,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;oBACpE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC9D,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAChE,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;oBAC1E,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,qDAAqD;gBAC9D,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,+EAA+E;gBAC3F,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,sEAAsE;oBACnF,MAAM,EAAE,0DAA0D;oBAClE,KAAK,EAAE,+EAA+E;iBACvF;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,sEAAsE;oBACnF,eAAe,EAAE;wBACf,4BAA4B;wBAC5B,2CAA2C;wBAC3C,oCAAoC;wBACpC,iCAAiC;qBAClC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACvG,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC5D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACxC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACrD,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;oBACtD,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvD,yFAAyF;oBACzF,MAAM,iBAAiB,GACrB,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;wBACnC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC9B,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;wBACpC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;wBAClC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;wBACjC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACvB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;4BACpC,QAAQ,EAAE,2BAA2B;4BACrC,QAAQ,EAAE,MAAM;4BAChB,UAAU,EAAE,QAAQ;4BACpB,OAAO,EAAE,0DAA0D;4BACrE,IAAI,EAAE,KAAK,GAAG,CAAC;4BACf,UAAU,EAAE,yEAAyE;4BACrF,KAAK,EAAE,UAAU;4BACjB,GAAG,EAAE,SAAS;4BACd,MAAM,EAAE,iBAAiB;4BACzB,WAAW,EAAE;gCACX,WAAW,EAAE,+DAA+D;gCAC5E,MAAM,EAAE,0CAA0C;gCAClD,KAAK,EAAE,6EAA6E;6BACrF;4BACD,YAAY,EAAE;gCACZ,WAAW,EAAE,gEAAgE;gCAC7E,eAAe,EAAE;oCACf,oCAAoC;oCACpC,8BAA8B;oCAC9B,2BAA2B;oCAC3B,iCAAiC;iCAClC;6BACF;yBACF,CAAC,CACH,CAAC;oBACF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;YACpF,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,oEAAoE;gBAC7E,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,sEAAsE;gBAClF,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,kFAAkF;oBAC/F,MAAM,EAAE,2BAA2B;oBACnC,KAAK,EAAE,2EAA2E;iBACnF;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,8EAA8E;oBAC3F,eAAe,EAAE;wBACf,qCAAqC;wBACrC,6CAA6C;wBAC7C,kCAAkC;wBAClC,0CAA0C;qBAC3C;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,8DAA8D;QAC9D,IAAI,SAAS,CAAC,KAAK,CAAC,mCAAmC,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;YACrF,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,sBAAsB,MAAM,6CAA6C;gBAClF,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,WAAW,MAAM,qDAAqD;gBAClF,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,GAAG,MAAM,sFAAsF;oBAC5G,MAAM,EAAE,OAAO,MAAM,CAAC,WAAW,EAAE,uCAAuC;oBAC1E,KAAK,EAAE,aAAa,MAAM,2GAA2G,MAAM,CAAC,WAAW,EAAE,yBAAyB;iBACnL;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,GAAG,MAAM,oEAAoE;oBAC1F,eAAe,EAAE;wBACf,uDAAuD;wBACvD,kCAAkC;wBAClC,sCAAsC;wBACtC,sCAAsC;qBACvC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,gFAAgF;QAChF,mEAAmE;QACnE,gFAAgF;QAEhF,0DAA0D;QAC1D,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,2BAA2B;gBAC3B,IAAI,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,EAAE,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/E,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,iCAAiC;oBACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3D,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,gBAAgB,EAAE,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,uFAAuF;gBAChG,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,mCAAmC;gBAC/C,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,qLAAqL;oBAClM,MAAM,EAAE,oDAAoD;oBAC5D,KAAK,EAAE,kLAAkL;iBAC1L;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,+DAA+D;oBAC5E,eAAe,EAAE;wBACf,oCAAoC;wBACpC,kCAAkC;wBAClC,mBAAmB;wBACnB,kBAAkB;wBAClB,sBAAsB;qBACvB;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,2BAA2B;gBAC3B,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClE,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,EAAE,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC9D,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,iCAAiC;oBACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3D,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACxB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,6EAA6E;gBACtF,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,8CAA8C;gBAC1D,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,0JAA0J;oBACvK,MAAM,EAAE,mCAAmC;oBAC3C,KAAK,EAAE,gHAAgH;iBACxH;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,0DAA0D;oBACvE,eAAe,EAAE;wBACf,2BAA2B;wBAC3B,uBAAuB;wBACvB,mBAAmB;wBACnB,kBAAkB;wBAClB,uBAAuB;qBACxB;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,yDAAyD;QACzD,MAAM,qBAAqB,GAAG,GAAG,EAAE;YACjC,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAE/B,gDAAgD;YAChD,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,uDAAuD;gBACvD,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;wBACnC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;wBACjC,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;wBAC7F,kBAAkB,GAAG,IAAI,CAAC;wBAC1B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,kBAAkB,CAAC;QAC5B,CAAC,CAAC;QAEF,IAAI,qBAAqB,EAAE,EAAE,CAAC;YAC5B,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;gBACpC,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,sEAAsE;gBAC/E,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,UAAU,EAAE,8DAA8D;gBAC1E,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE;oBACX,WAAW,EAAE,4LAA4L;oBACzM,MAAM,EAAE,oHAAoH;oBAC5H,KAAK,EAAE,kLAAkL;iBAC1L;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,oEAAoE;oBACjF,eAAe,EAAE;wBACf,uCAAuC;wBACvC,yBAAyB;wBACzB,uBAAuB;wBACvB,qCAAqC;qBACtC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,gFAAgF;QAChF,qDAAqD;QACrD,gFAAgF;QAEhF,8BAA8B;QAC9B,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/E,IAAI,kBAAkB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAEnD,8CAA8C;YAC9C,MAAM,gBAAgB,GACpB,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC9B,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC/B,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACjC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACjC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAChC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC/B,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC/B,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAElC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;oBACpC,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,MAAM;oBAClB,OAAO,EAAE,8BAA8B,MAAM,mDAAmD;oBAChG,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,UAAU,EAAE,8DAA8D;oBAC1E,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,SAAS;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,WAAW,EAAE;wBACX,WAAW,EAAE,2MAA2M;wBACxN,MAAM,EAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,uCAAuC;wBAC3E,KAAK,EAAE,4GAA4G,kBAAkB,CAAC,CAAC,CAAC,uDAAuD;qBAChM;oBACD,YAAY,EAAE;wBACZ,WAAW,EAAE,2EAA2E;wBACxF,eAAe,EAAE;4BACf,8DAA8D;4BAC9D,qCAAqC;4BACrC,gCAAgC;4BAChC,8BAA8B;yBAC/B;qBACF;iBACF,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,kFAAkF;YAClF,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClC,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,CAAC;gBACD,uDAAuD;gBACvD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;oBACpC,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,MAAM;oBAClB,OAAO,EAAE,gEAAgE;oBACzE,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,UAAU,EAAE,qEAAqE;oBACjF,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,SAAS;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,WAAW,EAAE;wBACX,WAAW,EAAE,yMAAyM;wBACtN,MAAM,EAAE,oEAAoE;wBAC5E,KAAK,EAAE,wGAAwG;qBAChH;oBACD,YAAY,EAAE;wBACZ,WAAW,EAAE,0EAA0E;wBACvF,eAAe,EAAE;4BACf,2CAA2C;4BAC3C,6CAA6C;4BAC7C,uDAAuD;yBACxD;qBACF;iBACF,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,gFAAgF;QAChF,kEAAkE;QAClE,gFAAgF;QAEhF,wDAAwD;QACxD,qEAAqE;QACrE,+CAA+C;QAC/C,MAAM,sBAAsB,GAAG,uDAAuD,CAAC;QAEvF,IAAI,WAAW,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC9C,yCAAyC;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACzE,MAAM,yBAAyB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACnD,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtC,OAAO,CACL,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAC1E,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;wBAC5E,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;wBAChF,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CACrE,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,yBAAyB,EAAE,CAAC;gBAC9B,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;oBACpC,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,MAAM;oBAClB,OAAO,EAAE,6DAA6D;oBACtE,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,UAAU,EAAE,gFAAgF;oBAC5F,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,SAAS;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,WAAW,EAAE;wBACX,WAAW,EAAE,+NAA+N;wBAC5O,MAAM,EAAE,6EAA6E;wBACrF,KAAK,EAAE,2KAA2K;qBACnL;oBACD,YAAY,EAAE;wBACZ,WAAW,EAAE,+FAA+F;wBAC5G,eAAe,EAAE;4BACf,4CAA4C;4BAC5C,0CAA0C;4BAC1C,4CAA4C;4BAC5C,wCAAwC;4BACxC,wCAAwC;4BACxC,sDAAsD;yBACvD;qBACF;iBACF,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,uFAAuF;QACvF,MAAM,oBAAoB,GAAG,wEAAwE,CAAC;QAEtG,IAAI,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5C,kDAAkD;YAClD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACzE,MAAM,oBAAoB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC9C,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtC,OAAO,CACL,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACrC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACrC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAClC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAClC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,oBAAoB,EAAE,CAAC;gBACzB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;oBACpC,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,MAAM;oBAClB,OAAO,EAAE,gFAAgF;oBACzF,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,UAAU,EAAE,8EAA8E;oBAC1F,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,SAAS;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,WAAW,EAAE;wBACX,WAAW,EAAE,2KAA2K;wBACxL,MAAM,EAAE,mFAAmF;wBAC3F,KAAK,EAAE,0NAA0N;qBAClO;oBACD,YAAY,EAAE;wBACZ,WAAW,EAAE,4FAA4F;wBACzG,eAAe,EAAE;4BACf,+BAA+B;4BAC/B,iCAAiC;4BACjC,gCAAgC;4BAChC,8BAA8B;4BAC9B,mCAAmC;4BACnC,qCAAqC;yBACtC;qBACF;iBACF,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,uDAAuD;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC9E,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAChF,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAElC,uCAAuC;YACvC,MAAM,mBAAmB,GAAG,WAAW,CAAC,KAAK,CAAC,qCAAqC,CAAC;gBACvD,WAAW,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAE9F,IAAI,mBAAmB,EAAE,CAAC;gBACxB,eAAe,CAAC,IAAI,CAClB,IAAA,2DAAqC,EAAC;oBACpC,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,kEAAkE;oBAC3E,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,UAAU,EAAE,+DAA+D;oBAC3E,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,SAAS;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,WAAW,EAAE;wBACX,WAAW,EAAE,6FAA6F;wBAC1G,MAAM,EAAE,uCAAuC;wBAC/C,KAAK,EAAE,+EAA+E;qBACvF;oBACD,YAAY,EAAE;wBACZ,WAAW,EAAE,4EAA4E;wBACzF,eAAe,EAAE;4BACf,yBAAyB;4BACzB,qBAAqB;4BACrB,+BAA+B;4BAC/B,uBAAuB;yBACxB;qBACF;iBACF,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;IAEH,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * JavaScript Software and Data Integrity Security Checks
3
+ * OWASP A08:2025 - Software and Data Integrity Failures
4
+ *
5
+ * Detects missing integrity verification for code, packages, and data.
6
+ * This category covers supply chain attacks, unsigned code, and missing integrity checks.
7
+ *
8
+ * Created: Dec 30, 2025
9
+ * Purpose: Detect software integrity vulnerabilities that enable supply chain attacks
10
+ */
11
+ import { SecurityVulnerability } from '../../types';
12
+ /**
13
+ * Checks for software integrity vulnerabilities in JavaScript code
14
+ *
15
+ * Covers:
16
+ * - Check #1: Dynamic code loading without integrity verification (HIGH)
17
+ * - Check #2: Missing Subresource Integrity (SRI) for CDN scripts (MEDIUM)
18
+ * - Check #3: Package installation without lock files (MEDIUM)
19
+ * - Check #4: Downloading executable code from HTTP (not HTTPS) (HIGH)
20
+ *
21
+ * @param lines - Array of code lines
22
+ * @returns Array of security vulnerabilities found
23
+ */
24
+ export declare function checkSoftwareIntegrity(lines: string[]): SecurityVulnerability[];
25
+ //# sourceMappingURL=software-integrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"software-integrity.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/software-integrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EAAE,GACd,qBAAqB,EAAE,CAoPzB"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript Software and Data Integrity Security Checks
4
+ * OWASP A08:2025 - Software and Data Integrity Failures
5
+ *
6
+ * Detects missing integrity verification for code, packages, and data.
7
+ * This category covers supply chain attacks, unsigned code, and missing integrity checks.
8
+ *
9
+ * Created: Dec 30, 2025
10
+ * Purpose: Detect software integrity vulnerabilities that enable supply chain attacks
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.checkSoftwareIntegrity = checkSoftwareIntegrity;
14
+ const createVulnerability_1 = require("../utils/createVulnerability");
15
+ /**
16
+ * Checks for software integrity vulnerabilities in JavaScript code
17
+ *
18
+ * Covers:
19
+ * - Check #1: Dynamic code loading without integrity verification (HIGH)
20
+ * - Check #2: Missing Subresource Integrity (SRI) for CDN scripts (MEDIUM)
21
+ * - Check #3: Package installation without lock files (MEDIUM)
22
+ * - Check #4: Downloading executable code from HTTP (not HTTPS) (HIGH)
23
+ *
24
+ * @param lines - Array of code lines
25
+ * @returns Array of security vulnerabilities found
26
+ */
27
+ function checkSoftwareIntegrity(lines) {
28
+ const vulnerabilities = [];
29
+ let inMultiLineComment = false;
30
+ lines.forEach((line, index) => {
31
+ const trimmedLine = line.trim();
32
+ // Track multi-line comment blocks (/* ... */)
33
+ if (trimmedLine.includes('/*')) {
34
+ inMultiLineComment = true;
35
+ }
36
+ if (trimmedLine.includes('*/')) {
37
+ inMultiLineComment = false;
38
+ return;
39
+ }
40
+ // Skip comments and empty lines
41
+ if (!trimmedLine ||
42
+ inMultiLineComment ||
43
+ trimmedLine.startsWith('//') ||
44
+ trimmedLine.startsWith('*')) {
45
+ return;
46
+ }
47
+ const lowerLine = trimmedLine.toLowerCase();
48
+ // Check #1: Dynamic script loading without integrity check
49
+ // Pattern: Loading external scripts dynamically via createElement, require(), import()
50
+ const dynamicScriptPattern = /createElement\s*\(\s*['"`]script/i;
51
+ const dynamicImportPattern = /import\s*\(\s*['"`]http/i;
52
+ const requirePattern = /require\s*\(\s*['"`]http/i;
53
+ if (trimmedLine.match(dynamicScriptPattern) ||
54
+ trimmedLine.match(dynamicImportPattern) ||
55
+ trimmedLine.match(requirePattern)) {
56
+ // Check for integrity attribute in next few lines
57
+ const nextLines = lines.slice(index, Math.min(index + 10, lines.length));
58
+ const hasIntegrityCheck = nextLines.some(l => {
59
+ const lowerNextLine = l.toLowerCase();
60
+ return (lowerNextLine.includes('integrity') ||
61
+ lowerNextLine.includes('sha256') ||
62
+ lowerNextLine.includes('sha384') ||
63
+ lowerNextLine.includes('sha512') ||
64
+ lowerNextLine.includes('checksum') ||
65
+ lowerNextLine.includes('hash'));
66
+ });
67
+ if (!hasIntegrityCheck) {
68
+ vulnerabilities.push((0, createVulnerability_1.createJavaScriptSecurityVulnerability)('dynamic-script-no-integrity', 'Dynamic script loading without integrity verification - vulnerable to supply chain attacks', 'Add Subresource Integrity (SRI) hash to verify script integrity: script.integrity = "sha384-..."', index + 1, 'Loading external scripts without integrity verification allows attackers to inject malicious code if the CDN is compromised or the connection is intercepted.', 'const script = document.createElement("script"); script.src = "https://cdn.com/lib.js"; → CDN compromise injects malicious code', [
69
+ 'Supply chain attacks via CDN compromise',
70
+ 'Man-in-the-middle code injection',
71
+ 'Remote code execution from tampered scripts',
72
+ 'Data theft via malicious code',
73
+ 'Cryptojacking and malware distribution'
74
+ ], 'const script = document.createElement("script");\nscript.src = "https://cdn.com/lib.js";\ndocument.body.appendChild(script);', 'const script = document.createElement("script");\nscript.src = "https://cdn.com/lib.js";\nscript.integrity = "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/ux...";\nscript.crossOrigin = "anonymous";\ndocument.body.appendChild(script);', 'Always verify integrity of dynamically loaded scripts using SRI hashes to prevent supply chain attacks.'));
75
+ }
76
+ }
77
+ // Check #2: Missing SRI in HTML script tags loaded from CDN
78
+ // Pattern: <script src="https://cdn.com/lib.js"></script> (without integrity attribute)
79
+ const scriptTagPattern = /<script\s+src\s*=\s*['"`]https?:\/\/(cdn|unpkg|jsdelivr|cdnjs)/i;
80
+ if (trimmedLine.match(scriptTagPattern)) {
81
+ // Check if the same line or next line has integrity attribute
82
+ const hasIntegrity = trimmedLine.includes('integrity') ||
83
+ (index + 1 < lines.length && lines[index + 1].includes('integrity'));
84
+ if (!hasIntegrity) {
85
+ vulnerabilities.push((0, createVulnerability_1.createJavaScriptSecurityVulnerability)('missing-sri-cdn', 'CDN script without Subresource Integrity (SRI) - vulnerable if CDN is compromised', 'Add integrity attribute with SRI hash: <script src="..." integrity="sha384-..." crossorigin="anonymous">', index + 1, 'Scripts loaded from CDNs without SRI can be tampered with if the CDN is compromised or the connection is intercepted, allowing arbitrary code execution.', '<script src="https://cdn.com/jquery.js"></script> → If CDN is hacked, malicious code executes on your site', [
86
+ 'CDN compromise enables code injection',
87
+ 'Supply chain attacks',
88
+ 'Malicious code execution on all pages',
89
+ 'Session hijacking and data theft',
90
+ 'SEO poisoning and defacement'
91
+ ], '<script src="https://cdn.com/jquery.min.js"></script>', '<script src="https://cdn.com/jquery.min.js"\n integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cq..."\n crossorigin="anonymous"></script>', 'Use SRI for all scripts loaded from third-party CDNs to prevent supply chain attacks.'));
92
+ }
93
+ }
94
+ // Check #3: Downloading executable code from external sources
95
+ // Pattern: fetch("http://example.com/code.js").then(code => eval(code))
96
+ // Pattern: downloading .js, .wasm, .jar files from URLs
97
+ const downloadCodePattern = /(fetch|axios\.get|http\.get|https\.get|request)\s*\(\s*['"`]http.*\.(js|wasm|jar|exe|dll|so)/i;
98
+ const downloadThenEvalPattern = /fetch.*\.then.*eval|axios.*\.then.*eval|http\.get.*eval/i;
99
+ if (trimmedLine.match(downloadCodePattern) || trimmedLine.match(downloadThenEvalPattern)) {
100
+ // Check for integrity verification
101
+ const nextLines = lines.slice(index, Math.min(index + 15, lines.length));
102
+ const hasVerification = nextLines.some(l => {
103
+ const lowerNextLine = l.toLowerCase();
104
+ return (lowerNextLine.includes('verify') ||
105
+ lowerNextLine.includes('checksum') ||
106
+ lowerNextLine.includes('hash') ||
107
+ lowerNextLine.includes('signature') ||
108
+ lowerNextLine.includes('integrity') ||
109
+ lowerNextLine.includes('sha256') ||
110
+ lowerNextLine.includes('sha384') ||
111
+ lowerNextLine.includes('sha512'));
112
+ });
113
+ if (!hasVerification) {
114
+ vulnerabilities.push((0, createVulnerability_1.createJavaScriptSecurityVulnerability)('unverified-code-download', 'Downloading and executing code without integrity verification - enables remote code injection', 'Verify code integrity using cryptographic hashes before execution', index + 1, 'Downloading and executing code from external sources without integrity verification allows attackers to inject malicious code through man-in-the-middle attacks or compromised servers.', 'fetch("http://cdn.com/plugin.js").then(r => r.text()).then(code => eval(code)) → MITM attacker injects malicious code', [
115
+ 'Remote code execution from tampered downloads',
116
+ 'Supply chain attacks',
117
+ 'Man-in-the-middle code injection',
118
+ 'Malware installation',
119
+ 'Complete application compromise'
120
+ ], 'fetch("http://example.com/plugin.js")\n .then(r => r.text())\n .then(code => eval(code));', '// Verify integrity before execution\nconst expectedHash = "sha256-abc123...";\nfetch("https://example.com/plugin.js")\n .then(r => r.text())\n .then(async code => {\n const hash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(code));\n if (hash !== expectedHash) throw new Error("Integrity check failed");\n eval(code);\n });', 'Always verify code integrity using cryptographic hashes before executing downloaded code.'));
121
+ }
122
+ }
123
+ // Check #4: HTTP (not HTTPS) for code/package downloads
124
+ // Pattern: Loading scripts, packages, or code from HTTP URLs (not HTTPS)
125
+ const httpCodePattern = /(fetch|axios|http\.get|request|import|require|script\.src\s*=)\s*.*['"`]http:\/\/.*\.(js|json|wasm|jar)/i;
126
+ if (trimmedLine.match(httpCodePattern)) {
127
+ vulnerabilities.push((0, createVulnerability_1.createJavaScriptSecurityVulnerability)('http-code-download', 'Downloading code over HTTP (not HTTPS) - vulnerable to man-in-the-middle attacks', 'Use HTTPS for all code downloads to prevent tampering', index + 1, 'Downloading code over unencrypted HTTP connections allows attackers to intercept and modify the code in transit, injecting malicious payloads.', 'fetch("http://cdn.com/lib.js") → Network attacker intercepts and injects crypto-mining malware', [
128
+ 'Man-in-the-middle code injection',
129
+ 'Malware distribution',
130
+ 'Remote code execution',
131
+ 'Data theft via injected code',
132
+ 'Cryptojacking'
133
+ ], 'fetch("http://cdn.com/library.js")', 'fetch("https://cdn.com/library.js") // Use HTTPS', 'Always use HTTPS for downloading code, packages, and scripts to prevent man-in-the-middle tampering.'));
134
+ }
135
+ // Check #5: npm install without package-lock.json (mentioned in code comments or documentation)
136
+ // This is more of a project-level check, so we look for documentation about missing lock files
137
+ if (lowerLine.includes('npm install') && lowerLine.includes('no-save')) {
138
+ vulnerabilities.push((0, createVulnerability_1.createJavaScriptSecurityVulnerability)('npm-no-lock', 'npm install with --no-save skips lock file - enables dependency confusion attacks', 'Remove --no-save flag to generate package-lock.json for reproducible builds', index + 1, 'Installing npm packages without generating a lock file allows package versions to change between installs, enabling dependency confusion and supply chain attacks.', 'npm install --no-save package → Next install may fetch compromised version', [
139
+ 'Dependency confusion attacks',
140
+ 'Supply chain compromise',
141
+ 'Non-reproducible builds',
142
+ 'Version tampering',
143
+ 'Malicious package substitution'
144
+ ], 'npm install --no-save lodash', 'npm install lodash // Generates package-lock.json', 'Always use lock files (package-lock.json, yarn.lock) to ensure reproducible and secure dependency installations.'));
145
+ }
146
+ // Check #6: Unsigned/unverified package installations
147
+ // Pattern: Using npm/yarn without signature verification
148
+ if ((lowerLine.includes('npm install') || lowerLine.includes('yarn add')) &&
149
+ !lowerLine.includes('--verify-signatures') &&
150
+ !lowerLine.includes('--integrity')) {
151
+ // Only flag if it's installing from a non-standard registry or specific package
152
+ const isNonStandardRegistry = lowerLine.includes('--registry') ||
153
+ lowerLine.includes('http://') ||
154
+ lowerLine.includes('https://registry.npmjs.org') === false;
155
+ if (isNonStandardRegistry) {
156
+ vulnerabilities.push((0, createVulnerability_1.createJavaScriptSecurityVulnerability)('unverified-package-install', 'Installing packages from non-standard registry without signature verification', 'Use npm audit signatures or verify package integrity before installation', index + 1, 'Installing packages from non-standard registries without signature verification allows attackers to substitute malicious packages.', 'npm install --registry=http://malicious.com package → Installs compromised version', [
157
+ 'Malicious package installation',
158
+ 'Supply chain attacks',
159
+ 'Backdoor injection',
160
+ 'Code execution via compromised dependencies',
161
+ 'Data exfiltration'
162
+ ], 'npm install --registry=http://custom-registry.com package', 'npm install --registry=https://custom-registry.com package\nnpm audit signatures // Verify package integrity', 'Use package signature verification and trusted registries to prevent supply chain attacks.'));
163
+ }
164
+ }
165
+ });
166
+ return vulnerabilities;
167
+ }
168
+ //# sourceMappingURL=software-integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"software-integrity.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/software-integrity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * JavaScript Storage Security Detection Module
3
+ *
4
+ * Detects insecure data storage vulnerabilities:
5
+ * - localStorage/sessionStorage for sensitive data
6
+ * - Missing security flags on cookies
7
+ * - Insecure data transmission
8
+ *
9
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
10
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
11
+ *
12
+ * @module storage-security
13
+ */
14
+ import { SecurityVulnerability } from '../../types';
15
+ /**
16
+ * Type for createSecurityVulnerability function
17
+ */
18
+ export type CreateVulnerabilityFn = (id: string, message: string, fix: string, lineNumber: number, explanation: string, example: string, impacts: string[], codeExample: string, fixedCodeExample: string, fixDetails: string) => SecurityVulnerability;
19
+ /**
20
+ * Check for storage security vulnerabilities in JavaScript code
21
+ *
22
+ * @param code - Full source code
23
+ * @param createVulnerability - Function to create vulnerability objects
24
+ * @returns Array of detected vulnerabilities
25
+ */
26
+ export declare function checkStorageSecurity(code: string, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability[];
27
+ //# sourceMappingURL=storage-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-security.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/storage-security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,KACf,qBAAqB,CAAC;AAE3B;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,EAAE,CA+JzB"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript Storage Security Detection Module
4
+ *
5
+ * Detects insecure data storage vulnerabilities:
6
+ * - localStorage/sessionStorage for sensitive data
7
+ * - Missing security flags on cookies
8
+ * - Insecure data transmission
9
+ *
10
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
11
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
12
+ *
13
+ * @module storage-security
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.checkStorageSecurity = checkStorageSecurity;
17
+ /**
18
+ * Check for storage security vulnerabilities in JavaScript code
19
+ *
20
+ * @param code - Full source code
21
+ * @param createVulnerability - Function to create vulnerability objects
22
+ * @returns Array of detected vulnerabilities
23
+ */
24
+ function checkStorageSecurity(code, createVulnerability) {
25
+ const vulnerabilities = [];
26
+ const lines = code.split('\n');
27
+ let inMultiLineComment = false;
28
+ lines.forEach((line, index) => {
29
+ const lineNumber = index + 1;
30
+ const trimmed = line.trim();
31
+ // Track multi-line comment blocks
32
+ if (trimmed.includes('/*')) {
33
+ inMultiLineComment = true;
34
+ }
35
+ if (trimmed.includes('*/')) {
36
+ inMultiLineComment = false;
37
+ return;
38
+ }
39
+ // Skip comments and empty lines
40
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
41
+ return;
42
+ }
43
+ // OWASP A02:2021 - Cryptographic Failures
44
+ // 1. localStorage for sensitive data - MEDIUM
45
+ if (trimmed.match(/localStorage\.(setItem|set)\([^)]*(?:token|password|key|secret)/i)) {
46
+ vulnerabilities.push(createVulnerability('insecure-storage', 'localStorage is not secure for sensitive data', 'Use httpOnly cookies or server-side sessions', lineNumber, 'localStorage is accessible to any JavaScript on the page, making it vulnerable to XSS attacks. Stored data persists indefinitely.', 'localStorage.setItem("authToken", token) // Accessible to any script, vulnerable to XSS', [
47
+ 'Token theft via XSS',
48
+ 'Credential exposure',
49
+ 'No protection from malicious scripts',
50
+ 'Data persists across sessions (privacy issue)'
51
+ ], 'localStorage.setItem("authToken", jwtToken);', '// Server-side: Set httpOnly cookie (not accessible to JavaScript)\nres.cookie("authToken", jwtToken, { httpOnly: true, secure: true, sameSite: "strict" });', 'Store sensitive data server-side or in httpOnly cookies. Use sessionStorage for temporary data, but never for sensitive information'));
52
+ }
53
+ // 2. sessionStorage for sensitive data - MEDIUM
54
+ if (trimmed.match(/sessionStorage\.(setItem|set)\([^)]*(?:token|password|key|secret)/i)) {
55
+ vulnerabilities.push(createVulnerability('insecure-storage', 'sessionStorage is vulnerable to XSS attacks', 'Use httpOnly cookies or server-side sessions', lineNumber, 'sessionStorage is accessible to any JavaScript on the page, making it vulnerable to XSS attacks. While it clears on tab close, it\'s still exposed during the session.', 'sessionStorage.setItem("authToken", token) // Accessible to any script, vulnerable to XSS', [
56
+ 'Token theft via XSS',
57
+ 'Credential exposure',
58
+ 'No protection from malicious scripts',
59
+ 'Cross-tab vulnerabilities'
60
+ ], 'sessionStorage.setItem("authToken", jwtToken);', '// Server-side: Set httpOnly cookie (not accessible to JavaScript)\nres.cookie("authToken", jwtToken, { httpOnly: true, secure: true, sameSite: "strict" });', 'Store sensitive data server-side or in httpOnly cookies. sessionStorage is cleared on tab close but remains vulnerable to XSS during the session'));
61
+ }
62
+ // 3. Storing credit card data - CRITICAL
63
+ if (trimmed.match(/localStorage|sessionStorage|cookie/i) &&
64
+ trimmed.match(/card|cvv|cvc|expiry|ccn|credit/i)) {
65
+ vulnerabilities.push(createVulnerability('pci-dss-violation', 'Storing credit card data violates PCI-DSS compliance', 'Never store credit card data locally - use tokenization or payment gateway APIs', lineNumber, 'Storing credit card data (even temporarily) violates PCI-DSS compliance standards and creates massive liability. Use payment gateway tokenization instead.', 'localStorage.setItem("cardNumber", ccn) // PCI-DSS violation, massive fines, liability', [
66
+ 'PCI-DSS compliance violations (fines up to $500K/month)',
67
+ 'Credit card theft',
68
+ 'Financial fraud',
69
+ 'Legal liability',
70
+ 'Brand reputation damage'
71
+ ], 'localStorage.setItem("savedCard", cardNumber);', '// Use payment gateway tokenization:\nconst token = await stripe.createToken({ number: cardNumber });\n// Only store the token, never the actual card data', 'NEVER store credit card numbers, CVV, or expiry dates. Use payment gateway APIs (Stripe, PayPal) that provide tokenization'));
72
+ }
73
+ // 4. Unencrypted sensitive data in localStorage - HIGH
74
+ if (trimmed.match(/localStorage\.setItem|sessionStorage\.setItem/i) &&
75
+ !trimmed.match(/encrypt|cipher|AES/) &&
76
+ trimmed.match(/ssn|social.*security|passport|license|medical|health/i)) {
77
+ vulnerabilities.push(createVulnerability('unencrypted-pii', 'Storing unencrypted PII (Personally Identifiable Information) in browser storage', 'Avoid storing PII locally. If absolutely necessary, encrypt it client-side before storage', lineNumber, 'Storing PII in browser storage without encryption exposes sensitive personal data to XSS attacks and creates GDPR/privacy law violations.', 'localStorage.setItem("ssn", userSSN) // Unencrypted PII accessible to any script', [
78
+ 'GDPR/privacy law violations',
79
+ 'Identity theft',
80
+ 'Medical privacy violations (HIPAA)',
81
+ 'PII exposure via XSS',
82
+ 'Regulatory fines'
83
+ ], 'localStorage.setItem("ssn", userSSN);', '// Option 1: Don\'t store PII locally\n// Option 2: If necessary, encrypt before storing:\nconst crypto = require("crypto-js");\nconst encrypted = crypto.AES.encrypt(data, encryptionKey).toString();\nlocalStorage.setItem("data", encrypted);', 'Avoid storing PII in browser storage. If absolutely required, encrypt it client-side using strong encryption (AES-256) before storage'));
84
+ }
85
+ // 5. IndexedDB for sensitive data without encryption - MEDIUM
86
+ if (trimmed.match(/indexedDB|IDBDatabase/i) &&
87
+ trimmed.match(/password|token|key|secret|ssn|card/i) &&
88
+ !trimmed.match(/encrypt|cipher/i)) {
89
+ vulnerabilities.push(createVulnerability('insecure-indexeddb', 'Storing sensitive data in IndexedDB without encryption', 'Encrypt sensitive data before storing in IndexedDB', lineNumber, 'IndexedDB stores data unencrypted on disk. Any process with file system access (malware, other apps) can read the database directly.', 'db.put({ id: 1, password: userPassword }) // Stored unencrypted on disk', [
90
+ 'Data exposure to local malware',
91
+ 'File system access vulnerabilities',
92
+ 'Offline data theft',
93
+ 'No protection at rest'
94
+ ], 'const store = db.transaction(["users"], "readwrite").objectStore("users");\nstore.add({ id: 1, password: password });', 'const crypto = require("crypto-js");\nconst encrypted = crypto.AES.encrypt(password, key).toString();\nstore.add({ id: 1, password: encrypted });', 'Encrypt all sensitive data before storing in IndexedDB using strong client-side encryption (AES-256)'));
95
+ }
96
+ // 6. Web SQL Database usage - HIGH (deprecated)
97
+ if (trimmed.match(/openDatabase|executeSql/i)) {
98
+ vulnerabilities.push(createVulnerability('deprecated-websql', 'Web SQL Database is deprecated and removed from standards', 'Migrate to IndexedDB or server-side storage', lineNumber, 'Web SQL Database has been removed from web standards and is no longer supported in modern browsers. It also lacks security features.', 'const db = openDatabase("mydb", "1.0", "My Database", 2 * 1024 * 1024); // Deprecated API', [
99
+ 'Browser incompatibility (removed from standards)',
100
+ 'No future support or security updates',
101
+ 'Potential data loss during migration',
102
+ 'SQL injection if queries not parameterized'
103
+ ], 'const db = openDatabase("mydb", "1.0", "Database", 5 * 1024 * 1024);', '// Migrate to IndexedDB:\nconst request = indexedDB.open("mydb", 1);\nrequest.onsuccess = (event) => {\n const db = event.target.result;\n // Use IndexedDB instead\n};', 'Migrate from Web SQL to IndexedDB for client-side storage, or use server-side storage for sensitive data'));
104
+ }
105
+ });
106
+ return vulnerabilities;
107
+ }
108
+ //# sourceMappingURL=storage-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-security.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/storage-security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * JavaScript XSS and DOM Security Detection Module
3
+ *
4
+ * Detects Cross-Site Scripting (XSS) and DOM manipulation vulnerabilities:
5
+ * - innerHTML/outerHTML with unsanitized content
6
+ * - document.write usage
7
+ * - Open redirect vulnerabilities
8
+ * - Insecure cookie configuration
9
+ *
10
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
11
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
12
+ *
13
+ * @module xss-dom-security
14
+ */
15
+ import { SecurityVulnerability } from '../../types';
16
+ /**
17
+ * Type for createSecurityVulnerability function
18
+ */
19
+ export type CreateVulnerabilityFn = (id: string, message: string, fix: string, lineNumber: number, explanation: string, example: string, impacts: string[], codeExample: string, fixedCodeExample: string, fixDetails: string) => SecurityVulnerability;
20
+ /**
21
+ * Check for XSS and DOM security vulnerabilities in JavaScript code
22
+ *
23
+ * @param code - Full source code
24
+ * @param createVulnerability - Function to create vulnerability objects
25
+ * @returns Array of detected vulnerabilities
26
+ */
27
+ export declare function checkXSSDOMSecurity(code: string, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability[];
28
+ //# sourceMappingURL=xss-dom-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-dom-security.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/xss-dom-security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,KACf,qBAAqB,CAAC;AAE3B;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,EAAE,CAiNzB"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript XSS and DOM Security Detection Module
4
+ *
5
+ * Detects Cross-Site Scripting (XSS) and DOM manipulation vulnerabilities:
6
+ * - innerHTML/outerHTML with unsanitized content
7
+ * - document.write usage
8
+ * - Open redirect vulnerabilities
9
+ * - Insecure cookie configuration
10
+ *
11
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
12
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
13
+ *
14
+ * @module xss-dom-security
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.checkXSSDOMSecurity = checkXSSDOMSecurity;
18
+ /**
19
+ * Check for XSS and DOM security vulnerabilities in JavaScript code
20
+ *
21
+ * @param code - Full source code
22
+ * @param createVulnerability - Function to create vulnerability objects
23
+ * @returns Array of detected vulnerabilities
24
+ */
25
+ function checkXSSDOMSecurity(code, createVulnerability) {
26
+ const vulnerabilities = [];
27
+ const lines = code.split('\n');
28
+ let inMultiLineComment = false;
29
+ lines.forEach((line, index) => {
30
+ const lineNumber = index + 1;
31
+ const trimmed = line.trim();
32
+ // Track multi-line comment blocks
33
+ if (trimmed.includes('/*')) {
34
+ inMultiLineComment = true;
35
+ }
36
+ if (trimmed.includes('*/')) {
37
+ inMultiLineComment = false;
38
+ return;
39
+ }
40
+ // Skip comments and empty lines
41
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
42
+ return;
43
+ }
44
+ // OWASP A03:2021 - XSS (Cross-Site Scripting)
45
+ // 1. innerHTML with variables - CRITICAL (ENHANCED Dec 30, 2025)
46
+ // BUGFIX: Previously only detected concatenation (+ or ${}), missed direct assignment
47
+ // Now catches: document.innerHTML = userInput (no concat) AND element.innerHTML = "<div>" + userInput
48
+ const innerHTMLMatch = trimmed.match(/\.innerHTML\s*=/);
49
+ if (innerHTMLMatch) {
50
+ // Detect dynamic content (concatenation, template literals, OR variable assignment)
51
+ const hasConcatenation = trimmed.includes('+') || trimmed.includes('${');
52
+ const hasVariableAssignment = trimmed.match(/\.innerHTML\s*=\s*[a-zA-Z_$][a-zA-Z0-9_$]*/); // = variableName
53
+ const isStaticString = trimmed.match(/\.innerHTML\s*=\s*["'`][^"'`]*["'`]\s*;?\s*$/); // = "static string" only
54
+ if ((hasConcatenation || hasVariableAssignment) && !isStaticString) {
55
+ vulnerabilities.push(createVulnerability('xss', 'XSS: innerHTML with unsanitized user content', 'Use textContent, DOMPurify.sanitize(), or createElement()', lineNumber, 'An attacker can inject malicious JavaScript code through user input, stealing session cookies, credentials, or performing actions on behalf of the user.', 'element.innerHTML = userInput where userInput = "<img src=x onerror=alert(document.cookie)>"', [
56
+ 'Session hijacking (cookie theft)',
57
+ 'Credential theft (keylogging)',
58
+ 'Phishing attacks',
59
+ 'Malware distribution',
60
+ 'Defacement'
61
+ ], 'element.innerHTML = userContent;', 'element.textContent = userContent; // Safe for plain text\n// Or: element.innerHTML = DOMPurify.sanitize(userContent);', 'Use textContent for plain text, or sanitize HTML with DOMPurify before setting innerHTML'));
62
+ }
63
+ }
64
+ // 2. outerHTML - CRITICAL (ENHANCED Dec 30, 2025)
65
+ // Same fix as innerHTML: catch direct variable assignment
66
+ const outerHTMLMatch = trimmed.match(/\.outerHTML\s*=/);
67
+ if (outerHTMLMatch) {
68
+ const hasConcatenation = trimmed.includes('+') || trimmed.includes('${');
69
+ const hasVariableAssignment = trimmed.match(/\.outerHTML\s*=\s*[a-zA-Z_$][a-zA-Z0-9_$]*/);
70
+ const isStaticString = trimmed.match(/\.outerHTML\s*=\s*["'`][^"'`]*["'`]\s*;?\s*$/);
71
+ if ((hasConcatenation || hasVariableAssignment) && !isStaticString) {
72
+ vulnerabilities.push(createVulnerability('xss', 'XSS: outerHTML with unsanitized variables', 'Use safe DOM methods or DOMPurify.sanitize()', lineNumber, 'Setting outerHTML with user content allows XSS attacks by replacing the entire element with malicious HTML.', 'element.outerHTML = userHTML where userHTML contains <img src=x onerror=alert(1)>', [
73
+ 'Cross-site scripting (XSS)',
74
+ 'Session hijacking',
75
+ 'Credential theft',
76
+ 'Malware distribution'
77
+ ], 'element.outerHTML = userContent;', 'const div = document.createElement("div");\ndiv.textContent = userContent;\nelement.replaceWith(div);', 'Create elements using createElement() and set content with textContent, or sanitize HTML with DOMPurify'));
78
+ }
79
+ }
80
+ // 3. document.write - MEDIUM
81
+ if (trimmed.includes('document.write')) {
82
+ vulnerabilities.push(createVulnerability('document-write', 'document.write is deprecated and can cause XSS', 'Use createElement() and appendChild() instead', lineNumber, 'document.write() is synchronous, deprecated, and can be exploited for XSS if used with untrusted data.', 'document.write("<div>" + userInput + "</div>")', [
83
+ 'XSS vulnerability',
84
+ 'Performance issues (parser-blocking)',
85
+ 'Overwrites page content if called after page load'
86
+ ], 'document.write("<h1>" + title + "</h1>");', 'const h1 = document.createElement("h1");\nh1.textContent = title;\ndocument.body.appendChild(h1);', 'Use modern DOM APIs: createElement(), textContent, and appendChild()'));
87
+ }
88
+ // OWASP A01:2021 - Broken Access Control
89
+ // 4. Open redirect vulnerability - MEDIUM
90
+ if (trimmed.match(/\.redirect\s*\(/) || trimmed.match(/location\.href\s*=/) || trimmed.match(/window\.location\s*=/)) {
91
+ const hasUserInput = trimmed.match(/req\.query|req\.body|req\.params|params\.|query\.|body\./) ||
92
+ trimmed.match(/\$\{.*\}/) ||
93
+ trimmed.match(/\+\s*[\w.]+/);
94
+ if (hasUserInput) {
95
+ vulnerabilities.push(createVulnerability('open-redirect', 'Open redirect vulnerability - unvalidated URL redirect', 'Validate redirect URLs against whitelist of allowed domains', lineNumber, 'Redirecting users to attacker-controlled URLs enables phishing attacks. Users trust redirects from legitimate domains, making them vulnerable to credential theft.', 'res.redirect(req.query.url) where url = "https://evil.com/phishing" // User thinks they\'re on legitimate site', [
96
+ 'Phishing attacks (credential theft)',
97
+ 'Malware distribution',
98
+ 'OAuth token theft (authorization code interception)',
99
+ 'Reputation damage (domain used for phishing)',
100
+ 'Session hijacking'
101
+ ], 'res.redirect(req.query.returnUrl);', 'const allowedDomains = ["example.com", "app.example.com"];\nconst url = new URL(req.query.returnUrl, "https://example.com");\nif (!allowedDomains.includes(url.hostname)) {\n return res.status(400).send("Invalid redirect");\n}\nres.redirect(url.href);', 'Validate all redirect URLs against a whitelist of allowed domains. Use URL() constructor to parse and check hostname before redirecting'));
102
+ }
103
+ }
104
+ // OWASP A05:2021 - Security Misconfiguration
105
+ // 5. Insecure cookie configuration - HIGH
106
+ if (trimmed.match(/\.cookie\s*\([^)]*\)/) && trimmed.match(/res\.|response\./)) {
107
+ const hasHttpOnly = trimmed.match(/httpOnly\s*:\s*true/i);
108
+ const hasSecure = trimmed.match(/secure\s*:\s*true/i);
109
+ const hasSameSite = trimmed.match(/sameSite/i);
110
+ if (!hasHttpOnly || !hasSecure || !hasSameSite) {
111
+ vulnerabilities.push(createVulnerability('insecure-cookie', 'Cookie set without security flags (httpOnly, secure, sameSite)', 'Add httpOnly: true, secure: true, sameSite: "strict" to cookie options', lineNumber, 'Cookies without security flags are vulnerable to XSS attacks (JavaScript access), man-in-the-middle attacks (transmitted over HTTP), and CSRF attacks (cross-site request forgery).', 'res.cookie("sessionId", token) // No httpOnly = XSS can steal, no secure = transmitted over HTTP', [
112
+ 'Session hijacking via XSS (cookie theft)',
113
+ 'Man-in-the-middle attacks (HTTP transmission)',
114
+ 'CSRF attacks (cross-site requests)',
115
+ 'Session fixation attacks'
116
+ ], 'res.cookie("sessionId", sessionId);', 'res.cookie("sessionId", sessionId, {\n httpOnly: true, // Not accessible to JavaScript\n secure: true, // Only sent over HTTPS\n sameSite: "strict" // Prevents CSRF attacks\n});', 'Always set httpOnly (prevents XSS), secure (HTTPS only), and sameSite (prevents CSRF) flags on session cookies'));
117
+ }
118
+ }
119
+ // 6. Clickjacking vulnerability - MEDIUM
120
+ if (trimmed.match(/X-Frame-Options|frame-ancestors/) && trimmed.match(/ALLOW-FROM|'self'/i)) {
121
+ vulnerabilities.push(createVulnerability('clickjacking', 'Weak clickjacking protection - X-Frame-Options set to allow framing', 'Set X-Frame-Options: DENY or use Content-Security-Policy: frame-ancestors \'none\'', lineNumber, 'Allowing the page to be embedded in iframes enables clickjacking attacks where attackers overlay invisible frames to trick users into clicking malicious actions.', 'res.setHeader("X-Frame-Options", "ALLOW-FROM https://example.com") // Deprecated and allows framing', [
122
+ 'Clickjacking attacks (invisible overlay)',
123
+ 'Unauthorized actions (like/share/delete)',
124
+ 'Credential theft (fake login overlay)',
125
+ 'Malware distribution'
126
+ ], 'res.setHeader("X-Frame-Options", "SAMEORIGIN");', 'res.setHeader("X-Frame-Options", "DENY"); // Prevent all framing\n// Or: res.setHeader("Content-Security-Policy", "frame-ancestors \'none\'");', 'Use X-Frame-Options: DENY to prevent all framing, or Content-Security-Policy: frame-ancestors \'none\' for modern browsers'));
127
+ }
128
+ // 7. Missing Content-Security-Policy - MEDIUM
129
+ if (trimmed.match(/res\.setHeader|response\.setHeader/) && !trimmed.match(/Content-Security-Policy/i)) {
130
+ // Only flag if setting other security headers (indicates security awareness but CSP missing)
131
+ if (trimmed.match(/X-Frame-Options|X-Content-Type-Options|Strict-Transport-Security/i)) {
132
+ vulnerabilities.push(createVulnerability('missing-csp', 'Missing Content-Security-Policy header', 'Add Content-Security-Policy header to prevent XSS and data injection attacks', lineNumber, 'Content-Security-Policy (CSP) is a critical security header that prevents XSS attacks by restricting which scripts can execute on the page.', 'res.setHeader("X-Frame-Options", "DENY"); // Good, but missing CSP header', [
133
+ 'XSS attacks (inline scripts can execute)',
134
+ 'Data injection attacks',
135
+ 'Clickjacking (without frame-ancestors)',
136
+ 'Mixed content vulnerabilities'
137
+ ], 'res.setHeader("X-Frame-Options", "DENY");', 'res.setHeader("Content-Security-Policy", "default-src \'self\'; script-src \'self\'; object-src \'none\'");', 'Add Content-Security-Policy header to restrict script sources and prevent XSS. Start with a strict policy and relax as needed'));
138
+ }
139
+ }
140
+ });
141
+ return vulnerabilities;
142
+ }
143
+ //# sourceMappingURL=xss-dom-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-dom-security.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/xss-dom-security.ts"],"names":[],"mappings":"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"}