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,630 @@
1
+ /**
2
+ * Taint Analysis Module for JavaScript/TypeScript
3
+ * Tracks data flow from untrusted sources to dangerous sinks
4
+ *
5
+ * Inspired by CodeQL's taint tracking methodology
6
+ */
7
+
8
+ import { SourceLocation, Severity, ThreatType, FindingCategory, SecurityStandard } from '../../types';
9
+ import { getStandardsForThreat } from '../../rules/standards';
10
+
11
+ /**
12
+ * Represents a taint source - where untrusted data enters
13
+ */
14
+ export interface TaintSource {
15
+ /** Source type identifier */
16
+ type: string;
17
+ /** Pattern to match the source */
18
+ pattern: RegExp;
19
+ /** Description of the source */
20
+ description: string;
21
+ /** Variable capture group index in regex */
22
+ captureGroup?: number;
23
+ /** Context hints for better detection */
24
+ contextHints?: string[];
25
+ }
26
+
27
+ /**
28
+ * Represents a taint sink - dangerous operations
29
+ */
30
+ export interface TaintSink {
31
+ /** Sink type identifier */
32
+ type: string;
33
+ /** Pattern to match the sink */
34
+ pattern: RegExp;
35
+ /** Threat type this sink can cause */
36
+ threatType: ThreatType;
37
+ /** Severity level */
38
+ severity: Severity;
39
+ /** Description of the vulnerability */
40
+ description: string;
41
+ /** CWE/OWASP references */
42
+ standards?: SecurityStandard[];
43
+ /** Remediation advice */
44
+ remediation: string;
45
+ }
46
+
47
+ /**
48
+ * Represents a taint flow from source to sink
49
+ */
50
+ export interface TaintFlow {
51
+ /** The source of tainted data */
52
+ source: {
53
+ type: string;
54
+ variable: string;
55
+ line: number;
56
+ code: string;
57
+ };
58
+ /** The sink where tainted data is used */
59
+ sink: {
60
+ type: string;
61
+ line: number;
62
+ code: string;
63
+ threatType: ThreatType;
64
+ severity: Severity;
65
+ };
66
+ /** Intermediate steps (if any) */
67
+ propagation: {
68
+ variable: string;
69
+ line: number;
70
+ code: string;
71
+ }[];
72
+ /** Confidence score 0-100 */
73
+ confidence: number;
74
+ }
75
+
76
+ /**
77
+ * Taint sources - entry points for untrusted data
78
+ */
79
+ export const TAINT_SOURCES: TaintSource[] = [
80
+ // Express/Node.js request data
81
+ {
82
+ type: 'request_body',
83
+ pattern: /\breq(?:uest)?\.body(?:\[['"`](\w+)['"`]\]|\.(\w+))?/g,
84
+ description: 'User input from request body',
85
+ contextHints: ['express', 'http', 'request']
86
+ },
87
+ {
88
+ type: 'request_query',
89
+ pattern: /\breq(?:uest)?\.query(?:\[['"`](\w+)['"`]\]|\.(\w+))?/g,
90
+ description: 'User input from query string',
91
+ contextHints: ['express', 'http', 'request']
92
+ },
93
+ {
94
+ type: 'request_params',
95
+ pattern: /\breq(?:uest)?\.params(?:\[['"`](\w+)['"`]\]|\.(\w+))?/g,
96
+ description: 'User input from URL parameters',
97
+ contextHints: ['express', 'http', 'request']
98
+ },
99
+ {
100
+ type: 'request_headers',
101
+ pattern: /\breq(?:uest)?\.headers(?:\[['"`](\w+)['"`]\]|\.(\w+))?/g,
102
+ description: 'User-controlled HTTP headers',
103
+ contextHints: ['express', 'http', 'request']
104
+ },
105
+ {
106
+ type: 'request_cookies',
107
+ pattern: /\breq(?:uest)?\.cookies(?:\[['"`](\w+)['"`]\]|\.(\w+))?/g,
108
+ description: 'User-controlled cookies',
109
+ contextHints: ['express', 'cookie']
110
+ },
111
+ // Browser APIs
112
+ {
113
+ type: 'url_location',
114
+ pattern: /\b(?:window\.)?location\.(?:href|search|hash|pathname)/g,
115
+ description: 'Browser URL location (user-controllable)',
116
+ contextHints: ['browser', 'window', 'document']
117
+ },
118
+ {
119
+ type: 'document_url',
120
+ pattern: /\bdocument\.(?:URL|documentURI|referrer)/g,
121
+ description: 'Document URL properties',
122
+ contextHints: ['browser', 'document']
123
+ },
124
+ {
125
+ type: 'url_search_params',
126
+ pattern: /new\s+URLSearchParams\s*\([^)]*\)\.get\s*\(/g,
127
+ description: 'URL search parameters',
128
+ contextHints: ['browser', 'URL']
129
+ },
130
+ {
131
+ type: 'local_storage',
132
+ pattern: /\b(?:localStorage|sessionStorage)\.getItem\s*\(['"`](\w+)['"`]\)/g,
133
+ description: 'Browser storage (potentially attacker-controlled)',
134
+ contextHints: ['browser', 'storage']
135
+ },
136
+ {
137
+ type: 'post_message',
138
+ pattern: /\bevent\.data\b|\bmessage\.data\b/g,
139
+ description: 'PostMessage data (cross-origin)',
140
+ contextHints: ['postMessage', 'addEventListener', 'message']
141
+ },
142
+ // Environment variables
143
+ {
144
+ type: 'env_variable',
145
+ pattern: /\bprocess\.env(?:\[['"`](\w+)['"`]\]|\.(\w+))/g,
146
+ description: 'Environment variable (may contain sensitive data)',
147
+ contextHints: ['node', 'process', 'env']
148
+ },
149
+ // Form data
150
+ {
151
+ type: 'form_data',
152
+ pattern: /\b(?:formData|form)\.get\s*\(['"`](\w+)['"`]\)/g,
153
+ description: 'Form input data',
154
+ contextHints: ['form', 'FormData']
155
+ },
156
+ // File uploads
157
+ {
158
+ type: 'file_upload',
159
+ pattern: /\breq(?:uest)?\.files?(?:\[['"`](\w+)['"`]\]|\.(\w+))?/g,
160
+ description: 'Uploaded file data',
161
+ contextHints: ['multer', 'upload', 'file']
162
+ }
163
+ ];
164
+
165
+ /**
166
+ * Taint sinks - dangerous operations
167
+ */
168
+ export const TAINT_SINKS: TaintSink[] = [
169
+ // Code Execution (RCE)
170
+ {
171
+ type: 'eval',
172
+ pattern: /\beval\s*\(/g,
173
+ threatType: ThreatType.COMMAND_INJECTION,
174
+ severity: Severity.CRITICAL,
175
+ description: 'Direct code execution via eval()',
176
+ remediation: 'Never use eval() with user input. Use safer alternatives like JSON.parse() for data.'
177
+ },
178
+ {
179
+ type: 'function_constructor',
180
+ pattern: /\bnew\s+Function\s*\(/g,
181
+ threatType: ThreatType.COMMAND_INJECTION,
182
+ severity: Severity.CRITICAL,
183
+ description: 'Dynamic function creation (equivalent to eval)',
184
+ remediation: 'Avoid new Function() with dynamic input. Use predefined functions instead.'
185
+ },
186
+ {
187
+ type: 'setTimeout_string',
188
+ pattern: /\bsetTimeout\s*\(\s*['"`]/g,
189
+ threatType: ThreatType.COMMAND_INJECTION,
190
+ severity: Severity.HIGH,
191
+ description: 'setTimeout with string argument (eval-like)',
192
+ remediation: 'Pass a function reference to setTimeout instead of a string.'
193
+ },
194
+ {
195
+ type: 'setInterval_string',
196
+ pattern: /\bsetInterval\s*\(\s*['"`]/g,
197
+ threatType: ThreatType.COMMAND_INJECTION,
198
+ severity: Severity.HIGH,
199
+ description: 'setInterval with string argument (eval-like)',
200
+ remediation: 'Pass a function reference to setInterval instead of a string.'
201
+ },
202
+ // Command Injection (OS)
203
+ {
204
+ type: 'child_process_exec',
205
+ pattern: /\b(?:child_process\.)?exec\s*\(/g,
206
+ threatType: ThreatType.COMMAND_INJECTION,
207
+ severity: Severity.CRITICAL,
208
+ description: 'OS command execution via exec()',
209
+ remediation: 'Use execFile() with argument arrays instead of exec(). Validate and sanitize all inputs.'
210
+ },
211
+ {
212
+ type: 'child_process_spawn_shell',
213
+ pattern: /\bspawn\s*\([^)]+,\s*\{[^}]*shell\s*:\s*true/g,
214
+ threatType: ThreatType.COMMAND_INJECTION,
215
+ severity: Severity.CRITICAL,
216
+ description: 'spawn() with shell option (vulnerable to injection)',
217
+ remediation: 'Avoid shell: true in spawn(). Pass arguments as an array.'
218
+ },
219
+ {
220
+ type: 'exec_sync',
221
+ pattern: /\b(?:execSync|spawnSync)\s*\(/g,
222
+ threatType: ThreatType.COMMAND_INJECTION,
223
+ severity: Severity.CRITICAL,
224
+ description: 'Synchronous command execution',
225
+ remediation: 'Use execFileSync() with argument arrays. Never pass user input directly.'
226
+ },
227
+ // XSS Sinks
228
+ {
229
+ type: 'innerHTML',
230
+ pattern: /\.innerHTML\s*=/g,
231
+ threatType: ThreatType.XSS,
232
+ severity: Severity.HIGH,
233
+ description: 'DOM XSS via innerHTML assignment',
234
+ remediation: 'Use textContent for text, or sanitize HTML with DOMPurify before innerHTML.'
235
+ },
236
+ {
237
+ type: 'outerHTML',
238
+ pattern: /\.outerHTML\s*=/g,
239
+ threatType: ThreatType.XSS,
240
+ severity: Severity.HIGH,
241
+ description: 'DOM XSS via outerHTML assignment',
242
+ remediation: 'Use textContent for text, or sanitize HTML with DOMPurify.'
243
+ },
244
+ {
245
+ type: 'document_write',
246
+ pattern: /\bdocument\.(?:write|writeln)\s*\(/g,
247
+ threatType: ThreatType.XSS,
248
+ severity: Severity.HIGH,
249
+ description: 'DOM XSS via document.write()',
250
+ remediation: 'Avoid document.write(). Use DOM methods like createElement() and textContent.'
251
+ },
252
+ {
253
+ type: 'insertAdjacentHTML',
254
+ pattern: /\.insertAdjacentHTML\s*\(/g,
255
+ threatType: ThreatType.XSS,
256
+ severity: Severity.HIGH,
257
+ description: 'DOM XSS via insertAdjacentHTML()',
258
+ remediation: 'Sanitize HTML content with DOMPurify before insertion.'
259
+ },
260
+ {
261
+ type: 'jquery_html',
262
+ pattern: /\$\([^)]+\)\.html\s*\(/g,
263
+ threatType: ThreatType.XSS,
264
+ severity: Severity.HIGH,
265
+ description: 'DOM XSS via jQuery .html()',
266
+ remediation: 'Use .text() for plain text, or sanitize with DOMPurify before .html().'
267
+ },
268
+ {
269
+ type: 'jquery_append',
270
+ pattern: /\$\([^)]+\)\.(?:append|prepend|after|before)\s*\(/g,
271
+ threatType: ThreatType.XSS,
272
+ severity: Severity.MEDIUM,
273
+ description: 'Potential DOM XSS via jQuery DOM manipulation',
274
+ remediation: 'Ensure HTML content is sanitized before DOM insertion.'
275
+ },
276
+ // SSRF Sinks
277
+ {
278
+ type: 'fetch',
279
+ pattern: /\bfetch\s*\(/g,
280
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
281
+ severity: Severity.HIGH,
282
+ description: 'Potential SSRF via fetch() with user-controlled URL',
283
+ remediation: 'Validate and whitelist URLs before making requests. Block internal IP ranges.'
284
+ },
285
+ {
286
+ type: 'axios_request',
287
+ pattern: /\baxios(?:\.(?:get|post|put|delete|patch|request))?\s*\(/g,
288
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
289
+ severity: Severity.HIGH,
290
+ description: 'Potential SSRF via axios with user-controlled URL',
291
+ remediation: 'Validate and whitelist URLs before making requests.'
292
+ },
293
+ {
294
+ type: 'http_request',
295
+ pattern: /\b(?:http|https)\.(?:get|request)\s*\(/g,
296
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
297
+ severity: Severity.HIGH,
298
+ description: 'Potential SSRF via Node.js HTTP module',
299
+ remediation: 'Validate and whitelist URLs. Block requests to internal networks.'
300
+ },
301
+ // SQL Injection
302
+ {
303
+ type: 'sql_query',
304
+ pattern: /\.query\s*\(\s*['"`](?:SELECT|INSERT|UPDATE|DELETE)/gi,
305
+ threatType: ThreatType.SQL_INJECTION,
306
+ severity: Severity.CRITICAL,
307
+ description: 'Potential SQL injection via raw query',
308
+ remediation: 'Use parameterized queries or prepared statements. Never concatenate user input.'
309
+ },
310
+ {
311
+ type: 'sql_raw',
312
+ pattern: /\.raw\s*\(\s*['"`]|\.unsafeRaw\s*\(/g,
313
+ threatType: ThreatType.SQL_INJECTION,
314
+ severity: Severity.CRITICAL,
315
+ description: 'Raw SQL query execution',
316
+ remediation: 'Avoid raw SQL. Use ORM methods or parameterized queries.'
317
+ },
318
+ // Path Traversal
319
+ {
320
+ type: 'fs_read',
321
+ pattern: /\b(?:fs\.)?(?:readFile|readFileSync|createReadStream)\s*\(/g,
322
+ threatType: ThreatType.PATH_TRAVERSAL,
323
+ severity: Severity.HIGH,
324
+ description: 'File read with potentially user-controlled path',
325
+ remediation: 'Validate file paths. Use path.resolve() and check against base directory.'
326
+ },
327
+ {
328
+ type: 'fs_write',
329
+ pattern: /\b(?:fs\.)?(?:writeFile|writeFileSync|createWriteStream|appendFile)\s*\(/g,
330
+ threatType: ThreatType.PATH_TRAVERSAL,
331
+ severity: Severity.HIGH,
332
+ description: 'File write with potentially user-controlled path',
333
+ remediation: 'Validate file paths. Never use user input directly in file operations.'
334
+ },
335
+ // Deserialization
336
+ {
337
+ type: 'json_parse',
338
+ pattern: /\bJSON\.parse\s*\(/g,
339
+ threatType: ThreatType.INSECURE_DESERIALIZATION,
340
+ severity: Severity.MEDIUM,
341
+ description: 'JSON parsing (safe by itself, but check usage)',
342
+ remediation: 'Validate JSON structure after parsing. Be careful with prototype pollution.'
343
+ },
344
+ {
345
+ type: 'unserialize',
346
+ pattern: /\b(?:unserialize|deserialize)\s*\(/g,
347
+ threatType: ThreatType.INSECURE_DESERIALIZATION,
348
+ severity: Severity.HIGH,
349
+ description: 'Object deserialization (potential RCE)',
350
+ remediation: 'Avoid deserializing untrusted data. Use safe serialization formats.'
351
+ },
352
+ // Header Injection
353
+ {
354
+ type: 'set_header',
355
+ pattern: /\.setHeader\s*\(/g,
356
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
357
+ severity: Severity.MEDIUM,
358
+ description: 'HTTP header injection if value is user-controlled',
359
+ remediation: 'Validate header values. Remove newlines and control characters.'
360
+ },
361
+ // Redirect
362
+ {
363
+ type: 'redirect',
364
+ pattern: /\.redirect\s*\(/g,
365
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
366
+ severity: Severity.MEDIUM,
367
+ description: 'Open redirect if URL is user-controlled',
368
+ remediation: 'Validate redirect URLs. Only allow relative paths or whitelisted domains.'
369
+ }
370
+ ];
371
+
372
+ /**
373
+ * Represents a tracked tainted variable
374
+ */
375
+ interface TaintedVariable {
376
+ name: string;
377
+ sourceType: string;
378
+ sourceLine: number;
379
+ sourceCode: string;
380
+ assignments: { line: number; code: string }[];
381
+ }
382
+
383
+ /**
384
+ * Taint Analyzer Class
385
+ * Performs intra-procedural taint analysis for JavaScript/TypeScript
386
+ */
387
+ export class TaintAnalyzer {
388
+ private taintedVariables: Map<string, TaintedVariable> = new Map();
389
+ private lines: string[] = [];
390
+ private filePath: string = '';
391
+
392
+ /**
393
+ * Analyze code for taint flows
394
+ */
395
+ analyze(content: string, filePath: string): TaintFlow[] {
396
+ this.lines = content.split('\n');
397
+ this.filePath = filePath;
398
+ this.taintedVariables.clear();
399
+
400
+ const flows: TaintFlow[] = [];
401
+
402
+ // Phase 1: Identify taint sources
403
+ this.identifySources();
404
+
405
+ // Phase 2: Track taint propagation
406
+ this.trackPropagation();
407
+
408
+ // Phase 3: Check sinks
409
+ flows.push(...this.checkSinks());
410
+
411
+ return flows;
412
+ }
413
+
414
+ /**
415
+ * Phase 1: Identify all taint sources in the code
416
+ */
417
+ private identifySources(): void {
418
+ for (let i = 0; i < this.lines.length; i++) {
419
+ const line = this.lines[i];
420
+ const lineNum = i + 1;
421
+
422
+ // Check each source pattern
423
+ for (const source of TAINT_SOURCES) {
424
+ // Reset regex lastIndex
425
+ source.pattern.lastIndex = 0;
426
+
427
+ // Check for variable assignment from source
428
+ const assignmentPatterns = [
429
+ // const/let/var x = source
430
+ new RegExp(`(?:const|let|var)\\s+(\\w+)\\s*=\\s*${source.pattern.source}`, 'g'),
431
+ // x = source (reassignment)
432
+ new RegExp(`(\\w+)\\s*=\\s*${source.pattern.source}`, 'g'),
433
+ // destructuring: const { x } = req.body
434
+ new RegExp(`(?:const|let|var)\\s*\\{([^}]+)\\}\\s*=\\s*${source.pattern.source.replace(/\(\?:[^)]+\)?\?/g, '')}`, 'g')
435
+ ];
436
+
437
+ for (const pattern of assignmentPatterns) {
438
+ pattern.lastIndex = 0;
439
+ let match;
440
+ while ((match = pattern.exec(line)) !== null) {
441
+ const varNames = match[1].split(',').map(v => v.trim().split(':')[0].trim());
442
+
443
+ for (const varName of varNames) {
444
+ if (varName && /^\w+$/.test(varName)) {
445
+ this.taintedVariables.set(varName, {
446
+ name: varName,
447
+ sourceType: source.type,
448
+ sourceLine: lineNum,
449
+ sourceCode: line.trim(),
450
+ assignments: []
451
+ });
452
+ }
453
+ }
454
+ }
455
+ }
456
+ }
457
+ }
458
+ }
459
+
460
+ /**
461
+ * Phase 2: Track taint propagation through assignments
462
+ */
463
+ private trackPropagation(): void {
464
+ for (let i = 0; i < this.lines.length; i++) {
465
+ const line = this.lines[i];
466
+ const lineNum = i + 1;
467
+
468
+ // Check for propagation: y = taintedVar or y = something(taintedVar)
469
+ for (const [taintedVar, taintInfo] of this.taintedVariables) {
470
+ // Skip the original source line
471
+ if (lineNum === taintInfo.sourceLine) continue;
472
+
473
+ // Check if tainted variable is used in an assignment
474
+ const propagationPattern = new RegExp(
475
+ `(?:const|let|var)?\\s*(\\w+)\\s*=\\s*(?:[^;]*\\b${taintedVar}\\b[^;]*)`,
476
+ 'g'
477
+ );
478
+
479
+ let match;
480
+ while ((match = propagationPattern.exec(line)) !== null) {
481
+ const newVar = match[1];
482
+ if (newVar && newVar !== taintedVar && /^\w+$/.test(newVar)) {
483
+ // Propagate taint to new variable
484
+ if (!this.taintedVariables.has(newVar)) {
485
+ this.taintedVariables.set(newVar, {
486
+ name: newVar,
487
+ sourceType: taintInfo.sourceType,
488
+ sourceLine: taintInfo.sourceLine,
489
+ sourceCode: taintInfo.sourceCode,
490
+ assignments: [{ line: lineNum, code: line.trim() }]
491
+ });
492
+ } else {
493
+ // Add to existing tainted variable's propagation
494
+ const existing = this.taintedVariables.get(newVar)!;
495
+ existing.assignments.push({ line: lineNum, code: line.trim() });
496
+ }
497
+ }
498
+ }
499
+ }
500
+ }
501
+ }
502
+
503
+ /**
504
+ * Phase 3: Check if tainted data reaches sinks
505
+ */
506
+ private checkSinks(): TaintFlow[] {
507
+ const flows: TaintFlow[] = [];
508
+
509
+ for (let i = 0; i < this.lines.length; i++) {
510
+ const line = this.lines[i];
511
+ const lineNum = i + 1;
512
+
513
+ // Check each sink pattern
514
+ for (const sink of TAINT_SINKS) {
515
+ sink.pattern.lastIndex = 0;
516
+
517
+ if (sink.pattern.test(line)) {
518
+ // Check if any tainted variable is used in this line
519
+ for (const [varName, taintInfo] of this.taintedVariables) {
520
+ const varPattern = new RegExp(`\\b${varName}\\b`);
521
+ if (varPattern.test(line)) {
522
+ // Found taint flow!
523
+ flows.push({
524
+ source: {
525
+ type: taintInfo.sourceType,
526
+ variable: taintInfo.name,
527
+ line: taintInfo.sourceLine,
528
+ code: taintInfo.sourceCode
529
+ },
530
+ sink: {
531
+ type: sink.type,
532
+ line: lineNum,
533
+ code: line.trim(),
534
+ threatType: sink.threatType,
535
+ severity: sink.severity
536
+ },
537
+ propagation: taintInfo.assignments.map(a => ({ ...a, variable: taintInfo.name })),
538
+ confidence: this.calculateConfidence(taintInfo, sink, lineNum)
539
+ });
540
+ }
541
+ }
542
+
543
+ // Also check for direct source-to-sink (no intermediate variable)
544
+ for (const source of TAINT_SOURCES) {
545
+ source.pattern.lastIndex = 0;
546
+ if (source.pattern.test(line)) {
547
+ flows.push({
548
+ source: {
549
+ type: source.type,
550
+ variable: 'direct',
551
+ line: lineNum,
552
+ code: line.trim()
553
+ },
554
+ sink: {
555
+ type: sink.type,
556
+ line: lineNum,
557
+ code: line.trim(),
558
+ threatType: sink.threatType,
559
+ severity: sink.severity
560
+ },
561
+ propagation: [],
562
+ confidence: 95 // High confidence for direct flows
563
+ });
564
+ }
565
+ }
566
+ }
567
+ }
568
+ }
569
+
570
+ // Deduplicate flows
571
+ return this.deduplicateFlows(flows);
572
+ }
573
+
574
+ /**
575
+ * Calculate confidence score for a taint flow
576
+ */
577
+ private calculateConfidence(
578
+ taintInfo: TaintedVariable,
579
+ sink: TaintSink,
580
+ sinkLine: number
581
+ ): number {
582
+ let confidence = 70; // Base confidence
583
+
584
+ // Higher confidence for shorter flows
585
+ const distance = Math.abs(sinkLine - taintInfo.sourceLine);
586
+ if (distance < 5) confidence += 15;
587
+ else if (distance < 20) confidence += 10;
588
+ else if (distance > 100) confidence -= 10;
589
+
590
+ // Higher confidence for fewer propagation steps
591
+ if (taintInfo.assignments.length === 0) confidence += 10;
592
+ else if (taintInfo.assignments.length > 5) confidence -= 15;
593
+
594
+ // Adjust based on sink severity
595
+ if (sink.severity === Severity.CRITICAL) confidence += 5;
596
+
597
+ // Cap confidence
598
+ return Math.max(50, Math.min(100, confidence));
599
+ }
600
+
601
+ /**
602
+ * Remove duplicate flows
603
+ */
604
+ private deduplicateFlows(flows: TaintFlow[]): TaintFlow[] {
605
+ const seen = new Set<string>();
606
+ return flows.filter(flow => {
607
+ const key = `${flow.source.type}:${flow.source.line}:${flow.sink.type}:${flow.sink.line}`;
608
+ if (seen.has(key)) return false;
609
+ seen.add(key);
610
+ return true;
611
+ });
612
+ }
613
+
614
+ /**
615
+ * Get human-readable description for a source type
616
+ */
617
+ static getSourceDescription(sourceType: string): string {
618
+ const source = TAINT_SOURCES.find(s => s.type === sourceType);
619
+ return source?.description || 'User-controlled input';
620
+ }
621
+
622
+ /**
623
+ * Get sink information
624
+ */
625
+ static getSinkInfo(sinkType: string): TaintSink | undefined {
626
+ return TAINT_SINKS.find(s => s.type === sinkType);
627
+ }
628
+ }
629
+
630
+ export default TaintAnalyzer;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * PHP Analyzer Exports
3
+ */
4
+
5
+ export * from './phpAnalyzer';