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,626 @@
1
+ /**
2
+ * Package.json Security Analyzer
3
+ * Deep analysis of npm package manifests for supply chain threats
4
+ *
5
+ * Detects typosquatting, malicious scripts, suspicious dependencies
6
+ */
7
+
8
+ import { Severity, ThreatType, FindingCategory } from '../../types';
9
+
10
+ /**
11
+ * Calculate Levenshtein distance between two strings
12
+ * (Simple implementation to avoid external dependency)
13
+ */
14
+ function levenshteinDistance(a: string, b: string): number {
15
+ const matrix: number[][] = [];
16
+
17
+ for (let i = 0; i <= b.length; i++) {
18
+ matrix[i] = [i];
19
+ }
20
+ for (let j = 0; j <= a.length; j++) {
21
+ matrix[0][j] = j;
22
+ }
23
+
24
+ for (let i = 1; i <= b.length; i++) {
25
+ for (let j = 1; j <= a.length; j++) {
26
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
27
+ matrix[i][j] = matrix[i - 1][j - 1];
28
+ } else {
29
+ matrix[i][j] = Math.min(
30
+ matrix[i - 1][j - 1] + 1, // substitution
31
+ matrix[i][j - 1] + 1, // insertion
32
+ matrix[i - 1][j] + 1 // deletion
33
+ );
34
+ }
35
+ }
36
+ }
37
+
38
+ return matrix[b.length][a.length];
39
+ }
40
+
41
+ /**
42
+ * Package.json analysis finding
43
+ */
44
+ export interface PackageJsonFinding {
45
+ /** Finding type */
46
+ type: PackageJsonFindingType;
47
+ /** Finding name */
48
+ name: string;
49
+ /** Description */
50
+ description: string;
51
+ /** Severity */
52
+ severity: Severity;
53
+ /** Threat type */
54
+ threatType: ThreatType;
55
+ /** Category */
56
+ category: FindingCategory;
57
+ /** Affected field */
58
+ field: string;
59
+ /** Value that triggered the finding */
60
+ value: string;
61
+ /** Confidence 0-100 */
62
+ confidence: number;
63
+ /** Remediation advice */
64
+ remediation: string;
65
+ /** Additional context */
66
+ context?: Record<string, string>;
67
+ }
68
+
69
+ /**
70
+ * Types of package.json findings
71
+ */
72
+ export enum PackageJsonFindingType {
73
+ MALICIOUS_SCRIPT = 'malicious_script',
74
+ TYPOSQUATTING = 'typosquatting',
75
+ SUSPICIOUS_DEPENDENCY = 'suspicious_dependency',
76
+ PRIVATE_REGISTRY = 'private_registry',
77
+ GIT_DEPENDENCY = 'git_dependency',
78
+ LOCAL_PATH_DEPENDENCY = 'local_path_dependency',
79
+ OVERLY_PERMISSIVE_VERSION = 'overly_permissive_version',
80
+ DANGEROUS_POSTINSTALL = 'dangerous_postinstall',
81
+ OUTDATED_DEPENDENCY = 'outdated_dependency',
82
+ DEPRECATED_PACKAGE = 'deprecated_package',
83
+ INSTALL_SCRIPT_ABUSE = 'install_script_abuse',
84
+ SUSPICIOUS_MAINTAINER = 'suspicious_maintainer'
85
+ }
86
+
87
+ /**
88
+ * Popular packages for typosquatting detection
89
+ */
90
+ const POPULAR_PACKAGES = [
91
+ // Core npm packages
92
+ 'lodash', 'underscore', 'express', 'react', 'vue', 'angular',
93
+ 'moment', 'axios', 'request', 'bluebird', 'async', 'chalk',
94
+ 'commander', 'debug', 'dotenv', 'fs-extra', 'glob', 'inquirer',
95
+ 'jest', 'mocha', 'chai', 'webpack', 'babel-core', 'typescript',
96
+ 'eslint', 'prettier', 'nodemon', 'pm2', 'mongoose', 'sequelize',
97
+ 'mysql', 'pg', 'redis', 'socket.io', 'graphql', 'apollo-server',
98
+ 'next', 'nuxt', 'gatsby', 'electron', 'puppeteer', 'cheerio',
99
+ 'uuid', 'jsonwebtoken', 'bcrypt', 'passport', 'cors', 'helmet',
100
+ 'morgan', 'winston', 'pino', 'bunyan', 'body-parser', 'cookie-parser',
101
+ 'multer', 'formidable', 'sharp', 'jimp', 'node-fetch', 'got',
102
+ 'superagent', 'cross-env', 'rimraf', 'mkdirp', 'semver', 'yargs',
103
+ 'minimist', 'ora', 'listr', 'execa', 'shelljs', 'cross-spawn',
104
+ // React ecosystem
105
+ 'react-dom', 'react-router', 'react-redux', 'redux', 'redux-thunk',
106
+ 'redux-saga', 'mobx', 'mobx-react', 'styled-components', 'emotion',
107
+ 'material-ui', '@mui/material', 'antd', 'bootstrap', 'tailwindcss',
108
+ // Vue ecosystem
109
+ 'vue-router', 'vuex', 'vuetify', 'element-ui', 'vant',
110
+ // Angular ecosystem
111
+ '@angular/core', '@angular/common', '@angular/router', 'rxjs',
112
+ // Build tools
113
+ 'rollup', 'parcel', 'esbuild', 'vite', 'snowpack',
114
+ 'babel-loader', 'ts-loader', 'css-loader', 'style-loader',
115
+ // Testing
116
+ 'cypress', 'playwright', '@testing-library/react', 'enzyme',
117
+ // Security sensitive
118
+ 'crypto-js', 'node-forge', 'bcryptjs', 'argon2'
119
+ ];
120
+
121
+ /**
122
+ * Suspicious script patterns
123
+ */
124
+ const SUSPICIOUS_SCRIPT_PATTERNS: Array<{
125
+ pattern: RegExp;
126
+ name: string;
127
+ description: string;
128
+ severity: Severity;
129
+ confidence: number;
130
+ }> = [
131
+ {
132
+ pattern: /curl\s+[^\s]+\s*\|\s*(?:sh|bash|zsh)/i,
133
+ name: 'Remote Script Execution',
134
+ description: 'Downloads and executes a remote script',
135
+ severity: Severity.CRITICAL,
136
+ confidence: 95
137
+ },
138
+ {
139
+ pattern: /wget\s+[^\s]+\s*(?:&&|;)\s*(?:sh|bash|chmod)/i,
140
+ name: 'wget Remote Execution',
141
+ description: 'Downloads and executes a remote script via wget',
142
+ severity: Severity.CRITICAL,
143
+ confidence: 95
144
+ },
145
+ {
146
+ pattern: /node\s+-e\s+["'][^"']*(?:http|https|fetch|require\(['"]child_process)/i,
147
+ name: 'Inline Node Execution',
148
+ description: 'Executes inline Node.js code with network or process access',
149
+ severity: Severity.HIGH,
150
+ confidence: 85
151
+ },
152
+ {
153
+ pattern: /powershell\s+(?:-(?:e|enc|encodedcommand))/i,
154
+ name: 'PowerShell Encoded Command',
155
+ description: 'Executes encoded PowerShell command',
156
+ severity: Severity.CRITICAL,
157
+ confidence: 90
158
+ },
159
+ {
160
+ pattern: /echo\s+[A-Za-z0-9+/=]{50,}\s*\|\s*base64\s+-d/i,
161
+ name: 'Base64 Decode Execution',
162
+ description: 'Decodes and potentially executes Base64 content',
163
+ severity: Severity.HIGH,
164
+ confidence: 85
165
+ },
166
+ {
167
+ pattern: /\$\(curl|`curl|\$\(wget|`wget/i,
168
+ name: 'Command Substitution Download',
169
+ description: 'Uses command substitution to download content',
170
+ severity: Severity.HIGH,
171
+ confidence: 85
172
+ },
173
+ {
174
+ pattern: /eval\s*["'`]?\$\(/i,
175
+ name: 'Eval Command Substitution',
176
+ description: 'Evaluates the output of a command',
177
+ severity: Severity.CRITICAL,
178
+ confidence: 90
179
+ },
180
+ {
181
+ pattern: />\s*\/dev\/tcp\//i,
182
+ name: 'Bash Network Redirect',
183
+ description: 'Uses bash /dev/tcp for network communication',
184
+ severity: Severity.CRITICAL,
185
+ confidence: 95
186
+ },
187
+ {
188
+ pattern: /nc\s+-[^|]*\s+(?:\||&)/i,
189
+ name: 'Netcat Usage',
190
+ description: 'Uses netcat for network communication',
191
+ severity: Severity.HIGH,
192
+ confidence: 80
193
+ },
194
+ {
195
+ pattern: /rm\s+-rf\s+(?:\/|~|\$HOME)/i,
196
+ name: 'Dangerous File Deletion',
197
+ description: 'Recursively deletes important directories',
198
+ severity: Severity.CRITICAL,
199
+ confidence: 90
200
+ },
201
+ {
202
+ pattern: /chmod\s+(?:\+s|u\+s|4755|2755)/i,
203
+ name: 'SetUID/SetGID Modification',
204
+ description: 'Changes file permissions to setuid/setgid',
205
+ severity: Severity.HIGH,
206
+ confidence: 85
207
+ },
208
+ {
209
+ pattern: /(?:\.ssh|id_rsa|authorized_keys)/i,
210
+ name: 'SSH Key Access',
211
+ description: 'Script accesses SSH keys or configuration',
212
+ severity: Severity.HIGH,
213
+ confidence: 75
214
+ },
215
+ {
216
+ pattern: /(?:\/etc\/passwd|\/etc\/shadow)/i,
217
+ name: 'System Password File Access',
218
+ description: 'Script accesses system password files',
219
+ severity: Severity.CRITICAL,
220
+ confidence: 90
221
+ }
222
+ ];
223
+
224
+ /**
225
+ * Known malicious or suspicious package names
226
+ */
227
+ const KNOWN_MALICIOUS_PACKAGES = new Set([
228
+ // Historical malicious packages
229
+ 'event-stream', 'flatmap-stream', 'ua-parser-js', 'coa', 'rc',
230
+ 'colors', 'faker', // These were sabotaged by maintainers
231
+ // Common typosquatting targets that have been used maliciously
232
+ 'loadsh', 'lodahs', 'lodashs', 'crossenv', 'cross-env.js',
233
+ 'babelcli', 'http-proxy.js', 'mongose', 'mongoos',
234
+ 'mssql.js', 'mssql-node', 'mysqljs', 'node-fabric',
235
+ 'node-opencv', 'node-opensl', 'node-openssl', 'node-sqlite',
236
+ 'node-tkinter', 'nodefabric', 'nodeffmpeg', 'nodemailer-js',
237
+ 'noderequest', 'nodesass', 'nodesqlite', 'opencv.js',
238
+ 'openssl.js', 'proxy.js', 'shadowsock', 'smb', 'sqlite.js',
239
+ 'sqliter', 'sqlserver', 'tkinter'
240
+ ]);
241
+
242
+ /**
243
+ * Suspicious package name patterns
244
+ */
245
+ const SUSPICIOUS_PACKAGE_PATTERNS = [
246
+ { pattern: /^@[^/]+\/[^/]+--[^/]+$/, reason: 'Double hyphen in scoped package' },
247
+ { pattern: /^[a-z]+-[0-9]+$/, reason: 'Package name with trailing numbers' },
248
+ { pattern: /^node-(?!gyp|fetch|forge|uuid|notifier|schedule|html)/, reason: 'Suspicious node- prefix' },
249
+ { pattern: /^js-(?!yaml|cookie|beautify)/, reason: 'Suspicious js- prefix' },
250
+ { pattern: /\.(js|ts|json|node)$/, reason: 'Package name with file extension' },
251
+ { pattern: /^npm-|^yarn-/i, reason: 'Package prefixed with package manager name' }
252
+ ];
253
+
254
+ /**
255
+ * Package.json Analyzer Class
256
+ */
257
+ export class PackageJsonAnalyzer {
258
+ private findings: PackageJsonFinding[] = [];
259
+
260
+ /**
261
+ * Analyze a package.json file
262
+ */
263
+ analyze(content: string, filePath: string): PackageJsonFinding[] {
264
+ this.findings = [];
265
+
266
+ let pkg: Record<string, unknown>;
267
+ try {
268
+ pkg = JSON.parse(content);
269
+ } catch {
270
+ // Invalid JSON
271
+ return [];
272
+ }
273
+
274
+ // Analyze scripts
275
+ if (pkg.scripts && typeof pkg.scripts === 'object') {
276
+ this.analyzeScripts(pkg.scripts as Record<string, string>);
277
+ }
278
+
279
+ // Analyze dependencies
280
+ const depFields = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
281
+ for (const field of depFields) {
282
+ if (pkg[field] && typeof pkg[field] === 'object') {
283
+ this.analyzeDependencies(pkg[field] as Record<string, string>, field);
284
+ }
285
+ }
286
+
287
+ // Check for bundledDependencies with version specifiers (unusual)
288
+ if (pkg.bundledDependencies || pkg.bundleDependencies) {
289
+ this.checkBundledDependencies(
290
+ (pkg.bundledDependencies || pkg.bundleDependencies) as string[]
291
+ );
292
+ }
293
+
294
+ // Check for suspicious package metadata
295
+ this.analyzeMetadata(pkg);
296
+
297
+ return this.findings;
298
+ }
299
+
300
+ /**
301
+ * Analyze npm scripts for malicious patterns
302
+ */
303
+ private analyzeScripts(scripts: Record<string, string>): void {
304
+ // High-risk lifecycle scripts
305
+ const lifecycleScripts = ['preinstall', 'install', 'postinstall', 'preuninstall', 'postuninstall'];
306
+
307
+ for (const [scriptName, scriptContent] of Object.entries(scripts)) {
308
+ // Check lifecycle scripts more strictly
309
+ const isLifecycle = lifecycleScripts.includes(scriptName);
310
+
311
+ // Check against suspicious patterns
312
+ for (const { pattern, name, description, severity, confidence } of SUSPICIOUS_SCRIPT_PATTERNS) {
313
+ if (pattern.test(scriptContent)) {
314
+ this.findings.push({
315
+ type: PackageJsonFindingType.MALICIOUS_SCRIPT,
316
+ name: `${name} in ${scriptName}`,
317
+ description: `${description} found in npm script "${scriptName}"`,
318
+ severity: isLifecycle ? Severity.CRITICAL : severity,
319
+ threatType: ThreatType.MALICIOUS_LOADER,
320
+ category: FindingCategory.MALWARE,
321
+ field: `scripts.${scriptName}`,
322
+ value: scriptContent,
323
+ confidence: isLifecycle ? Math.min(confidence + 10, 100) : confidence,
324
+ remediation: isLifecycle
325
+ ? 'Remove or thoroughly review this lifecycle script. Use npm config set ignore-scripts true for untrusted packages.'
326
+ : 'Review and remove suspicious commands from the script.',
327
+ context: { scriptName }
328
+ });
329
+ }
330
+ }
331
+
332
+ // Check for scripts that look obfuscated
333
+ if (this.looksObfuscated(scriptContent)) {
334
+ this.findings.push({
335
+ type: PackageJsonFindingType.MALICIOUS_SCRIPT,
336
+ name: 'Obfuscated Script',
337
+ description: `Script "${scriptName}" appears to contain obfuscated code`,
338
+ severity: isLifecycle ? Severity.CRITICAL : Severity.HIGH,
339
+ threatType: ThreatType.OBFUSCATED_CODE,
340
+ category: FindingCategory.MALWARE,
341
+ field: `scripts.${scriptName}`,
342
+ value: scriptContent.substring(0, 200),
343
+ confidence: 75,
344
+ remediation: 'Deobfuscate and analyze the script content.',
345
+ context: { scriptName }
346
+ });
347
+ }
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Analyze dependencies for security issues
353
+ */
354
+ private analyzeDependencies(deps: Record<string, string>, field: string): void {
355
+ for (const [name, version] of Object.entries(deps)) {
356
+ // Check for known malicious packages
357
+ if (KNOWN_MALICIOUS_PACKAGES.has(name)) {
358
+ this.findings.push({
359
+ type: PackageJsonFindingType.SUSPICIOUS_DEPENDENCY,
360
+ name: 'Known Malicious Package',
361
+ description: `Package "${name}" has been flagged as malicious or compromised`,
362
+ severity: Severity.CRITICAL,
363
+ threatType: ThreatType.MALICIOUS_LOADER,
364
+ category: FindingCategory.MALWARE,
365
+ field: `${field}.${name}`,
366
+ value: `${name}@${version}`,
367
+ confidence: 95,
368
+ remediation: 'Remove this package immediately and find a legitimate alternative.'
369
+ });
370
+ }
371
+
372
+ // Check for typosquatting
373
+ const typosquatResult = this.checkTyposquatting(name);
374
+ if (typosquatResult) {
375
+ this.findings.push({
376
+ type: PackageJsonFindingType.TYPOSQUATTING,
377
+ name: 'Potential Typosquatting',
378
+ description: `Package "${name}" may be a typosquat of "${typosquatResult.target}"`,
379
+ severity: Severity.HIGH,
380
+ threatType: ThreatType.MALICIOUS_LOADER,
381
+ category: FindingCategory.MALWARE,
382
+ field: `${field}.${name}`,
383
+ value: `${name}@${version}`,
384
+ confidence: typosquatResult.confidence,
385
+ remediation: `Verify you intended to install "${name}" and not "${typosquatResult.target}".`,
386
+ context: { similarTo: typosquatResult.target }
387
+ });
388
+ }
389
+
390
+ // Check for suspicious package name patterns
391
+ for (const { pattern, reason } of SUSPICIOUS_PACKAGE_PATTERNS) {
392
+ if (pattern.test(name)) {
393
+ this.findings.push({
394
+ type: PackageJsonFindingType.SUSPICIOUS_DEPENDENCY,
395
+ name: 'Suspicious Package Name',
396
+ description: `Package "${name}" has a suspicious name pattern: ${reason}`,
397
+ severity: Severity.MEDIUM,
398
+ threatType: ThreatType.MALICIOUS_LOADER,
399
+ category: FindingCategory.MALWARE,
400
+ field: `${field}.${name}`,
401
+ value: `${name}@${version}`,
402
+ confidence: 60,
403
+ remediation: 'Verify this is the intended package before installing.'
404
+ });
405
+ }
406
+ }
407
+
408
+ // Check for git dependencies (can be risky)
409
+ if (version.startsWith('git') || version.startsWith('github:') || version.includes('://')) {
410
+ this.findings.push({
411
+ type: PackageJsonFindingType.GIT_DEPENDENCY,
412
+ name: 'Git URL Dependency',
413
+ description: `Package "${name}" is installed from a git URL instead of npm registry`,
414
+ severity: Severity.MEDIUM,
415
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
416
+ category: FindingCategory.VULNERABILITY,
417
+ field: `${field}.${name}`,
418
+ value: `${name}@${version}`,
419
+ confidence: 70,
420
+ remediation: 'Use npm registry versions when possible. Audit the git repository.'
421
+ });
422
+ }
423
+
424
+ // Check for local file dependencies
425
+ if (version.startsWith('file:') || version.startsWith('./') || version.startsWith('../')) {
426
+ this.findings.push({
427
+ type: PackageJsonFindingType.LOCAL_PATH_DEPENDENCY,
428
+ name: 'Local Path Dependency',
429
+ description: `Package "${name}" uses a local file path`,
430
+ severity: Severity.LOW,
431
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
432
+ category: FindingCategory.CODE_SMELL,
433
+ field: `${field}.${name}`,
434
+ value: `${name}@${version}`,
435
+ confidence: 80,
436
+ remediation: 'Consider publishing the package or using a workspace configuration.'
437
+ });
438
+ }
439
+
440
+ // Check for overly permissive version ranges
441
+ if (version === '*' || version === 'latest' || /^>=?\s*0\./.test(version)) {
442
+ this.findings.push({
443
+ type: PackageJsonFindingType.OVERLY_PERMISSIVE_VERSION,
444
+ name: 'Overly Permissive Version',
445
+ description: `Package "${name}" uses "${version}" which could install any version`,
446
+ severity: Severity.MEDIUM,
447
+ threatType: ThreatType.VULNERABLE_DEPENDENCY,
448
+ category: FindingCategory.BEST_PRACTICE,
449
+ field: `${field}.${name}`,
450
+ value: `${name}@${version}`,
451
+ confidence: 85,
452
+ remediation: 'Use a specific version or a caret/tilde range.'
453
+ });
454
+ }
455
+ }
456
+ }
457
+
458
+ /**
459
+ * Check for typosquatting against popular packages
460
+ */
461
+ private checkTyposquatting(packageName: string): { target: string; confidence: number } | null {
462
+ const lowerName = packageName.toLowerCase();
463
+
464
+ // Skip if it's a popular package itself
465
+ if (POPULAR_PACKAGES.includes(lowerName)) {
466
+ return null;
467
+ }
468
+
469
+ // Skip scoped packages for now (they're harder to typosquat)
470
+ if (packageName.startsWith('@')) {
471
+ return null;
472
+ }
473
+
474
+ for (const popular of POPULAR_PACKAGES) {
475
+ const distance = levenshteinDistance(lowerName, popular.toLowerCase());
476
+ const maxLength = Math.max(lowerName.length, popular.length);
477
+ const similarity = 1 - (distance / maxLength);
478
+
479
+ // If very similar but not exact
480
+ if (distance > 0 && distance <= 2 && similarity > 0.8) {
481
+ const confidence = Math.round(similarity * 100);
482
+ return { target: popular, confidence };
483
+ }
484
+
485
+ // Check for common typosquatting patterns
486
+ const patterns = [
487
+ `${popular}-js`,
488
+ `${popular}js`,
489
+ `${popular}.js`,
490
+ `js-${popular}`,
491
+ `node-${popular}`,
492
+ `${popular}-node`,
493
+ `${popular}2`,
494
+ `${popular}-v2`,
495
+ popular.replace(/-/g, ''),
496
+ popular.replace(/-/g, '_')
497
+ ];
498
+
499
+ for (const pattern of patterns) {
500
+ if (lowerName === pattern.toLowerCase() && lowerName !== popular.toLowerCase()) {
501
+ return { target: popular, confidence: 75 };
502
+ }
503
+ }
504
+ }
505
+
506
+ return null;
507
+ }
508
+
509
+ /**
510
+ * Check bundled dependencies
511
+ */
512
+ private checkBundledDependencies(bundled: string[]): void {
513
+ if (!Array.isArray(bundled)) return;
514
+
515
+ for (const name of bundled) {
516
+ if (typeof name !== 'string') continue;
517
+
518
+ // Check for known malicious packages
519
+ if (KNOWN_MALICIOUS_PACKAGES.has(name)) {
520
+ this.findings.push({
521
+ type: PackageJsonFindingType.SUSPICIOUS_DEPENDENCY,
522
+ name: 'Malicious Bundled Dependency',
523
+ description: `Bundled package "${name}" is known to be malicious`,
524
+ severity: Severity.CRITICAL,
525
+ threatType: ThreatType.MALICIOUS_LOADER,
526
+ category: FindingCategory.MALWARE,
527
+ field: 'bundledDependencies',
528
+ value: name,
529
+ confidence: 95,
530
+ remediation: 'Remove this bundled dependency immediately.'
531
+ });
532
+ }
533
+ }
534
+ }
535
+
536
+ /**
537
+ * Analyze package metadata for suspicious patterns
538
+ */
539
+ private analyzeMetadata(pkg: Record<string, unknown>): void {
540
+ // Check for suspicious repository URLs
541
+ if (pkg.repository) {
542
+ const repoUrl = typeof pkg.repository === 'string'
543
+ ? pkg.repository
544
+ : (pkg.repository as Record<string, string>).url;
545
+
546
+ if (repoUrl) {
547
+ // Check for IP-based repository URLs
548
+ if (/https?:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.test(repoUrl)) {
549
+ this.findings.push({
550
+ type: PackageJsonFindingType.SUSPICIOUS_DEPENDENCY,
551
+ name: 'IP-Based Repository URL',
552
+ description: 'Repository uses a raw IP address instead of a domain',
553
+ severity: Severity.HIGH,
554
+ threatType: ThreatType.SUSPICIOUS_NETWORK,
555
+ category: FindingCategory.MALWARE,
556
+ field: 'repository',
557
+ value: repoUrl,
558
+ confidence: 75,
559
+ remediation: 'Verify the repository is legitimate.'
560
+ });
561
+ }
562
+
563
+ // Check for non-standard git hosts
564
+ const trustedHosts = ['github.com', 'gitlab.com', 'bitbucket.org', 'dev.azure.com'];
565
+ const isStandardHost = trustedHosts.some(host => repoUrl.includes(host));
566
+ if (!isStandardHost && repoUrl.includes('://')) {
567
+ this.findings.push({
568
+ type: PackageJsonFindingType.SUSPICIOUS_DEPENDENCY,
569
+ name: 'Non-Standard Repository Host',
570
+ description: 'Repository is hosted on a non-standard git host',
571
+ severity: Severity.LOW,
572
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
573
+ category: FindingCategory.CODE_SMELL,
574
+ field: 'repository',
575
+ value: repoUrl,
576
+ confidence: 50,
577
+ remediation: 'Verify the repository host is trustworthy.'
578
+ });
579
+ }
580
+ }
581
+ }
582
+
583
+ // Check for very new package (less relevant for static analysis, but worth noting)
584
+ // This would normally require npm API access
585
+
586
+ // Check for private registry configuration
587
+ if (pkg.publishConfig && typeof pkg.publishConfig === 'object') {
588
+ const publishConfig = pkg.publishConfig as Record<string, string>;
589
+ if (publishConfig.registry && !publishConfig.registry.includes('registry.npmjs.org')) {
590
+ this.findings.push({
591
+ type: PackageJsonFindingType.PRIVATE_REGISTRY,
592
+ name: 'Private Registry Configuration',
593
+ description: 'Package is configured to publish to a private registry',
594
+ severity: Severity.INFO,
595
+ threatType: ThreatType.SECURITY_MISCONFIGURATION,
596
+ category: FindingCategory.CODE_SMELL,
597
+ field: 'publishConfig.registry',
598
+ value: publishConfig.registry,
599
+ confidence: 60,
600
+ remediation: 'Verify the registry configuration is intentional.'
601
+ });
602
+ }
603
+ }
604
+ }
605
+
606
+ /**
607
+ * Check if content looks obfuscated
608
+ */
609
+ private looksObfuscated(content: string): boolean {
610
+ // Check for base64-like patterns
611
+ if (/[A-Za-z0-9+/=]{100,}/.test(content)) return true;
612
+
613
+ // Check for heavy use of hex escapes
614
+ if (/(?:\\x[0-9a-f]{2}){20,}/i.test(content)) return true;
615
+
616
+ // Check for unicode escapes
617
+ if (/(?:\\u[0-9a-f]{4}){15,}/i.test(content)) return true;
618
+
619
+ // Check for very long single-line strings
620
+ if (content.length > 500 && !content.includes(' ') && !content.includes('\n')) return true;
621
+
622
+ return false;
623
+ }
624
+ }
625
+
626
+ export default PackageJsonAnalyzer;