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,343 @@
1
+ /**
2
+ * @fileoverview Insecure Deserialization Detection Rules
3
+ * @module rules/vulnerabilities/rules/deserialization
4
+ */
5
+
6
+ import {
7
+ VulnerabilityRule,
8
+ VulnerabilityType,
9
+ VulnerabilityCategory,
10
+ VulnerabilitySeverity,
11
+ ConfidenceLevel,
12
+ SupportedLanguage,
13
+ PatternType
14
+ } from '../types';
15
+ import { OWASP_TOP_10_2021, CWE_REFERENCES } from '../constants';
16
+
17
+ export const deserializationRules: VulnerabilityRule[] = [
18
+ {
19
+ id: 'VUL-DESER-001',
20
+ name: 'Insecure Deserialization - Python pickle',
21
+ description: 'Detects use of Python pickle module with untrusted data.',
22
+ version: '1.0.0',
23
+ vulnerabilityType: VulnerabilityType.INSECURE_DESERIALIZATION,
24
+ category: VulnerabilityCategory.INJECTION,
25
+ languages: [SupportedLanguage.PYTHON],
26
+ severity: VulnerabilitySeverity.CRITICAL,
27
+ confidence: ConfidenceLevel.HIGH,
28
+ baseScore: 95,
29
+ patterns: [
30
+ {
31
+ type: PatternType.REGEX,
32
+ patternId: 'deser-pickle-load',
33
+ pattern: 'pickle\\.loads?\\s*\\([^)]*(?:request\\.|input\\(|open\\(|socket)',
34
+ flags: 'gi',
35
+ weight: 1.0,
36
+ description: 'pickle.load with untrusted input'
37
+ },
38
+ {
39
+ type: PatternType.REGEX,
40
+ patternId: 'deser-pickle-import',
41
+ pattern: 'import\\s+pickle|from\\s+pickle\\s+import',
42
+ flags: 'g',
43
+ weight: 0.50,
44
+ description: 'pickle import (needs review)'
45
+ },
46
+ {
47
+ type: PatternType.REGEX,
48
+ patternId: 'deser-yaml-load',
49
+ pattern: 'yaml\\.(?:load|unsafe_load)\\s*\\([^)]*(?!Loader\\s*=\\s*yaml\\.SafeLoader)',
50
+ flags: 'gi',
51
+ weight: 0.95,
52
+ description: 'yaml.load without SafeLoader'
53
+ },
54
+ {
55
+ type: PatternType.REGEX,
56
+ patternId: 'deser-marshal-load',
57
+ pattern: 'marshal\\.loads?\\s*\\(',
58
+ flags: 'gi',
59
+ weight: 0.90,
60
+ description: 'marshal.load usage'
61
+ }
62
+ ],
63
+ impact: {
64
+ confidentiality: 'high',
65
+ integrity: 'high',
66
+ availability: 'high',
67
+ technicalImpact: 'Arbitrary code execution via crafted pickle payload.',
68
+ businessImpact: 'Complete server compromise, RCE.'
69
+ },
70
+ exploitability: {
71
+ attackVector: 'network',
72
+ attackComplexity: 'low',
73
+ privilegesRequired: 'none',
74
+ userInteraction: 'none',
75
+ knownExploits: true
76
+ },
77
+ remediation: {
78
+ summary: 'Never unpickle untrusted data. Use JSON or other safe formats.',
79
+ steps: [
80
+ 'Replace pickle with JSON for data serialization',
81
+ 'If pickle is required, use hmac to verify data integrity',
82
+ 'Use yaml.safe_load() instead of yaml.load()',
83
+ 'Restrict deserialization to known safe classes'
84
+ ],
85
+ secureCodeExample: `import json
86
+ import hmac
87
+ import hashlib
88
+
89
+ # Secure: Use JSON instead
90
+ data = json.loads(request.data)
91
+
92
+ # If pickle is absolutely required, verify integrity
93
+ def verify_and_load(data, signature, secret_key):
94
+ expected_sig = hmac.new(secret_key, data, hashlib.sha256).hexdigest()
95
+ if not hmac.compare_digest(signature, expected_sig):
96
+ raise ValueError("Data integrity check failed")
97
+ return pickle.loads(data) # Still risky, prefer JSON
98
+
99
+ # Secure YAML loading
100
+ import yaml
101
+ data = yaml.safe_load(yaml_content)`,
102
+ effort: 'medium',
103
+ priority: 'immediate'
104
+ },
105
+ standards: {
106
+ owasp: [OWASP_TOP_10_2021.A08],
107
+ cwe: [CWE_REFERENCES.CWE_502]
108
+ },
109
+ tags: ['deserialization', 'rce', 'python', 'pickle', 'critical'],
110
+ enabled: true
111
+ },
112
+ {
113
+ id: 'VUL-DESER-002',
114
+ name: 'Insecure Deserialization - PHP unserialize',
115
+ description: 'Detects use of PHP unserialize() with user-controlled data.',
116
+ version: '1.0.0',
117
+ vulnerabilityType: VulnerabilityType.INSECURE_DESERIALIZATION,
118
+ category: VulnerabilityCategory.INJECTION,
119
+ languages: [SupportedLanguage.PHP],
120
+ severity: VulnerabilitySeverity.CRITICAL,
121
+ confidence: ConfidenceLevel.HIGH,
122
+ baseScore: 95,
123
+ patterns: [
124
+ {
125
+ type: PatternType.REGEX,
126
+ patternId: 'deser-php-unserialize',
127
+ pattern: 'unserialize\\s*\\([^)]*\\$_(?:GET|POST|REQUEST|COOKIE)',
128
+ flags: 'gi',
129
+ weight: 1.0,
130
+ description: 'unserialize with superglobal'
131
+ },
132
+ {
133
+ type: PatternType.REGEX,
134
+ patternId: 'deser-php-unserialize-var',
135
+ pattern: 'unserialize\\s*\\(\\s*\\$[a-zA-Z_]',
136
+ flags: 'g',
137
+ weight: 0.80,
138
+ description: 'unserialize with variable'
139
+ }
140
+ ],
141
+ impact: {
142
+ confidentiality: 'high',
143
+ integrity: 'high',
144
+ availability: 'high',
145
+ technicalImpact: 'Object injection leading to RCE via magic methods (__wakeup, __destruct).',
146
+ businessImpact: 'Complete server compromise.'
147
+ },
148
+ exploitability: {
149
+ attackVector: 'network',
150
+ attackComplexity: 'medium',
151
+ privilegesRequired: 'none',
152
+ userInteraction: 'none',
153
+ knownExploits: true
154
+ },
155
+ remediation: {
156
+ summary: 'Never unserialize user data. Use JSON or specify allowed_classes.',
157
+ steps: [
158
+ 'Replace unserialize() with json_decode()',
159
+ 'If unserialize is required, use allowed_classes option',
160
+ 'Remove dangerous magic methods from classes',
161
+ 'Validate data structure after deserialization'
162
+ ],
163
+ secureCodeExample: `<?php
164
+ // Secure: Use JSON
165
+ $data = json_decode($_POST['data'], true);
166
+
167
+ // If unserialize required, restrict classes
168
+ $data = unserialize($serialized, ['allowed_classes' => ['SafeClass']]);
169
+
170
+ // Best: Avoid deserialization of user input entirely
171
+ ?>`,
172
+ effort: 'medium',
173
+ priority: 'immediate'
174
+ },
175
+ standards: {
176
+ owasp: [OWASP_TOP_10_2021.A08],
177
+ cwe: [CWE_REFERENCES.CWE_502]
178
+ },
179
+ tags: ['deserialization', 'php', 'object-injection', 'critical'],
180
+ enabled: true
181
+ },
182
+ {
183
+ id: 'VUL-DESER-003',
184
+ name: 'Insecure Deserialization - Java ObjectInputStream',
185
+ description: 'Detects Java ObjectInputStream usage with untrusted data.',
186
+ version: '1.0.0',
187
+ vulnerabilityType: VulnerabilityType.INSECURE_DESERIALIZATION,
188
+ category: VulnerabilityCategory.INJECTION,
189
+ languages: [SupportedLanguage.JAVA],
190
+ severity: VulnerabilitySeverity.CRITICAL,
191
+ confidence: ConfidenceLevel.HIGH,
192
+ baseScore: 95,
193
+ patterns: [
194
+ {
195
+ type: PatternType.REGEX,
196
+ patternId: 'deser-java-ois',
197
+ pattern: 'new\\s+ObjectInputStream\\s*\\([^)]*(?:request|socket|input)',
198
+ flags: 'gi',
199
+ weight: 1.0,
200
+ description: 'ObjectInputStream with external input'
201
+ },
202
+ {
203
+ type: PatternType.REGEX,
204
+ patternId: 'deser-java-readobject',
205
+ pattern: '\\.readObject\\s*\\(',
206
+ flags: 'g',
207
+ weight: 0.70,
208
+ description: 'readObject call'
209
+ },
210
+ {
211
+ type: PatternType.REGEX,
212
+ patternId: 'deser-java-xmldecoder',
213
+ pattern: 'new\\s+XMLDecoder\\s*\\(',
214
+ flags: 'gi',
215
+ weight: 0.95,
216
+ description: 'XMLDecoder usage (dangerous)'
217
+ }
218
+ ],
219
+ impact: {
220
+ confidentiality: 'high',
221
+ integrity: 'high',
222
+ availability: 'high',
223
+ technicalImpact: 'RCE via gadget chains (Commons Collections, etc.).',
224
+ businessImpact: 'Complete system compromise, lateral movement.'
225
+ },
226
+ exploitability: {
227
+ attackVector: 'network',
228
+ attackComplexity: 'low',
229
+ privilegesRequired: 'none',
230
+ userInteraction: 'none',
231
+ knownExploits: true
232
+ },
233
+ remediation: {
234
+ summary: 'Avoid Java serialization. Use JSON with Jackson. If required, use look-ahead deserialization.',
235
+ steps: [
236
+ 'Replace Java serialization with JSON (Jackson, Gson)',
237
+ 'Use ValidatingObjectInputStream from Apache Commons IO',
238
+ 'Remove vulnerable libraries (old Commons Collections)',
239
+ 'Implement ObjectInputFilter (Java 9+)'
240
+ ],
241
+ secureCodeExample: `// Secure: Use JSON instead
242
+ ObjectMapper mapper = new ObjectMapper();
243
+ MyClass obj = mapper.readValue(jsonString, MyClass.class);
244
+
245
+ // If serialization required, use ObjectInputFilter (Java 9+)
246
+ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(
247
+ "com.myapp.SafeClass;!*"
248
+ );
249
+ ObjectInputStream ois = new ObjectInputStream(inputStream);
250
+ ois.setObjectInputFilter(filter);`,
251
+ effort: 'high',
252
+ priority: 'immediate'
253
+ },
254
+ standards: {
255
+ owasp: [OWASP_TOP_10_2021.A08],
256
+ cwe: [CWE_REFERENCES.CWE_502]
257
+ },
258
+ tags: ['deserialization', 'java', 'rce', 'gadget-chain', 'critical'],
259
+ enabled: true
260
+ },
261
+ {
262
+ id: 'VUL-DESER-004',
263
+ name: 'Insecure Deserialization - Node.js node-serialize',
264
+ description: 'Detects use of dangerous Node.js serialization libraries.',
265
+ version: '1.0.0',
266
+ vulnerabilityType: VulnerabilityType.INSECURE_DESERIALIZATION,
267
+ category: VulnerabilityCategory.INJECTION,
268
+ languages: [SupportedLanguage.JAVASCRIPT, SupportedLanguage.TYPESCRIPT],
269
+ severity: VulnerabilitySeverity.CRITICAL,
270
+ confidence: ConfidenceLevel.HIGH,
271
+ baseScore: 95,
272
+ patterns: [
273
+ {
274
+ type: PatternType.REGEX,
275
+ patternId: 'deser-node-serialize',
276
+ pattern: 'require\\s*\\([\'"]node-serialize[\'"]\\)',
277
+ flags: 'g',
278
+ weight: 0.95,
279
+ description: 'node-serialize import (vulnerable)'
280
+ },
281
+ {
282
+ type: PatternType.REGEX,
283
+ patternId: 'deser-serialize-unserialize',
284
+ pattern: '\\.unserialize\\s*\\([^)]*(?:req\\.|body|cookie)',
285
+ flags: 'gi',
286
+ weight: 1.0,
287
+ description: 'unserialize with user data'
288
+ },
289
+ {
290
+ type: PatternType.REGEX,
291
+ patternId: 'deser-js-yaml-unsafe',
292
+ pattern: 'js-yaml.*\\.load\\s*\\([^)]*(?!\\{[^}]*schema)',
293
+ flags: 'gi',
294
+ weight: 0.85,
295
+ description: 'js-yaml without safe schema'
296
+ }
297
+ ],
298
+ impact: {
299
+ confidentiality: 'high',
300
+ integrity: 'high',
301
+ availability: 'high',
302
+ technicalImpact: 'RCE via IIFE (Immediately Invoked Function Expression) in serialized data.',
303
+ businessImpact: 'Complete server compromise.'
304
+ },
305
+ exploitability: {
306
+ attackVector: 'network',
307
+ attackComplexity: 'low',
308
+ privilegesRequired: 'none',
309
+ userInteraction: 'none',
310
+ knownExploits: true
311
+ },
312
+ remediation: {
313
+ summary: 'Remove node-serialize. Use JSON.parse() for data exchange.',
314
+ steps: [
315
+ 'Remove node-serialize package',
316
+ 'Use native JSON.parse() and JSON.stringify()',
317
+ 'Use safe YAML parser with safeLoad',
318
+ 'Validate structure after parsing'
319
+ ],
320
+ secureCodeExample: `// Secure: Use native JSON
321
+ const data = JSON.parse(req.body.data);
322
+
323
+ // Validate structure
324
+ if (typeof data.name !== 'string' || typeof data.age !== 'number') {
325
+ throw new Error('Invalid data structure');
326
+ }
327
+
328
+ // Safe YAML
329
+ const yaml = require('js-yaml');
330
+ const data = yaml.load(content, { schema: yaml.SAFE_SCHEMA });`,
331
+ effort: 'low',
332
+ priority: 'immediate'
333
+ },
334
+ standards: {
335
+ owasp: [OWASP_TOP_10_2021.A08],
336
+ cwe: [CWE_REFERENCES.CWE_502]
337
+ },
338
+ tags: ['deserialization', 'nodejs', 'rce', 'critical'],
339
+ enabled: true
340
+ }
341
+ ];
342
+
343
+ export default deserializationRules;
@@ -0,0 +1,332 @@
1
+ /**
2
+ * @fileoverview File Upload Vulnerabilities Detection Rules
3
+ * @module rules/vulnerabilities/rules/fileUpload
4
+ */
5
+
6
+ import {
7
+ VulnerabilityRule,
8
+ VulnerabilityType,
9
+ VulnerabilityCategory,
10
+ VulnerabilitySeverity,
11
+ ConfidenceLevel,
12
+ SupportedLanguage,
13
+ PatternType
14
+ } from '../types';
15
+ import { OWASP_TOP_10_2021, CWE_REFERENCES } from '../constants';
16
+
17
+ export const fileUploadRules: VulnerabilityRule[] = [
18
+ {
19
+ id: 'VUL-UPLOAD-001',
20
+ name: 'Unrestricted File Upload - No Extension Validation',
21
+ description: 'Detects file upload handling without proper extension validation.',
22
+ version: '1.0.0',
23
+ vulnerabilityType: VulnerabilityType.FILE_UPLOAD,
24
+ category: VulnerabilityCategory.INJECTION,
25
+ languages: [SupportedLanguage.JAVASCRIPT, SupportedLanguage.TYPESCRIPT],
26
+ severity: VulnerabilitySeverity.HIGH,
27
+ confidence: ConfidenceLevel.MEDIUM,
28
+ baseScore: 80,
29
+ patterns: [
30
+ {
31
+ type: PatternType.REGEX,
32
+ patternId: 'upload-multer-no-filter',
33
+ pattern: 'multer\\s*\\([^)]*\\)(?![\\s\\S]{0,100}fileFilter)',
34
+ flags: 'gi',
35
+ weight: 0.85,
36
+ description: 'Multer without fileFilter'
37
+ },
38
+ {
39
+ type: PatternType.REGEX,
40
+ patternId: 'upload-original-name',
41
+ pattern: '\\.originalname|file\\.name[^\\s]*path',
42
+ flags: 'gi',
43
+ weight: 0.75,
44
+ description: 'Using original filename in path'
45
+ },
46
+ {
47
+ type: PatternType.REGEX,
48
+ patternId: 'upload-write-file',
49
+ pattern: 'fs\\.writeFile(?:Sync)?\\s*\\([^)]*req\\.files?',
50
+ flags: 'gi',
51
+ weight: 0.90,
52
+ description: 'Writing uploaded file without validation'
53
+ }
54
+ ],
55
+ impact: {
56
+ confidentiality: 'high',
57
+ integrity: 'high',
58
+ availability: 'high',
59
+ technicalImpact: 'Upload and execute malicious scripts. Web shell installation.',
60
+ businessImpact: 'Complete server compromise via uploaded web shell.'
61
+ },
62
+ exploitability: {
63
+ attackVector: 'network',
64
+ attackComplexity: 'low',
65
+ privilegesRequired: 'low',
66
+ userInteraction: 'none',
67
+ knownExploits: true
68
+ },
69
+ remediation: {
70
+ summary: 'Validate file extensions, MIME types, and content. Store outside webroot.',
71
+ steps: [
72
+ 'Validate file extension against allowlist',
73
+ 'Verify MIME type matches extension',
74
+ 'Check file content (magic bytes)',
75
+ 'Generate random filename for storage',
76
+ 'Store files outside webroot or use CDN',
77
+ 'Set Content-Disposition: attachment for downloads'
78
+ ],
79
+ secureCodeExample: `const multer = require('multer');
80
+ const path = require('path');
81
+ const crypto = require('crypto');
82
+
83
+ const ALLOWED_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.pdf'];
84
+ const ALLOWED_MIMES = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];
85
+
86
+ const storage = multer.diskStorage({
87
+ destination: './uploads/', // Outside webroot
88
+ filename: (req, file, cb) => {
89
+ // Generate random filename
90
+ const ext = path.extname(file.originalname).toLowerCase();
91
+ const name = crypto.randomBytes(16).toString('hex');
92
+ cb(null, \`\${name}\${ext}\`);
93
+ }
94
+ });
95
+
96
+ const fileFilter = (req, file, cb) => {
97
+ const ext = path.extname(file.originalname).toLowerCase();
98
+
99
+ if (!ALLOWED_EXTENSIONS.includes(ext)) {
100
+ return cb(new Error('Invalid file type'), false);
101
+ }
102
+
103
+ if (!ALLOWED_MIMES.includes(file.mimetype)) {
104
+ return cb(new Error('Invalid MIME type'), false);
105
+ }
106
+
107
+ cb(null, true);
108
+ };
109
+
110
+ const upload = multer({
111
+ storage,
112
+ fileFilter,
113
+ limits: { fileSize: 5 * 1024 * 1024 } // 5MB
114
+ });`,
115
+ effort: 'medium',
116
+ priority: 'high'
117
+ },
118
+ standards: {
119
+ owasp: [OWASP_TOP_10_2021.A04],
120
+ cwe: [CWE_REFERENCES.CWE_434]
121
+ },
122
+ tags: ['file-upload', 'rce', 'webshell'],
123
+ enabled: true
124
+ },
125
+ {
126
+ id: 'VUL-UPLOAD-002',
127
+ name: 'Unrestricted File Upload - PHP',
128
+ description: 'Detects PHP file upload handling without proper validation.',
129
+ version: '1.0.0',
130
+ vulnerabilityType: VulnerabilityType.FILE_UPLOAD,
131
+ category: VulnerabilityCategory.INJECTION,
132
+ languages: [SupportedLanguage.PHP],
133
+ severity: VulnerabilitySeverity.CRITICAL,
134
+ confidence: ConfidenceLevel.HIGH,
135
+ baseScore: 90,
136
+ patterns: [
137
+ {
138
+ type: PatternType.REGEX,
139
+ patternId: 'upload-php-move-uploaded',
140
+ pattern: 'move_uploaded_file\\s*\\([^,]+,\\s*[^)]*\\$_FILES',
141
+ flags: 'gi',
142
+ weight: 0.85,
143
+ description: 'move_uploaded_file with user filename'
144
+ },
145
+ {
146
+ type: PatternType.REGEX,
147
+ patternId: 'upload-php-copy',
148
+ pattern: 'copy\\s*\\(\\s*\\$_FILES\\[[\'"][^\'"]+[\'"]\\]\\[[\'"]tmp_name[\'"]\\]',
149
+ flags: 'gi',
150
+ weight: 0.80,
151
+ description: 'copy uploaded file'
152
+ },
153
+ {
154
+ type: PatternType.REGEX,
155
+ patternId: 'upload-php-no-ext-check',
156
+ pattern: '\\$_FILES\\[[\'"][^\'"]+[\'"]\\]\\[[\'"]name[\'"]\\](?![\\s\\S]{0,50}(?:pathinfo|preg_match|extension))',
157
+ flags: 'gi',
158
+ weight: 0.70,
159
+ description: 'Using filename without extension check'
160
+ }
161
+ ],
162
+ impact: {
163
+ confidentiality: 'high',
164
+ integrity: 'high',
165
+ availability: 'high',
166
+ technicalImpact: 'Upload PHP scripts for remote code execution.',
167
+ businessImpact: 'Complete server takeover.'
168
+ },
169
+ exploitability: {
170
+ attackVector: 'network',
171
+ attackComplexity: 'low',
172
+ privilegesRequired: 'low',
173
+ userInteraction: 'none',
174
+ knownExploits: true
175
+ },
176
+ remediation: {
177
+ summary: 'Validate extensions with allowlist. Store outside webroot. Disable PHP in upload directory.',
178
+ steps: [
179
+ 'Validate extension against strict allowlist',
180
+ 'Check MIME type with finfo_file()',
181
+ 'Store files outside webroot',
182
+ 'Disable PHP execution in upload directory via .htaccess',
183
+ 'Generate random filenames'
184
+ ],
185
+ secureCodeExample: `<?php
186
+ $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf'];
187
+ $allowed_mimes = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];
188
+ $upload_dir = '/var/uploads/'; // Outside webroot
189
+
190
+ function validateUpload($file) {
191
+ global $allowed_extensions, $allowed_mimes;
192
+
193
+ // Get extension
194
+ $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
195
+ if (!in_array($ext, $allowed_extensions, true)) {
196
+ return false;
197
+ }
198
+
199
+ // Verify MIME type
200
+ $finfo = finfo_open(FILEINFO_MIME_TYPE);
201
+ $mime = finfo_file($finfo, $file['tmp_name']);
202
+ if (!in_array($mime, $allowed_mimes, true)) {
203
+ return false;
204
+ }
205
+
206
+ return true;
207
+ }
208
+
209
+ if (validateUpload($_FILES['upload'])) {
210
+ $ext = pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION);
211
+ $newname = bin2hex(random_bytes(16)) . '.' . $ext;
212
+ move_uploaded_file($_FILES['upload']['tmp_name'], $upload_dir . $newname);
213
+ }
214
+
215
+ // .htaccess in upload directory
216
+ // php_flag engine off
217
+ ?>`,
218
+ effort: 'medium',
219
+ priority: 'immediate'
220
+ },
221
+ standards: {
222
+ owasp: [OWASP_TOP_10_2021.A04],
223
+ cwe: [CWE_REFERENCES.CWE_434]
224
+ },
225
+ tags: ['file-upload', 'php', 'rce', 'critical'],
226
+ enabled: true
227
+ },
228
+ {
229
+ id: 'VUL-UPLOAD-003',
230
+ name: 'Unrestricted File Upload - Python/Flask',
231
+ description: 'Detects Flask/Django file upload handling without proper validation.',
232
+ version: '1.0.0',
233
+ vulnerabilityType: VulnerabilityType.FILE_UPLOAD,
234
+ category: VulnerabilityCategory.INJECTION,
235
+ languages: [SupportedLanguage.PYTHON],
236
+ severity: VulnerabilitySeverity.HIGH,
237
+ confidence: ConfidenceLevel.MEDIUM,
238
+ baseScore: 75,
239
+ patterns: [
240
+ {
241
+ type: PatternType.REGEX,
242
+ patternId: 'upload-flask-save',
243
+ pattern: 'request\\.files\\[[\'"][^\'"]+[\'"]\\]\\.save\\s*\\([^)]*filename',
244
+ flags: 'gi',
245
+ weight: 0.85,
246
+ description: 'Flask file.save with user filename'
247
+ },
248
+ {
249
+ type: PatternType.REGEX,
250
+ patternId: 'upload-no-secure-filename',
251
+ pattern: '\\.filename(?![\\s\\S]{0,50}secure_filename)',
252
+ flags: 'gi',
253
+ weight: 0.75,
254
+ description: 'Using filename without secure_filename'
255
+ },
256
+ {
257
+ type: PatternType.REGEX,
258
+ patternId: 'upload-django-chunks',
259
+ pattern: '\\.chunks\\(\\)(?![\\s\\S]{0,50}(?:allowed|extension))',
260
+ flags: 'gi',
261
+ weight: 0.70,
262
+ description: 'Django file upload without extension check'
263
+ }
264
+ ],
265
+ impact: {
266
+ confidentiality: 'high',
267
+ integrity: 'high',
268
+ availability: 'medium',
269
+ technicalImpact: 'File overwrite, path traversal, potential code execution.',
270
+ businessImpact: 'Data manipulation, possible RCE.'
271
+ },
272
+ exploitability: {
273
+ attackVector: 'network',
274
+ attackComplexity: 'low',
275
+ privilegesRequired: 'low',
276
+ userInteraction: 'none'
277
+ },
278
+ remediation: {
279
+ summary: 'Use secure_filename(). Validate extensions. Store safely.',
280
+ steps: [
281
+ 'Use werkzeug.utils.secure_filename()',
282
+ 'Validate extension against allowlist',
283
+ 'Check MIME type with python-magic',
284
+ 'Generate random filenames',
285
+ 'Store outside webroot'
286
+ ],
287
+ secureCodeExample: `from flask import Flask, request
288
+ from werkzeug.utils import secure_filename
289
+ import os
290
+ import uuid
291
+ import magic
292
+
293
+ ALLOWED_EXTENSIONS = {'jpg', 'jpeg', 'png', 'gif', 'pdf'}
294
+ ALLOWED_MIMES = {'image/jpeg', 'image/png', 'image/gif', 'application/pdf'}
295
+ UPLOAD_FOLDER = '/var/uploads' # Outside webroot
296
+
297
+ def allowed_file(file):
298
+ filename = secure_filename(file.filename)
299
+ ext = filename.rsplit('.', 1)[-1].lower() if '.' in filename else ''
300
+
301
+ if ext not in ALLOWED_EXTENSIONS:
302
+ return False
303
+
304
+ # Check actual MIME type
305
+ mime = magic.from_buffer(file.read(2048), mime=True)
306
+ file.seek(0) # Reset file position
307
+
308
+ return mime in ALLOWED_MIMES
309
+
310
+ @app.route('/upload', methods=['POST'])
311
+ def upload_file():
312
+ file = request.files.get('file')
313
+ if not file or not allowed_file(file):
314
+ return 'Invalid file', 400
315
+
316
+ ext = secure_filename(file.filename).rsplit('.', 1)[-1]
317
+ new_filename = f'{uuid.uuid4().hex}.{ext}'
318
+ file.save(os.path.join(UPLOAD_FOLDER, new_filename))
319
+ return 'Upload successful'`,
320
+ effort: 'medium',
321
+ priority: 'high'
322
+ },
323
+ standards: {
324
+ owasp: [OWASP_TOP_10_2021.A04],
325
+ cwe: [CWE_REFERENCES.CWE_434]
326
+ },
327
+ tags: ['file-upload', 'python', 'flask', 'django'],
328
+ enabled: true
329
+ }
330
+ ];
331
+
332
+ export default fileUploadRules;