@js-recon/js-recon 1.4.4 → 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.
- package/.claude-sync/sync.sh +1 -1
- package/.github/workflows/build-and-prettify.yaml +49 -19
- package/.github/workflows/codeql.yml +33 -0
- package/.github/workflows/exploit-smoke-test.yaml +160 -0
- package/.github/workflows/framework-detection-smoke-test.yaml +135 -0
- package/.github/workflows/plumber.yml +20 -0
- package/.github/workflows/promote-js-recon.yml +5 -3
- package/.github/workflows/publish-js-recon.yml +6 -1
- package/.github/workflows/rules-smoke-test.yaml +13 -5
- package/.nvmrc +1 -0
- package/.plumber.yaml +151 -0
- package/CHANGELOG.md +35 -0
- package/CONTRIBUTING.md +32 -0
- package/Dockerfile +1 -0
- package/README.md +3 -2
- package/SECURITY.md +1 -1
- package/build/analyze/engine/astEngine.js +10 -9
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/csMastSEngine.js +6 -6
- package/build/analyze/engine/csMastSEngine.js.map +1 -1
- package/build/analyze/engine/index.js +1 -1
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/engine/requestEngine.js +6 -6
- package/build/analyze/engine/requestEngine.js.map +1 -1
- package/build/analyze/helpers/determineCompatibleVersion.js +70 -0
- package/build/analyze/helpers/determineCompatibleVersion.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +9 -3
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -9
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/outputHelper.js +3 -3
- package/build/analyze/helpers/outputHelper.js.map +1 -1
- package/build/analyze/helpers/schemas.js +1 -0
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +9 -5
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +26 -16
- package/build/analyze/index.js.map +1 -1
- package/build/cliProgram.js +710 -0
- package/build/cliProgram.js.map +1 -0
- package/build/completion/index.js +247 -382
- package/build/completion/index.js.map +1 -1
- package/build/completion/introspect.js +17 -0
- package/build/completion/introspect.js.map +1 -0
- package/build/config/applicationConfig.js +3 -2
- package/build/config/applicationConfig.js.map +1 -1
- package/build/cs_mast/index.js +18 -17
- package/build/cs_mast/index.js.map +1 -1
- package/build/endpoints/gen_report/gen_json.js +2 -2
- package/build/endpoints/gen_report/gen_json.js.map +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -1
- package/build/endpoints/index.js +12 -12
- package/build/endpoints/index.js.map +1 -1
- package/build/endpoints/next_js/client_jsFilesHref.js +3 -3
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
- package/build/endpoints/next_js/client_jsonParse.js +4 -4
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +6 -6
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/endpoints/next_js/client_subsequentRequests.js +5 -5
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
- package/build/exploit/angular/cve-2026-68945.js +61 -0
- package/build/exploit/angular/cve-2026-68945.js.map +1 -0
- package/build/exploit/index.js +60 -0
- package/build/exploit/index.js.map +1 -0
- package/build/exploit/next/cve-2025-29927.js +65 -0
- package/build/exploit/next/cve-2025-29927.js.map +1 -0
- package/build/exploit/next/cve-2026-64645.js +51 -0
- package/build/exploit/next/cve-2026-64645.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71315.js +47 -0
- package/build/exploit/nuxt/cve-2026-71315.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71320.js +114 -0
- package/build/exploit/nuxt/cve-2026-71320.js.map +1 -0
- package/build/exploit/react/cve-2025-55182.js +116 -0
- package/build/exploit/react/cve-2025-55182.js.map +1 -0
- package/build/exploit/registry/cveRegistry.js +115 -0
- package/build/exploit/registry/cveRegistry.js.map +1 -0
- package/build/exploit/types.js +2 -0
- package/build/exploit/types.js.map +1 -0
- package/build/exploit/utility/compareResponses.js +29 -0
- package/build/exploit/utility/compareResponses.js.map +1 -0
- package/build/exploit/utility/outputHelper.js +22 -0
- package/build/exploit/utility/outputHelper.js.map +1 -0
- package/build/exploit/utility/rawRequest.js +54 -0
- package/build/exploit/utility/rawRequest.js.map +1 -0
- package/build/exploit/utility/sandboxRce.js +49 -0
- package/build/exploit/utility/sandboxRce.js.map +1 -0
- package/build/exploit/utility/toEngineOutput.js +28 -0
- package/build/exploit/utility/toEngineOutput.js.map +1 -0
- package/build/exploit/utility/wsClient.js +78 -0
- package/build/exploit/utility/wsClient.js.map +1 -0
- package/build/exploit/vite/cve-2025-30208.js +44 -0
- package/build/exploit/vite/cve-2025-30208.js.map +1 -0
- package/build/exploit/vite/cve-2026-39363.js +60 -0
- package/build/exploit/vite/cve-2026-39363.js.map +1 -0
- package/build/fingerprint/index.js +3 -2
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +2 -2
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +5 -596
- package/build/index.js.map +1 -1
- package/build/lazyLoad/angular/angular_getFromPageSource.js +3 -3
- package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +14 -11
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +5 -1
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +1 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -1
- package/build/lazyLoad/generic/generic_crawlPages.js +186 -0
- package/build/lazyLoad/generic/generic_crawlPages.js.map +1 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js +81 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js.map +1 -0
- package/build/lazyLoad/generic/generic_extractLinks.js +79 -0
- package/build/lazyLoad/generic/generic_extractLinks.js.map +1 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js +152 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js.map +1 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js +87 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_resolveScope.js +61 -0
- package/build/lazyLoad/generic/generic_resolveScope.js.map +1 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js +122 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js.map +1 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js +103 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js +56 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js.map +1 -0
- package/build/lazyLoad/globals.js +31 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +129 -66
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +2 -0
- package/build/lazyLoad/methodFilter.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +38 -14
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +3 -3
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +4 -4
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +13 -11
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +7 -6
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
- package/build/lazyLoad/next_js/next_buildId.js +2 -2
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
- package/build/lazyLoad/next_js/next_getClientSidePaths.js +2 -2
- package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +6 -6
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
- package/build/lazyLoad/next_js/next_routerStateForge.js +341 -0
- package/build/lazyLoad/next_js/next_routerStateForge.js.map +1 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_serverActionIdScan.js +77 -0
- package/build/lazyLoad/next_js/next_serverActionIdScan.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +15 -13
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -3
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +10 -202
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/researchUtils.js +15 -0
- package/build/lazyLoad/researchUtils.js.map +1 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js +218 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js +63 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +5 -5
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getVersionJson.js +2 -2
- package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +6 -6
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -2
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkNuxtJS.js +3 -3
- package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +0 -1
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/checkVueJS.js +6 -6
- package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +13 -1
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -2
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +12 -10
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +2 -2
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +2 -2
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +3 -3
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/load/index.js +8 -7
- package/build/load/index.js.map +1 -1
- package/build/map/angular_js/getAngularConnections.js +6 -6
- package/build/map/angular_js/getAngularConnections.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +6 -6
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/index.js +17 -17
- package/build/map/index.js.map +1 -1
- package/build/map/interactive-mode/commandHandler.js +278 -0
- package/build/map/interactive-mode/commandHandler.js.map +1 -0
- package/build/map/interactive-mode/commandHelpers.js +189 -0
- package/build/map/interactive-mode/commandHelpers.js.map +1 -0
- package/build/map/interactive-mode/esqueryGen.js.map +1 -0
- package/build/map/interactive-mode/helpMenu.js +11 -0
- package/build/map/interactive-mode/helpMenu.js.map +1 -0
- package/build/map/interactive-mode/inputPatch.js.map +1 -0
- package/build/map/interactive-mode/interactive.js +71 -0
- package/build/map/interactive-mode/interactive.js.map +1 -0
- package/build/map/interactive-mode/keybindings.js.map +1 -0
- package/build/map/interactive-mode/printer.js.map +1 -0
- package/build/map/interactive-mode/ui.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +5 -5
- package/build/map/next_js/getAxiosInstances.js.map +1 -1
- package/build/map/next_js/getExports.js +4 -4
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +10 -10
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js +8 -8
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +27 -16
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/interactive.js +3 -65
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +38 -290
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +0 -184
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +6 -6
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +4 -4
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -2
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +5 -5
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +10 -10
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +13 -9
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +11 -11
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +16 -16
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- package/build/map/next_js/resolveFetch.js +23 -23
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +10 -10
- package/build/map/next_js/resolveNewRequest.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +4 -4
- package/build/map/next_js/resolveServerActions.js.map +1 -1
- package/build/map/next_js/utils.js +8 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +21 -14
- package/build/map/react_js/getReactConnections.js.map +1 -1
- package/build/map/svelte_js/interactive.js +3 -54
- package/build/map/svelte_js/interactive.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +23 -16
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +3 -63
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +34 -283
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +1 -1
- package/build/map/vue_js/taint_utils.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +12 -12
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +18 -18
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +11 -11
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/mcp/chatOneShot.js +7 -7
- package/build/mcp/chatOneShot.js.map +1 -1
- package/build/mcp/claudeCodeCreds.js +5 -5
- package/build/mcp/claudeCodeCreds.js.map +1 -1
- package/build/mcp/cli.js +36 -35
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/config.js +4 -4
- package/build/mcp/config.js.map +1 -1
- package/build/mcp/index.js +7 -7
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/mcpServer.js +3 -2
- package/build/mcp/mcpServer.js.map +1 -1
- package/build/mcp/skills.js +1 -0
- package/build/mcp/skills.js.map +1 -1
- package/build/mcp/tools.js +5 -4
- package/build/mcp/tools.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +2 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -1
- package/build/proxy/index.js +3 -3
- package/build/proxy/index.js.map +1 -1
- package/build/refactor/index.js +83 -79
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/index.js +69 -26
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +11 -4
- package/build/refactor/next/transform.js.map +1 -1
- package/build/refactor/next/validator.js +7 -7
- package/build/refactor/next/validator.js.map +1 -1
- package/build/refactor/react/index.js +13 -13
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/validator.js +7 -7
- package/build/refactor/react/validator.js.map +1 -1
- package/build/refactor/react-vite/index.js +3 -3
- package/build/refactor/react-vite/index.js.map +1 -1
- package/build/refactor/remote/hf-client.js +1 -0
- package/build/refactor/remote/hf-client.js.map +1 -1
- package/build/refactor/remote/version-detect.js +12 -12
- package/build/refactor/remote/version-detect.js.map +1 -1
- package/build/refactor/vue/index.js +6 -6
- package/build/refactor/vue/index.js.map +1 -1
- package/build/refactor/vue/vite.js +6 -6
- package/build/refactor/vue/vite.js.map +1 -1
- package/build/report/index.js +30 -8
- package/build/report/index.js.map +1 -1
- package/build/report/swaggerJacker.js +63 -0
- package/build/report/swaggerJacker.js.map +1 -0
- package/build/report/utility/genHtml.js +7 -7
- package/build/report/utility/genHtml.js.map +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js +2 -2
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/report/utility/populateDb/populateEndpoints.js +3 -3
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedJson.js +2 -2
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedOpenapi.js +3 -3
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -1
- package/build/run/bundler-detect.js +45 -9
- package/build/run/bundler-detect.js.map +1 -1
- package/build/run/dashboard/dashboardHtml.js +150 -0
- package/build/run/dashboard/dashboardHtml.js.map +1 -0
- package/build/run/dashboard/fsBrowser.js +43 -0
- package/build/run/dashboard/fsBrowser.js.map +1 -0
- package/build/run/dashboard/server.js +123 -0
- package/build/run/dashboard/server.js.map +1 -0
- package/build/run/dashboard/state.js +97 -0
- package/build/run/dashboard/state.js.map +1 -0
- package/build/run/index.js +177 -110
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +18 -0
- package/build/run/interruptHandler.js.map +1 -1
- package/build/sourcemaps/index.js +7 -6
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +27 -24
- package/build/strings/index.js.map +1 -1
- package/build/strings/openapi.js +4 -4
- package/build/strings/openapi.js.map +1 -1
- package/build/strings/permutate.js +4 -4
- package/build/strings/permutate.js.map +1 -1
- package/build/strings/secrets.js +1 -0
- package/build/strings/secrets.js.map +1 -1
- package/build/strings/trufflehog.js +66 -19
- package/build/strings/trufflehog.js.map +1 -1
- package/build/strings/trufflehogConfig.js +36 -0
- package/build/strings/trufflehogConfig.js.map +1 -0
- package/build/strings/trufflehogDownload.js +115 -0
- package/build/strings/trufflehogDownload.js.map +1 -0
- package/build/utility/ai.js +33 -4
- package/build/utility/ai.js.map +1 -1
- package/build/utility/banner.js +4 -3
- package/build/utility/banner.js.map +1 -1
- package/build/utility/configureSandbox.js +2 -2
- package/build/utility/configureSandbox.js.map +1 -1
- package/build/utility/globals.js +19 -11
- package/build/utility/globals.js.map +1 -1
- package/build/utility/heap.js +2 -1
- package/build/utility/heap.js.map +1 -1
- package/build/utility/makeReq.js +1 -1
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +2 -2
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/printMsg.js +53 -0
- package/build/utility/printMsg.js.map +1 -0
- package/build/utility/progressLog.js +4 -3
- package/build/utility/progressLog.js.map +1 -1
- package/build/utility/resolvePath.js +2 -1
- package/build/utility/resolvePath.js.map +1 -1
- package/build/utility/ruleVersionMap.js +73 -0
- package/build/utility/ruleVersionMap.js.map +1 -0
- package/contributing/testing.md +106 -0
- package/eslint.config.js +24 -0
- package/package.json +22 -5
- package/scripts/exploit-smoke-test.js +82 -0
- package/scripts/framework-detect-smoke-test.js +64 -0
- package/scripts/postinstall-completion.mjs +40 -0
- package/scripts/smoke-test.js +12 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +0 -98
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +0 -1
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +0 -1
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +0 -1
- package/build/map/next_js/interactive_helpers/keybindings.js.map +0 -1
- package/build/map/next_js/interactive_helpers/printer.js.map +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +0 -1
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/esqueryGen.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/inputPatch.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/keybindings.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/printer.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/ui.js +0 -0
package/.claude-sync/sync.sh
CHANGED
|
@@ -61,4 +61,4 @@ while IFS= read -r src; do
|
|
|
61
61
|
ln -sf "$src" "$dest"
|
|
62
62
|
done < <(find "$AGENTIC_REPO_PATH" \( -name "CLAUDE.md" -o -path "*/.claude/skills/*" -o -path "*/.claude/agents/*" \) -type f -not -path "*/.git/*")
|
|
63
63
|
|
|
64
|
-
echo "[claude-sync] synced CLAUDE.md files for branch '$CURRENT_BRANCH'"
|
|
64
|
+
echo "[claude-sync] synced CLAUDE.md / skills / agents files for branch '$CURRENT_BRANCH'"
|
|
@@ -5,6 +5,9 @@ on:
|
|
|
5
5
|
branches-ignore:
|
|
6
6
|
- main
|
|
7
7
|
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
8
11
|
jobs:
|
|
9
12
|
version_check:
|
|
10
13
|
if: |
|
|
@@ -56,6 +59,8 @@ jobs:
|
|
|
56
59
|
runs-on: ubuntu-latest
|
|
57
60
|
needs: audit
|
|
58
61
|
environment: commit-signing
|
|
62
|
+
permissions:
|
|
63
|
+
contents: write
|
|
59
64
|
steps:
|
|
60
65
|
- name: Checkout
|
|
61
66
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
@@ -64,7 +69,7 @@ jobs:
|
|
|
64
69
|
ref: ${{ github.ref_name }}
|
|
65
70
|
|
|
66
71
|
- name: Configure SSH commit signing
|
|
67
|
-
uses: shriyanss/verified-commit-action@v1
|
|
72
|
+
uses: shriyanss/verified-commit-action@1d7638e44a6bab6d3ac35653af7ef9f343074662 # v1.0.2
|
|
68
73
|
with:
|
|
69
74
|
ssh-private-key: ${{ secrets.JS_RECON_SIGNING_KEY }}
|
|
70
75
|
commit-name: "js-recon-bot"
|
|
@@ -115,8 +120,29 @@ jobs:
|
|
|
115
120
|
- name: Run unit tests
|
|
116
121
|
run: npm test
|
|
117
122
|
|
|
123
|
+
lint:
|
|
124
|
+
needs: prettier
|
|
125
|
+
runs-on: ubuntu-latest
|
|
126
|
+
steps:
|
|
127
|
+
- name: Checkout
|
|
128
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
129
|
+
with:
|
|
130
|
+
ref: ${{ github.ref_name }}
|
|
131
|
+
|
|
132
|
+
- name: Set up Node.js
|
|
133
|
+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
134
|
+
with:
|
|
135
|
+
node-version: "22"
|
|
136
|
+
cache: "npm"
|
|
137
|
+
|
|
138
|
+
- name: Install dependencies
|
|
139
|
+
run: npm ci
|
|
140
|
+
|
|
141
|
+
- name: Run ESLint
|
|
142
|
+
run: npm run lint
|
|
143
|
+
|
|
118
144
|
build:
|
|
119
|
-
needs: test
|
|
145
|
+
needs: [test, lint]
|
|
120
146
|
runs-on: ubuntu-latest
|
|
121
147
|
steps:
|
|
122
148
|
- name: Checkout
|
|
@@ -165,13 +191,15 @@ jobs:
|
|
|
165
191
|
path: js-recon-labs
|
|
166
192
|
|
|
167
193
|
- name: Checkout js-recon-rules
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
194
|
+
run: |
|
|
195
|
+
BRANCH="${{ github.ref_name }}"
|
|
196
|
+
if git ls-remote --exit-code --heads https://github.com/js-recon/js-recon-rules.git "$BRANCH" > /dev/null 2>&1; then
|
|
197
|
+
echo "Using js-recon-rules branch: $BRANCH"
|
|
198
|
+
else
|
|
199
|
+
echo "js-recon-rules has no '$BRANCH' branch, falling back to dev"
|
|
200
|
+
BRANCH="dev"
|
|
201
|
+
fi
|
|
202
|
+
git clone --depth 1 --branch "$BRANCH" https://github.com/js-recon/js-recon-rules.git js-recon-rules
|
|
175
203
|
|
|
176
204
|
- name: Set up Node.js
|
|
177
205
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
@@ -222,7 +250,7 @@ jobs:
|
|
|
222
250
|
|
|
223
251
|
- name: Upload analyze.json on failure
|
|
224
252
|
if: failure()
|
|
225
|
-
uses: actions/upload-artifact@v4
|
|
253
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
226
254
|
with:
|
|
227
255
|
name: analyze-json-docker
|
|
228
256
|
path: output/**/analyze.json
|
|
@@ -256,7 +284,7 @@ jobs:
|
|
|
256
284
|
|
|
257
285
|
- name: Upload w-rules analyze.json on failure
|
|
258
286
|
if: failure()
|
|
259
|
-
uses: actions/upload-artifact@v4
|
|
287
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
260
288
|
with:
|
|
261
289
|
name: analyze-json-docker-w-rules
|
|
262
290
|
path: output-w-rules/**/analyze.json
|
|
@@ -279,13 +307,15 @@ jobs:
|
|
|
279
307
|
path: js-recon-labs
|
|
280
308
|
|
|
281
309
|
- name: Checkout js-recon-rules
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
310
|
+
run: |
|
|
311
|
+
BRANCH="${{ github.ref_name }}"
|
|
312
|
+
if git ls-remote --exit-code --heads https://github.com/js-recon/js-recon-rules.git "$BRANCH" > /dev/null 2>&1; then
|
|
313
|
+
echo "Using js-recon-rules branch: $BRANCH"
|
|
314
|
+
else
|
|
315
|
+
echo "js-recon-rules has no '$BRANCH' branch, falling back to dev"
|
|
316
|
+
BRANCH="dev"
|
|
317
|
+
fi
|
|
318
|
+
git clone --depth 1 --branch "$BRANCH" https://github.com/js-recon/js-recon-rules.git js-recon-rules
|
|
289
319
|
|
|
290
320
|
- name: Set up Node.js
|
|
291
321
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
@@ -347,7 +377,7 @@ jobs:
|
|
|
347
377
|
|
|
348
378
|
- name: Upload analyze.json on failure
|
|
349
379
|
if: failure()
|
|
350
|
-
uses: actions/upload-artifact@v4
|
|
380
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
351
381
|
with:
|
|
352
382
|
name: analyze-json-macos
|
|
353
383
|
path: output/**/analyze.json
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- dev
|
|
7
|
+
- main
|
|
8
|
+
pull_request:
|
|
9
|
+
branches:
|
|
10
|
+
- dev
|
|
11
|
+
schedule:
|
|
12
|
+
- cron: "0 6 * * 1" # weekly, Monday 06:00 UTC
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
security-events: write
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
analyze:
|
|
20
|
+
name: Analyze (javascript-typescript)
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
24
|
+
|
|
25
|
+
- name: Initialize CodeQL
|
|
26
|
+
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
|
27
|
+
with:
|
|
28
|
+
languages: javascript-typescript
|
|
29
|
+
|
|
30
|
+
- name: Perform CodeQL Analysis
|
|
31
|
+
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
|
32
|
+
with:
|
|
33
|
+
category: "/language:javascript-typescript"
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
name: Exploit Smoke Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches-ignore:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
exploit-smoke-test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
timeout-minutes: 40
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout js-recon
|
|
18
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
19
|
+
|
|
20
|
+
- name: Checkout js-recon-labs
|
|
21
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
22
|
+
with:
|
|
23
|
+
repository: js-recon/js-recon-labs
|
|
24
|
+
path: js-recon-labs
|
|
25
|
+
|
|
26
|
+
- name: Set up Node.js
|
|
27
|
+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
28
|
+
with:
|
|
29
|
+
node-version: "22"
|
|
30
|
+
cache: "npm"
|
|
31
|
+
|
|
32
|
+
- name: Install js-recon dependencies
|
|
33
|
+
run: npm ci
|
|
34
|
+
|
|
35
|
+
- name: Build js-recon
|
|
36
|
+
run: npm run build
|
|
37
|
+
|
|
38
|
+
# --- Next.js: CVE-2025-29927 (middleware bypass) ---
|
|
39
|
+
- name: Build cve-2025-29927 fixture
|
|
40
|
+
working-directory: js-recon-labs/next_js/cve-2025-29927
|
|
41
|
+
run: npm install && npm run build
|
|
42
|
+
|
|
43
|
+
- name: Start cve-2025-29927 fixture
|
|
44
|
+
working-directory: js-recon-labs/next_js/cve-2025-29927
|
|
45
|
+
run: npm start &
|
|
46
|
+
|
|
47
|
+
# --- Next.js: CVE-2026-64645 (rewrites SSRF) ---
|
|
48
|
+
- name: Build cve-2026-64645 fixture
|
|
49
|
+
working-directory: js-recon-labs/next_js/cve-2026-64645
|
|
50
|
+
run: npm install && npm run build
|
|
51
|
+
|
|
52
|
+
- name: Start cve-2026-64645 fixture
|
|
53
|
+
working-directory: js-recon-labs/next_js/cve-2026-64645
|
|
54
|
+
run: ./start.sh &
|
|
55
|
+
|
|
56
|
+
# --- Next.js: CVE-2025-55182 (React Flight RCE) ---
|
|
57
|
+
- name: Install cve-2025-55182 fixture dependencies
|
|
58
|
+
working-directory: js-recon-labs/next_js/cve-2025-55182
|
|
59
|
+
run: npm install
|
|
60
|
+
|
|
61
|
+
- name: Start cve-2025-55182 fixture
|
|
62
|
+
working-directory: js-recon-labs/next_js/cve-2025-55182
|
|
63
|
+
run: npm start &
|
|
64
|
+
|
|
65
|
+
# --- Vite: CVE-2025-30208 (fs.deny double-'?' bypass) ---
|
|
66
|
+
- name: Install cve-2025-30208 fixture dependencies
|
|
67
|
+
working-directory: js-recon-labs/vite/cve-2025-30208
|
|
68
|
+
run: npm install
|
|
69
|
+
|
|
70
|
+
- name: Start cve-2025-30208 fixture
|
|
71
|
+
working-directory: js-recon-labs/vite/cve-2025-30208
|
|
72
|
+
run: npm run dev &
|
|
73
|
+
|
|
74
|
+
# --- Vite: CVE-2026-39363 (WebSocket fetchModule bypass) ---
|
|
75
|
+
- name: Install cve-2026-39363 fixture dependencies
|
|
76
|
+
working-directory: js-recon-labs/vite/cve-2026-39363
|
|
77
|
+
run: npm install
|
|
78
|
+
|
|
79
|
+
- name: Start cve-2026-39363 fixture
|
|
80
|
+
working-directory: js-recon-labs/vite/cve-2026-39363
|
|
81
|
+
run: npm run dev &
|
|
82
|
+
|
|
83
|
+
# --- Nuxt: CVE-2026-71320 (Server Island RCE) ---
|
|
84
|
+
- name: Build cve-2026-71320 fixture
|
|
85
|
+
working-directory: js-recon-labs/nuxt/cve-2026-71320
|
|
86
|
+
run: npm install && npm run build
|
|
87
|
+
|
|
88
|
+
- name: Start cve-2026-71320 fixture
|
|
89
|
+
working-directory: js-recon-labs/nuxt/cve-2026-71320
|
|
90
|
+
run: npm start &
|
|
91
|
+
|
|
92
|
+
# --- Nuxt: CVE-2026-71315 (route-rule casing bypass) ---
|
|
93
|
+
- name: Build cve-2026-71315 fixture
|
|
94
|
+
working-directory: js-recon-labs/nuxt/cve-2026-71315
|
|
95
|
+
run: npm install && npm run build
|
|
96
|
+
|
|
97
|
+
- name: Start cve-2026-71315 fixture
|
|
98
|
+
working-directory: js-recon-labs/nuxt/cve-2026-71315
|
|
99
|
+
run: npm start &
|
|
100
|
+
|
|
101
|
+
# --- Angular: CVE-2026-68945 (HttpTransferCache collision) ---
|
|
102
|
+
- name: Build cve-2026-68945 fixture
|
|
103
|
+
working-directory: js-recon-labs/angular/cve-2026-68945
|
|
104
|
+
run: npm install && npm run build
|
|
105
|
+
|
|
106
|
+
- name: Start cve-2026-68945 fixture
|
|
107
|
+
working-directory: js-recon-labs/angular/cve-2026-68945
|
|
108
|
+
# CommonEngine's own allowedHosts safety net (unrelated to this CVE) rejects every
|
|
109
|
+
# request's Host header by default.
|
|
110
|
+
run: NG_ALLOWED_HOSTS=localhost npm start &
|
|
111
|
+
|
|
112
|
+
- name: Wait for all fixtures to be ready
|
|
113
|
+
run: |
|
|
114
|
+
# -f (fail on HTTP error status) is deliberately NOT used here: several fixtures 404 on
|
|
115
|
+
# a bare GET / (e.g. cve-2026-71315 has no pages/index.vue, only /login /Admin
|
|
116
|
+
# /testauth) or only accept POST with specific headers (cve-2025-55182). Any HTTP
|
|
117
|
+
# response — including a 404 — proves the process is up and listening, which is all
|
|
118
|
+
# this readiness check needs; the exploit module's own baseline/payload requests handle
|
|
119
|
+
# whatever status codes the real routes return.
|
|
120
|
+
for port in 3020 3021 3022 3023 3024 3025 3026 3027; do
|
|
121
|
+
echo "Waiting for app on port $port..."
|
|
122
|
+
timeout 90 bash -c "until curl -s -o /dev/null http://localhost:$port; do sleep 2; done"
|
|
123
|
+
done
|
|
124
|
+
echo "All fixtures ready."
|
|
125
|
+
|
|
126
|
+
- name: Run exploit module against every fixture
|
|
127
|
+
run: |
|
|
128
|
+
set -e
|
|
129
|
+
declare -A TARGETS=(
|
|
130
|
+
["CVE-2025-29927"]="http://localhost:3020/admin"
|
|
131
|
+
["CVE-2026-64645"]="http://localhost:3021/proxy"
|
|
132
|
+
["CVE-2025-30208"]="http://localhost:3022"
|
|
133
|
+
["CVE-2026-39363"]="http://localhost:3023"
|
|
134
|
+
["CVE-2026-71320"]="http://localhost:3024"
|
|
135
|
+
["CVE-2026-71315"]="http://localhost:3025"
|
|
136
|
+
["CVE-2026-68945"]="http://localhost:3026"
|
|
137
|
+
["CVE-2025-55182"]="http://localhost:3027"
|
|
138
|
+
)
|
|
139
|
+
mkdir -p /tmp/exploit-results
|
|
140
|
+
for cve in "${!TARGETS[@]}"; do
|
|
141
|
+
echo "Running exploit for $cve against ${TARGETS[$cve]}"
|
|
142
|
+
node build/index.js exploit \
|
|
143
|
+
-u "${TARGETS[$cve]}" \
|
|
144
|
+
--cve "$cve" \
|
|
145
|
+
--exec-cmd id \
|
|
146
|
+
-o "/tmp/exploit-results/$cve.json" \
|
|
147
|
+
--engine-output "/tmp/exploit-results/$cve-engine.json" \
|
|
148
|
+
--timeout 20000 || true
|
|
149
|
+
done
|
|
150
|
+
|
|
151
|
+
- name: Verify all CVEs reported vulnerable
|
|
152
|
+
run: node scripts/exploit-smoke-test.js /tmp/exploit-results
|
|
153
|
+
|
|
154
|
+
- name: Upload exploit results on failure
|
|
155
|
+
if: failure()
|
|
156
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
157
|
+
with:
|
|
158
|
+
name: exploit-results
|
|
159
|
+
path: /tmp/exploit-results/**
|
|
160
|
+
if-no-files-found: ignore
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
name: Framework Detection Smoke Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- dev
|
|
7
|
+
- main
|
|
8
|
+
pull_request:
|
|
9
|
+
branches:
|
|
10
|
+
- dev
|
|
11
|
+
- main
|
|
12
|
+
release:
|
|
13
|
+
types:
|
|
14
|
+
- published
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
framework-detection-smoke-test:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
timeout-minutes: 30
|
|
23
|
+
|
|
24
|
+
steps:
|
|
25
|
+
- name: Checkout js-recon
|
|
26
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
27
|
+
|
|
28
|
+
- name: Checkout js-recon-labs
|
|
29
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
30
|
+
with:
|
|
31
|
+
repository: js-recon/js-recon-labs
|
|
32
|
+
path: js-recon-labs
|
|
33
|
+
|
|
34
|
+
- name: Set up Node.js
|
|
35
|
+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
36
|
+
with:
|
|
37
|
+
node-version: "22"
|
|
38
|
+
|
|
39
|
+
- name: Install js-recon dependencies
|
|
40
|
+
run: npm ci
|
|
41
|
+
|
|
42
|
+
- name: Build js-recon
|
|
43
|
+
run: npm run build
|
|
44
|
+
|
|
45
|
+
- name: Start next_js detection app (port 3010)
|
|
46
|
+
working-directory: js-recon-labs/detection/next_js
|
|
47
|
+
run: |
|
|
48
|
+
npm ci
|
|
49
|
+
npm run build
|
|
50
|
+
npm start &
|
|
51
|
+
echo "Waiting for app on port 3010..."
|
|
52
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3010 > /dev/null; do sleep 2; done'
|
|
53
|
+
|
|
54
|
+
- name: Start vue detection app (port 3011)
|
|
55
|
+
working-directory: js-recon-labs/detection/vue
|
|
56
|
+
run: |
|
|
57
|
+
npm ci
|
|
58
|
+
npm run build
|
|
59
|
+
npm start &
|
|
60
|
+
echo "Waiting for app on port 3011..."
|
|
61
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3011 > /dev/null; do sleep 2; done'
|
|
62
|
+
|
|
63
|
+
- name: Start nuxt detection app (port 3012)
|
|
64
|
+
working-directory: js-recon-labs/detection/nuxt
|
|
65
|
+
run: |
|
|
66
|
+
npm ci
|
|
67
|
+
npm run build
|
|
68
|
+
npm start &
|
|
69
|
+
echo "Waiting for app on port 3012..."
|
|
70
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3012 > /dev/null; do sleep 2; done'
|
|
71
|
+
|
|
72
|
+
- name: Start svelte detection app (port 3013)
|
|
73
|
+
working-directory: js-recon-labs/detection/svelte
|
|
74
|
+
run: |
|
|
75
|
+
npm ci
|
|
76
|
+
npm run build
|
|
77
|
+
npm start &
|
|
78
|
+
echo "Waiting for app on port 3013..."
|
|
79
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3013 > /dev/null; do sleep 2; done'
|
|
80
|
+
|
|
81
|
+
- name: Start angular detection app (port 3014)
|
|
82
|
+
working-directory: js-recon-labs/detection/angular
|
|
83
|
+
run: |
|
|
84
|
+
npm ci
|
|
85
|
+
npm run build
|
|
86
|
+
npm start &
|
|
87
|
+
echo "Waiting for app on port 3014..."
|
|
88
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3014 > /dev/null; do sleep 2; done'
|
|
89
|
+
|
|
90
|
+
- name: Start react-vite detection app (port 3015)
|
|
91
|
+
working-directory: js-recon-labs/detection/react_vite
|
|
92
|
+
run: |
|
|
93
|
+
npm ci
|
|
94
|
+
npm run build
|
|
95
|
+
npm start &
|
|
96
|
+
echo "Waiting for app on port 3015..."
|
|
97
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3015 > /dev/null; do sleep 2; done'
|
|
98
|
+
|
|
99
|
+
- name: Start react-webpack detection app (port 3016)
|
|
100
|
+
working-directory: js-recon-labs/detection/react_webpack
|
|
101
|
+
run: |
|
|
102
|
+
npm ci
|
|
103
|
+
npm run build
|
|
104
|
+
npm start &
|
|
105
|
+
echo "Waiting for app on port 3016..."
|
|
106
|
+
timeout 60 bash -c 'until curl -sf http://localhost:3016 > /dev/null; do sleep 2; done'
|
|
107
|
+
|
|
108
|
+
- name: Run js-recon fingerprint against all detection apps
|
|
109
|
+
run: |
|
|
110
|
+
cat > /tmp/framework-urls.txt << 'EOF'
|
|
111
|
+
http://localhost:3010
|
|
112
|
+
http://localhost:3011
|
|
113
|
+
http://localhost:3012
|
|
114
|
+
http://localhost:3013
|
|
115
|
+
http://localhost:3014
|
|
116
|
+
http://localhost:3015
|
|
117
|
+
http://localhost:3016
|
|
118
|
+
EOF
|
|
119
|
+
node --max-old-space-size=4096 build/index.js fingerprint \
|
|
120
|
+
-u /tmp/framework-urls.txt \
|
|
121
|
+
-f json \
|
|
122
|
+
-o /tmp/fingerprint-result \
|
|
123
|
+
-t 3 \
|
|
124
|
+
--no-sandbox
|
|
125
|
+
|
|
126
|
+
- name: Verify all frameworks detected correctly
|
|
127
|
+
run: node scripts/framework-detect-smoke-test.js /tmp/fingerprint-result.json
|
|
128
|
+
|
|
129
|
+
- name: Upload fingerprint result on failure
|
|
130
|
+
if: failure()
|
|
131
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
132
|
+
with:
|
|
133
|
+
name: fingerprint-result
|
|
134
|
+
path: /tmp/fingerprint-result.json
|
|
135
|
+
if-no-files-found: ignore
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Plumber
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push: {}
|
|
5
|
+
pull_request: null
|
|
6
|
+
workflow_dispatch: null
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
security-events: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
plumber:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
18
|
+
- uses: getplumber/plumber@ef9864df81f444647d95889d98695434f6fa9732 # v0.4.12, 2026-07-20
|
|
19
|
+
with:
|
|
20
|
+
score-push: true
|
|
@@ -18,6 +18,8 @@ jobs:
|
|
|
18
18
|
update-homebrew-tap:
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
environment: homebrew-publish
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
21
23
|
steps:
|
|
22
24
|
- name: Fetch published tarball and compute SHA256
|
|
23
25
|
id: sha256
|
|
@@ -93,7 +95,7 @@ jobs:
|
|
|
93
95
|
# Dockerfile.w-rules builds from this context and would otherwise bake
|
|
94
96
|
# the writable GHCR credential into an image layer.
|
|
95
97
|
persist-credentials: false
|
|
96
|
-
- uses: docker/login-action@v3
|
|
98
|
+
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
|
|
97
99
|
with:
|
|
98
100
|
registry: ghcr.io
|
|
99
101
|
username: ${{ github.actor }}
|
|
@@ -203,7 +205,7 @@ jobs:
|
|
|
203
205
|
with:
|
|
204
206
|
node-version: "22"
|
|
205
207
|
|
|
206
|
-
- uses: docker/login-action@v3
|
|
208
|
+
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
|
|
207
209
|
with:
|
|
208
210
|
registry: ghcr.io
|
|
209
211
|
username: ${{ github.actor }}
|
|
@@ -271,7 +273,7 @@ jobs:
|
|
|
271
273
|
with:
|
|
272
274
|
node-version: "22"
|
|
273
275
|
|
|
274
|
-
- uses: docker/login-action@v3
|
|
276
|
+
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
|
|
275
277
|
with:
|
|
276
278
|
registry: ghcr.io
|
|
277
279
|
username: ${{ github.actor }}
|
|
@@ -7,6 +7,9 @@ on:
|
|
|
7
7
|
release:
|
|
8
8
|
types: [created]
|
|
9
9
|
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
10
13
|
jobs:
|
|
11
14
|
version_check:
|
|
12
15
|
runs-on: ubuntu-latest
|
|
@@ -90,12 +93,14 @@ jobs:
|
|
|
90
93
|
- publish-npm
|
|
91
94
|
runs-on: ubuntu-latest
|
|
92
95
|
environment: commit-signing
|
|
96
|
+
permissions:
|
|
97
|
+
contents: write
|
|
93
98
|
steps:
|
|
94
99
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
95
100
|
with:
|
|
96
101
|
fetch-depth: 0
|
|
97
102
|
- name: Configure SSH commit signing
|
|
98
|
-
uses: shriyanss/verified-commit-action@v1
|
|
103
|
+
uses: shriyanss/verified-commit-action@1d7638e44a6bab6d3ac35653af7ef9f343074662 # v1.0.2
|
|
99
104
|
with:
|
|
100
105
|
ssh-private-key: ${{ secrets.JS_RECON_SIGNING_KEY }}
|
|
101
106
|
commit-name: "js-recon-bot"
|
|
@@ -5,6 +5,9 @@ on:
|
|
|
5
5
|
branches-ignore:
|
|
6
6
|
- main
|
|
7
7
|
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
8
11
|
jobs:
|
|
9
12
|
rules-smoke-test:
|
|
10
13
|
runs-on: ubuntu-latest
|
|
@@ -21,10 +24,15 @@ jobs:
|
|
|
21
24
|
path: js-recon-labs
|
|
22
25
|
|
|
23
26
|
- name: Checkout js-recon-rules
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
run: |
|
|
28
|
+
BRANCH="${{ github.ref_name }}"
|
|
29
|
+
if git ls-remote --exit-code --heads https://github.com/js-recon/js-recon-rules.git "$BRANCH" > /dev/null 2>&1; then
|
|
30
|
+
echo "Using js-recon-rules branch: $BRANCH"
|
|
31
|
+
else
|
|
32
|
+
echo "js-recon-rules has no '$BRANCH' branch, falling back to dev"
|
|
33
|
+
BRANCH="dev"
|
|
34
|
+
fi
|
|
35
|
+
git clone --depth 1 --branch "$BRANCH" https://github.com/js-recon/js-recon-rules.git js-recon-rules
|
|
28
36
|
|
|
29
37
|
- name: Set up Node.js
|
|
30
38
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
@@ -72,7 +80,7 @@ jobs:
|
|
|
72
80
|
|
|
73
81
|
- name: Upload analyze.json on failure
|
|
74
82
|
if: failure()
|
|
75
|
-
uses: actions/upload-artifact@v4
|
|
83
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
76
84
|
with:
|
|
77
85
|
name: analyze-json
|
|
78
86
|
path: output/**/analyze.json
|
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
22
|