@integsec/agentic-pentest-proxy 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
**Scope enforcement proxy for AI-driven penetration testing.**
|
|
4
4
|
|
|
5
|
-
The IntegSec Agentic Pentest MCP Proxy sits between an AI agent (Claude, GPT, etc.) and an MCP tool server (
|
|
5
|
+
The IntegSec Agentic Pentest MCP Proxy sits between an AI agent (Claude, GPT, etc.) and an MCP tool server ([TurboPentest](https://turbopentest.com), Nuclei MCP, etc.), intercepting every tool call and validating it against a scope manifest before it reaches the upstream server. Out-of-scope targets, banned techniques, and expired engagement windows are blocked in real time with a full audit trail.
|
|
6
6
|
|
|
7
7
|
Built by **[IntegSec](https://integsec.com)** — offensive cybersecurity testing and threat simulation for modern organizations moving at AI speed.
|
|
8
8
|
|
|
9
9
|
```
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
+------------+ JSON-RPC +---------------------+ JSON-RPC +----------------+
|
|
11
|
+
| AI Agent | ----------> | IntegSec Agentic | ----------> | Upstream MCP |
|
|
12
|
+
| (Claude) | <---------- | Pentest MCP Proxy | <---------- | (TurboPentest) |
|
|
13
|
+
+------------+ allow/block | (validate + audit) | forwarded +----------------+
|
|
14
|
+
+---------------------+
|
|
15
|
+
|
|
|
16
|
+
v
|
|
17
|
+
+-----------+
|
|
18
|
+
| Audit Log |
|
|
19
|
+
| (JSONL / |
|
|
20
|
+
| Cloud) |
|
|
21
|
+
+-----------+
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
> **Using AI agents for pentesting?** [TurboPentest](https://turbopentest.com) delivers agentic penetration testing powered by Claude — 15 orchestrated security tools, OWASP Top 10 coverage, results in under 4 hours, blockchain-attested reports. Starting at $99/domain. Pair it with this proxy for scope-safe autonomous testing.
|
|
@@ -66,7 +66,6 @@ The IntegSec Agentic Pentest MCP Proxy solves this by enforcing scope at the pro
|
|
|
66
66
|
|
|
67
67
|
**No prompt engineering. No honor system. Enforcement.**
|
|
68
68
|
|
|
69
|
-
This is the same scope enforcement philosophy behind [IntegSec's](https://integsec.com) human-expert-led penetration testing services — applied to autonomous AI agents.
|
|
70
69
|
|
|
71
70
|
---
|
|
72
71
|
|
|
@@ -116,10 +115,10 @@ cat > scope.json << 'EOF'
|
|
|
116
115
|
}
|
|
117
116
|
EOF
|
|
118
117
|
|
|
119
|
-
# Run the proxy (stdio mode, wrapping
|
|
118
|
+
# Run the proxy (stdio mode, wrapping TurboPentest MCP)
|
|
120
119
|
SCOPE_MANIFEST_PATH=./scope.json \
|
|
121
120
|
UPSTREAM_MCP_COMMAND=npx \
|
|
122
|
-
UPSTREAM_MCP_ARGS="-y,@
|
|
121
|
+
UPSTREAM_MCP_ARGS="-y,@turbopentest/mcp-server" \
|
|
123
122
|
integsec-agentic-pentest-proxy
|
|
124
123
|
```
|
|
125
124
|
|
|
@@ -275,7 +274,7 @@ Point `TECHNIQUE_MAP_PATH` at this file. Custom mappings are merged with built-i
|
|
|
275
274
|
# stdio mode — wrap any MCP server
|
|
276
275
|
SCOPE_MANIFEST_PATH=./scope.json \
|
|
277
276
|
UPSTREAM_MCP_COMMAND=npx \
|
|
278
|
-
UPSTREAM_MCP_ARGS="-y,@
|
|
277
|
+
UPSTREAM_MCP_ARGS="-y,@turbopentest/mcp-server" \
|
|
279
278
|
integsec-agentic-pentest-proxy
|
|
280
279
|
|
|
281
280
|
# HTTP mode — reverse proxy to a running MCP server
|
|
@@ -293,14 +292,14 @@ Add to your Claude Desktop `claude_desktop_config.json`:
|
|
|
293
292
|
```json
|
|
294
293
|
{
|
|
295
294
|
"mcpServers": {
|
|
296
|
-
"
|
|
295
|
+
"turbopentest-scoped": {
|
|
297
296
|
"command": "npx",
|
|
298
297
|
"args": ["-y", "@integsec/agentic-pentest-proxy"],
|
|
299
298
|
"env": {
|
|
300
299
|
"SCOPE_MANIFEST_PATH": "/path/to/scope.json",
|
|
301
300
|
"MCP_TRANSPORT": "stdio",
|
|
302
301
|
"UPSTREAM_MCP_COMMAND": "npx",
|
|
303
|
-
"UPSTREAM_MCP_ARGS": "-y,@
|
|
302
|
+
"UPSTREAM_MCP_ARGS": "-y,@turbopentest/mcp-server",
|
|
304
303
|
"AUDIT_LOG_PATH": "./audit/"
|
|
305
304
|
}
|
|
306
305
|
}
|
|
@@ -315,13 +314,13 @@ Add to your `.mcp.json` or project settings:
|
|
|
315
314
|
```json
|
|
316
315
|
{
|
|
317
316
|
"mcpServers": {
|
|
318
|
-
"
|
|
317
|
+
"turbopentest-scoped": {
|
|
319
318
|
"command": "npx",
|
|
320
319
|
"args": ["-y", "@integsec/agentic-pentest-proxy"],
|
|
321
320
|
"env": {
|
|
322
321
|
"SCOPE_MANIFEST_PATH": "./scope.json",
|
|
323
322
|
"UPSTREAM_MCP_COMMAND": "npx",
|
|
324
|
-
"UPSTREAM_MCP_ARGS": "-y,@
|
|
323
|
+
"UPSTREAM_MCP_ARGS": "-y,@turbopentest/mcp-server"
|
|
325
324
|
}
|
|
326
325
|
}
|
|
327
326
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAsB,aAAa,CACjC,KAAK,EAAE,qBAAqB,EAC5B,eAAe,EAAE,MAAM,EACvB,YAAY,GAAE,MAAM,EAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAsB,aAAa,CACjC,KAAK,EAAE,qBAAqB,EAC5B,eAAe,EAAE,MAAM,EACvB,YAAY,GAAE,MAAM,EAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Df"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { spawn } from "child_process";
|
|
2
2
|
import { createInterface } from "readline";
|
|
3
3
|
export async function runStdioProxy(proxy, upstreamCommand, upstreamArgs = []) {
|
|
4
|
-
|
|
4
|
+
// On Windows, commands like "npx" are .cmd wrappers that require shell
|
|
5
|
+
// resolution, and paths may contain spaces (e.g. "C:\Program Files\...").
|
|
6
|
+
// Build a single quoted command string and use shell: true with no args
|
|
7
|
+
// array to avoid ENOENT, EINVAL, and DEP0190 issues.
|
|
8
|
+
const quote = (s) => (s.includes(" ") ? `"${s}"` : s);
|
|
9
|
+
const cmdString = [quote(upstreamCommand), ...upstreamArgs.map(quote)].join(" ");
|
|
10
|
+
const upstream = spawn(cmdString, {
|
|
5
11
|
stdio: ["pipe", "pipe", "inherit"],
|
|
12
|
+
shell: true,
|
|
6
13
|
});
|
|
7
14
|
if (!upstream.stdin || !upstream.stdout) {
|
|
8
15
|
throw new Error("Failed to open stdio pipes to upstream MCP server");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAA4B,EAC5B,eAAuB,EACvB,eAAyB,EAAE;IAE3B,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
|
-
"
|
|
3
|
+
"turbopentest-scoped": {
|
|
4
4
|
"command": "npx",
|
|
5
5
|
"args": ["-y", "@integsec/agentic-pentest-proxy"],
|
|
6
6
|
"env": {
|
|
7
7
|
"SCOPE_MANIFEST_PATH": "/path/to/scope.json",
|
|
8
8
|
"MCP_TRANSPORT": "stdio",
|
|
9
9
|
"UPSTREAM_MCP_COMMAND": "npx",
|
|
10
|
-
"UPSTREAM_MCP_ARGS": "-y,@
|
|
10
|
+
"UPSTREAM_MCP_ARGS": "-y,@turbopentest/mcp-server",
|
|
11
11
|
"AUDIT_LOG_PATH": "./audit/"
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"engagement_id": "ENG-2026-TEST-001",
|
|
3
|
+
"client": "IntegSec Internal",
|
|
4
|
+
"operator": "security@integsec.com",
|
|
5
|
+
"authorized_targets": {
|
|
6
|
+
"ip_ranges": [],
|
|
7
|
+
"domains": [
|
|
8
|
+
"turbopentest.com",
|
|
9
|
+
"*.turbopentest.com",
|
|
10
|
+
"integsec.com",
|
|
11
|
+
"*.integsec.com",
|
|
12
|
+
"lfo.pw",
|
|
13
|
+
"*.lfo.pw",
|
|
14
|
+
"pentestprepper.com",
|
|
15
|
+
"*.pentestprepper.com"
|
|
16
|
+
],
|
|
17
|
+
"urls": [
|
|
18
|
+
"https://turbopentest.com",
|
|
19
|
+
"https://integsec.com",
|
|
20
|
+
"https://lfo.pw",
|
|
21
|
+
"https://pentestprepper.com"
|
|
22
|
+
],
|
|
23
|
+
"cloud_accounts": []
|
|
24
|
+
},
|
|
25
|
+
"excluded_targets": [],
|
|
26
|
+
"authorized_techniques": ["recon", "web_app", "api_testing", "ssl_tls"],
|
|
27
|
+
"excluded_techniques": ["dos", "destructive", "social_engineering"],
|
|
28
|
+
"engagement_window": {
|
|
29
|
+
"start": "2026-03-27T00:00:00Z",
|
|
30
|
+
"end": "2026-04-27T23:59:59Z"
|
|
31
|
+
}
|
|
32
|
+
}
|