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,321 @@
1
+ /**
2
+ * Security Scanner Orchestrator
3
+ * Main scanner that coordinates all analyzers
4
+ */
5
+
6
+ import * as path from 'path';
7
+ import * as fs from 'fs';
8
+ import {
9
+ ScanConfig,
10
+ ScanResult,
11
+ Finding,
12
+ ScannedFile,
13
+ ScanStats,
14
+ Severity,
15
+ FindingCategory
16
+ } from '../../types';
17
+ import { FileScanner } from './scanner';
18
+ import { RuleEngine } from './engine';
19
+ import { RiskScoringEngine } from './scoring';
20
+ import { getAllRules, getEnabledRules } from '../../rules';
21
+ import { getAllAnalyzers, initializeAnalyzers, cleanupAnalyzers, getAnalyzerForLanguage } from '../';
22
+ import { AIAnalyzer } from '../../ai';
23
+ import { HtmlReportGenerator } from '../../reports';
24
+ import { generateId, isHigherOrEqualSeverity } from '../../utils';
25
+ import { logger, logScanStart, logScanComplete, logFinding } from '../../utils/logger';
26
+
27
+ /**
28
+ * Security Scanner Class
29
+ * Main orchestrator for the SAST tool
30
+ */
31
+ export class SecurityScanner {
32
+ private config: ScanConfig;
33
+ private fileScanner: FileScanner;
34
+ private ruleEngine: RuleEngine;
35
+ private riskScoring: RiskScoringEngine;
36
+ private aiAnalyzer?: AIAnalyzer;
37
+
38
+ constructor(config: ScanConfig) {
39
+ this.config = this.normalizeConfig(config);
40
+ this.fileScanner = new FileScanner(this.config);
41
+ this.ruleEngine = new RuleEngine();
42
+ this.riskScoring = new RiskScoringEngine();
43
+
44
+ // Initialize AI analyzer if configured
45
+ if (this.config.useAI && this.config.aiConfig) {
46
+ this.aiAnalyzer = new AIAnalyzer(this.config.aiConfig);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Normalize and validate configuration
52
+ */
53
+ private normalizeConfig(config: ScanConfig): ScanConfig {
54
+ return {
55
+ ...config,
56
+ projectPath: path.resolve(config.projectPath),
57
+ exclude: config.exclude || [],
58
+ minSeverity: config.minSeverity || Severity.INFO,
59
+ verbose: config.verbose || false,
60
+ maxFileSize: config.maxFileSize || 5 * 1024 * 1024,
61
+ fileTimeout: config.fileTimeout || 30000
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Run the security scan
67
+ */
68
+ async scan(): Promise<ScanResult> {
69
+ const startTime = Date.now();
70
+ const scanId = generateId();
71
+
72
+ logScanStart(this.config.projectPath);
73
+
74
+ try {
75
+ // Initialize analyzers
76
+ await initializeAnalyzers();
77
+
78
+ // Log available analyzers and their versions
79
+ const allAnalyzers = getAllAnalyzers();
80
+ logger.info(`🔧 Loaded ${allAnalyzers.length} security analyzers:`);
81
+ for (const analyzer of allAnalyzers) {
82
+ logger.info(` • ${analyzer.name} v${analyzer.version} (${analyzer.languages.join(', ')})`);
83
+ }
84
+
85
+ if (this.aiAnalyzer) {
86
+ await this.aiAnalyzer.initialize();
87
+ }
88
+
89
+ // Load rules
90
+ const rules = getEnabledRules();
91
+ this.ruleEngine.loadRules(rules);
92
+
93
+ // Scan files
94
+ logger.info('📂 Scanning project files...');
95
+ const files = await this.fileScanner.scan();
96
+
97
+ if (files.length === 0) {
98
+ logger.warn('⚠️ No files found to analyze');
99
+ return this.createEmptyResult(scanId, startTime);
100
+ }
101
+
102
+ // Analyze files
103
+ logger.info('🔍 Analyzing code for vulnerabilities and malware...');
104
+ const allFindings: Finding[] = [];
105
+
106
+ for (let i = 0; i < files.length; i++) {
107
+ const file = files[i];
108
+
109
+ if (this.config.verbose) {
110
+ logger.debug(`Analyzing: ${file.relativePath}`);
111
+ }
112
+
113
+ try {
114
+ const fileFindings = await this.analyzeFile(file);
115
+ allFindings.push(...fileFindings);
116
+
117
+ // Log critical findings immediately
118
+ for (const finding of fileFindings) {
119
+ if (finding.severity === Severity.CRITICAL || finding.severity === Severity.HIGH || finding.category === FindingCategory.MALWARE) {
120
+ logFinding(finding.severity, finding.title, finding.location.file, finding.location.startLine, finding.category);
121
+ }
122
+ }
123
+ } catch (error) {
124
+ logger.debug(`Error analyzing ${file.relativePath}: ${error}`);
125
+ }
126
+ }
127
+
128
+ // Deduplicate findings
129
+ const uniqueFindings = this.ruleEngine.deduplicateFindings(allFindings);
130
+
131
+ // Filter by minimum severity
132
+ const filteredFindings = this.filterBySeverity(uniqueFindings);
133
+
134
+ // Sort by severity
135
+ const sortedFindings = this.ruleEngine.sortBySeverity(filteredFindings);
136
+
137
+ // Calculate statistics
138
+ const endTime = Date.now();
139
+ const stats = this.calculateStats(files, sortedFindings, startTime, endTime);
140
+
141
+ // Calculate risk score
142
+ const riskScore = this.riskScoring.calculateRiskScore(sortedFindings, files.length);
143
+ const riskLevel = this.riskScoring.getRiskLevel(riskScore);
144
+
145
+ // Create result
146
+ const result: ScanResult = {
147
+ projectPath: this.config.projectPath,
148
+ projectName: path.basename(this.config.projectPath),
149
+ scanId,
150
+ findings: sortedFindings,
151
+ stats,
152
+ riskScore,
153
+ riskLevel,
154
+ scannedFiles: files,
155
+ config: this.config
156
+ };
157
+
158
+ logScanComplete(stats.totalFiles, sortedFindings.length, stats.duration, riskScore);
159
+
160
+ // Generate report if output path specified
161
+ if (this.config.outputPath) {
162
+ await this.generateReport(result);
163
+ }
164
+
165
+ // Cleanup
166
+ await cleanupAnalyzers();
167
+
168
+ return result;
169
+
170
+ } catch (error) {
171
+ logger.error(`Scan failed: ${error}`);
172
+ throw error;
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Analyze a single file
178
+ */
179
+ private async analyzeFile(file: ScannedFile): Promise<Finding[]> {
180
+ const findings: Finding[] = [];
181
+
182
+ // Skip if no language detected
183
+ if (!file.language) {
184
+ return findings;
185
+ }
186
+
187
+ // Get language-specific analyzer
188
+ const analyzer = getAnalyzerForLanguage(file.language);
189
+ if (analyzer) {
190
+ // Log analyzer version being used
191
+ if (this.config.verbose) {
192
+ logger.debug(`Using ${analyzer.name} v${analyzer.version} for ${file.relativePath}`);
193
+ }
194
+
195
+ const rules = getEnabledRules().filter(r =>
196
+ r.languages.includes(file.language!)
197
+ );
198
+ const analyzerFindings = await analyzer.analyze(file, rules);
199
+ findings.push(...analyzerFindings);
200
+ }
201
+
202
+ // Run rule engine for generic patterns
203
+ const ruleFindings = await this.ruleEngine.analyzeFile(file);
204
+ findings.push(...ruleFindings);
205
+
206
+ // AI analysis if enabled
207
+ if (this.aiAnalyzer && this.config.useAI) {
208
+ const aiResult = await this.aiAnalyzer.analyze(file);
209
+ findings.push(...aiResult.findings);
210
+ }
211
+
212
+ return findings;
213
+ }
214
+
215
+ /**
216
+ * Filter findings by minimum severity
217
+ */
218
+ private filterBySeverity(findings: Finding[]): Finding[] {
219
+ if (!this.config.minSeverity) {
220
+ return findings;
221
+ }
222
+
223
+ return findings.filter(f =>
224
+ isHigherOrEqualSeverity(f.severity, this.config.minSeverity!)
225
+ );
226
+ }
227
+
228
+ /**
229
+ * Calculate scan statistics
230
+ */
231
+ private calculateStats(
232
+ files: ScannedFile[],
233
+ findings: Finding[],
234
+ startTime: number,
235
+ endTime: number
236
+ ): ScanStats {
237
+ const totalLines = files.reduce((sum, f) => sum + f.lineCount, 0);
238
+
239
+ const filesByLanguage: Record<string, number> = {};
240
+ for (const file of files) {
241
+ const lang = file.language || 'unknown';
242
+ filesByLanguage[lang] = (filesByLanguage[lang] || 0) + 1;
243
+ }
244
+
245
+ const findingsBySeverity = this.riskScoring.getSeverityDistribution(findings);
246
+ const findingsByCategory = this.riskScoring.getCategoryDistribution(findings);
247
+
248
+ return {
249
+ totalFiles: files.length,
250
+ totalLines,
251
+ filesByLanguage,
252
+ findingsBySeverity,
253
+ findingsByCategory,
254
+ duration: endTime - startTime,
255
+ startTime: new Date(startTime),
256
+ endTime: new Date(endTime)
257
+ };
258
+ }
259
+
260
+ /**
261
+ * Create empty result when no files found
262
+ */
263
+ private createEmptyResult(scanId: string, startTime: number): ScanResult {
264
+ const endTime = Date.now();
265
+
266
+ return {
267
+ projectPath: this.config.projectPath,
268
+ projectName: path.basename(this.config.projectPath),
269
+ scanId,
270
+ findings: [],
271
+ stats: {
272
+ totalFiles: 0,
273
+ totalLines: 0,
274
+ filesByLanguage: {},
275
+ findingsBySeverity: {
276
+ [Severity.CRITICAL]: 0,
277
+ [Severity.HIGH]: 0,
278
+ [Severity.MEDIUM]: 0,
279
+ [Severity.LOW]: 0,
280
+ [Severity.INFO]: 0
281
+ },
282
+ findingsByCategory: {
283
+ [FindingCategory.MALWARE]: 0,
284
+ [FindingCategory.VULNERABILITY]: 0,
285
+ [FindingCategory.CODE_SMELL]: 0,
286
+ [FindingCategory.BEST_PRACTICE]: 0
287
+ },
288
+ duration: endTime - startTime,
289
+ startTime: new Date(startTime),
290
+ endTime: new Date(endTime)
291
+ },
292
+ riskScore: 0,
293
+ riskLevel: 'safe',
294
+ scannedFiles: [],
295
+ config: this.config
296
+ };
297
+ }
298
+
299
+ /**
300
+ * Generate report
301
+ */
302
+ private async generateReport(result: ScanResult): Promise<void> {
303
+ if (!this.config.outputPath) return;
304
+
305
+ const outputPath = path.resolve(this.config.outputPath);
306
+ const ext = path.extname(outputPath).toLowerCase();
307
+
308
+ if (ext === '.html' || ext === '') {
309
+ // Pass the language configuration to the report generator
310
+ const reportLanguage = this.config.language || 'es';
311
+ const reportGenerator = new HtmlReportGenerator(reportLanguage);
312
+ const finalPath = ext === '' ? `${outputPath}.html` : outputPath;
313
+ await reportGenerator.saveReport(result, finalPath);
314
+ } else if (ext === '.json') {
315
+ fs.writeFileSync(outputPath, JSON.stringify(result, null, 2), 'utf-8');
316
+ logger.info(`📁 Reporte JSON guardado en: ${outputPath}`);
317
+ }
318
+ }
319
+ }
320
+
321
+ export default SecurityScanner;
@@ -0,0 +1,328 @@
1
+ /**
2
+ * C# Analyzer
3
+ * Specialized analyzer for C# code
4
+ */
5
+
6
+ import { BaseAnalyzer } from '../base';
7
+ import { ScannedFile, Finding, Rule, SupportedLanguage, Severity, ThreatType, FindingCategory } from '../../types';
8
+ import { generateId, extractCodeContext } from '../../utils';
9
+ import { getStandardsForThreat } from '../../rules/standards';
10
+
11
+ /**
12
+ * C# Analyzer Class
13
+ */
14
+ export class CSharpAnalyzer extends BaseAnalyzer {
15
+ name = 'C# Analyzer';
16
+ languages: SupportedLanguage[] = ['csharp'];
17
+ version = '1.0.0';
18
+
19
+ /**
20
+ * Analyze C# file
21
+ */
22
+ async analyze(file: ScannedFile, rules: Rule[]): Promise<Finding[]> {
23
+ const findings: Finding[] = [];
24
+
25
+ // Filter rules for C#
26
+ const csRules = rules.filter(r => r.languages.includes('csharp'));
27
+
28
+ // Run rule engine
29
+ const ruleFindings = await this.ruleEngine.analyzeFile(file, csRules);
30
+ findings.push(...ruleFindings);
31
+
32
+ // Additional C#-specific analysis
33
+ const customFindings = await this.customAnalysis(file);
34
+ findings.push(...customFindings);
35
+
36
+ return findings;
37
+ }
38
+
39
+ /**
40
+ * Custom C#-specific analysis
41
+ */
42
+ private async customAnalysis(file: ScannedFile): Promise<Finding[]> {
43
+ const findings: Finding[] = [];
44
+ const lines = file.content.split('\n');
45
+
46
+ for (let i = 0; i < lines.length; i++) {
47
+ const line = lines[i];
48
+ const lineNum = i + 1;
49
+
50
+ // Check for SQL injection
51
+ if (this.checkSqlInjection(line)) {
52
+ findings.push(this.createFinding(
53
+ file,
54
+ lineNum,
55
+ 'Potential SQL Injection',
56
+ 'String concatenation in SQL query. Use parameterized queries.',
57
+ Severity.CRITICAL,
58
+ ThreatType.SQL_INJECTION
59
+ ));
60
+ }
61
+
62
+ // Check for command injection
63
+ if (this.checkCommandInjection(line)) {
64
+ findings.push(this.createFinding(
65
+ file,
66
+ lineNum,
67
+ 'Command Injection Risk',
68
+ 'Process.Start with potentially user-controlled arguments.',
69
+ Severity.CRITICAL,
70
+ ThreatType.COMMAND_INJECTION
71
+ ));
72
+ }
73
+
74
+ // Check for deserialization
75
+ if (this.checkDeserialization(line)) {
76
+ findings.push(this.createFinding(
77
+ file,
78
+ lineNum,
79
+ 'Insecure Deserialization',
80
+ 'BinaryFormatter and similar can execute arbitrary code.',
81
+ Severity.CRITICAL,
82
+ ThreatType.INSECURE_DESERIALIZATION
83
+ ));
84
+ }
85
+
86
+ // Check for XXE
87
+ if (this.checkXxe(line)) {
88
+ findings.push(this.createFinding(
89
+ file,
90
+ lineNum,
91
+ 'Potential XXE Vulnerability',
92
+ 'XML parser may be vulnerable to XXE attacks.',
93
+ Severity.HIGH,
94
+ ThreatType.DANGEROUS_FUNCTION
95
+ ));
96
+ }
97
+
98
+ // Check for LDAP injection
99
+ if (this.checkLdapInjection(line)) {
100
+ findings.push(this.createFinding(
101
+ file,
102
+ lineNum,
103
+ 'Potential LDAP Injection',
104
+ 'LDAP query with user-controlled input.',
105
+ Severity.HIGH,
106
+ ThreatType.LDAP_INJECTION
107
+ ));
108
+ }
109
+
110
+ // Check for path traversal
111
+ if (this.checkPathTraversal(line)) {
112
+ findings.push(this.createFinding(
113
+ file,
114
+ lineNum,
115
+ 'Path Traversal Risk',
116
+ 'File operation with potentially user-controlled path.',
117
+ Severity.HIGH,
118
+ ThreatType.PATH_TRAVERSAL
119
+ ));
120
+ }
121
+
122
+ // Check for weak crypto
123
+ if (this.checkWeakCrypto(line)) {
124
+ findings.push(this.createFinding(
125
+ file,
126
+ lineNum,
127
+ 'Weak Cryptographic Algorithm',
128
+ 'Use of weak or deprecated cryptographic algorithm.',
129
+ Severity.MEDIUM,
130
+ ThreatType.INSECURE_CRYPTO
131
+ ));
132
+ }
133
+
134
+ // Check for hardcoded credentials
135
+ if (this.checkHardcodedCredentials(line)) {
136
+ findings.push(this.createFinding(
137
+ file,
138
+ lineNum,
139
+ 'Hardcoded Credentials',
140
+ 'Credentials appear to be hardcoded in source code.',
141
+ Severity.HIGH,
142
+ ThreatType.HARDCODED_CREDENTIALS
143
+ ));
144
+ }
145
+
146
+ // Check for unsafe reflection
147
+ if (this.checkUnsafeReflection(line)) {
148
+ findings.push(this.createFinding(
149
+ file,
150
+ lineNum,
151
+ 'Unsafe Reflection',
152
+ 'Type.GetType with user input can load malicious assemblies.',
153
+ Severity.HIGH,
154
+ ThreatType.DANGEROUS_FUNCTION
155
+ ));
156
+ }
157
+ }
158
+
159
+ return findings;
160
+ }
161
+
162
+ /**
163
+ * Check for SQL injection
164
+ */
165
+ private checkSqlInjection(line: string): boolean {
166
+ const patterns = [
167
+ /SqlCommand\s*\([^)]*\+/,
168
+ /ExecuteReader\s*\(\s*["'][^'"]*\+/,
169
+ /ExecuteNonQuery\s*\(\s*["'][^'"]*\+/,
170
+ /["']SELECT[^'"]*["']\s*\+/i,
171
+ /["']INSERT[^'"]*["']\s*\+/i,
172
+ /["']UPDATE[^'"]*["']\s*\+/i,
173
+ /["']DELETE[^'"]*["']\s*\+/i,
174
+ /FromSqlRaw\s*\([^)]*\+/
175
+ ];
176
+ return patterns.some(p => p.test(line));
177
+ }
178
+
179
+ /**
180
+ * Check for command injection
181
+ */
182
+ private checkCommandInjection(line: string): boolean {
183
+ const patterns = [
184
+ /Process\.Start\s*\([^)]*\+/,
185
+ /ProcessStartInfo\s*\{[^}]*Arguments\s*=\s*[^}]*\+/,
186
+ /new\s+ProcessStartInfo\s*\([^)]*\+/
187
+ ];
188
+ return patterns.some(p => p.test(line));
189
+ }
190
+
191
+ /**
192
+ * Check for insecure deserialization
193
+ */
194
+ private checkDeserialization(line: string): boolean {
195
+ const patterns = [
196
+ /BinaryFormatter\s*\(\s*\)/,
197
+ /\.Deserialize\s*\(/,
198
+ /NetDataContractSerializer/,
199
+ /SoapFormatter/,
200
+ /ObjectStateFormatter/,
201
+ /LosFormatter/,
202
+ /JavaScriptSerializer\s*\(\s*\).*Deserialize/
203
+ ];
204
+ return patterns.some(p => p.test(line));
205
+ }
206
+
207
+ /**
208
+ * Check for XXE
209
+ */
210
+ private checkXxe(line: string): boolean {
211
+ const patterns = [
212
+ /XmlDocument\s*\(\s*\)/,
213
+ /XmlTextReader\s*\(/,
214
+ /new\s+XmlReaderSettings\s*\(\s*\)/
215
+ ];
216
+ if (patterns.some(p => p.test(line))) {
217
+ // Check if DtdProcessing is properly configured
218
+ if (!/DtdProcessing\s*=\s*DtdProcessing\.Prohibit/.test(line)) {
219
+ return true;
220
+ }
221
+ }
222
+ return false;
223
+ }
224
+
225
+ /**
226
+ * Check for LDAP injection
227
+ */
228
+ private checkLdapInjection(line: string): boolean {
229
+ const patterns = [
230
+ /DirectorySearcher\s*\([^)]*\+/,
231
+ /FindAll\s*\(\s*["'][^'"]*\+/,
232
+ /Filter\s*=\s*["'][^'"]*\+/
233
+ ];
234
+ return patterns.some(p => p.test(line));
235
+ }
236
+
237
+ /**
238
+ * Check for path traversal
239
+ */
240
+ private checkPathTraversal(line: string): boolean {
241
+ const patterns = [
242
+ /File\.(?:ReadAll|WriteAll|Open|Delete)\s*\([^)]*\+/,
243
+ /new\s+FileStream\s*\([^)]*\+/,
244
+ /Path\.Combine\s*\([^)]*Request\./i,
245
+ /Directory\.(?:GetFiles|Delete|Create)\s*\([^)]*\+/
246
+ ];
247
+ return patterns.some(p => p.test(line));
248
+ }
249
+
250
+ /**
251
+ * Check for weak crypto
252
+ */
253
+ private checkWeakCrypto(line: string): boolean {
254
+ const patterns = [
255
+ /\bMD5\.Create\s*\(\s*\)/,
256
+ /\bSHA1\.Create\s*\(\s*\)/,
257
+ /\bDES\.Create\s*\(\s*\)/,
258
+ /\bTripleDES\.Create\s*\(\s*\)/,
259
+ /\bRC2\.Create\s*\(\s*\)/
260
+ ];
261
+ return patterns.some(p => p.test(line));
262
+ }
263
+
264
+ /**
265
+ * Check for hardcoded credentials
266
+ */
267
+ private checkHardcodedCredentials(line: string): boolean {
268
+ const patterns = [
269
+ /(?:password|pwd|passwd)\s*=\s*["'][^"']{4,}["']/i,
270
+ /(?:connectionString|connStr).*(?:password|pwd)\s*=/i,
271
+ /SqlConnection\s*\([^)]*password\s*=/i
272
+ ];
273
+ return patterns.some(p => p.test(line));
274
+ }
275
+
276
+ /**
277
+ * Check for unsafe reflection
278
+ */
279
+ private checkUnsafeReflection(line: string): boolean {
280
+ const patterns = [
281
+ /Type\.GetType\s*\([^)]*\+/,
282
+ /Assembly\.Load(?:From|File)?\s*\([^)]*\+/,
283
+ /Activator\.CreateInstance\s*\([^)]*GetType/
284
+ ];
285
+ return patterns.some(p => p.test(line));
286
+ }
287
+
288
+ /**
289
+ * Create generic finding
290
+ */
291
+ private createFinding(
292
+ file: ScannedFile,
293
+ lineNum: number,
294
+ title: string,
295
+ description: string,
296
+ severity: Severity,
297
+ threatType: ThreatType
298
+ ): Finding {
299
+ const context = extractCodeContext(file.content, lineNum, 2);
300
+
301
+ return {
302
+ id: generateId(),
303
+ title,
304
+ description,
305
+ severity,
306
+ threatType,
307
+ category: FindingCategory.VULNERABILITY,
308
+ location: {
309
+ file: file.relativePath,
310
+ startLine: lineNum,
311
+ endLine: lineNum
312
+ },
313
+ snippet: {
314
+ code: context.code,
315
+ contextBefore: context.contextBefore,
316
+ contextAfter: context.contextAfter
317
+ },
318
+ standards: getStandardsForThreat(threatType),
319
+ remediation: 'Review and fix the identified issue.',
320
+ confidence: 75,
321
+ analyzer: this.name,
322
+ timestamp: new Date(),
323
+ tags: ['csharp', 'dotnet']
324
+ };
325
+ }
326
+ }
327
+
328
+ export default CSharpAnalyzer;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * C# Analyzer Exports
3
+ */
4
+
5
+ export * from './csharpAnalyzer';