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,280 @@
1
+ /**
2
+ * PHP Analyzer
3
+ * Specialized analyzer for PHP code
4
+ */
5
+
6
+ import { BaseAnalyzer } from '../base';
7
+ import { ScannedFile, Finding, Rule, SupportedLanguage, Severity, ThreatType, FindingCategory } from '../../types';
8
+ import { generateId, extractCodeContext } from '../../utils';
9
+ import { getStandardsForThreat } from '../../rules/standards';
10
+
11
+ /**
12
+ * PHP Analyzer Class
13
+ */
14
+ export class PHPAnalyzer extends BaseAnalyzer {
15
+ name = 'PHP Analyzer';
16
+ languages: SupportedLanguage[] = ['php'];
17
+ version = '1.0.0';
18
+
19
+ /**
20
+ * Analyze PHP file
21
+ */
22
+ async analyze(file: ScannedFile, rules: Rule[]): Promise<Finding[]> {
23
+ const findings: Finding[] = [];
24
+
25
+ // Filter rules for PHP
26
+ const phpRules = rules.filter(r => r.languages.includes('php'));
27
+
28
+ // Run rule engine
29
+ const ruleFindings = await this.ruleEngine.analyzeFile(file, phpRules);
30
+ findings.push(...ruleFindings);
31
+
32
+ // Additional PHP-specific analysis
33
+ const customFindings = await this.customAnalysis(file);
34
+ findings.push(...customFindings);
35
+
36
+ return findings;
37
+ }
38
+
39
+ /**
40
+ * Custom PHP-specific analysis
41
+ */
42
+ private async customAnalysis(file: ScannedFile): Promise<Finding[]> {
43
+ const findings: Finding[] = [];
44
+ const lines = file.content.split('\n');
45
+
46
+ for (let i = 0; i < lines.length; i++) {
47
+ const line = lines[i];
48
+ const lineNum = i + 1;
49
+
50
+ // Check for dangerous functions
51
+ if (this.checkDangerousFunctions(line)) {
52
+ findings.push(this.createFinding(
53
+ file,
54
+ lineNum,
55
+ 'Dangerous PHP Function',
56
+ 'Use of a function that can execute arbitrary code or commands.',
57
+ Severity.CRITICAL,
58
+ ThreatType.DANGEROUS_FUNCTION
59
+ ));
60
+ }
61
+
62
+ // Check for file inclusion vulnerabilities
63
+ if (this.checkFileInclusion(line)) {
64
+ findings.push(this.createFinding(
65
+ file,
66
+ lineNum,
67
+ 'Potential File Inclusion Vulnerability',
68
+ 'File include with user-controlled input can lead to LFI/RFI.',
69
+ Severity.CRITICAL,
70
+ ThreatType.PATH_TRAVERSAL
71
+ ));
72
+ }
73
+
74
+ // Check for SQL injection patterns
75
+ if (this.checkSqlInjection(line)) {
76
+ findings.push(this.createFinding(
77
+ file,
78
+ lineNum,
79
+ 'Potential SQL Injection',
80
+ 'Direct variable interpolation in SQL query detected.',
81
+ Severity.CRITICAL,
82
+ ThreatType.SQL_INJECTION
83
+ ));
84
+ }
85
+
86
+ // Check for XSS vulnerabilities
87
+ if (this.checkXss(line)) {
88
+ findings.push(this.createFinding(
89
+ file,
90
+ lineNum,
91
+ 'Potential Cross-Site Scripting (XSS)',
92
+ 'User input echoed without proper escaping.',
93
+ Severity.HIGH,
94
+ ThreatType.XSS
95
+ ));
96
+ }
97
+
98
+ // Check for insecure session configuration
99
+ if (this.checkInsecureSession(line)) {
100
+ findings.push(this.createFinding(
101
+ file,
102
+ lineNum,
103
+ 'Insecure Session Configuration',
104
+ 'Session configuration may be insecure.',
105
+ Severity.MEDIUM,
106
+ ThreatType.SECURITY_MISCONFIGURATION
107
+ ));
108
+ }
109
+
110
+ // Check for disable_functions bypass attempts
111
+ if (this.checkBypassAttempts(line)) {
112
+ findings.push(this.createFinding(
113
+ file,
114
+ lineNum,
115
+ 'Security Bypass Attempt',
116
+ 'Code attempts to bypass PHP security restrictions.',
117
+ Severity.CRITICAL,
118
+ ThreatType.BACKDOOR
119
+ ));
120
+ }
121
+
122
+ // Check for web shell patterns
123
+ if (this.checkWebShell(line)) {
124
+ findings.push(this.createFinding(
125
+ file,
126
+ lineNum,
127
+ 'Web Shell Pattern Detected',
128
+ 'Code pattern consistent with a PHP web shell.',
129
+ Severity.CRITICAL,
130
+ ThreatType.BACKDOOR
131
+ ));
132
+ }
133
+ }
134
+
135
+ return findings;
136
+ }
137
+
138
+ /**
139
+ * Check for dangerous functions
140
+ */
141
+ private checkDangerousFunctions(line: string): boolean {
142
+ const dangerous = [
143
+ /\bassert\s*\(\s*\$/,
144
+ /\bpreg_replace\s*\([^)]*\/[^)]*e['"]/i,
145
+ /\bcreate_function\s*\(/,
146
+ /\barray_map\s*\(\s*['"]\w+['"],\s*\$/,
147
+ /\barray_filter\s*\(\s*\$[^,]*,\s*['"]\w+['"]\)/,
148
+ /\busort\s*\(\s*\$[^,]*,\s*['"]\w+['"]\)/,
149
+ /\bregister_shutdown_function\s*\(\s*\$/,
150
+ /\bregister_tick_function\s*\(\s*\$/
151
+ ];
152
+ return dangerous.some(p => p.test(line));
153
+ }
154
+
155
+ /**
156
+ * Check for file inclusion vulnerabilities
157
+ */
158
+ private checkFileInclusion(line: string): boolean {
159
+ const patterns = [
160
+ /\b(?:include|require|include_once|require_once)\s*\(\s*\$_(?:GET|POST|REQUEST|COOKIE)/i,
161
+ /\b(?:include|require|include_once|require_once)\s*\(\s*\$(?!_)[a-zA-Z_]/i,
162
+ /\bfile_get_contents\s*\(\s*\$_/i,
163
+ /\bfopen\s*\(\s*\$_/i,
164
+ /\breadf(?:ile)?\s*\(\s*\$_/i
165
+ ];
166
+ return patterns.some(p => p.test(line));
167
+ }
168
+
169
+ /**
170
+ * Check for SQL injection
171
+ */
172
+ private checkSqlInjection(line: string): boolean {
173
+ const patterns = [
174
+ /\$(?:query|sql)\s*=\s*["'].*\.\s*\$_(?:GET|POST|REQUEST)/i,
175
+ /mysql_query\s*\([^)]*\.\s*\$_/i,
176
+ /mysqli_query\s*\([^)]*\.\s*\$_/i,
177
+ /\$(?:pdo|db|conn)->query\s*\([^)]*\.\s*\$_/i,
178
+ /["']SELECT[^'"]*\.\s*\$_/i,
179
+ /["']INSERT[^'"]*\.\s*\$_/i,
180
+ /["']UPDATE[^'"]*\.\s*\$_/i,
181
+ /["']DELETE[^'"]*\.\s*\$_/i
182
+ ];
183
+ return patterns.some(p => p.test(line));
184
+ }
185
+
186
+ /**
187
+ * Check for XSS
188
+ */
189
+ private checkXss(line: string): boolean {
190
+ const patterns = [
191
+ /echo\s+\$_(?:GET|POST|REQUEST|COOKIE)/i,
192
+ /print\s+\$_(?:GET|POST|REQUEST|COOKIE)/i,
193
+ /<?=\s*\$_(?:GET|POST|REQUEST|COOKIE)/i,
194
+ /echo\s+\$[a-zA-Z_]+[^;]*;\s*(?!.*htmlspecialchars|.*htmlentities|.*strip_tags)/
195
+ ];
196
+ return patterns.some(p => p.test(line));
197
+ }
198
+
199
+ /**
200
+ * Check for insecure session configuration
201
+ */
202
+ private checkInsecureSession(line: string): boolean {
203
+ const patterns = [
204
+ /session\.cookie_httponly\s*=\s*(?:0|false|off)/i,
205
+ /session\.cookie_secure\s*=\s*(?:0|false|off)/i,
206
+ /session\.use_strict_mode\s*=\s*(?:0|false|off)/i,
207
+ /ini_set\s*\(\s*['"]session\.cookie_httponly['"]\s*,\s*(?:0|false|'0'|'false')/i
208
+ ];
209
+ return patterns.some(p => p.test(line));
210
+ }
211
+
212
+ /**
213
+ * Check for security bypass attempts
214
+ */
215
+ private checkBypassAttempts(line: string): boolean {
216
+ const patterns = [
217
+ /\bini_set\s*\(\s*['"]disable_functions['"]/i,
218
+ /\bini_restore\s*\(/i,
219
+ /\bputenv\s*\(\s*['"]LD_PRELOAD/i,
220
+ /\bmail\s*\([^)]*-X\s/i,
221
+ /\bimap_open\s*\([^)]*\\x00/i
222
+ ];
223
+ return patterns.some(p => p.test(line));
224
+ }
225
+
226
+ /**
227
+ * Check for web shell patterns
228
+ */
229
+ private checkWebShell(line: string): boolean {
230
+ const patterns = [
231
+ /\$_(?:GET|POST|REQUEST)\s*\[[^\]]+\]\s*\(\s*\$_(?:GET|POST|REQUEST)/i,
232
+ /eval\s*\(\s*(?:base64_decode|gzinflate|gzuncompress|str_rot13)\s*\(/i,
233
+ /\$\w+\s*=\s*str_replace\s*\([^)]+\)\s*;\s*\$\w+\s*\(/,
234
+ /\$\{\s*\$_(?:GET|POST|REQUEST)/i,
235
+ /\$\w+\s*=\s*\$_(?:GET|POST|REQUEST)[^;]+;\s*@?\$\w+\s*\(/
236
+ ];
237
+ return patterns.some(p => p.test(line));
238
+ }
239
+
240
+ /**
241
+ * Create generic finding
242
+ */
243
+ private createFinding(
244
+ file: ScannedFile,
245
+ lineNum: number,
246
+ title: string,
247
+ description: string,
248
+ severity: Severity,
249
+ threatType: ThreatType
250
+ ): Finding {
251
+ const context = extractCodeContext(file.content, lineNum, 2);
252
+
253
+ return {
254
+ id: generateId(),
255
+ title,
256
+ description,
257
+ severity,
258
+ threatType,
259
+ category: FindingCategory.VULNERABILITY,
260
+ location: {
261
+ file: file.relativePath,
262
+ startLine: lineNum,
263
+ endLine: lineNum
264
+ },
265
+ snippet: {
266
+ code: context.code,
267
+ contextBefore: context.contextBefore,
268
+ contextAfter: context.contextAfter
269
+ },
270
+ standards: getStandardsForThreat(threatType),
271
+ remediation: 'Review and fix the identified issue.',
272
+ confidence: 80,
273
+ analyzer: this.name,
274
+ timestamp: new Date(),
275
+ tags: ['php']
276
+ };
277
+ }
278
+ }
279
+
280
+ export default PHPAnalyzer;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Python Analyzer Exports
3
+ */
4
+
5
+ export * from './pythonAnalyzer';
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Python Analyzer
3
+ * Specialized analyzer for Python code
4
+ */
5
+
6
+ import { BaseAnalyzer } from '../base';
7
+ import { ScannedFile, Finding, Rule, SupportedLanguage, Severity, ThreatType, FindingCategory } from '../../types';
8
+ import { generateId, extractCodeContext, looksObfuscated } from '../../utils';
9
+ import { getStandardsForThreat } from '../../rules/standards';
10
+ import { logger } from '../../utils/logger';
11
+
12
+ /**
13
+ * Python Analyzer Class
14
+ */
15
+ export class PythonAnalyzer extends BaseAnalyzer {
16
+ name = 'Python Analyzer';
17
+ languages: SupportedLanguage[] = ['python'];
18
+ version = '1.0.0';
19
+
20
+ /**
21
+ * Analyze Python file
22
+ */
23
+ async analyze(file: ScannedFile, rules: Rule[]): Promise<Finding[]> {
24
+ const findings: Finding[] = [];
25
+
26
+ // Filter rules for Python
27
+ const pyRules = rules.filter(r => r.languages.includes('python'));
28
+
29
+ // Run rule engine
30
+ const ruleFindings = await this.ruleEngine.analyzeFile(file, pyRules);
31
+ findings.push(...ruleFindings);
32
+
33
+ // Additional Python-specific analysis
34
+ const customFindings = await this.customAnalysis(file);
35
+ findings.push(...customFindings);
36
+
37
+ return findings;
38
+ }
39
+
40
+ /**
41
+ * Custom Python-specific analysis
42
+ */
43
+ private async customAnalysis(file: ScannedFile): Promise<Finding[]> {
44
+ const findings: Finding[] = [];
45
+ const lines = file.content.split('\n');
46
+
47
+ for (let i = 0; i < lines.length; i++) {
48
+ const line = lines[i];
49
+ const lineNum = i + 1;
50
+
51
+ // Check for dangerous imports
52
+ if (this.checkDangerousImports(line)) {
53
+ findings.push(this.createFinding(
54
+ file,
55
+ lineNum,
56
+ 'Potentially Dangerous Import',
57
+ 'Import of a module commonly used in malware or exploits.',
58
+ Severity.MEDIUM,
59
+ ThreatType.DANGEROUS_FUNCTION
60
+ ));
61
+ }
62
+
63
+ // Check for pickle usage
64
+ if (this.checkPickleUsage(line)) {
65
+ findings.push(this.createFinding(
66
+ file,
67
+ lineNum,
68
+ 'Insecure Pickle Deserialization',
69
+ 'Pickle can execute arbitrary code during deserialization.',
70
+ Severity.HIGH,
71
+ ThreatType.INSECURE_DESERIALIZATION
72
+ ));
73
+ }
74
+
75
+ // Check for YAML unsafe load
76
+ if (this.checkUnsafeYamlLoad(line)) {
77
+ findings.push(this.createFinding(
78
+ file,
79
+ lineNum,
80
+ 'Insecure YAML Load',
81
+ 'yaml.load() without Loader can execute arbitrary Python code.',
82
+ Severity.HIGH,
83
+ ThreatType.INSECURE_DESERIALIZATION
84
+ ));
85
+ }
86
+
87
+ // Check for subprocess shell=True
88
+ if (this.checkSubprocessShell(line)) {
89
+ findings.push(this.createFinding(
90
+ file,
91
+ lineNum,
92
+ 'Subprocess with shell=True',
93
+ 'Using shell=True with subprocess can lead to command injection.',
94
+ Severity.HIGH,
95
+ ThreatType.COMMAND_INJECTION
96
+ ));
97
+ }
98
+
99
+ // Check for tarfile path traversal
100
+ if (this.checkTarfileTraversal(line)) {
101
+ findings.push(this.createFinding(
102
+ file,
103
+ lineNum,
104
+ 'Tarfile Path Traversal Risk',
105
+ 'Extracting tar files without validation can lead to path traversal.',
106
+ Severity.MEDIUM,
107
+ ThreatType.PATH_TRAVERSAL
108
+ ));
109
+ }
110
+
111
+ // Check for Flask debug mode
112
+ if (this.checkFlaskDebug(line)) {
113
+ findings.push(this.createFinding(
114
+ file,
115
+ lineNum,
116
+ 'Flask Debug Mode Enabled',
117
+ 'Debug mode in production exposes the Werkzeug debugger.',
118
+ Severity.HIGH,
119
+ ThreatType.SECURITY_MISCONFIGURATION
120
+ ));
121
+ }
122
+
123
+ // Check for Django settings vulnerabilities
124
+ if (this.checkDjangoSettings(line)) {
125
+ findings.push(this.createFinding(
126
+ file,
127
+ lineNum,
128
+ 'Insecure Django Configuration',
129
+ 'Insecure Django setting detected.',
130
+ Severity.MEDIUM,
131
+ ThreatType.SECURITY_MISCONFIGURATION
132
+ ));
133
+ }
134
+
135
+ // Check for compile/exec with input
136
+ if (this.checkCompileExec(line)) {
137
+ findings.push(this.createFinding(
138
+ file,
139
+ lineNum,
140
+ 'Dynamic Code Compilation/Execution',
141
+ 'compile() or exec() may execute arbitrary code.',
142
+ Severity.HIGH,
143
+ ThreatType.DANGEROUS_FUNCTION
144
+ ));
145
+ }
146
+ }
147
+
148
+ // Check for requirements.txt if exists
149
+ if (file.relativePath.endsWith('requirements.txt')) {
150
+ const reqFindings = this.analyzeRequirements(file);
151
+ findings.push(...reqFindings);
152
+ }
153
+
154
+ return findings;
155
+ }
156
+
157
+ /**
158
+ * Check for dangerous imports
159
+ */
160
+ private checkDangerousImports(line: string): boolean {
161
+ const dangerousModules = [
162
+ /^import\s+ctypes/,
163
+ /^from\s+ctypes\s+import/,
164
+ /^import\s+mmap/,
165
+ /^import\s+pyHook/,
166
+ /^import\s+pythoncom/,
167
+ /^import\s+pynput/
168
+ ];
169
+ return dangerousModules.some(p => p.test(line.trim()));
170
+ }
171
+
172
+ /**
173
+ * Check for pickle usage
174
+ */
175
+ private checkPickleUsage(line: string): boolean {
176
+ return /pickle\.loads?\s*\(/.test(line) || /cPickle\.loads?\s*\(/.test(line);
177
+ }
178
+
179
+ /**
180
+ * Check for unsafe YAML load
181
+ */
182
+ private checkUnsafeYamlLoad(line: string): boolean {
183
+ if (/yaml\.load\s*\(/.test(line)) {
184
+ // Check if Loader is specified
185
+ if (!/Loader\s*=/.test(line) && !/yaml\.safe_load/.test(line)) {
186
+ return true;
187
+ }
188
+ }
189
+ return false;
190
+ }
191
+
192
+ /**
193
+ * Check for subprocess with shell=True
194
+ */
195
+ private checkSubprocessShell(line: string): boolean {
196
+ return /subprocess\.(?:Popen|call|run|check_output|check_call)\s*\([^)]*shell\s*=\s*True/.test(line);
197
+ }
198
+
199
+ /**
200
+ * Check for tarfile extraction without validation
201
+ */
202
+ private checkTarfileTraversal(line: string): boolean {
203
+ return /\.extractall\s*\(/.test(line) || /\.extract\s*\(/.test(line);
204
+ }
205
+
206
+ /**
207
+ * Check for Flask debug mode
208
+ */
209
+ private checkFlaskDebug(line: string): boolean {
210
+ return /app\.run\s*\([^)]*debug\s*=\s*True/.test(line) ||
211
+ /DEBUG\s*=\s*True/.test(line);
212
+ }
213
+
214
+ /**
215
+ * Check for Django settings issues
216
+ */
217
+ private checkDjangoSettings(line: string): boolean {
218
+ const issues = [
219
+ /DEBUG\s*=\s*True/,
220
+ /SECRET_KEY\s*=\s*['"]/,
221
+ /ALLOWED_HOSTS\s*=\s*\[\s*['"]?\*['"]?\s*\]/
222
+ ];
223
+ return issues.some(p => p.test(line));
224
+ }
225
+
226
+ /**
227
+ * Check for compile/exec usage
228
+ */
229
+ private checkCompileExec(line: string): boolean {
230
+ return /\bexec\s*\(/.test(line) || /\bcompile\s*\([^)]*['"]\bexec\b['"]\)/.test(line);
231
+ }
232
+
233
+ /**
234
+ * Analyze requirements.txt
235
+ */
236
+ private analyzeRequirements(file: ScannedFile): Finding[] {
237
+ const findings: Finding[] = [];
238
+ const lines = file.content.split('\n');
239
+
240
+ // Known vulnerable packages (simplified list)
241
+ const vulnerablePackages: Record<string, { version: string; severity: Severity; description: string }> = {
242
+ 'pyyaml': { version: '<5.4', severity: Severity.HIGH, description: 'Arbitrary code execution via yaml.load()' },
243
+ 'django': { version: '<3.2.4', severity: Severity.HIGH, description: 'Multiple security vulnerabilities' },
244
+ 'flask': { version: '<2.0', severity: Severity.MEDIUM, description: 'Security improvements in newer versions' },
245
+ 'requests': { version: '<2.20.0', severity: Severity.MEDIUM, description: 'CVE-2018-18074 - HTTPS verification bypass' }
246
+ };
247
+
248
+ for (let i = 0; i < lines.length; i++) {
249
+ const line = lines[i].trim().toLowerCase();
250
+ for (const [pkg, info] of Object.entries(vulnerablePackages)) {
251
+ if (line.startsWith(pkg + '==') || line.startsWith(pkg + '<') || line === pkg) {
252
+ findings.push({
253
+ id: generateId(),
254
+ title: `Potentially Vulnerable Package: ${pkg}`,
255
+ description: `${info.description}. Consider upgrading.`,
256
+ severity: info.severity,
257
+ threatType: ThreatType.VULNERABLE_DEPENDENCY,
258
+ category: FindingCategory.VULNERABILITY,
259
+ location: {
260
+ file: file.relativePath,
261
+ startLine: i + 1,
262
+ endLine: i + 1
263
+ },
264
+ snippet: { code: lines[i] },
265
+ standards: getStandardsForThreat(ThreatType.VULNERABLE_DEPENDENCY),
266
+ remediation: `Upgrade ${pkg} to the latest secure version.`,
267
+ confidence: 60,
268
+ analyzer: this.name,
269
+ timestamp: new Date(),
270
+ tags: ['dependency', 'vulnerable', 'python']
271
+ });
272
+ }
273
+ }
274
+ }
275
+
276
+ return findings;
277
+ }
278
+
279
+ /**
280
+ * Create generic finding
281
+ */
282
+ private createFinding(
283
+ file: ScannedFile,
284
+ lineNum: number,
285
+ title: string,
286
+ description: string,
287
+ severity: Severity,
288
+ threatType: ThreatType
289
+ ): Finding {
290
+ const context = extractCodeContext(file.content, lineNum, 2);
291
+
292
+ return {
293
+ id: generateId(),
294
+ title,
295
+ description,
296
+ severity,
297
+ threatType,
298
+ category: FindingCategory.VULNERABILITY,
299
+ location: {
300
+ file: file.relativePath,
301
+ startLine: lineNum,
302
+ endLine: lineNum
303
+ },
304
+ snippet: {
305
+ code: context.code,
306
+ contextBefore: context.contextBefore,
307
+ contextAfter: context.contextAfter
308
+ },
309
+ standards: getStandardsForThreat(threatType),
310
+ remediation: 'Review and fix the identified issue.',
311
+ confidence: 75,
312
+ analyzer: this.name,
313
+ timestamp: new Date(),
314
+ tags: ['python']
315
+ };
316
+ }
317
+ }
318
+
319
+ export default PythonAnalyzer;