@integsec/agentic-pentest-proxy 0.4.0 → 0.4.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/cloudflare/wrangler.jsonc +1 -1
- package/dist/bin/integsec-agentic-pentest-bridge.js +2 -2
- package/dist/bin/integsec-agentic-pentest-scanners-mcp.js +6 -3
- package/dist/bin/integsec-agentic-pentest-scanners-mcp.js.map +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/gateway/command.js +1 -1
- package/dist/src/gateway/command.js.map +1 -1
- package/dist/src/gateway/jobs.d.ts +8 -3
- package/dist/src/gateway/jobs.d.ts.map +1 -1
- package/dist/src/gateway/jobs.js +18 -7
- package/dist/src/gateway/jobs.js.map +1 -1
- package/dist/src/gateway/runtime.d.ts.map +1 -1
- package/dist/src/gateway/runtime.js +23 -14
- package/dist/src/gateway/runtime.js.map +1 -1
- package/dist/src/gateway/workbench-client.js +1 -1
- package/dist/src/gateway/workbench.css +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/scanners/jobs.d.ts +20 -5
- package/dist/src/scanners/jobs.d.ts.map +1 -1
- package/dist/src/scanners/jobs.js +77 -16
- package/dist/src/scanners/jobs.js.map +1 -1
- package/dist/src/scanners/runner.d.ts +7 -2
- package/dist/src/scanners/runner.d.ts.map +1 -1
- package/dist/src/scanners/runner.js +17 -9
- package/dist/src/scanners/runner.js.map +1 -1
- package/docs/managed-gateway.md +2 -2
- package/docs/workbench.md +2 -2
- package/package.json +1 -1
|
@@ -12,9 +12,9 @@ const url = new URL(process.argv[2] ?? process.env.GATEWAY_URL ?? "http://127.0.
|
|
|
12
12
|
if (!["127.0.0.1", "localhost", "[::1]"].includes(url.hostname) || url.protocol !== "http:") {
|
|
13
13
|
throw new Error("The local bridge only accepts a loopback HTTP gateway URL");
|
|
14
14
|
}
|
|
15
|
-
const upstream = new Client({ name: "agentic-pentest-bridge", version: "0.4.
|
|
15
|
+
const upstream = new Client({ name: "agentic-pentest-bridge", version: "0.4.1" });
|
|
16
16
|
await upstream.connect(new StreamableHTTPClientTransport(url));
|
|
17
|
-
const bridge = new Server({ name: "agentic-pentest-local", version: "0.4.
|
|
17
|
+
const bridge = new Server({ name: "agentic-pentest-local", version: "0.4.1" }, { capabilities: { tools: {} } });
|
|
18
18
|
bridge.setRequestHandler(ListToolsRequestSchema, async (request) => upstream.listTools(request.params));
|
|
19
19
|
bridge.setRequestHandler(CallToolRequestSchema, async (request) => upstream.callTool(request.params));
|
|
20
20
|
await bridge.connect(new StdioServerTransport());
|
|
@@ -20,14 +20,16 @@ const tool = mode === "nmap" ? {
|
|
|
20
20
|
name: "nuclei_scan", description: "Start a bounded HTTP Nuclei scan against one approved URL. Returns a scan ID immediately; use nuclei_scan_status for results. Disables OAST and automatic updates.",
|
|
21
21
|
inputSchema: { type: "object", properties: {
|
|
22
22
|
url: { type: "string", description: "One authorized HTTP or HTTPS URL." },
|
|
23
|
+
maxDurationMinutes: { type: "integer", minimum: 1, maximum: 240, description: "How long to scan, from 1 to 240 minutes. Defaults to 60 minutes and never exceeds the engagement window." },
|
|
23
24
|
}, required: ["url"], additionalProperties: false },
|
|
24
25
|
};
|
|
25
26
|
const jobs = new NucleiJobs();
|
|
27
|
+
process.on("exit", () => jobs.close());
|
|
26
28
|
const jobTool = (name, description) => ({ name, description, inputSchema: { type: "object", properties: {
|
|
27
29
|
scanId: { type: "string", description: "Scan ID returned by nuclei_scan." },
|
|
28
30
|
url: { type: "string", description: "The same authorized URL used to start the scan." },
|
|
29
31
|
}, required: ["scanId", "url"], additionalProperties: false } });
|
|
30
|
-
const server = new Server({ name: `integsec-${mode}-mcp`, version: "0.4.
|
|
32
|
+
const server = new Server({ name: `integsec-${mode}-mcp`, version: "0.4.1" }, { capabilities: { tools: {} } });
|
|
31
33
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: mode === "nuclei" ? [tool,
|
|
32
34
|
jobTool("nuclei_scan_status", "Check progress and get results of a Nuclei scan for the same approved URL."),
|
|
33
35
|
jobTool("nuclei_scan_cancel", "Stop a running Nuclei scan for the same approved URL.")] : [tool] }));
|
|
@@ -38,8 +40,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
38
40
|
const input = request.params.arguments ?? {};
|
|
39
41
|
if (mode === "nuclei") {
|
|
40
42
|
const result = request.params.name === "nuclei_scan_status" ? jobs.status(input.scanId, input.url)
|
|
41
|
-
: request.params.name === "nuclei_scan_cancel" ? jobs.cancel(input.scanId, input.url
|
|
42
|
-
|
|
43
|
+
: request.params.name === "nuclei_scan_cancel" ? jobs.cancel(input.scanId, input.url, input._gatewayCancelReason === "Engagement or server changed." || input._gatewayCancelReason === "Gateway is shutting down."
|
|
44
|
+
? input._gatewayCancelReason : undefined)
|
|
45
|
+
: jobs.start(input.url, input._gatewayDeadline, input.maxDurationMinutes);
|
|
43
46
|
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
44
47
|
}
|
|
45
48
|
const args = nmapArgs(input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integsec-agentic-pentest-scanners-mcp.js","sourceRoot":"","sources":["../../bin/integsec-agentic-pentest-scanners-mcp.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;IAC7B,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,8FAA8F;IAC9H,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE;YAClD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;YACjF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE;YACzG,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wCAAwC,EAAE;SAC7F,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE;CACvD,CAAC,CAAC,CAAC;IACF,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,oKAAoK;IACtM,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE;YAClD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;
|
|
1
|
+
{"version":3,"file":"integsec-agentic-pentest-scanners-mcp.js","sourceRoot":"","sources":["../../bin/integsec-agentic-pentest-scanners-mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.js
CHANGED
|
@@ -50,7 +50,7 @@ export function loadConfig() {
|
|
|
50
50
|
techniqueMapPath: process.env.TECHNIQUE_MAP_PATH,
|
|
51
51
|
dnsCacheTtl: parseInt(process.env.DNS_CACHE_TTL || "60", 10),
|
|
52
52
|
logLevel: process.env.LOG_LEVEL || "INFO",
|
|
53
|
-
proxyVersion: process.env.PROXY_VERSION || "0.4.
|
|
53
|
+
proxyVersion: process.env.PROXY_VERSION || "0.4.1",
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
//# sourceMappingURL=config.js.map
|
|
@@ -55,7 +55,7 @@ export async function runCommand(upstream, target, signal, maxDurationMs = MAX_D
|
|
|
55
55
|
child.kill();
|
|
56
56
|
reject(new Error(message));
|
|
57
57
|
};
|
|
58
|
-
const duration = Math.min(Math.max(maxDurationMs, 1000),
|
|
58
|
+
const duration = Math.min(Math.max(maxDurationMs, 1000), 240 * 60_000);
|
|
59
59
|
const timer = setTimeout(() => fail(`Command exceeded the ${Math.round(duration / 60_000)}-minute limit.`), duration);
|
|
60
60
|
const collect = (chunk) => {
|
|
61
61
|
size += chunk.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/gateway/command.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/gateway/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,20 @@ export interface GatewayJob {
|
|
|
5
5
|
scopeUpdatedAt: string;
|
|
6
6
|
tool: string;
|
|
7
7
|
startedAt: string;
|
|
8
|
+
deadlineAt: string;
|
|
9
|
+
maxDurationMinutes: number;
|
|
8
10
|
finishedAt?: string;
|
|
9
|
-
status: "running" | "completed" | "failed" | "canceled";
|
|
11
|
+
status: "running" | "completed" | "failed" | "canceled" | "timed_out";
|
|
10
12
|
result?: unknown;
|
|
11
13
|
error?: string;
|
|
12
14
|
}
|
|
13
|
-
export declare const
|
|
15
|
+
export declare const MAX_LOCAL_JOB_MINUTES = 240;
|
|
16
|
+
export declare const MAX_HOSTED_JOB_MINUTES = 30;
|
|
14
17
|
export declare class GatewayJobs {
|
|
18
|
+
readonly maxMinutes: number;
|
|
15
19
|
private jobs;
|
|
16
|
-
|
|
20
|
+
constructor(maxMinutes?: number);
|
|
21
|
+
start(user: string, scopeId: string, scopeUpdatedAt: string, scopeEnd: string, tool: string, execute: (signal: AbortSignal) => Promise<unknown>, maxDurationMinutes?: unknown): GatewayJob;
|
|
17
22
|
list(user: string, scopeId: string): GatewayJob[];
|
|
18
23
|
get(user: string, scopeId: string, id: string): GatewayJob;
|
|
19
24
|
cancel(user: string, scopeId: string, id: string): GatewayJob;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,qBAAa,WAAW;IAEV,QAAQ,CAAC,UAAU;IAD/B,OAAO,CAAC,IAAI,CAAiC;gBACxB,UAAU,SAAwB;IAEvD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EACzF,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAE,OAAuC,GAAG,UAAU;IAgC9H,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAOjD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAM1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAO7D,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI;IAI1D,KAAK,IAAI,IAAI;IAEb,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,KAAK;CASd"}
|
package/dist/src/gateway/jobs.js
CHANGED
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
const MAX_RUNNING = 32;
|
|
3
3
|
const MAX_PER_USER = 4;
|
|
4
|
-
export const
|
|
4
|
+
export const MAX_LOCAL_JOB_MINUTES = 240;
|
|
5
|
+
export const MAX_HOSTED_JOB_MINUTES = 30;
|
|
5
6
|
export class GatewayJobs {
|
|
7
|
+
maxMinutes;
|
|
6
8
|
jobs = new Map();
|
|
7
|
-
|
|
9
|
+
constructor(maxMinutes = MAX_LOCAL_JOB_MINUTES) {
|
|
10
|
+
this.maxMinutes = maxMinutes;
|
|
11
|
+
}
|
|
12
|
+
start(user, scopeId, scopeUpdatedAt, scopeEnd, tool, execute, maxDurationMinutes = Math.min(60, this.maxMinutes)) {
|
|
13
|
+
if (typeof maxDurationMinutes !== "number" || !Number.isInteger(maxDurationMinutes) || maxDurationMinutes < 1 || maxDurationMinutes > this.maxMinutes)
|
|
14
|
+
throw new Error(`maxDurationMinutes must be a whole number from 1 to ${this.maxMinutes}.`);
|
|
8
15
|
const running = [...this.jobs.values()].filter((job) => job.status === "running");
|
|
9
16
|
if (running.length >= MAX_RUNNING || running.filter((job) => job.user === user).length >= MAX_PER_USER)
|
|
10
17
|
throw new Error("Too many background jobs are running; wait or cancel one.");
|
|
11
|
-
const
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
const scopeDeadline = Date.parse(scopeEnd);
|
|
20
|
+
const selectedDeadline = now + maxDurationMinutes * 60_000;
|
|
21
|
+
const remaining = Math.min(selectedDeadline, scopeDeadline) - now;
|
|
12
22
|
if (!Number.isFinite(remaining) || remaining < 1000)
|
|
13
23
|
throw new Error("Engagement window ends too soon to start a job.");
|
|
14
24
|
const controller = new AbortController();
|
|
15
25
|
const job = { id: randomUUID(), user, scopeId, scopeUpdatedAt, tool,
|
|
16
|
-
startedAt: new Date().toISOString(),
|
|
17
|
-
timer: setTimeout(() => this.cancelInternal(job,
|
|
26
|
+
startedAt: new Date(now).toISOString(), deadlineAt: new Date(now + remaining).toISOString(), maxDurationMinutes,
|
|
27
|
+
status: "running", controller, timer: setTimeout(() => this.cancelInternal(job, scopeDeadline <= selectedDeadline
|
|
28
|
+
? "Engagement window ended before the selected job duration." : `Selected ${maxDurationMinutes}-minute job limit reached.`, "timed_out"), remaining) };
|
|
18
29
|
this.jobs.set(job.id, job);
|
|
19
30
|
this.prune();
|
|
20
31
|
void Promise.resolve().then(() => execute(controller.signal)).then((result) => {
|
|
@@ -68,10 +79,10 @@ export class GatewayJobs {
|
|
|
68
79
|
close() { for (const job of this.jobs.values())
|
|
69
80
|
if (job.status === "running")
|
|
70
81
|
this.cancelInternal(job, "Gateway is shutting down."); }
|
|
71
|
-
cancelInternal(job, reason) {
|
|
82
|
+
cancelInternal(job, reason, status = "canceled") {
|
|
72
83
|
if (job.status !== "running")
|
|
73
84
|
return;
|
|
74
|
-
job.status =
|
|
85
|
+
job.status = status;
|
|
75
86
|
job.error = reason;
|
|
76
87
|
job.finishedAt = new Date().toISOString();
|
|
77
88
|
clearTimeout(job.timer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiE,MAAM,YAAY,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiE,MAAM,YAAY,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAiD,MAAM,WAAW,CAAC;AAUvF,qBAAa,cAAc;IAUb,QAAQ,CAAC,KAAK,EAAE,YAAY;IAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAW,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAAwC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IATvL,QAAQ,CAAC,SAAS,YAAmB;IACrC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,OAAO,CAA4D;IAC3E,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAA+G;IAC/H,OAAO,CAAC,eAAe,CAA8E;IACrG,OAAO,CAAC,UAAU,CAAiH;gBAE9G,KAAK,EAAE,YAAY,EAAmB,MAAM,EAAE,OAAO,EAAmB,iBAAiB,CAAC,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,aAAA,EAAmB,cAAc,CAAC,GAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,aAAA;IAI9M,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3B,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9J,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9C,OAAO,CAAC,UAAU;YAYJ,SAAS;IA2BvB,OAAO,CAAC,SAAS;IAOjB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAwO9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
|
|
@@ -10,7 +10,7 @@ import { TechniqueChecker, loadTechniqueMappings } from "../technique-checker.js
|
|
|
10
10
|
import { activeScope, permitsUpstream } from "./state.js";
|
|
11
11
|
import { commandTarget, commandTool, commandToolName, runCommand } from "./command.js";
|
|
12
12
|
import { Workbench } from "./workbench.js";
|
|
13
|
-
import { GatewayJobs,
|
|
13
|
+
import { GatewayJobs, MAX_HOSTED_JOB_MINUTES, MAX_LOCAL_JOB_MINUTES } from "./jobs.js";
|
|
14
14
|
const toolError = (message) => ({ content: [{ type: "text", text: message }], isError: true });
|
|
15
15
|
const ACTIVE_SCOPE_URI = "pentest://engagement/active";
|
|
16
16
|
const PROMPTS = [
|
|
@@ -24,7 +24,7 @@ export class GatewayRuntime {
|
|
|
24
24
|
requiredAuditSink;
|
|
25
25
|
isActorAllowed;
|
|
26
26
|
workbench = new Workbench();
|
|
27
|
-
jobs
|
|
27
|
+
jobs;
|
|
28
28
|
clients = new Map();
|
|
29
29
|
pending = new Map();
|
|
30
30
|
proxies = new Map();
|
|
@@ -36,6 +36,7 @@ export class GatewayRuntime {
|
|
|
36
36
|
this.hosted = hosted;
|
|
37
37
|
this.requiredAuditSink = requiredAuditSink;
|
|
38
38
|
this.isActorAllowed = isActorAllowed;
|
|
39
|
+
this.jobs = new GatewayJobs(hosted ? MAX_HOSTED_JOB_MINUTES : MAX_LOCAL_JOB_MINUTES);
|
|
39
40
|
}
|
|
40
41
|
async sync() {
|
|
41
42
|
const state = this.store.snapshot();
|
|
@@ -55,7 +56,7 @@ export class GatewayRuntime {
|
|
|
55
56
|
this.nucleiJobs.delete(id);
|
|
56
57
|
const client = this.clients.get(job.upstreamId)?.client;
|
|
57
58
|
if (client)
|
|
58
|
-
await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url } }, undefined, { timeout: 10_000 }).catch(() => undefined);
|
|
59
|
+
await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url, _gatewayCancelReason: "Engagement or server changed." } }, undefined, { timeout: 10_000 }).catch(() => undefined);
|
|
59
60
|
}
|
|
60
61
|
for (const [id, running] of this.runningCommands) {
|
|
61
62
|
const current = state.upstreams.find((item) => item.id === id);
|
|
@@ -129,7 +130,7 @@ export class GatewayRuntime {
|
|
|
129
130
|
const connection = (async () => {
|
|
130
131
|
if (cached)
|
|
131
132
|
await cached.client.close().catch(() => undefined);
|
|
132
|
-
const client = new Client({ name: "agentic-pentest-gateway", version: "0.4.
|
|
133
|
+
const client = new Client({ name: "agentic-pentest-gateway", version: "0.4.1" });
|
|
133
134
|
const transport = upstream.transport === "stdio"
|
|
134
135
|
? new StdioClientTransport({ command: upstream.command, args: upstream.args, stderr: "pipe" })
|
|
135
136
|
: upstream.transport === "sse"
|
|
@@ -161,7 +162,7 @@ export class GatewayRuntime {
|
|
|
161
162
|
});
|
|
162
163
|
}
|
|
163
164
|
createServer(actor, email) {
|
|
164
|
-
const server = new Server({ name: "agentic-pentest-gateway", version: "0.4.
|
|
165
|
+
const server = new Server({ name: "agentic-pentest-gateway", version: "0.4.1" }, {
|
|
165
166
|
capabilities: { tools: {}, resources: {}, prompts: {} }, instructions: INSTRUCTIONS,
|
|
166
167
|
});
|
|
167
168
|
const config = loadConfig();
|
|
@@ -240,8 +241,11 @@ export class GatewayRuntime {
|
|
|
240
241
|
}));
|
|
241
242
|
return { tools: [
|
|
242
243
|
...groups.flat(),
|
|
243
|
-
{ name: "gateway__start_long_call", description:
|
|
244
|
-
type: "object", properties: { tool: { type: "string", description: "Full tool name, such as burp__start_scan." },
|
|
244
|
+
{ name: "gateway__start_long_call", description: `Run an enabled MCP tool as a background job. Returns a job ID immediately. Select 1–${this.jobs.maxMinutes} minutes; the engagement window can end it sooner. Scope rules still apply; use gateway__job_status or the workbench for results.`, inputSchema: {
|
|
245
|
+
type: "object", properties: { tool: { type: "string", description: "Full tool name, such as burp__start_scan." },
|
|
246
|
+
arguments: { type: "object", description: "Arguments for that tool." },
|
|
247
|
+
maxDurationMinutes: { type: "integer", minimum: 1, maximum: this.jobs.maxMinutes, description: `Optional duration from 1 to ${this.jobs.maxMinutes} minutes. Defaults to ${Math.min(60, this.jobs.maxMinutes)} minutes.` } },
|
|
248
|
+
required: ["tool", "arguments"], additionalProperties: false,
|
|
245
249
|
} },
|
|
246
250
|
{ name: "gateway__job_status", description: "Get a background job result by ID. Only your jobs for the current engagement are visible.", inputSchema: {
|
|
247
251
|
type: "object", properties: { jobId: { type: "string" } }, required: ["jobId"], additionalProperties: false,
|
|
@@ -268,8 +272,11 @@ export class GatewayRuntime {
|
|
|
268
272
|
if (typeof input.tool !== "string" || input.tool.startsWith("gateway__") || !input.tool.includes("__") ||
|
|
269
273
|
!input.arguments || typeof input.arguments !== "object" || Array.isArray(input.arguments))
|
|
270
274
|
return toolError("Specify an enabled upstream tool and a JSON arguments object.");
|
|
271
|
-
|
|
272
|
-
|
|
275
|
+
if (Object.keys(input).some((key) => !["tool", "arguments", "maxDurationMinutes"].includes(key)))
|
|
276
|
+
return toolError("Unknown background job option.");
|
|
277
|
+
const job = this.jobs.start(user, scope.id, scope.updatedAt, scope.manifest.engagement_window.end, input.tool, (jobSignal) => handleCall({ ...request, params: { name: input.tool, arguments: input.arguments } }, jobSignal), input.maxDurationMinutes);
|
|
278
|
+
return { content: [{ type: "text", text: JSON.stringify({ jobId: job.id, status: job.status, tool: job.tool,
|
|
279
|
+
deadlineAt: job.deadlineAt, maxDurationMinutes: job.maxDurationMinutes }) }] };
|
|
273
280
|
}
|
|
274
281
|
if (request.params.name === "gateway__job_list")
|
|
275
282
|
return { content: [{ type: "text", text: JSON.stringify(this.jobs.list(user, scope.id)) }] };
|
|
@@ -318,9 +325,11 @@ export class GatewayRuntime {
|
|
|
318
325
|
input = interception.args;
|
|
319
326
|
if (signal?.aborted)
|
|
320
327
|
return toolError("Background job was canceled before dispatch.");
|
|
321
|
-
if (bundledNuclei && toolName === "nuclei_scan" && Object.keys(input).some((key) =>
|
|
322
|
-
return toolError("Nuclei scan accepts only the URL
|
|
328
|
+
if (bundledNuclei && toolName === "nuclei_scan" && Object.keys(input).some((key) => !["url", "maxDurationMinutes"].includes(key)))
|
|
329
|
+
return toolError("Nuclei scan accepts only the URL and maxDurationMinutes arguments.");
|
|
323
330
|
if (bundledNuclei && ["nuclei_scan_status", "nuclei_scan_cancel"].includes(toolName)) {
|
|
331
|
+
if (Object.keys(input).some((key) => !["url", "scanId"].includes(key)))
|
|
332
|
+
return toolError("Nuclei job controls accept only URL and scanId.");
|
|
324
333
|
const job = typeof input.scanId === "string" ? this.nucleiJobs.get(input.scanId) : undefined;
|
|
325
334
|
if (!job || job.user !== user || job.scopeId !== scope.id || job.scopeUpdatedAt !== scope.updatedAt || job.upstreamId !== upstream.id || job.url !== input.url)
|
|
326
335
|
return toolError("Nuclei scan not found for this user and engagement.");
|
|
@@ -353,7 +362,7 @@ export class GatewayRuntime {
|
|
|
353
362
|
running.add(call);
|
|
354
363
|
this.runningCommands.set(upstream.id, running);
|
|
355
364
|
try {
|
|
356
|
-
return { content: [{ type: "text", text: await runCommand(upstream, target, call.controller.signal, signal ?
|
|
365
|
+
return { content: [{ type: "text", text: await runCommand(upstream, target, call.controller.signal, signal ? this.jobs.maxMinutes * 60_000 : undefined) }] };
|
|
357
366
|
}
|
|
358
367
|
catch (error) {
|
|
359
368
|
return toolError(error instanceof Error ? error.message : "Command failed.");
|
|
@@ -385,7 +394,7 @@ export class GatewayRuntime {
|
|
|
385
394
|
return toolError("User access was revoked before dispatch.");
|
|
386
395
|
const upstreamInput = bundledNuclei && toolName === "nuclei_scan"
|
|
387
396
|
? { ...input, _gatewayDeadline: Date.parse(scope.manifest.engagement_window.end) } : input;
|
|
388
|
-
const result = await client.callTool({ name: toolName, arguments: upstreamInput }, undefined, { timeout: signal ?
|
|
397
|
+
const result = await client.callTool({ name: toolName, arguments: upstreamInput }, undefined, { timeout: signal ? this.jobs.maxMinutes * 60_000 + 10_000 : 300_000, signal });
|
|
389
398
|
if (bundledNuclei && toolName === "nuclei_scan" && !result.isError) {
|
|
390
399
|
const first = Array.isArray(result.content) ? result.content[0] : undefined;
|
|
391
400
|
if (first?.type === "text") {
|
|
@@ -439,7 +448,7 @@ export class GatewayRuntime {
|
|
|
439
448
|
for (const [id, job] of this.nucleiJobs) {
|
|
440
449
|
const client = this.clients.get(job.upstreamId)?.client;
|
|
441
450
|
if (client)
|
|
442
|
-
await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url } }, undefined, { timeout: 10_000 }).catch(() => undefined);
|
|
451
|
+
await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url, _gatewayCancelReason: "Gateway is shutting down." } }, undefined, { timeout: 10_000 }).catch(() => undefined);
|
|
443
452
|
}
|
|
444
453
|
this.nucleiJobs.clear();
|
|
445
454
|
for (const running of this.runningCommands.values())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,7 +76,7 @@ function renderJobs() {
|
|
|
76
76
|
const row = document.createElement('div'); row.className = `job-item ${job.status}`;
|
|
77
77
|
const info = document.createElement('div');
|
|
78
78
|
const title = document.createElement('strong'); title.textContent = `${job.tool} · ${job.status}`;
|
|
79
|
-
const detail = document.createElement('small'); detail.textContent = `${formatTime(job.startedAt)} · ${job.id}`;
|
|
79
|
+
const detail = document.createElement('small'); detail.textContent = `${formatTime(job.startedAt)} · deadline ${formatTime(job.deadlineAt)} · ${job.id}`;
|
|
80
80
|
info.append(title, detail);
|
|
81
81
|
const actions = document.createElement('div'); actions.className = 'job-actions';
|
|
82
82
|
const view = document.createElement('button'); view.className = 'small secondary'; view.textContent = selectedJobId === job.id ? 'Hide' : 'View';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
:root{font:14px system-ui,sans-serif;color:#e9f3f4;background:#0a131b}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button{border:0;border-radius:8px;background:#28c3a8;color:#06231e;padding:10px 14px;font-weight:700;cursor:pointer}button:hover{filter:brightness(1.1)}button:disabled{opacity:.5;cursor:not-allowed}button.secondary{background:#294456;color:#dcebf0}button.danger{background:#773640;color:#fff}button.small{padding:5px 9px;font-size:12px}.topbar{min-height:72px;background:#101f29;border-bottom:1px solid #244050;padding:12px max(20px,3vw);display:flex;align-items:center;gap:24px;justify-content:space-between}.brand{display:flex;align-items:center;gap:10px}.brand strong,.brand small{display:block}.brand strong{font-size:16px}.brand small{color:#9eb7c2;font-size:11px}.mark{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#27c6aa;color:#07251e;font-size:12px;font-weight:900}.topbar nav{display:flex;gap:18px}.topbar a{color:#9feadd;text-decoration:none}.topbar a:hover{text-decoration:underline}.identity{color:#a4bdc7;font-size:12px}main{max-width:1600px;margin:auto;padding:24px max(20px,3vw) 32px}.intro{display:flex;justify-content:space-between;gap:24px;align-items:center;margin-bottom:18px}.intro h1{font-size:29px;line-height:1.15;margin:3px 0 7px}.intro p{color:#a9bfca;margin:0;line-height:1.45}.intro>div:first-child{max-width:720px}.eyebrow{color:#49d8bd!important;letter-spacing:.13em;font-size:10px;font-weight:800;margin:0}.switchbox{background:#142731;border:1px solid #2b4d5b;border-radius:12px;padding:14px 17px;min-width:280px}.switchbox small{display:block;color:#a6bec8;margin:5px 0 8px}.switchbox p{font-size:12px}.toggle{display:flex;align-items:center;gap:10px;font-weight:800;font-size:15px;cursor:pointer}.toggle input{appearance:none;width:37px;height:22px;margin:0;border-radius:20px;background:#395361;position:relative;cursor:pointer}.toggle input:before{content:"";display:block;position:absolute;top:3px;left:3px;width:16px;height:16px;background:#ecf5f6;border-radius:50%;transition:transform .15s}.toggle input:checked{background:#23bda3}.toggle input:checked:before{transform:translateX(15px)}.token-card{border:1px solid #42647a;background:#172b37;border-radius:10px;padding:16px;margin:14px 0}.token-card label{display:block;margin-bottom:7px;font-weight:700}.token-card div{display:flex;gap:8px}.token-card input{flex:1}.token-card p{color:#a5bdc8;font-size:12px}.token-card a{color:#92e8d8}input:not([type=checkbox]),textarea,select{background:#0c1b25;border:1px solid #3e5c6b;border-radius:8px;color:#eef6f7;padding:9px 10px;min-width:0}input:focus,textarea:focus,select:focus,button:focus-visible{outline:2px solid #55d8c0;outline-offset:2px}.status{color:#8de9d7;min-height:18px;margin:7px 0 14px;font-size:12px}.status.error{color:#ff9f9f}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.metrics div{background:#14242f;border:1px solid #2a4756;border-radius:10px;padding:14px 17px}.metrics strong{display:block;font-size:24px;line-height:1.1}.metrics span{display:block;color:#a4bbc6;font-size:11px;margin-top:4px}.metrics div:nth-child(2) strong{color:#59dca0}.metrics div:nth-child(3) strong{color:#ff9494}.metrics div:nth-child(4) strong{color:#ffd27a}.workspace{display:grid;grid-template-columns:minmax(360px,.95fr) minmax(420px,1.25fr);gap:15px;min-height:580px}.feed-panel,.detail-panel{background:#13232e;border:1px solid #2b4858;border-radius:12px;overflow:hidden}.panel-heading{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:16px 18px;border-bottom:1px solid #294655}.panel-heading h2{margin:2px 0 0;font-size:17px}.filters{display:grid;grid-template-columns:1fr 120px;gap:9px;padding:13px 16px;border-bottom:1px solid #294655}.filters label{display:block;color:#aebfc8;font-size:11px;font-weight:700}.filters input,.filters select{display:block;width:100%;margin-top:4px}.feed{max-height:690px;overflow:auto}.feed-item{display:grid;grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;text-align:left;border-radius:0;border-bottom:1px solid #25414e;background:transparent;color:#eaf3f5;padding:12px 15px;font-weight:400}.feed-item:hover,.feed-item.selected{background:#1d3742;filter:none}.feed-item .stripe{height:36px;border-radius:4px;background:#69808a}.feed-item.allowed .stripe{background:#3dd295}.feed-item.blocked .stripe,.feed-item.dropped .stripe{background:#ef777a}.feed-item.failed .stripe{background:#f5ad5a}.feed-item.pending .stripe{background:#ffd27a}.feed-item strong{display:block;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-item small{display:block;color:#a6bbc5;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-item time{color:#9eafba;font-size:11px;align-self:start}.empty,.empty-detail{color:#a3b8c1;padding:22px;line-height:1.5}.badge{border-radius:20px;background:#334754;color:#d7e5e9;padding:5px 10px;font-size:11px;font-weight:800;text-transform:uppercase}.badge.allowed{background:#174e40;color:#8eebbd}.badge.blocked,.badge.dropped{background:#592c34;color:#ffb2b4}.badge.failed{background:#634629;color:#ffd098}.badge.pending{background:#554823;color:#ffe09a}#detail-body{padding:15px 18px 22px}.facts{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:0 0 15px}.facts div{background:#0f202a;padding:9px;border-radius:7px;min-width:0}.facts dt{color:#9bb1bb;font-size:10px;text-transform:uppercase;letter-spacing:.08em}.facts dd{margin:4px 0 0;word-break:break-word;font-size:12px}.section-heading{display:flex;justify-content:space-between;align-items:center}.section-heading h3,#edited-section h3,.pending-actions h3{font-size:13px;margin:9px 0}.detail-panel pre{background:#0b1923;border:1px solid #2d4958;border-radius:8px;margin:5px 0 16px;padding:12px;color:#afe9db;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow:auto;font:12px/1.55 ui-monospace,Consolas,monospace}.notice{background:#302b21;border-left:3px solid #e6bd69;padding:10px;margin:0 0 12px;color:#f2dcae}.pending-actions{border:1px solid #846a37;border-radius:9px;padding:12px;margin:10px 0 17px;background:#2a281f}.pending-actions p{color:#ddd3b9;font-size:12px;line-height:1.4;margin:2px 0 9px}.pending-actions textarea{display:block;width:100%;min-height:155px;font:12px/1.5 ui-monospace,Consolas,monospace}.action-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.footer-note{font-size:11px;color:#8da5af;margin:18px 2px}[hidden]{display:none!important}@media(max-width:900px){.workspace{grid-template-columns:1fr}.feed{max-height:350px}.intro{display:block}.switchbox{margin-top:14px}.topbar{flex-wrap:wrap}.topbar nav{order:3;width:100%}}@media(max-width:530px){.metrics{grid-template-columns:repeat(2,1fr)}.facts{grid-template-columns:1fr}.filters{grid-template-columns:1fr 105px}.intro h1{font-size:24px}}
|
|
2
2
|
.jobs-panel{background:#13232e;border:1px solid #2b4858;border-radius:12px;margin-bottom:16px;overflow:hidden}.jobs-help{color:#a9bfca;margin:0;padding:13px 18px;font-size:12px;line-height:1.5}.jobs-help code{color:#a9f1df}.jobs{padding:0 16px 12px}.job-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;border-top:1px solid #2b4858;padding:12px 2px}.job-item strong,.job-item small{display:block}.job-item strong{font-size:13px}.job-item small{color:#a4bbc6;margin-top:4px}.job-actions{display:flex;gap:7px}.job-result{grid-column:1/-1;margin:0!important;max-height:250px!important}.job-item.running strong{color:#ffe09a}.job-item.completed strong{color:#8eebbd}.job-item.failed strong,.job-item.canceled strong{color:#ffb2b4}@media(max-width:530px){.job-item{grid-template-columns:1fr}.job-actions{justify-content:flex-start}}
|
|
3
3
|
.intro .scope-label{margin-top:10px;color:#79e4cb;font-size:12px;font-weight:700}
|
|
4
|
+
.job-item.timed_out strong{color:#ffb2b4}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export { loadManifest } from "./manifest.js";
|
|
|
4
4
|
export { loadConfig } from "./config.js";
|
|
5
5
|
export { AuditLogger } from "./audit/index.js";
|
|
6
6
|
export type { ScopeManifest, AuditEntry, ValidationResult, Decision } from "./types.js";
|
|
7
|
-
export declare const VERSION = "0.4.
|
|
7
|
+
export declare const VERSION = "0.4.1";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.js
CHANGED
|
@@ -3,5 +3,5 @@ export { ScopeValidator } from "./validator.js";
|
|
|
3
3
|
export { loadManifest } from "./manifest.js";
|
|
4
4
|
export { loadConfig } from "./config.js";
|
|
5
5
|
export { AuditLogger } from "./audit/index.js";
|
|
6
|
-
export const VERSION = "0.4.
|
|
6
|
+
export const VERSION = "0.4.1";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,24 +1,39 @@
|
|
|
1
1
|
import { runScanner } from "./runner.js";
|
|
2
|
+
export type ScanStatus = "running" | "completed" | "failed" | "canceled" | "timed_out";
|
|
2
3
|
export declare class NucleiJobs {
|
|
3
4
|
private readonly execute;
|
|
4
5
|
private jobs;
|
|
5
6
|
constructor(execute?: typeof runScanner);
|
|
6
|
-
start(url: unknown, deadline?: unknown): {
|
|
7
|
+
start(url: unknown, deadline?: unknown, maxDurationMinutes?: unknown): {
|
|
7
8
|
scanId: string;
|
|
8
|
-
status:
|
|
9
|
+
status: ScanStatus;
|
|
10
|
+
deadlineAt: string;
|
|
11
|
+
maxDurationMinutes: number;
|
|
9
12
|
message: string;
|
|
10
13
|
};
|
|
11
14
|
status(scanId: unknown, url: unknown): {
|
|
12
15
|
scanId: string;
|
|
13
|
-
status:
|
|
16
|
+
status: ScanStatus;
|
|
14
17
|
startedAt: string;
|
|
15
18
|
finishedAt?: string;
|
|
19
|
+
deadlineAt: string;
|
|
20
|
+
maxDurationMinutes: number;
|
|
21
|
+
findingCount: number;
|
|
22
|
+
partialFindings: string;
|
|
23
|
+
diagnostics: string;
|
|
24
|
+
outputTruncated: boolean;
|
|
25
|
+
lastOutputAt?: string;
|
|
16
26
|
result?: string;
|
|
27
|
+
reason?: string;
|
|
17
28
|
};
|
|
18
|
-
cancel(scanId: unknown, url: unknown): {
|
|
29
|
+
cancel(scanId: unknown, url: unknown, reason?: string): {
|
|
19
30
|
scanId: string;
|
|
20
|
-
status:
|
|
31
|
+
status: ScanStatus;
|
|
32
|
+
reason?: string;
|
|
21
33
|
};
|
|
34
|
+
close(): void;
|
|
35
|
+
private stop;
|
|
36
|
+
private capture;
|
|
22
37
|
private get;
|
|
23
38
|
private prune;
|
|
24
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAoE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3G,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAsBvF,qBAAa,UAAU;IAET,OAAO,CAAC,QAAQ,CAAC,OAAO;IADpC,OAAO,CAAC,IAAI,CAA8B;gBACb,OAAO,GAAE,OAAO,UAAuB;IAEpE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAE,OAAqC,GAC/F;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAoCzG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAClH,UAAU,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QACnH,eAAe,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAQrF,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,SAAsB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAM5H,KAAK,IAAI,IAAI;IAEb,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,OAAO;IAqBf,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,KAAK;CASd"}
|
|
@@ -1,47 +1,108 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { nucleiArgs, runScanner } from "./runner.js";
|
|
2
|
+
import { DEFAULT_NUCLEI_SCAN_MINUTES, MAX_NUCLEI_SCAN_MINUTES, nucleiArgs, runScanner } from "./runner.js";
|
|
3
3
|
export class NucleiJobs {
|
|
4
4
|
execute;
|
|
5
5
|
jobs = new Map();
|
|
6
6
|
constructor(execute = runScanner) {
|
|
7
7
|
this.execute = execute;
|
|
8
8
|
}
|
|
9
|
-
start(url, deadline) {
|
|
9
|
+
start(url, deadline, maxDurationMinutes = DEFAULT_NUCLEI_SCAN_MINUTES) {
|
|
10
10
|
const args = nucleiArgs({ url });
|
|
11
|
+
if (typeof maxDurationMinutes !== "number" || !Number.isInteger(maxDurationMinutes) || maxDurationMinutes < 1 || maxDurationMinutes > MAX_NUCLEI_SCAN_MINUTES)
|
|
12
|
+
throw new Error(`maxDurationMinutes must be a whole number from 1 to ${MAX_NUCLEI_SCAN_MINUTES}.`);
|
|
11
13
|
if ([...this.jobs.values()].filter((job) => job.state === "running").length >= 2)
|
|
12
14
|
throw new Error("Two Nuclei scans are already running; wait for one to finish.");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
const scopeDeadline = typeof deadline === "number" && Number.isFinite(deadline) ? deadline : Infinity;
|
|
17
|
+
const selectedDeadline = now + maxDurationMinutes * 60_000;
|
|
18
|
+
const stopAt = Math.min(selectedDeadline, scopeDeadline);
|
|
19
|
+
const remaining = stopAt - now;
|
|
17
20
|
if (remaining < 1000)
|
|
18
21
|
throw new Error("The engagement window ends too soon to start a scan.");
|
|
19
|
-
|
|
22
|
+
const scanId = randomUUID();
|
|
23
|
+
const job = { id: scanId, url: url, state: "running", startedAt: new Date(now).toISOString(),
|
|
24
|
+
deadlineAt: new Date(stopAt).toISOString(), maxDurationMinutes, findingCount: 0, partialFindings: "", diagnostics: "",
|
|
25
|
+
outputTruncated: false, stdoutRemainder: "", controller: new AbortController() };
|
|
26
|
+
const limitReason = scopeDeadline <= selectedDeadline ? "Engagement window ended before the selected scan duration." :
|
|
27
|
+
`Selected ${maxDurationMinutes}-minute Nuclei scan limit reached.`;
|
|
28
|
+
job.timer = setTimeout(() => this.stop(job, "timed_out", limitReason), remaining);
|
|
20
29
|
this.jobs.set(scanId, job);
|
|
21
30
|
this.prune();
|
|
22
|
-
void
|
|
31
|
+
void Promise.resolve().then(() => {
|
|
32
|
+
if (job.controller.signal.aborted)
|
|
33
|
+
throw new Error("Scan canceled before launch.");
|
|
34
|
+
return this.execute("nuclei", args, job.controller.signal, { timeoutMs: remaining + 5000,
|
|
35
|
+
onOutput: (text, stream) => this.capture(job, text, stream) });
|
|
36
|
+
}).then((output) => {
|
|
37
|
+
if (job.state !== "running")
|
|
38
|
+
return;
|
|
23
39
|
job.state = "completed";
|
|
24
40
|
job.result = output;
|
|
25
41
|
job.finishedAt = new Date().toISOString();
|
|
26
42
|
}, (error) => {
|
|
43
|
+
if (job.state !== "running")
|
|
44
|
+
return;
|
|
27
45
|
job.state = job.controller.signal.aborted ? "canceled" : "failed";
|
|
28
|
-
job.
|
|
46
|
+
job.reason = error instanceof Error ? error.message : String(error);
|
|
29
47
|
job.finishedAt = new Date().toISOString();
|
|
30
48
|
}).finally(() => { if (job.timer)
|
|
31
49
|
clearTimeout(job.timer); });
|
|
32
|
-
return { scanId, status: "running",
|
|
50
|
+
return { scanId, status: "running", deadlineAt: job.deadlineAt, maxDurationMinutes,
|
|
51
|
+
message: "Scan started. Call nuclei_scan_status with this scanId and the same URL to get progress and findings." };
|
|
33
52
|
}
|
|
34
53
|
status(scanId, url) {
|
|
35
54
|
const job = this.get(scanId, url);
|
|
36
|
-
return { scanId: job.id, status: job.state, startedAt: job.startedAt, finishedAt: job.finishedAt,
|
|
55
|
+
return { scanId: job.id, status: job.state, startedAt: job.startedAt, finishedAt: job.finishedAt,
|
|
56
|
+
deadlineAt: job.deadlineAt, maxDurationMinutes: job.maxDurationMinutes, findingCount: job.findingCount,
|
|
57
|
+
partialFindings: job.partialFindings, diagnostics: job.diagnostics, outputTruncated: job.outputTruncated,
|
|
58
|
+
lastOutputAt: job.lastOutputAt, result: job.result, reason: job.reason };
|
|
37
59
|
}
|
|
38
|
-
cancel(scanId, url) {
|
|
60
|
+
cancel(scanId, url, reason = "Canceled by user.") {
|
|
39
61
|
const job = this.get(scanId, url);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
62
|
+
this.stop(job, "canceled", reason);
|
|
63
|
+
return { scanId: job.id, status: job.state, reason: job.reason };
|
|
64
|
+
}
|
|
65
|
+
close() { for (const job of this.jobs.values())
|
|
66
|
+
this.stop(job, "canceled", "Nuclei adapter is shutting down."); }
|
|
67
|
+
stop(job, status, reason) {
|
|
68
|
+
if (job.state !== "running")
|
|
69
|
+
return;
|
|
70
|
+
job.state = status;
|
|
71
|
+
job.reason = reason;
|
|
72
|
+
job.finishedAt = new Date().toISOString();
|
|
73
|
+
if (job.timer)
|
|
74
|
+
clearTimeout(job.timer);
|
|
75
|
+
job.controller.abort();
|
|
76
|
+
}
|
|
77
|
+
capture(job, text, stream) {
|
|
78
|
+
if (job.state !== "running")
|
|
79
|
+
return;
|
|
80
|
+
job.lastOutputAt = new Date().toISOString();
|
|
81
|
+
if (stream === "stderr") {
|
|
82
|
+
job.diagnostics = `${job.diagnostics}${text}`.slice(-16 * 1024);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const combined = `${job.partialFindings}${text}`;
|
|
86
|
+
if (combined.length > 128 * 1024)
|
|
87
|
+
job.outputTruncated = true;
|
|
88
|
+
job.partialFindings = combined.slice(-128 * 1024);
|
|
89
|
+
job.stdoutRemainder += text;
|
|
90
|
+
if (job.stdoutRemainder.length > 256 * 1024) {
|
|
91
|
+
job.stdoutRemainder = job.stdoutRemainder.slice(-256 * 1024);
|
|
92
|
+
job.outputTruncated = true;
|
|
93
|
+
}
|
|
94
|
+
const lines = job.stdoutRemainder.split(/\r?\n/);
|
|
95
|
+
job.stdoutRemainder = lines.pop() ?? "";
|
|
96
|
+
for (const line of lines) {
|
|
97
|
+
if (!line.trim())
|
|
98
|
+
continue;
|
|
99
|
+
try {
|
|
100
|
+
const finding = JSON.parse(line);
|
|
101
|
+
if (finding && typeof finding === "object")
|
|
102
|
+
job.findingCount++;
|
|
103
|
+
}
|
|
104
|
+
catch { /* Scanner diagnostics may appear on stdout. */ }
|
|
43
105
|
}
|
|
44
|
-
return { scanId: job.id, status: job.state };
|
|
45
106
|
}
|
|
46
107
|
get(scanId, url) {
|
|
47
108
|
const job = typeof scanId === "string" ? this.jobs.get(scanId) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwB3G,MAAM,OAAO,UAAU;IAEQ;IADrB,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC1C,YAA6B,UAA6B,UAAU;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAExE,KAAK,CAAC,GAAY,EAAE,QAAkB,EAAE,qBAA8B,2BAA2B;QAE/F,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,OAAO,kBAAkB,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,GAAG,CAAC,IAAI,kBAAkB,GAAG,uBAAuB;YAC3J,MAAM,IAAI,KAAK,CAAC,uDAAuD,uBAAuB,GAAG,CAAC,CAAC;QACrG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnK,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtG,MAAM,gBAAgB,GAAG,GAAG,GAAG,kBAAkB,GAAG,MAAM,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,GAAG,GAAG,CAAC;QAC/B,IAAI,SAAS,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAY,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAa,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YAC7G,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE;YACrH,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,eAAe,EAAE,EAAE,CAAC;QACnF,MAAM,WAAW,GAAG,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC;YACpH,YAAY,kBAAkB,oCAAoC,CAAC;QACrE,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;gBACtF,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,OAAO;YACpC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;YAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YAAC,GAAG,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1F,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YACX,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,OAAO;YACpC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;YAClE,GAAG,CAAC,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,GAAG,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjH,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,kBAAkB;YAChF,OAAO,EAAE,uGAAuG,EAAE,CAAC;IACvH,CAAC;IAED,MAAM,CAAC,MAAe,EAAE,GAAY;QAGlC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU;YAC9F,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY;YACtG,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe;YACxG,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,MAAe,EAAE,GAAY,EAAE,MAAM,GAAG,mBAAmB;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACnE,CAAC;IAED,KAAK,KAAW,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,kCAAkC,CAAC,CAAC,CAAC,CAAC;IAE/G,IAAI,CAAC,GAAY,EAAE,MAAgC,EAAE,MAAc;QACzE,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACpC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;QAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QAAC,GAAG,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnF,IAAI,GAAG,CAAC,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,OAAO,CAAC,GAAY,EAAE,IAAY,EAAE,MAA2B;QACrE,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACpC,GAAG,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,GAAG,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,eAAe,GAAG,IAAI,EAAE,CAAC;QACjD,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI;YAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7D,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAClD,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC;QAC5B,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;YAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;QAAC,CAAC;QAC1I,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC3B,IAAI,CAAC;gBAAC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;gBAAC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;oBAAE,GAAG,CAAC,YAAY,EAAE,CAAC;YAAC,CAAC;YACpH,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,MAAe,EAAE,GAAY;QACvC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9H,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;YAC5E,IAAI,CAAC,SAAS;gBAAE,MAAM;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const DEFAULT_NUCLEI_SCAN_MINUTES = 60;
|
|
2
|
+
export declare const MAX_NUCLEI_SCAN_MINUTES = 240;
|
|
3
|
+
export interface ScannerRunOptions {
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
onOutput?: (text: string, stream: "stdout" | "stderr") => void;
|
|
6
|
+
}
|
|
2
7
|
export declare function nmapArgs(input: Record<string, unknown>): string[];
|
|
3
8
|
export declare function nucleiArgs(input: Record<string, unknown>): string[];
|
|
4
|
-
export declare function runScanner(binary: "nmap" | "nuclei", args: string[], signal?: AbortSignal): Promise<string>;
|
|
9
|
+
export declare function runScanner(binary: "nmap" | "nuclei", args: string[], signal?: AbortSignal, options?: ScannerRunOptions): Promise<string>;
|
|
5
10
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;CAChE;AA4BD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAOjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAYnE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B9I"}
|
|
@@ -2,7 +2,8 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { isIP } from "node:net";
|
|
3
3
|
const MAX_OUTPUT_BYTES = 256 * 1024;
|
|
4
4
|
const NMAP_SCAN_MS = 120_000;
|
|
5
|
-
export const
|
|
5
|
+
export const DEFAULT_NUCLEI_SCAN_MINUTES = 60;
|
|
6
|
+
export const MAX_NUCLEI_SCAN_MINUTES = 240;
|
|
6
7
|
function singleHost(value) {
|
|
7
8
|
if (typeof value !== "string" || value.length > 253 || value !== value.trim() || !value) {
|
|
8
9
|
throw new Error("Enter one hostname or IP address.");
|
|
@@ -60,28 +61,35 @@ export function nucleiArgs(input) {
|
|
|
60
61
|
return ["-u", url.href, "-pt", "http", "-rl", "5", "-c", "1", "-timeout", "5", "-retries", "0", "-ni", "-duc",
|
|
61
62
|
"-etags", "dos,bruteforce,fuzz,headless,code", "-j"];
|
|
62
63
|
}
|
|
63
|
-
export async function runScanner(binary, args, signal) {
|
|
64
|
+
export async function runScanner(binary, args, signal, options) {
|
|
64
65
|
return new Promise((resolve, reject) => {
|
|
65
66
|
const child = spawn(binary, args, { shell: false, windowsHide: true, stdio: ["ignore", "pipe", "pipe"], signal });
|
|
66
67
|
let output = "";
|
|
67
68
|
let size = 0;
|
|
68
69
|
let finished = false;
|
|
70
|
+
let truncated = false;
|
|
69
71
|
const fail = (error) => { if (!finished) {
|
|
70
72
|
finished = true;
|
|
71
73
|
clearTimeout(timer);
|
|
72
74
|
child.kill();
|
|
73
75
|
reject(error);
|
|
74
76
|
} };
|
|
75
|
-
const limit = binary === "nuclei" ?
|
|
77
|
+
const limit = Math.max(1000, Math.min(options?.timeoutMs ?? (binary === "nuclei" ? DEFAULT_NUCLEI_SCAN_MINUTES * 60_000 : NMAP_SCAN_MS), binary === "nuclei" ? MAX_NUCLEI_SCAN_MINUTES * 60_000 + 5000 : NMAP_SCAN_MS));
|
|
76
78
|
const timer = setTimeout(() => fail(new Error(`${binary} exceeded the ${Math.round(limit / 60_000)}-minute scan limit.`)), limit);
|
|
77
|
-
const collect = (data) => {
|
|
79
|
+
const collect = (data, stream) => {
|
|
80
|
+
const text = data.toString("utf8");
|
|
81
|
+
options?.onOutput?.(text, stream);
|
|
78
82
|
size += data.length;
|
|
79
|
-
|
|
83
|
+
const maxOutput = binary === "nuclei" ? 1024 * 1024 : MAX_OUTPUT_BYTES;
|
|
84
|
+
if (size > maxOutput && binary !== "nuclei")
|
|
80
85
|
return fail(new Error(`${binary} output exceeded 256 KiB; narrow the scan.`));
|
|
81
|
-
|
|
86
|
+
if (size > maxOutput)
|
|
87
|
+
truncated = true;
|
|
88
|
+
if (output.length < maxOutput)
|
|
89
|
+
output += text.slice(0, maxOutput - output.length);
|
|
82
90
|
};
|
|
83
|
-
child.stdout.on("data", collect);
|
|
84
|
-
child.stderr.on("data", collect);
|
|
91
|
+
child.stdout.on("data", (data) => collect(data, "stdout"));
|
|
92
|
+
child.stderr.on("data", (data) => collect(data, "stderr"));
|
|
85
93
|
child.on("error", (error) => fail(new Error(signal?.aborted ? `${binary} scan was canceled.` : `${binary} could not start. Install it on this computer and check that it is on PATH. ${error.message}`)));
|
|
86
94
|
child.on("close", (code) => {
|
|
87
95
|
clearTimeout(timer);
|
|
@@ -91,7 +99,7 @@ export async function runScanner(binary, args, signal) {
|
|
|
91
99
|
if (code !== 0)
|
|
92
100
|
reject(new Error(`${binary} exited with code ${code}. ${output.slice(0, 2000)}`));
|
|
93
101
|
else
|
|
94
|
-
resolve(output || `${binary} completed with no findings.`);
|
|
102
|
+
resolve(`${output || `${binary} completed with no findings.`}${truncated ? "\n[Output exceeded 1 MiB; the result is truncated.]" : ""}`);
|
|
95
103
|
});
|
|
96
104
|
});
|
|
97
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC;AACpC,MAAM,YAAY,GAAG,OAAO,CAAC;AAC7B,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"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"}
|
package/docs/managed-gateway.md
CHANGED
|
@@ -21,9 +21,9 @@ The gateway starts in the background and prints a temporary admin token in your
|
|
|
21
21
|
|
|
22
22
|
**Live server controls:** The dashboard's **Turn on** and **Turn off** buttons update the running gateway immediately; neither the gateway nor Burp needs to restart. **On** means the server is enabled. **Connected** means the gateway reached the upstream and listed its tools at the shown check time. **Connection failed** means the upstream is unavailable; install/start it and click **Check connection**. A local command tool shows **Runs on demand** because it has no persistent MCP connection. A connected MCP client can request its tool list again to see changes, but some clients cache the list and require a manual tool refresh. The gateway rejects new calls after a server is turned off and stops in-flight local command tools.
|
|
23
23
|
|
|
24
|
-
**Local command tools:** An administrator can add an installed CLI as a local MCP tool even when that CLI has no MCP server. Enter one executable, fixed arguments with `{target}` on exactly one argument line, a target type (host/IP or HTTP URL), and a technique category. The gateway exposes `<name>__run_local_command` with one `target` input, checks the current engagement scope, then launches the executable directly without a shell. The AI cannot choose flags. Direct calls have a two-minute and 64 KiB output limit. A [background job](workbench.md) can run for
|
|
24
|
+
**Local command tools:** An administrator can add an installed CLI as a local MCP tool even when that CLI has no MCP server. Enter one executable, fixed arguments with `{target}` on exactly one argument line, a target type (host/IP or HTTP URL), and a technique category. The gateway exposes `<name>__run_local_command` with one `target` input, checks the current engagement scope, then launches the executable directly without a shell. The AI cannot choose flags. Direct calls have a two-minute and 64 KiB output limit. A [background job](workbench.md) can run for 1 to 240 minutes or until the engagement window ends, with the same output limit. This is for administrator-reviewed single-target commands; a CLI's own configuration or fixed flags can still have effects beyond the supplied target. Review them before enabling the tool. Local command tools cannot run in the hosted gateway. The bundled Nmap and Nuclei presets remain the recommended adapters because they enforce additional rate and option limits.
|
|
25
25
|
|
|
26
|
-
**Nmap and Nuclei:** Install the [Nmap CLI](https://nmap.org/download.html) and [ProjectDiscovery Nuclei CLI](https://github.com/projectdiscovery/nuclei) on the tester's computer. Confirm `nmap --version` and `nuclei -version` work in the same terminal that starts the gateway. The npm package includes the MCP adapter; the CLI programs themselves are separate. Add each preset, turn it on, and refresh your MCP client's tool list. Nmap offers a single-host TCP scan of up to 100 ports with a two-minute limit. Nuclei offers a single HTTP URL with low concurrency and rate limits; OAST and automatic updates are disabled. A Nuclei call
|
|
26
|
+
**Nmap and Nuclei:** Install the [Nmap CLI](https://nmap.org/download.html) and [ProjectDiscovery Nuclei CLI](https://github.com/projectdiscovery/nuclei) on the tester's computer. Confirm `nmap --version` and `nuclei -version` work in the same terminal that starts the gateway. The npm package includes the MCP adapter; the CLI programs themselves are separate. Add each preset, turn it on, and refresh your MCP client's tool list. Nmap offers a single-host TCP scan of up to 100 ports with a two-minute limit. Nuclei offers a single HTTP URL with low concurrency and rate limits; OAST and automatic updates are disabled. A Nuclei call returns a scan ID immediately. Its default scan limit is 60 minutes; `maxDurationMinutes` can be set from 1 to 240, and the engagement window always caps it. Status reports progress, partial findings, and the reason for a timeout or cancellation. Review the locally installed Nuclei templates and scanner configuration before team use. Target traffic leaves the tester's computer or VPN exit.
|
|
27
27
|
|
|
28
28
|
**Semgrep source files:** An administrator must list approved absolute code folders under **Approved local code folders** in the engagement draft, then save and approve it. Use `semgrep_scan` with absolute file paths inside those folders. A file outside them, an inaccessible file, or a scope without approved folders is blocked. `semgrep_findings` queries the Semgrep cloud account and remains blocked because its repository selection is not yet tied to an approved engagement. Unknown tools remain blocked; there is no blanket unclassified-tool bypass.
|
|
29
29
|
|
package/docs/workbench.md
CHANGED
|
@@ -21,8 +21,8 @@ Use `gateway__start_long_call` in your MCP client when a tool may take several m
|
|
|
21
21
|
|
|
22
22
|
Replace the example target and tool arguments with the approved engagement values. The gateway returns a `jobId` immediately. Use `gateway__job_status` with that ID to read the final result, `gateway__job_list` to find recent jobs, or `gateway__job_cancel` to cancel one. The workbench also lists jobs and provides **View** and **Cancel** controls. Calls still pass through intercept, scope validation, and the audit log before dispatch. The job belongs to the user and engagement that started it; another user cannot read or cancel it.
|
|
23
23
|
|
|
24
|
-
At most four background jobs per user and 32 per gateway can run at once.
|
|
24
|
+
At most four background jobs per user and 32 per gateway can run at once. Local jobs default to 60 minutes and accept `maxDurationMinutes` from 1 to 240; hosted jobs default to 30 minutes and accept 1 to 30. The engagement window always ends a job sooner. A duration or window stop reports `timed_out` with a reason. Changing engagement, removing access, disabling the upstream server, or stopping the gateway cancels active jobs. The gateway sends cancellation to an MCP upstream, but a third-party server may continue work if it does not honor MCP cancellation. Local command tools are stopped by the gateway. Results are held in memory for one hour and capped at 256 KiB; use a narrower tool request if the result is too large. Normal direct calls still have a five-minute upstream wait; use a background job for longer operations.
|
|
25
25
|
|
|
26
26
|
## Nuclei scans
|
|
27
27
|
|
|
28
|
-
The bundled Nuclei adapter starts a scan and immediately returns a `scanId
|
|
28
|
+
The bundled Nuclei adapter starts a scan and immediately returns a `scanId` and deadline. It runs for up to 60 minutes by default. Set `maxDurationMinutes` from 1 to 240 when an approved scan needs more or less time; the engagement window always ends the scan sooner if necessary. Call `nuclei__nuclei_scan_status` with the same approved `url` and scan ID to see its deadline, finding count, partial findings, diagnostics, and final result. A configured limit or engagement-window stop reports `timed_out` with the exact reason; **Cancel** reports `canceled`. Earlier findings stay visible after either stop. Use `nuclei__nuclei_scan_cancel` to stop it yourself. Nuclei's concurrency, rate, template, OAST, and update restrictions still apply. Scan IDs are only accessible to the same gateway user and engagement. You do not need `gateway__start_long_call` around `nuclei__nuclei_scan`; the adapter already runs it as a job. Refresh your MCP client's tool list after upgrading to see the updated argument and status fields.
|
package/package.json
CHANGED