secure-scan 1.2.2

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 (569) hide show
  1. package/README.md +564 -0
  2. package/dist/ai/aiAnalyzer.d.ts +99 -0
  3. package/dist/ai/aiAnalyzer.d.ts.map +1 -0
  4. package/dist/ai/aiAnalyzer.js +669 -0
  5. package/dist/ai/aiAnalyzer.js.map +1 -0
  6. package/dist/ai/index.d.ts +5 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/index.js +21 -0
  9. package/dist/ai/index.js.map +1 -0
  10. package/dist/analyzers/base/baseAnalyzer.d.ts +44 -0
  11. package/dist/analyzers/base/baseAnalyzer.d.ts.map +1 -0
  12. package/dist/analyzers/base/baseAnalyzer.js +53 -0
  13. package/dist/analyzers/base/baseAnalyzer.js.map +1 -0
  14. package/dist/analyzers/base/index.d.ts +5 -0
  15. package/dist/analyzers/base/index.d.ts.map +1 -0
  16. package/dist/analyzers/base/index.js +21 -0
  17. package/dist/analyzers/base/index.js.map +1 -0
  18. package/dist/analyzers/c-cpp/cppAnalyzer.d.ts +60 -0
  19. package/dist/analyzers/c-cpp/cppAnalyzer.d.ts.map +1 -0
  20. package/dist/analyzers/c-cpp/cppAnalyzer.js +218 -0
  21. package/dist/analyzers/c-cpp/cppAnalyzer.js.map +1 -0
  22. package/dist/analyzers/c-cpp/index.d.ts +5 -0
  23. package/dist/analyzers/c-cpp/index.d.ts.map +1 -0
  24. package/dist/analyzers/c-cpp/index.js +21 -0
  25. package/dist/analyzers/c-cpp/index.js.map +1 -0
  26. package/dist/analyzers/core/engine/index.d.ts +5 -0
  27. package/dist/analyzers/core/engine/index.d.ts.map +1 -0
  28. package/dist/analyzers/core/engine/index.js +21 -0
  29. package/dist/analyzers/core/engine/index.js.map +1 -0
  30. package/dist/analyzers/core/engine/ruleEngine.d.ts +46 -0
  31. package/dist/analyzers/core/engine/ruleEngine.d.ts.map +1 -0
  32. package/dist/analyzers/core/engine/ruleEngine.js +173 -0
  33. package/dist/analyzers/core/engine/ruleEngine.js.map +1 -0
  34. package/dist/analyzers/core/index.d.ts +8 -0
  35. package/dist/analyzers/core/index.d.ts.map +1 -0
  36. package/dist/analyzers/core/index.js +24 -0
  37. package/dist/analyzers/core/index.js.map +1 -0
  38. package/dist/analyzers/core/scanner/fileScanner.d.ts +31 -0
  39. package/dist/analyzers/core/scanner/fileScanner.d.ts.map +1 -0
  40. package/dist/analyzers/core/scanner/fileScanner.js +199 -0
  41. package/dist/analyzers/core/scanner/fileScanner.js.map +1 -0
  42. package/dist/analyzers/core/scanner/index.d.ts +5 -0
  43. package/dist/analyzers/core/scanner/index.d.ts.map +1 -0
  44. package/dist/analyzers/core/scanner/index.js +21 -0
  45. package/dist/analyzers/core/scanner/index.js.map +1 -0
  46. package/dist/analyzers/core/scoring/index.d.ts +5 -0
  47. package/dist/analyzers/core/scoring/index.d.ts.map +1 -0
  48. package/dist/analyzers/core/scoring/index.js +21 -0
  49. package/dist/analyzers/core/scoring/index.js.map +1 -0
  50. package/dist/analyzers/core/scoring/riskScoring.d.ts +49 -0
  51. package/dist/analyzers/core/scoring/riskScoring.d.ts.map +1 -0
  52. package/dist/analyzers/core/scoring/riskScoring.js +180 -0
  53. package/dist/analyzers/core/scoring/riskScoring.js.map +1 -0
  54. package/dist/analyzers/core/securityScanner.d.ts +47 -0
  55. package/dist/analyzers/core/securityScanner.d.ts.map +1 -0
  56. package/dist/analyzers/core/securityScanner.js +298 -0
  57. package/dist/analyzers/core/securityScanner.js.map +1 -0
  58. package/dist/analyzers/csharp/csharpAnalyzer.d.ts +64 -0
  59. package/dist/analyzers/csharp/csharpAnalyzer.d.ts.map +1 -0
  60. package/dist/analyzers/csharp/csharpAnalyzer.js +232 -0
  61. package/dist/analyzers/csharp/csharpAnalyzer.js.map +1 -0
  62. package/dist/analyzers/csharp/index.d.ts +5 -0
  63. package/dist/analyzers/csharp/index.d.ts.map +1 -0
  64. package/dist/analyzers/csharp/index.js +21 -0
  65. package/dist/analyzers/csharp/index.js.map +1 -0
  66. package/dist/analyzers/iac/iacAnalyzer.d.ts +36 -0
  67. package/dist/analyzers/iac/iacAnalyzer.d.ts.map +1 -0
  68. package/dist/analyzers/iac/iacAnalyzer.js +182 -0
  69. package/dist/analyzers/iac/iacAnalyzer.js.map +1 -0
  70. package/dist/analyzers/iac/index.d.ts +5 -0
  71. package/dist/analyzers/iac/index.d.ts.map +1 -0
  72. package/dist/analyzers/iac/index.js +21 -0
  73. package/dist/analyzers/iac/index.js.map +1 -0
  74. package/dist/analyzers/index.d.ts +30 -0
  75. package/dist/analyzers/index.d.ts.map +1 -0
  76. package/dist/analyzers/index.js +80 -0
  77. package/dist/analyzers/index.js.map +1 -0
  78. package/dist/analyzers/java/index.d.ts +5 -0
  79. package/dist/analyzers/java/index.d.ts.map +1 -0
  80. package/dist/analyzers/java/index.js +21 -0
  81. package/dist/analyzers/java/index.js.map +1 -0
  82. package/dist/analyzers/java/javaAnalyzer.d.ts +64 -0
  83. package/dist/analyzers/java/javaAnalyzer.d.ts.map +1 -0
  84. package/dist/analyzers/java/javaAnalyzer.js +224 -0
  85. package/dist/analyzers/java/javaAnalyzer.js.map +1 -0
  86. package/dist/analyzers/javascript/astUtils.d.ts +170 -0
  87. package/dist/analyzers/javascript/astUtils.d.ts.map +1 -0
  88. package/dist/analyzers/javascript/astUtils.js +700 -0
  89. package/dist/analyzers/javascript/astUtils.js.map +1 -0
  90. package/dist/analyzers/javascript/index.d.ts +18 -0
  91. package/dist/analyzers/javascript/index.d.ts.map +1 -0
  92. package/dist/analyzers/javascript/index.js +50 -0
  93. package/dist/analyzers/javascript/index.js.map +1 -0
  94. package/dist/analyzers/javascript/javascriptAnalyzer.d.ts +111 -0
  95. package/dist/analyzers/javascript/javascriptAnalyzer.d.ts.map +1 -0
  96. package/dist/analyzers/javascript/javascriptAnalyzer.js +860 -0
  97. package/dist/analyzers/javascript/javascriptAnalyzer.js.map +1 -0
  98. package/dist/analyzers/javascript/malwareDetector.d.ts +102 -0
  99. package/dist/analyzers/javascript/malwareDetector.d.ts.map +1 -0
  100. package/dist/analyzers/javascript/malwareDetector.js +616 -0
  101. package/dist/analyzers/javascript/malwareDetector.js.map +1 -0
  102. package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts +87 -0
  103. package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts.map +1 -0
  104. package/dist/analyzers/javascript/packageJsonAnalyzer.js +553 -0
  105. package/dist/analyzers/javascript/packageJsonAnalyzer.js.map +1 -0
  106. package/dist/analyzers/javascript/taintAnalyzer.d.ts +120 -0
  107. package/dist/analyzers/javascript/taintAnalyzer.d.ts.map +1 -0
  108. package/dist/analyzers/javascript/taintAnalyzer.js +526 -0
  109. package/dist/analyzers/javascript/taintAnalyzer.js.map +1 -0
  110. package/dist/analyzers/php/index.d.ts +5 -0
  111. package/dist/analyzers/php/index.d.ts.map +1 -0
  112. package/dist/analyzers/php/index.js +21 -0
  113. package/dist/analyzers/php/index.js.map +1 -0
  114. package/dist/analyzers/php/phpAnalyzer.d.ts +56 -0
  115. package/dist/analyzers/php/phpAnalyzer.d.ts.map +1 -0
  116. package/dist/analyzers/php/phpAnalyzer.js +202 -0
  117. package/dist/analyzers/php/phpAnalyzer.js.map +1 -0
  118. package/dist/analyzers/python/index.d.ts +5 -0
  119. package/dist/analyzers/python/index.d.ts.map +1 -0
  120. package/dist/analyzers/python/index.js +21 -0
  121. package/dist/analyzers/python/index.js.map +1 -0
  122. package/dist/analyzers/python/pythonAnalyzer.d.ts +64 -0
  123. package/dist/analyzers/python/pythonAnalyzer.d.ts.map +1 -0
  124. package/dist/analyzers/python/pythonAnalyzer.js +226 -0
  125. package/dist/analyzers/python/pythonAnalyzer.js.map +1 -0
  126. package/dist/cli/index.d.ts +7 -0
  127. package/dist/cli/index.d.ts.map +1 -0
  128. package/dist/cli/index.js +281 -0
  129. package/dist/cli/index.js.map +1 -0
  130. package/dist/core/engine/index.d.ts +5 -0
  131. package/dist/core/engine/index.d.ts.map +1 -0
  132. package/dist/core/engine/index.js +21 -0
  133. package/dist/core/engine/index.js.map +1 -0
  134. package/dist/core/engine/ruleEngine.d.ts +46 -0
  135. package/dist/core/engine/ruleEngine.d.ts.map +1 -0
  136. package/dist/core/engine/ruleEngine.js +173 -0
  137. package/dist/core/engine/ruleEngine.js.map +1 -0
  138. package/dist/core/index.d.ts +8 -0
  139. package/dist/core/index.d.ts.map +1 -0
  140. package/dist/core/index.js +24 -0
  141. package/dist/core/index.js.map +1 -0
  142. package/dist/core/scanner/fileScanner.d.ts +31 -0
  143. package/dist/core/scanner/fileScanner.d.ts.map +1 -0
  144. package/dist/core/scanner/fileScanner.js +199 -0
  145. package/dist/core/scanner/fileScanner.js.map +1 -0
  146. package/dist/core/scanner/index.d.ts +5 -0
  147. package/dist/core/scanner/index.d.ts.map +1 -0
  148. package/dist/core/scanner/index.js +21 -0
  149. package/dist/core/scanner/index.js.map +1 -0
  150. package/dist/core/scoring/index.d.ts +5 -0
  151. package/dist/core/scoring/index.d.ts.map +1 -0
  152. package/dist/core/scoring/index.js +21 -0
  153. package/dist/core/scoring/index.js.map +1 -0
  154. package/dist/core/scoring/riskScoring.d.ts +49 -0
  155. package/dist/core/scoring/riskScoring.d.ts.map +1 -0
  156. package/dist/core/scoring/riskScoring.js +180 -0
  157. package/dist/core/scoring/riskScoring.js.map +1 -0
  158. package/dist/core/securityScanner.d.ts +47 -0
  159. package/dist/core/securityScanner.d.ts.map +1 -0
  160. package/dist/core/securityScanner.js +298 -0
  161. package/dist/core/securityScanner.js.map +1 -0
  162. package/dist/dependencies/aiDependencyAnalyzer.d.ts +96 -0
  163. package/dist/dependencies/aiDependencyAnalyzer.d.ts.map +1 -0
  164. package/dist/dependencies/aiDependencyAnalyzer.js +435 -0
  165. package/dist/dependencies/aiDependencyAnalyzer.js.map +1 -0
  166. package/dist/dependencies/database/cveDatabase.d.ts +32 -0
  167. package/dist/dependencies/database/cveDatabase.d.ts.map +1 -0
  168. package/dist/dependencies/database/cveDatabase.js +393 -0
  169. package/dist/dependencies/database/cveDatabase.js.map +1 -0
  170. package/dist/dependencies/database/index.d.ts +6 -0
  171. package/dist/dependencies/database/index.d.ts.map +1 -0
  172. package/dist/dependencies/database/index.js +22 -0
  173. package/dist/dependencies/database/index.js.map +1 -0
  174. package/dist/dependencies/database/maliciousPackages.d.ts +43 -0
  175. package/dist/dependencies/database/maliciousPackages.d.ts.map +1 -0
  176. package/dist/dependencies/database/maliciousPackages.js +279 -0
  177. package/dist/dependencies/database/maliciousPackages.js.map +1 -0
  178. package/dist/dependencies/dependencyAnalyzer.d.ts +74 -0
  179. package/dist/dependencies/dependencyAnalyzer.d.ts.map +1 -0
  180. package/dist/dependencies/dependencyAnalyzer.js +349 -0
  181. package/dist/dependencies/dependencyAnalyzer.js.map +1 -0
  182. package/dist/dependencies/detectors/index.d.ts +7 -0
  183. package/dist/dependencies/detectors/index.d.ts.map +1 -0
  184. package/dist/dependencies/detectors/index.js +28 -0
  185. package/dist/dependencies/detectors/index.js.map +1 -0
  186. package/dist/dependencies/detectors/securityStandards.d.ts +15 -0
  187. package/dist/dependencies/detectors/securityStandards.d.ts.map +1 -0
  188. package/dist/dependencies/detectors/securityStandards.js +178 -0
  189. package/dist/dependencies/detectors/securityStandards.js.map +1 -0
  190. package/dist/dependencies/detectors/vulnerabilityDetector.d.ts +53 -0
  191. package/dist/dependencies/detectors/vulnerabilityDetector.d.ts.map +1 -0
  192. package/dist/dependencies/detectors/vulnerabilityDetector.js +289 -0
  193. package/dist/dependencies/detectors/vulnerabilityDetector.js.map +1 -0
  194. package/dist/dependencies/index.d.ts +14 -0
  195. package/dist/dependencies/index.d.ts.map +1 -0
  196. package/dist/dependencies/index.js +43 -0
  197. package/dist/dependencies/index.js.map +1 -0
  198. package/dist/dependencies/installed/index.d.ts +8 -0
  199. package/dist/dependencies/installed/index.d.ts.map +1 -0
  200. package/dist/dependencies/installed/index.js +24 -0
  201. package/dist/dependencies/installed/index.js.map +1 -0
  202. package/dist/dependencies/installed/installedScanner.d.ts +91 -0
  203. package/dist/dependencies/installed/installedScanner.d.ts.map +1 -0
  204. package/dist/dependencies/installed/installedScanner.js +766 -0
  205. package/dist/dependencies/installed/installedScanner.js.map +1 -0
  206. package/dist/dependencies/installed/malwarePatterns.d.ts +32 -0
  207. package/dist/dependencies/installed/malwarePatterns.d.ts.map +1 -0
  208. package/dist/dependencies/installed/malwarePatterns.js +480 -0
  209. package/dist/dependencies/installed/malwarePatterns.js.map +1 -0
  210. package/dist/dependencies/installed/types.d.ts +274 -0
  211. package/dist/dependencies/installed/types.d.ts.map +1 -0
  212. package/dist/dependencies/installed/types.js +7 -0
  213. package/dist/dependencies/installed/types.js.map +1 -0
  214. package/dist/dependencies/parsers/base/baseParser.d.ts +44 -0
  215. package/dist/dependencies/parsers/base/baseParser.d.ts.map +1 -0
  216. package/dist/dependencies/parsers/base/baseParser.js +80 -0
  217. package/dist/dependencies/parsers/base/baseParser.js.map +1 -0
  218. package/dist/dependencies/parsers/base/index.d.ts +6 -0
  219. package/dist/dependencies/parsers/base/index.d.ts.map +1 -0
  220. package/dist/dependencies/parsers/base/index.js +27 -0
  221. package/dist/dependencies/parsers/base/index.js.map +1 -0
  222. package/dist/dependencies/parsers/cpp/cppParser.d.ts +36 -0
  223. package/dist/dependencies/parsers/cpp/cppParser.d.ts.map +1 -0
  224. package/dist/dependencies/parsers/cpp/cppParser.js +196 -0
  225. package/dist/dependencies/parsers/cpp/cppParser.js.map +1 -0
  226. package/dist/dependencies/parsers/cpp/index.d.ts +6 -0
  227. package/dist/dependencies/parsers/cpp/index.d.ts.map +1 -0
  228. package/dist/dependencies/parsers/cpp/index.js +27 -0
  229. package/dist/dependencies/parsers/cpp/index.js.map +1 -0
  230. package/dist/dependencies/parsers/csharp/csharpParser.d.ts +32 -0
  231. package/dist/dependencies/parsers/csharp/csharpParser.d.ts.map +1 -0
  232. package/dist/dependencies/parsers/csharp/csharpParser.js +125 -0
  233. package/dist/dependencies/parsers/csharp/csharpParser.js.map +1 -0
  234. package/dist/dependencies/parsers/csharp/index.d.ts +6 -0
  235. package/dist/dependencies/parsers/csharp/index.d.ts.map +1 -0
  236. package/dist/dependencies/parsers/csharp/index.js +27 -0
  237. package/dist/dependencies/parsers/csharp/index.js.map +1 -0
  238. package/dist/dependencies/parsers/index.d.ts +24 -0
  239. package/dist/dependencies/parsers/index.d.ts.map +1 -0
  240. package/dist/dependencies/parsers/index.js +69 -0
  241. package/dist/dependencies/parsers/index.js.map +1 -0
  242. package/dist/dependencies/parsers/java/index.d.ts +6 -0
  243. package/dist/dependencies/parsers/java/index.d.ts.map +1 -0
  244. package/dist/dependencies/parsers/java/index.js +27 -0
  245. package/dist/dependencies/parsers/java/index.js.map +1 -0
  246. package/dist/dependencies/parsers/java/javaParser.d.ts +32 -0
  247. package/dist/dependencies/parsers/java/javaParser.d.ts.map +1 -0
  248. package/dist/dependencies/parsers/java/javaParser.js +168 -0
  249. package/dist/dependencies/parsers/java/javaParser.js.map +1 -0
  250. package/dist/dependencies/parsers/javascript/index.d.ts +6 -0
  251. package/dist/dependencies/parsers/javascript/index.d.ts.map +1 -0
  252. package/dist/dependencies/parsers/javascript/index.js +27 -0
  253. package/dist/dependencies/parsers/javascript/index.js.map +1 -0
  254. package/dist/dependencies/parsers/javascript/javascriptParser.d.ts +55 -0
  255. package/dist/dependencies/parsers/javascript/javascriptParser.d.ts.map +1 -0
  256. package/dist/dependencies/parsers/javascript/javascriptParser.js +266 -0
  257. package/dist/dependencies/parsers/javascript/javascriptParser.js.map +1 -0
  258. package/dist/dependencies/parsers/php/index.d.ts +6 -0
  259. package/dist/dependencies/parsers/php/index.d.ts.map +1 -0
  260. package/dist/dependencies/parsers/php/index.js +27 -0
  261. package/dist/dependencies/parsers/php/index.js.map +1 -0
  262. package/dist/dependencies/parsers/php/phpParser.d.ts +35 -0
  263. package/dist/dependencies/parsers/php/phpParser.d.ts.map +1 -0
  264. package/dist/dependencies/parsers/php/phpParser.js +162 -0
  265. package/dist/dependencies/parsers/php/phpParser.js.map +1 -0
  266. package/dist/dependencies/parsers/python/index.d.ts +6 -0
  267. package/dist/dependencies/parsers/python/index.d.ts.map +1 -0
  268. package/dist/dependencies/parsers/python/index.js +27 -0
  269. package/dist/dependencies/parsers/python/index.js.map +1 -0
  270. package/dist/dependencies/parsers/python/pythonParser.d.ts +60 -0
  271. package/dist/dependencies/parsers/python/pythonParser.d.ts.map +1 -0
  272. package/dist/dependencies/parsers/python/pythonParser.js +336 -0
  273. package/dist/dependencies/parsers/python/pythonParser.js.map +1 -0
  274. package/dist/dependencies/types.d.ts +280 -0
  275. package/dist/dependencies/types.d.ts.map +1 -0
  276. package/dist/dependencies/types.js +59 -0
  277. package/dist/dependencies/types.js.map +1 -0
  278. package/dist/i18n/index.d.ts +2 -0
  279. package/dist/i18n/index.d.ts.map +1 -0
  280. package/dist/i18n/index.js +18 -0
  281. package/dist/i18n/index.js.map +1 -0
  282. package/dist/i18n/translations.d.ts +55 -0
  283. package/dist/i18n/translations.d.ts.map +1 -0
  284. package/dist/i18n/translations.js +119 -0
  285. package/dist/i18n/translations.js.map +1 -0
  286. package/dist/index.d.ts +14 -0
  287. package/dist/index.d.ts.map +1 -0
  288. package/dist/index.js +36 -0
  289. package/dist/index.js.map +1 -0
  290. package/dist/reports/dependencyReportGenerator.d.ts +20 -0
  291. package/dist/reports/dependencyReportGenerator.d.ts.map +1 -0
  292. package/dist/reports/dependencyReportGenerator.js +690 -0
  293. package/dist/reports/dependencyReportGenerator.js.map +1 -0
  294. package/dist/reports/htmlReportGenerator.d.ts +43 -0
  295. package/dist/reports/htmlReportGenerator.d.ts.map +1 -0
  296. package/dist/reports/htmlReportGenerator.js +793 -0
  297. package/dist/reports/htmlReportGenerator.js.map +1 -0
  298. package/dist/reports/index.d.ts +7 -0
  299. package/dist/reports/index.d.ts.map +1 -0
  300. package/dist/reports/index.js +23 -0
  301. package/dist/reports/index.js.map +1 -0
  302. package/dist/reports/installedDepsReportGenerator.d.ts +14 -0
  303. package/dist/reports/installedDepsReportGenerator.d.ts.map +1 -0
  304. package/dist/reports/installedDepsReportGenerator.js +872 -0
  305. package/dist/reports/installedDepsReportGenerator.js.map +1 -0
  306. package/dist/rules/index.d.ts +31 -0
  307. package/dist/rules/index.d.ts.map +1 -0
  308. package/dist/rules/index.js +95 -0
  309. package/dist/rules/index.js.map +1 -0
  310. package/dist/rules/malware/categories/backdoors.d.ts +12 -0
  311. package/dist/rules/malware/categories/backdoors.d.ts.map +1 -0
  312. package/dist/rules/malware/categories/backdoors.js +163 -0
  313. package/dist/rules/malware/categories/backdoors.js.map +1 -0
  314. package/dist/rules/malware/categories/cryptominers.d.ts +13 -0
  315. package/dist/rules/malware/categories/cryptominers.d.ts.map +1 -0
  316. package/dist/rules/malware/categories/cryptominers.js +415 -0
  317. package/dist/rules/malware/categories/cryptominers.js.map +1 -0
  318. package/dist/rules/malware/categories/exfiltration.d.ts +20 -0
  319. package/dist/rules/malware/categories/exfiltration.d.ts.map +1 -0
  320. package/dist/rules/malware/categories/exfiltration.js +658 -0
  321. package/dist/rules/malware/categories/exfiltration.js.map +1 -0
  322. package/dist/rules/malware/categories/keyloggers.d.ts +19 -0
  323. package/dist/rules/malware/categories/keyloggers.d.ts.map +1 -0
  324. package/dist/rules/malware/categories/keyloggers.js +763 -0
  325. package/dist/rules/malware/categories/keyloggers.js.map +1 -0
  326. package/dist/rules/malware/categories/loaders.d.ts +20 -0
  327. package/dist/rules/malware/categories/loaders.d.ts.map +1 -0
  328. package/dist/rules/malware/categories/loaders.js +702 -0
  329. package/dist/rules/malware/categories/loaders.js.map +1 -0
  330. package/dist/rules/malware/categories/network.d.ts +19 -0
  331. package/dist/rules/malware/categories/network.d.ts.map +1 -0
  332. package/dist/rules/malware/categories/network.js +622 -0
  333. package/dist/rules/malware/categories/network.js.map +1 -0
  334. package/dist/rules/malware/categories/obfuscation.d.ts +22 -0
  335. package/dist/rules/malware/categories/obfuscation.d.ts.map +1 -0
  336. package/dist/rules/malware/categories/obfuscation.js +766 -0
  337. package/dist/rules/malware/categories/obfuscation.js.map +1 -0
  338. package/dist/rules/malware/constants/index.d.ts +281 -0
  339. package/dist/rules/malware/constants/index.d.ts.map +1 -0
  340. package/dist/rules/malware/constants/index.js +327 -0
  341. package/dist/rules/malware/constants/index.js.map +1 -0
  342. package/dist/rules/malware/engine/index.d.ts +178 -0
  343. package/dist/rules/malware/engine/index.d.ts.map +1 -0
  344. package/dist/rules/malware/engine/index.js +552 -0
  345. package/dist/rules/malware/engine/index.js.map +1 -0
  346. package/dist/rules/malware/index.d.ts +205 -0
  347. package/dist/rules/malware/index.d.ts.map +1 -0
  348. package/dist/rules/malware/index.js +837 -0
  349. package/dist/rules/malware/index.js.map +1 -0
  350. package/dist/rules/malware/scoring/index.d.ts +84 -0
  351. package/dist/rules/malware/scoring/index.d.ts.map +1 -0
  352. package/dist/rules/malware/scoring/index.js +441 -0
  353. package/dist/rules/malware/scoring/index.js.map +1 -0
  354. package/dist/rules/malware/types/index.d.ts +616 -0
  355. package/dist/rules/malware/types/index.d.ts.map +1 -0
  356. package/dist/rules/malware/types/index.js +155 -0
  357. package/dist/rules/malware/types/index.js.map +1 -0
  358. package/dist/rules/malware/utils/index.d.ts +117 -0
  359. package/dist/rules/malware/utils/index.d.ts.map +1 -0
  360. package/dist/rules/malware/utils/index.js +514 -0
  361. package/dist/rules/malware/utils/index.js.map +1 -0
  362. package/dist/rules/standards.d.ts +26 -0
  363. package/dist/rules/standards.d.ts.map +1 -0
  364. package/dist/rules/standards.js +352 -0
  365. package/dist/rules/standards.js.map +1 -0
  366. package/dist/rules/vulnerabilities/constants/index.d.ts +835 -0
  367. package/dist/rules/vulnerabilities/constants/index.d.ts.map +1 -0
  368. package/dist/rules/vulnerabilities/constants/index.js +544 -0
  369. package/dist/rules/vulnerabilities/constants/index.js.map +1 -0
  370. package/dist/rules/vulnerabilities/engine/index.d.ts +145 -0
  371. package/dist/rules/vulnerabilities/engine/index.d.ts.map +1 -0
  372. package/dist/rules/vulnerabilities/engine/index.js +581 -0
  373. package/dist/rules/vulnerabilities/engine/index.js.map +1 -0
  374. package/dist/rules/vulnerabilities/index.d.ts +148 -0
  375. package/dist/rules/vulnerabilities/index.d.ts.map +1 -0
  376. package/dist/rules/vulnerabilities/index.js +252 -0
  377. package/dist/rules/vulnerabilities/index.js.map +1 -0
  378. package/dist/rules/vulnerabilities/rules/authentication.d.ts +8 -0
  379. package/dist/rules/vulnerabilities/rules/authentication.d.ts.map +1 -0
  380. package/dist/rules/vulnerabilities/rules/authentication.js +419 -0
  381. package/dist/rules/vulnerabilities/rules/authentication.js.map +1 -0
  382. package/dist/rules/vulnerabilities/rules/commandInjection.d.ts +8 -0
  383. package/dist/rules/vulnerabilities/rules/commandInjection.d.ts.map +1 -0
  384. package/dist/rules/vulnerabilities/rules/commandInjection.js +300 -0
  385. package/dist/rules/vulnerabilities/rules/commandInjection.js.map +1 -0
  386. package/dist/rules/vulnerabilities/rules/csrf.d.ts +8 -0
  387. package/dist/rules/vulnerabilities/rules/csrf.d.ts.map +1 -0
  388. package/dist/rules/vulnerabilities/rules/csrf.js +261 -0
  389. package/dist/rules/vulnerabilities/rules/csrf.js.map +1 -0
  390. package/dist/rules/vulnerabilities/rules/deserialization.d.ts +8 -0
  391. package/dist/rules/vulnerabilities/rules/deserialization.d.ts.map +1 -0
  392. package/dist/rules/vulnerabilities/rules/deserialization.js +336 -0
  393. package/dist/rules/vulnerabilities/rules/deserialization.js.map +1 -0
  394. package/dist/rules/vulnerabilities/rules/fileUpload.d.ts +8 -0
  395. package/dist/rules/vulnerabilities/rules/fileUpload.d.ts.map +1 -0
  396. package/dist/rules/vulnerabilities/rules/fileUpload.js +325 -0
  397. package/dist/rules/vulnerabilities/rules/fileUpload.js.map +1 -0
  398. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts +8 -0
  399. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts.map +1 -0
  400. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js +446 -0
  401. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js.map +1 -0
  402. package/dist/rules/vulnerabilities/rules/index.d.ts +17 -0
  403. package/dist/rules/vulnerabilities/rules/index.d.ts.map +1 -0
  404. package/dist/rules/vulnerabilities/rules/index.js +47 -0
  405. package/dist/rules/vulnerabilities/rules/index.js.map +1 -0
  406. package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts +8 -0
  407. package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts.map +1 -0
  408. package/dist/rules/vulnerabilities/rules/pathTraversal.js +351 -0
  409. package/dist/rules/vulnerabilities/rules/pathTraversal.js.map +1 -0
  410. package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts +8 -0
  411. package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts.map +1 -0
  412. package/dist/rules/vulnerabilities/rules/prototypePollution.js +272 -0
  413. package/dist/rules/vulnerabilities/rules/prototypePollution.js.map +1 -0
  414. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts +8 -0
  415. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts.map +1 -0
  416. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js +438 -0
  417. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js.map +1 -0
  418. package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts +12 -0
  419. package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts.map +1 -0
  420. package/dist/rules/vulnerabilities/rules/sqlInjection.js +636 -0
  421. package/dist/rules/vulnerabilities/rules/sqlInjection.js.map +1 -0
  422. package/dist/rules/vulnerabilities/rules/ssrf.d.ts +8 -0
  423. package/dist/rules/vulnerabilities/rules/ssrf.d.ts.map +1 -0
  424. package/dist/rules/vulnerabilities/rules/ssrf.js +401 -0
  425. package/dist/rules/vulnerabilities/rules/ssrf.js.map +1 -0
  426. package/dist/rules/vulnerabilities/rules/xss.d.ts +11 -0
  427. package/dist/rules/vulnerabilities/rules/xss.d.ts.map +1 -0
  428. package/dist/rules/vulnerabilities/rules/xss.js +724 -0
  429. package/dist/rules/vulnerabilities/rules/xss.js.map +1 -0
  430. package/dist/rules/vulnerabilities/scoring/index.d.ts +80 -0
  431. package/dist/rules/vulnerabilities/scoring/index.d.ts.map +1 -0
  432. package/dist/rules/vulnerabilities/scoring/index.js +414 -0
  433. package/dist/rules/vulnerabilities/scoring/index.js.map +1 -0
  434. package/dist/rules/vulnerabilities/types/index.d.ts +830 -0
  435. package/dist/rules/vulnerabilities/types/index.d.ts.map +1 -0
  436. package/dist/rules/vulnerabilities/types/index.js +164 -0
  437. package/dist/rules/vulnerabilities/types/index.js.map +1 -0
  438. package/dist/rules/vulnerabilities/utils/index.d.ts +206 -0
  439. package/dist/rules/vulnerabilities/utils/index.d.ts.map +1 -0
  440. package/dist/rules/vulnerabilities/utils/index.js +615 -0
  441. package/dist/rules/vulnerabilities/utils/index.js.map +1 -0
  442. package/dist/types/index.d.ts +359 -0
  443. package/dist/types/index.d.ts.map +1 -0
  444. package/dist/types/index.js +61 -0
  445. package/dist/types/index.js.map +1 -0
  446. package/dist/utils/index.d.ts +82 -0
  447. package/dist/utils/index.d.ts.map +1 -0
  448. package/dist/utils/index.js +326 -0
  449. package/dist/utils/index.js.map +1 -0
  450. package/dist/utils/logger.d.ts +40 -0
  451. package/dist/utils/logger.d.ts.map +1 -0
  452. package/dist/utils/logger.js +139 -0
  453. package/dist/utils/logger.js.map +1 -0
  454. package/docs/ARCHITECTURE.md +320 -0
  455. package/docs/V1.2.1-IA_Performances.md +116 -0
  456. package/docs/images/WIN_Defender.png +0 -0
  457. package/package.json +68 -0
  458. package/secure-scan.config.json +134 -0
  459. package/secure-scan.sln +29 -0
  460. package/src/ai/aiAnalyzer.ts +714 -0
  461. package/src/ai/index.ts +5 -0
  462. package/src/analyzers/base/baseAnalyzer.ts +66 -0
  463. package/src/analyzers/base/index.ts +5 -0
  464. package/src/analyzers/c-cpp/cppAnalyzer.ts +308 -0
  465. package/src/analyzers/c-cpp/index.ts +5 -0
  466. package/src/analyzers/core/engine/index.ts +5 -0
  467. package/src/analyzers/core/engine/ruleEngine.ts +221 -0
  468. package/src/analyzers/core/index.ts +8 -0
  469. package/src/analyzers/core/scanner/fileScanner.ts +204 -0
  470. package/src/analyzers/core/scanner/index.ts +5 -0
  471. package/src/analyzers/core/scoring/index.ts +5 -0
  472. package/src/analyzers/core/scoring/riskScoring.ts +198 -0
  473. package/src/analyzers/core/securityScanner.ts +321 -0
  474. package/src/analyzers/csharp/csharpAnalyzer.ts +328 -0
  475. package/src/analyzers/csharp/index.ts +5 -0
  476. package/src/analyzers/iac/iacAnalyzer.ts +318 -0
  477. package/src/analyzers/iac/index.ts +5 -0
  478. package/src/analyzers/index.ts +67 -0
  479. package/src/analyzers/java/index.ts +5 -0
  480. package/src/analyzers/java/javaAnalyzer.ts +320 -0
  481. package/src/analyzers/javascript/PROMPT_JS_ANALYZER.md +267 -0
  482. package/src/analyzers/javascript/astUtils.ts +789 -0
  483. package/src/analyzers/javascript/index.ts +50 -0
  484. package/src/analyzers/javascript/javascriptAnalyzer.ts +984 -0
  485. package/src/analyzers/javascript/malwareDetector.ts +697 -0
  486. package/src/analyzers/javascript/packageJsonAnalyzer.ts +626 -0
  487. package/src/analyzers/javascript/taintAnalyzer.ts +630 -0
  488. package/src/analyzers/php/index.ts +5 -0
  489. package/src/analyzers/php/phpAnalyzer.ts +280 -0
  490. package/src/analyzers/python/index.ts +5 -0
  491. package/src/analyzers/python/pythonAnalyzer.ts +319 -0
  492. package/src/cli/index.ts +276 -0
  493. package/src/dependencies/aiDependencyAnalyzer.ts +496 -0
  494. package/src/dependencies/database/cveDatabase.ts +426 -0
  495. package/src/dependencies/database/index.ts +6 -0
  496. package/src/dependencies/database/maliciousPackages.ts +286 -0
  497. package/src/dependencies/dependencyAnalyzer.ts +394 -0
  498. package/src/dependencies/detectors/index.ts +7 -0
  499. package/src/dependencies/detectors/securityStandards.ts +200 -0
  500. package/src/dependencies/detectors/vulnerabilityDetector.ts +343 -0
  501. package/src/dependencies/index.ts +27 -0
  502. package/src/dependencies/installed/index.ts +8 -0
  503. package/src/dependencies/installed/installedScanner.ts +821 -0
  504. package/src/dependencies/installed/malwarePatterns.ts +492 -0
  505. package/src/dependencies/installed/types.ts +287 -0
  506. package/src/dependencies/parsers/base/baseParser.ts +108 -0
  507. package/src/dependencies/parsers/base/index.ts +6 -0
  508. package/src/dependencies/parsers/cpp/cppParser.ts +245 -0
  509. package/src/dependencies/parsers/cpp/index.ts +6 -0
  510. package/src/dependencies/parsers/csharp/csharpParser.ts +151 -0
  511. package/src/dependencies/parsers/csharp/index.ts +6 -0
  512. package/src/dependencies/parsers/index.ts +56 -0
  513. package/src/dependencies/parsers/java/index.ts +6 -0
  514. package/src/dependencies/parsers/java/javaParser.ts +203 -0
  515. package/src/dependencies/parsers/javascript/index.ts +6 -0
  516. package/src/dependencies/parsers/javascript/javascriptParser.ts +362 -0
  517. package/src/dependencies/parsers/php/index.ts +6 -0
  518. package/src/dependencies/parsers/php/phpParser.ts +208 -0
  519. package/src/dependencies/parsers/python/index.ts +6 -0
  520. package/src/dependencies/parsers/python/pythonParser.ts +437 -0
  521. package/src/dependencies/types.ts +330 -0
  522. package/src/i18n/index.ts +1 -0
  523. package/src/i18n/translations.ts +194 -0
  524. package/src/index.ts +16 -0
  525. package/src/reports/dependencyReportGenerator.ts +717 -0
  526. package/src/reports/htmlReportGenerator.ts +781 -0
  527. package/src/reports/index.ts +7 -0
  528. package/src/reports/installedDepsReportGenerator.ts +899 -0
  529. package/src/rules/index.ts +58 -0
  530. package/src/rules/malware/INFO.md +287 -0
  531. package/src/rules/malware/categories/backdoors.ts +174 -0
  532. package/src/rules/malware/categories/cryptominers.ts +434 -0
  533. package/src/rules/malware/categories/exfiltration.ts +677 -0
  534. package/src/rules/malware/categories/keyloggers.ts +780 -0
  535. package/src/rules/malware/categories/loaders.ts +721 -0
  536. package/src/rules/malware/categories/network.ts +639 -0
  537. package/src/rules/malware/categories/obfuscation.ts +788 -0
  538. package/src/rules/malware/constants/index.ts +358 -0
  539. package/src/rules/malware/engine/index.ts +758 -0
  540. package/src/rules/malware/index.ts +928 -0
  541. package/src/rules/malware/scoring/index.ts +549 -0
  542. package/src/rules/malware/types/index.ts +752 -0
  543. package/src/rules/malware/utils/index.ts +643 -0
  544. package/src/rules/standards.ts +372 -0
  545. package/src/rules/vulnerabilities/PROMPT_VULNERABILITIES.md +226 -0
  546. package/src/rules/vulnerabilities/constants/index.ts +625 -0
  547. package/src/rules/vulnerabilities/engine/index.ts +831 -0
  548. package/src/rules/vulnerabilities/index.ts +312 -0
  549. package/src/rules/vulnerabilities/rules/authentication.ts +426 -0
  550. package/src/rules/vulnerabilities/rules/commandInjection.ts +307 -0
  551. package/src/rules/vulnerabilities/rules/csrf.ts +268 -0
  552. package/src/rules/vulnerabilities/rules/deserialization.ts +343 -0
  553. package/src/rules/vulnerabilities/rules/fileUpload.ts +332 -0
  554. package/src/rules/vulnerabilities/rules/hardcodedSecrets.ts +453 -0
  555. package/src/rules/vulnerabilities/rules/index.ts +17 -0
  556. package/src/rules/vulnerabilities/rules/pathTraversal.ts +358 -0
  557. package/src/rules/vulnerabilities/rules/prototypePollution.ts +279 -0
  558. package/src/rules/vulnerabilities/rules/securityMisconfiguration.ts +445 -0
  559. package/src/rules/vulnerabilities/rules/sqlInjection.ts +669 -0
  560. package/src/rules/vulnerabilities/rules/ssrf.ts +408 -0
  561. package/src/rules/vulnerabilities/rules/xss.ts +753 -0
  562. package/src/rules/vulnerabilities/scoring/index.ts +543 -0
  563. package/src/rules/vulnerabilities/types/index.ts +1004 -0
  564. package/src/rules/vulnerabilities/utils/index.ts +709 -0
  565. package/src/types/index.ts +391 -0
  566. package/src/utils/index.ts +306 -0
  567. package/src/utils/logger.ts +150 -0
  568. package/test-installed-scanner.ts +136 -0
  569. package/tsconfig.json +30 -0
@@ -0,0 +1,615 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Vulnerability Detection Module - Utility Functions
4
+ * @module rules/vulnerabilities/utils
5
+ *
6
+ * Utility functions for vulnerability detection including safe regex matching,
7
+ * snippet extraction, taint analysis helpers, and code normalization.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.safeRegexMatch = safeRegexMatch;
11
+ exports.safeRegexMatchAsync = safeRegexMatchAsync;
12
+ exports.getLineNumber = getLineNumber;
13
+ exports.getColumnNumber = getColumnNumber;
14
+ exports.getCharacterIndex = getCharacterIndex;
15
+ exports.extractSnippet = extractSnippet;
16
+ exports.extractLine = extractLine;
17
+ exports.formatSnippetWithLineNumbers = formatSnippetWithLineNumbers;
18
+ exports.normalizeCode = normalizeCode;
19
+ exports.removeComments = removeComments;
20
+ exports.looksLikeSql = looksLikeSql;
21
+ exports.looksLikeCommand = looksLikeCommand;
22
+ exports.looksLikeHtml = looksLikeHtml;
23
+ exports.containsUserInput = containsUserInput;
24
+ exports.findTaintSources = findTaintSources;
25
+ exports.findTaintSinks = findTaintSinks;
26
+ exports.findSanitizers = findSanitizers;
27
+ exports.isTestFile = isTestFile;
28
+ exports.isVendorCode = isVendorCode;
29
+ exports.detectLanguage = detectLanguage;
30
+ exports.calculateConfidence = calculateConfidence;
31
+ exports.adjustConfidenceForTaintFlow = adjustConfidenceForTaintFlow;
32
+ exports.generateFindingId = generateFindingId;
33
+ const types_1 = require("../types");
34
+ const constants_1 = require("../constants");
35
+ // ============================================================================
36
+ // SAFE REGEX MATCHING
37
+ // ============================================================================
38
+ /**
39
+ * Execute regex with timeout protection (ReDoS prevention)
40
+ *
41
+ * @param code - Source code to match against
42
+ * @param pattern - Regex pattern to match
43
+ * @returns Array of pattern matches
44
+ */
45
+ function safeRegexMatch(code, pattern) {
46
+ const matches = [];
47
+ const timeout = pattern.timeout ?? constants_1.LIMITS.REGEX_TIMEOUT;
48
+ const maxMatches = pattern.maxMatches ?? constants_1.LIMITS.MAX_MATCHES_PER_PATTERN;
49
+ try {
50
+ const regex = new RegExp(pattern.pattern, pattern.flags ?? 'g');
51
+ const startTime = Date.now();
52
+ let match;
53
+ while ((match = regex.exec(code)) !== null) {
54
+ // Check timeout
55
+ if (Date.now() - startTime > timeout) {
56
+ console.warn(`Regex timeout for pattern: ${pattern.patternId || pattern.pattern.substring(0, 50)}`);
57
+ break;
58
+ }
59
+ // Check max matches
60
+ if (matches.length >= maxMatches) {
61
+ break;
62
+ }
63
+ const line = getLineNumber(code, match.index);
64
+ const column = getColumnNumber(code, match.index);
65
+ matches.push({
66
+ pattern,
67
+ matchedText: match[0],
68
+ location: {
69
+ filePath: '',
70
+ startLine: line,
71
+ endLine: line,
72
+ startColumn: column,
73
+ endColumn: column + match[0].length
74
+ },
75
+ captures: match.slice(1)
76
+ });
77
+ // Prevent infinite loops for zero-length matches
78
+ if (match.index === regex.lastIndex) {
79
+ regex.lastIndex++;
80
+ }
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error(`Regex error for pattern ${pattern.patternId}:`, error);
85
+ }
86
+ return matches;
87
+ }
88
+ /**
89
+ * Execute regex match with promise-based timeout
90
+ *
91
+ * @param code - Source code to match against
92
+ * @param pattern - Regex pattern to match
93
+ * @param timeout - Timeout in milliseconds
94
+ * @returns Promise of pattern matches
95
+ */
96
+ async function safeRegexMatchAsync(code, pattern, timeout = constants_1.LIMITS.REGEX_TIMEOUT) {
97
+ return new Promise((resolve) => {
98
+ const timeoutId = setTimeout(() => {
99
+ resolve([]);
100
+ }, timeout);
101
+ try {
102
+ const results = safeRegexMatch(code, pattern);
103
+ clearTimeout(timeoutId);
104
+ resolve(results);
105
+ }
106
+ catch {
107
+ clearTimeout(timeoutId);
108
+ resolve([]);
109
+ }
110
+ });
111
+ }
112
+ // ============================================================================
113
+ // LINE AND COLUMN UTILITIES
114
+ // ============================================================================
115
+ /**
116
+ * Get line number from character index (1-based)
117
+ *
118
+ * @param code - Source code
119
+ * @param index - Character index
120
+ * @returns Line number (1-based)
121
+ */
122
+ function getLineNumber(code, index) {
123
+ return code.substring(0, index).split('\n').length;
124
+ }
125
+ /**
126
+ * Get column number from character index (0-based)
127
+ *
128
+ * @param code - Source code
129
+ * @param index - Character index
130
+ * @returns Column number (0-based)
131
+ */
132
+ function getColumnNumber(code, index) {
133
+ const lastNewline = code.lastIndexOf('\n', index - 1);
134
+ return index - lastNewline - 1;
135
+ }
136
+ /**
137
+ * Get character index from line and column
138
+ *
139
+ * @param code - Source code
140
+ * @param line - Line number (1-based)
141
+ * @param column - Column number (0-based)
142
+ * @returns Character index
143
+ */
144
+ function getCharacterIndex(code, line, column) {
145
+ const lines = code.split('\n');
146
+ let index = 0;
147
+ for (let i = 0; i < line - 1 && i < lines.length; i++) {
148
+ index += lines[i].length + 1; // +1 for newline
149
+ }
150
+ return index + column;
151
+ }
152
+ // ============================================================================
153
+ // SNIPPET EXTRACTION
154
+ // ============================================================================
155
+ /**
156
+ * Extract code snippet with context
157
+ *
158
+ * @param code - Full source code
159
+ * @param location - Source location
160
+ * @param contextLines - Number of context lines before/after
161
+ * @returns Code snippet with context
162
+ */
163
+ function extractSnippet(code, location, contextLines = 3) {
164
+ const lines = code.split('\n');
165
+ const startLine = Math.max(1, location.startLine - contextLines);
166
+ const endLine = Math.min(lines.length, location.endLine + contextLines);
167
+ const snippetLines = lines.slice(startLine - 1, endLine);
168
+ const snippet = snippetLines.join('\n');
169
+ // Calculate highlight positions
170
+ let highlightStart = 0;
171
+ for (let i = startLine; i < location.startLine; i++) {
172
+ highlightStart += lines[i - 1].length + 1;
173
+ }
174
+ highlightStart += location.startColumn ?? 0;
175
+ let highlightEnd = highlightStart;
176
+ for (let i = location.startLine; i <= location.endLine; i++) {
177
+ if (i === location.endLine) {
178
+ highlightEnd += (location.endColumn ?? lines[i - 1].length) - (i === location.startLine ? (location.startColumn ?? 0) : 0);
179
+ }
180
+ else {
181
+ highlightEnd += lines[i - 1].length + 1 - (i === location.startLine ? (location.startColumn ?? 0) : 0);
182
+ }
183
+ }
184
+ return { snippet, highlightStart, highlightEnd };
185
+ }
186
+ /**
187
+ * Extract the specific line of code
188
+ *
189
+ * @param code - Full source code
190
+ * @param lineNumber - Line number (1-based)
191
+ * @returns The line content
192
+ */
193
+ function extractLine(code, lineNumber) {
194
+ const lines = code.split('\n');
195
+ if (lineNumber < 1 || lineNumber > lines.length) {
196
+ return '';
197
+ }
198
+ return lines[lineNumber - 1];
199
+ }
200
+ /**
201
+ * Format snippet for display with line numbers
202
+ *
203
+ * @param snippet - Code snippet
204
+ * @param startLine - Starting line number
205
+ * @returns Formatted snippet with line numbers
206
+ */
207
+ function formatSnippetWithLineNumbers(snippet, startLine) {
208
+ const lines = snippet.split('\n');
209
+ const maxLineNumWidth = String(startLine + lines.length - 1).length;
210
+ return lines.map((line, i) => {
211
+ const lineNum = String(startLine + i).padStart(maxLineNumWidth, ' ');
212
+ return `${lineNum} | ${line}`;
213
+ }).join('\n');
214
+ }
215
+ // ============================================================================
216
+ // CODE NORMALIZATION
217
+ // ============================================================================
218
+ /**
219
+ * Normalize code for consistent analysis
220
+ *
221
+ * @param code - Source code
222
+ * @param language - Programming language
223
+ * @returns Normalized code
224
+ */
225
+ function normalizeCode(code, language) {
226
+ let normalized = code;
227
+ // Normalize line endings
228
+ normalized = normalized.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
229
+ // Truncate very long lines
230
+ const lines = normalized.split('\n');
231
+ normalized = lines.map(line => {
232
+ if (line.length > constants_1.LIMITS.MAX_LINE_LENGTH) {
233
+ return line.substring(0, constants_1.LIMITS.MAX_LINE_LENGTH) + '/* ... truncated */';
234
+ }
235
+ return line;
236
+ }).join('\n');
237
+ return normalized;
238
+ }
239
+ /**
240
+ * Remove comments from code (approximate)
241
+ *
242
+ * @param code - Source code
243
+ * @param language - Programming language
244
+ * @returns Code without comments
245
+ */
246
+ function removeComments(code, language) {
247
+ let result = code;
248
+ switch (language) {
249
+ case types_1.SupportedLanguage.JAVASCRIPT:
250
+ case types_1.SupportedLanguage.TYPESCRIPT:
251
+ case types_1.SupportedLanguage.JAVA:
252
+ case types_1.SupportedLanguage.CSHARP:
253
+ case types_1.SupportedLanguage.CPP:
254
+ case types_1.SupportedLanguage.C:
255
+ // Remove single-line comments
256
+ result = result.replace(/\/\/[^\n]*/g, '');
257
+ // Remove multi-line comments (non-greedy)
258
+ result = result.replace(/\/\*[\s\S]*?\*\//g, '');
259
+ break;
260
+ case types_1.SupportedLanguage.PYTHON:
261
+ case types_1.SupportedLanguage.RUBY:
262
+ case types_1.SupportedLanguage.SHELL:
263
+ case types_1.SupportedLanguage.YAML:
264
+ // Remove hash comments
265
+ result = result.replace(/#[^\n]*/g, '');
266
+ // Remove docstrings (Python)
267
+ result = result.replace(/'''[\s\S]*?'''/g, '');
268
+ result = result.replace(/"""[\s\S]*?"""/g, '');
269
+ break;
270
+ case types_1.SupportedLanguage.PHP:
271
+ // Remove single-line comments (// and #)
272
+ result = result.replace(/(?:\/\/|#)[^\n]*/g, '');
273
+ // Remove multi-line comments
274
+ result = result.replace(/\/\*[\s\S]*?\*\//g, '');
275
+ break;
276
+ }
277
+ return result;
278
+ }
279
+ // ============================================================================
280
+ // STRING ANALYSIS
281
+ // ============================================================================
282
+ /**
283
+ * Check if a string appears to be a SQL query
284
+ *
285
+ * @param text - Text to check
286
+ * @returns True if text looks like SQL
287
+ */
288
+ function looksLikeSql(text) {
289
+ const sqlKeywords = /\b(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|EXEC|EXECUTE|UNION|WHERE|FROM|INTO|VALUES|SET)\b/i;
290
+ return sqlKeywords.test(text);
291
+ }
292
+ /**
293
+ * Check if a string appears to be a shell command
294
+ *
295
+ * @param text - Text to check
296
+ * @returns True if text looks like a shell command
297
+ */
298
+ function looksLikeCommand(text) {
299
+ const commandPatterns = /\b(bash|sh|cmd|powershell|ls|dir|cat|rm|del|wget|curl|nc|netcat|chmod|chown|sudo|su)\b|\||\&\&|\|\|/i;
300
+ return commandPatterns.test(text);
301
+ }
302
+ /**
303
+ * Check if a string appears to be HTML
304
+ *
305
+ * @param text - Text to check
306
+ * @returns True if text looks like HTML
307
+ */
308
+ function looksLikeHtml(text) {
309
+ const htmlPatterns = /<\s*(?:script|img|iframe|a|div|span|input|form|button|svg|object|embed|link|style)[^>]*>/i;
310
+ return htmlPatterns.test(text);
311
+ }
312
+ /**
313
+ * Check if text contains user-controlled input indicators
314
+ *
315
+ * @param text - Text to check
316
+ * @param language - Programming language
317
+ * @returns True if text contains user input patterns
318
+ */
319
+ function containsUserInput(text, language) {
320
+ const patterns = {
321
+ javascript: [
322
+ /req\.(body|query|params|headers|cookies)/,
323
+ /\$\.(get|post|ajax)/,
324
+ /location\.(search|hash|href)/,
325
+ /document\.(cookie|referrer)/
326
+ ],
327
+ typescript: [
328
+ /req\.(body|query|params|headers|cookies)/,
329
+ /location\.(search|hash|href)/
330
+ ],
331
+ python: [
332
+ /request\.(args|form|data|json|headers|cookies)/,
333
+ /\binput\s*\(/,
334
+ /sys\.argv/
335
+ ],
336
+ php: [
337
+ /\$_(GET|POST|REQUEST|COOKIE|SERVER|FILES)\s*\[/
338
+ ],
339
+ java: [
340
+ /getParameter|getHeader|getCookies|getInputStream|@RequestBody|@PathVariable/
341
+ ],
342
+ csharp: [
343
+ /Request\.(Form|QueryString|Headers|Cookies)|FromBody|FromQuery|FromRoute/
344
+ ]
345
+ };
346
+ const langPatterns = patterns[language] || [];
347
+ return langPatterns.some(p => p.test(text));
348
+ }
349
+ // ============================================================================
350
+ // TAINT ANALYSIS HELPERS
351
+ // ============================================================================
352
+ /**
353
+ * Find taint sources in code
354
+ *
355
+ * @param code - Source code
356
+ * @param sources - Taint source definitions
357
+ * @param language - Programming language
358
+ * @returns Array of found sources with locations
359
+ */
360
+ function findTaintSources(code, sources, language) {
361
+ const results = [];
362
+ for (const source of sources) {
363
+ // Check language compatibility
364
+ if (source.languages && !source.languages.includes(language)) {
365
+ continue;
366
+ }
367
+ const pattern = typeof source.pattern === 'string'
368
+ ? new RegExp(source.pattern, 'g')
369
+ : source.pattern;
370
+ let match;
371
+ const regex = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
372
+ while ((match = regex.exec(code)) !== null) {
373
+ const line = getLineNumber(code, match.index);
374
+ const column = getColumnNumber(code, match.index);
375
+ results.push({
376
+ source,
377
+ location: {
378
+ filePath: '',
379
+ startLine: line,
380
+ endLine: line,
381
+ startColumn: column,
382
+ endColumn: column + match[0].length
383
+ },
384
+ matchedText: match[0]
385
+ });
386
+ if (results.length >= constants_1.LIMITS.MAX_MATCHES_PER_PATTERN) {
387
+ break;
388
+ }
389
+ }
390
+ }
391
+ return results;
392
+ }
393
+ /**
394
+ * Find taint sinks in code
395
+ *
396
+ * @param code - Source code
397
+ * @param sinks - Taint sink definitions
398
+ * @param language - Programming language
399
+ * @returns Array of found sinks with locations
400
+ */
401
+ function findTaintSinks(code, sinks, language) {
402
+ const results = [];
403
+ for (const sink of sinks) {
404
+ // Check language compatibility
405
+ if (sink.languages && !sink.languages.includes(language)) {
406
+ continue;
407
+ }
408
+ const pattern = typeof sink.pattern === 'string'
409
+ ? new RegExp(sink.pattern, 'g')
410
+ : sink.pattern;
411
+ let match;
412
+ const regex = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
413
+ while ((match = regex.exec(code)) !== null) {
414
+ const line = getLineNumber(code, match.index);
415
+ const column = getColumnNumber(code, match.index);
416
+ results.push({
417
+ sink,
418
+ location: {
419
+ filePath: '',
420
+ startLine: line,
421
+ endLine: line,
422
+ startColumn: column,
423
+ endColumn: column + match[0].length
424
+ },
425
+ matchedText: match[0]
426
+ });
427
+ if (results.length >= constants_1.LIMITS.MAX_MATCHES_PER_PATTERN) {
428
+ break;
429
+ }
430
+ }
431
+ }
432
+ return results;
433
+ }
434
+ /**
435
+ * Check if sanitization is present between source and sink
436
+ *
437
+ * @param code - Source code
438
+ * @param sourceLocation - Source location
439
+ * @param sinkLocation - Sink location
440
+ * @param sanitizers - Sanitizer definitions
441
+ * @returns Found sanitizers between source and sink
442
+ */
443
+ function findSanitizers(code, sourceLocation, sinkLocation, sanitizers) {
444
+ const found = [];
445
+ // Get code between source and sink
446
+ const sourceIndex = getCharacterIndex(code, sourceLocation.startLine, sourceLocation.startColumn ?? 0);
447
+ const sinkIndex = getCharacterIndex(code, sinkLocation.startLine, sinkLocation.startColumn ?? 0);
448
+ // Handle both directions
449
+ const start = Math.min(sourceIndex, sinkIndex);
450
+ const end = Math.max(sourceIndex, sinkIndex);
451
+ const codeBetween = code.substring(start, end);
452
+ for (const sanitizer of sanitizers) {
453
+ const pattern = typeof sanitizer.pattern === 'string'
454
+ ? new RegExp(sanitizer.pattern, 'gi')
455
+ : sanitizer.pattern;
456
+ if (pattern.test(codeBetween)) {
457
+ found.push(sanitizer);
458
+ }
459
+ }
460
+ return found;
461
+ }
462
+ // ============================================================================
463
+ // CONTEXT DETECTION
464
+ // ============================================================================
465
+ /**
466
+ * Check if code location is inside a test file
467
+ *
468
+ * @param filePath - File path
469
+ * @returns True if file is a test file
470
+ */
471
+ function isTestFile(filePath) {
472
+ const testPatterns = [
473
+ /\.test\.[jt]sx?$/,
474
+ /\.spec\.[jt]sx?$/,
475
+ /_test\.[jt]sx?$/,
476
+ /_spec\.[jt]sx?$/,
477
+ /test_.*\.(py|js|ts)$/,
478
+ /.*_test\.(py|js|ts)$/,
479
+ /tests?\//i,
480
+ /__tests__\//,
481
+ /spec\//i
482
+ ];
483
+ return testPatterns.some(p => p.test(filePath));
484
+ }
485
+ /**
486
+ * Check if code location is inside vendor/node_modules
487
+ *
488
+ * @param filePath - File path
489
+ * @returns True if file is vendor code
490
+ */
491
+ function isVendorCode(filePath) {
492
+ const vendorPatterns = [
493
+ /node_modules\//,
494
+ /vendor\//,
495
+ /bower_components\//,
496
+ /third_party\//,
497
+ /external\//,
498
+ /\.min\.js$/,
499
+ /\.bundle\.js$/
500
+ ];
501
+ return vendorPatterns.some(p => p.test(filePath));
502
+ }
503
+ /**
504
+ * Detect the programming language from file extension
505
+ *
506
+ * @param filePath - File path
507
+ * @returns Detected language or null
508
+ */
509
+ function detectLanguage(filePath) {
510
+ const extension = filePath.split('.').pop()?.toLowerCase();
511
+ const extensionMap = {
512
+ 'js': types_1.SupportedLanguage.JAVASCRIPT,
513
+ 'jsx': types_1.SupportedLanguage.JAVASCRIPT,
514
+ 'mjs': types_1.SupportedLanguage.JAVASCRIPT,
515
+ 'cjs': types_1.SupportedLanguage.JAVASCRIPT,
516
+ 'ts': types_1.SupportedLanguage.TYPESCRIPT,
517
+ 'tsx': types_1.SupportedLanguage.TYPESCRIPT,
518
+ 'py': types_1.SupportedLanguage.PYTHON,
519
+ 'php': types_1.SupportedLanguage.PHP,
520
+ 'java': types_1.SupportedLanguage.JAVA,
521
+ 'c': types_1.SupportedLanguage.C,
522
+ 'h': types_1.SupportedLanguage.C,
523
+ 'cpp': types_1.SupportedLanguage.CPP,
524
+ 'cc': types_1.SupportedLanguage.CPP,
525
+ 'cxx': types_1.SupportedLanguage.CPP,
526
+ 'hpp': types_1.SupportedLanguage.CPP,
527
+ 'cs': types_1.SupportedLanguage.CSHARP,
528
+ 'rb': types_1.SupportedLanguage.RUBY,
529
+ 'go': types_1.SupportedLanguage.GO,
530
+ 'rs': types_1.SupportedLanguage.RUST,
531
+ 'sh': types_1.SupportedLanguage.SHELL,
532
+ 'bash': types_1.SupportedLanguage.SHELL,
533
+ 'ps1': types_1.SupportedLanguage.POWERSHELL,
534
+ 'dockerfile': types_1.SupportedLanguage.DOCKERFILE,
535
+ 'yaml': types_1.SupportedLanguage.YAML,
536
+ 'yml': types_1.SupportedLanguage.YAML,
537
+ 'tf': types_1.SupportedLanguage.TERRAFORM
538
+ };
539
+ return extensionMap[extension ?? ''] ?? null;
540
+ }
541
+ // ============================================================================
542
+ // CONFIDENCE CALCULATION
543
+ // ============================================================================
544
+ /**
545
+ * Calculate confidence based on multiple factors
546
+ *
547
+ * @param factors - Array of confidence factors (0-1)
548
+ * @returns Combined confidence level
549
+ */
550
+ function calculateConfidence(factors) {
551
+ if (factors.length === 0)
552
+ return types_1.ConfidenceLevel.TENTATIVE;
553
+ const average = factors.reduce((sum, f) => sum + f, 0) / factors.length;
554
+ if (average >= 0.95)
555
+ return types_1.ConfidenceLevel.CONFIRMED;
556
+ if (average >= 0.80)
557
+ return types_1.ConfidenceLevel.HIGH;
558
+ if (average >= 0.60)
559
+ return types_1.ConfidenceLevel.MEDIUM;
560
+ if (average >= 0.40)
561
+ return types_1.ConfidenceLevel.LOW;
562
+ return types_1.ConfidenceLevel.TENTATIVE;
563
+ }
564
+ /**
565
+ * Boost confidence when taint flow is confirmed
566
+ *
567
+ * @param baseConfidence - Base confidence level
568
+ * @param hasTaintFlow - Whether taint flow was detected
569
+ * @returns Adjusted confidence level
570
+ */
571
+ function adjustConfidenceForTaintFlow(baseConfidence, hasTaintFlow) {
572
+ if (!hasTaintFlow)
573
+ return baseConfidence;
574
+ const levels = [
575
+ types_1.ConfidenceLevel.TENTATIVE,
576
+ types_1.ConfidenceLevel.LOW,
577
+ types_1.ConfidenceLevel.MEDIUM,
578
+ types_1.ConfidenceLevel.HIGH,
579
+ types_1.ConfidenceLevel.CONFIRMED
580
+ ];
581
+ const currentIndex = levels.indexOf(baseConfidence);
582
+ const newIndex = Math.min(currentIndex + 1, levels.length - 1);
583
+ return levels[newIndex];
584
+ }
585
+ // ============================================================================
586
+ // UNIQUE ID GENERATION
587
+ // ============================================================================
588
+ /**
589
+ * Generate unique finding ID
590
+ *
591
+ * @param ruleId - Rule ID
592
+ * @param filePath - File path
593
+ * @param line - Line number
594
+ * @returns Unique finding ID
595
+ */
596
+ function generateFindingId(ruleId, filePath, line) {
597
+ const hash = simpleHash(`${ruleId}:${filePath}:${line}`);
598
+ return `${ruleId}-${hash}`;
599
+ }
600
+ /**
601
+ * Simple string hash function
602
+ *
603
+ * @param str - String to hash
604
+ * @returns Hash string
605
+ */
606
+ function simpleHash(str) {
607
+ let hash = 0;
608
+ for (let i = 0; i < str.length; i++) {
609
+ const char = str.charCodeAt(i);
610
+ hash = ((hash << 5) - hash) + char;
611
+ hash = hash & hash; // Convert to 32-bit integer
612
+ }
613
+ return Math.abs(hash).toString(16).substring(0, 8);
614
+ }
615
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rules/vulnerabilities/utils/index.ts"],"names":[],"mappings":"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"}