@pensar/apex 2.1.3-canary.fde9cfe4 → 2.2.0-canary.1ae41959
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/build/agent-54gr8249.js +19 -0
- package/build/{agent-jnxzjsc4.js → agent-mbtfcpky.js} +7 -7
- package/build/{agent-zsx42kpx.js → agent-me43tz5h.js} +9 -9
- package/build/{apps-mz3tb1z1.js → apps-dp34j8n5.js} +16 -16
- package/build/{auth-9xfhgqx5.js → auth-j5azkmn5.js} +16 -16
- package/build/authentication-6vtagz1j.js +19 -0
- package/build/blackboxAgent-2aa6hx1y.js +19 -0
- package/build/{blackboxPentest-93te1j1w.js → blackboxPentest-hs8dj0a2.js} +14 -14
- package/build/{cli-102g5mnd.js → cli-0127pcvj.js} +2 -2
- package/build/{cli-jk8wkkhn.js → cli-221r604x.js} +1 -1
- package/build/{cli-hhh6f02f.js → cli-3b4thz7t.js} +59 -8
- package/build/{cli-3r0m9ee1.js → cli-4z24gndv.js} +54 -9
- package/build/{cli-7xrww2qg.js → cli-6sd5m21c.js} +55 -26
- package/build/{cli-bhj09mhe.js → cli-8178m9nm.js} +1 -1
- package/build/{cli-ycz3005y.js → cli-98mvjf5z.js} +3 -3
- package/build/{cli-s5c6p1ys.js → cli-b8sa1p9c.js} +1061 -122
- package/build/{cli-3spypd58.js → cli-k0phtdvs.js} +11 -5
- package/build/{cli-7dez82r2.js → cli-mp5rfvv0.js} +1 -1
- package/build/{cli-9gr8h1nv.js → cli-nqkhs46w.js} +5 -3
- package/build/{cli-pd7vxk53.js → cli-raphm7yk.js} +4 -2
- package/build/{cli-5wgfrsqt.js → cli-rzdd876e.js} +2 -2
- package/build/{cli-ed3v8kz3.js → cli-tcm18x3m.js} +1 -1
- package/build/{cli-gg8y5mn7.js → cli-vstb489r.js} +1 -1
- package/build/{cli-de5j66pm.js → cli-xvgsycgz.js} +4465 -73
- package/build/{cli-f4659etd.js → cli-yh8j4ryf.js} +2 -2
- package/build/cli.js +34 -34
- package/build/{config-3j16f78q.js → config-4bqv9s5g.js} +3 -3
- package/build/{doctor-nb18tg1f.js → doctor-nh8r74tn.js} +6 -6
- package/build/{fastStrike-sqmxckhc.js → fastStrike-f0vygej3.js} +9 -9
- package/build/{fixes-5ekkwhm6.js → fixes-c2gs2qw2.js} +16 -16
- package/build/{index-t6981tw0.js → index-1gnn6wsw.js} +3 -3
- package/build/{index-kh7ccsqg.js → index-ek7qjwfp.js} +8 -8
- package/build/{index-f980n8hh.js → index-qk4e8612.js} +9 -9
- package/build/{index-rnanzgpa.js → index-sa49fawb.js} +4 -4
- package/build/{index-6qy8cnfb.js → index-sancv4mm.js} +1084 -901
- package/build/{index-f58bzqtb.js → index-w1hwf046.js} +2 -2
- package/build/{index-bdxw5hk7.js → index-yt1gxptr.js} +22 -8
- package/build/{issues-1t2zwzkz.js → issues-jcbq66jw.js} +27 -16
- package/build/{logs-h0p1nqk3.js → logs-7t0ctq36.js} +16 -16
- package/build/{offesecAgent-43q0r18t.js → offesecAgent-mtn4d5fs.js} +8 -8
- package/build/pentest-wxv9dm62.js +29 -0
- package/build/{pentests-mw1w7w4w.js → pentests-wspa4bs1.js} +16 -16
- package/build/targetedPentest-mn6nh23q.js +56 -0
- package/build/{targets-e7v614mj.js → targets-kapv1ana.js} +16 -16
- package/build/threatModel-j8q9ybn7.js +27 -0
- package/build/{uninstall-htshkqsk.js → uninstall-7emzqpsj.js} +1 -1
- package/build/{upload-sg2sfms8.js → upload-fgp8jbd8.js} +6 -6
- package/build/{utils-2drgcp5f.js → utils-kgmwqjjv.js} +6 -6
- package/package.json +2 -2
- package/build/agent-nyxs29jb.js +0 -19
- package/build/authentication-fjzbzdhk.js +0 -19
- package/build/blackboxAgent-42h9bp3q.js +0 -19
- package/build/pentest-g6a7dm23.js +0 -29
- package/build/targetedPentest-31m8rbbm.js +0 -44
- package/build/threatModel-v4xahzfh.js +0 -27
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CodeAgent
|
|
3
|
+
} from "./cli-rzdd876e.js";
|
|
4
|
+
import"./cli-9fsre5pt.js";
|
|
5
|
+
import"./cli-tcm18x3m.js";
|
|
6
|
+
import"./cli-xvgsycgz.js";
|
|
7
|
+
import"./cli-221r604x.js";
|
|
8
|
+
import"./cli-c8131c4q.js";
|
|
9
|
+
import"./cli-4z24gndv.js";
|
|
10
|
+
import"./cli-8178m9nm.js";
|
|
11
|
+
import"./cli-3k1x5rn3.js";
|
|
12
|
+
import"./cli-gpnb45ck.js";
|
|
13
|
+
import"./cli-mp5rfvv0.js";
|
|
14
|
+
import"./cli-raphm7yk.js";
|
|
15
|
+
import"./cli-yh8j4ryf.js";
|
|
16
|
+
import"./cli-8rxa073f.js";
|
|
17
|
+
export {
|
|
18
|
+
CodeAgent
|
|
19
|
+
};
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OffensiveSecurityAgent
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-xvgsycgz.js";
|
|
4
4
|
import {
|
|
5
5
|
detectOSAndEnhancePrompt
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-221r604x.js";
|
|
7
7
|
import"./cli-c8131c4q.js";
|
|
8
8
|
import {
|
|
9
9
|
init_dist,
|
|
10
10
|
stepCountIs
|
|
11
|
-
} from "./cli-
|
|
12
|
-
import"./cli-
|
|
11
|
+
} from "./cli-4z24gndv.js";
|
|
12
|
+
import"./cli-8178m9nm.js";
|
|
13
13
|
import {
|
|
14
14
|
exports_external,
|
|
15
15
|
init_zod
|
|
16
16
|
} from "./cli-3k1x5rn3.js";
|
|
17
17
|
import"./cli-gpnb45ck.js";
|
|
18
|
-
import"./cli-
|
|
19
|
-
import"./cli-
|
|
20
|
-
import"./cli-
|
|
18
|
+
import"./cli-mp5rfvv0.js";
|
|
19
|
+
import"./cli-raphm7yk.js";
|
|
20
|
+
import"./cli-yh8j4ryf.js";
|
|
21
21
|
import"./cli-8rxa073f.js";
|
|
22
22
|
|
|
23
23
|
// src/core/agents/specialized/findingJudge/agent.ts
|
|
@@ -4,19 +4,19 @@ import {
|
|
|
4
4
|
buildPentestActiveTools,
|
|
5
5
|
buildPentestPrompt,
|
|
6
6
|
buildPentestSystemPrompt
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-3b4thz7t.js";
|
|
8
8
|
import"./cli-9fsre5pt.js";
|
|
9
|
-
import"./cli-
|
|
10
|
-
import"./cli-
|
|
11
|
-
import"./cli-
|
|
9
|
+
import"./cli-tcm18x3m.js";
|
|
10
|
+
import"./cli-xvgsycgz.js";
|
|
11
|
+
import"./cli-221r604x.js";
|
|
12
12
|
import"./cli-c8131c4q.js";
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
13
|
+
import"./cli-4z24gndv.js";
|
|
14
|
+
import"./cli-8178m9nm.js";
|
|
15
15
|
import"./cli-3k1x5rn3.js";
|
|
16
16
|
import"./cli-gpnb45ck.js";
|
|
17
|
-
import"./cli-
|
|
18
|
-
import"./cli-
|
|
19
|
-
import"./cli-
|
|
17
|
+
import"./cli-mp5rfvv0.js";
|
|
18
|
+
import"./cli-raphm7yk.js";
|
|
19
|
+
import"./cli-yh8j4ryf.js";
|
|
20
20
|
import"./cli-8rxa073f.js";
|
|
21
21
|
export {
|
|
22
22
|
buildPentestSystemPrompt,
|
|
@@ -12,27 +12,27 @@ import {
|
|
|
12
12
|
searchEndpoints,
|
|
13
13
|
updateApp,
|
|
14
14
|
updateEndpoint
|
|
15
|
-
} from "./cli-
|
|
16
|
-
import"./cli-
|
|
17
|
-
import"./cli-
|
|
18
|
-
import"./cli-
|
|
19
|
-
import"./cli-
|
|
20
|
-
import"./cli-
|
|
21
|
-
import"./cli-
|
|
22
|
-
import"./cli-
|
|
15
|
+
} from "./cli-6sd5m21c.js";
|
|
16
|
+
import"./cli-b8sa1p9c.js";
|
|
17
|
+
import"./cli-98mvjf5z.js";
|
|
18
|
+
import"./cli-0127pcvj.js";
|
|
19
|
+
import"./cli-3b4thz7t.js";
|
|
20
|
+
import"./cli-nqkhs46w.js";
|
|
21
|
+
import"./cli-rzdd876e.js";
|
|
22
|
+
import"./cli-k0phtdvs.js";
|
|
23
23
|
import"./cli-9fsre5pt.js";
|
|
24
|
-
import"./cli-
|
|
25
|
-
import"./cli-
|
|
26
|
-
import"./cli-
|
|
24
|
+
import"./cli-tcm18x3m.js";
|
|
25
|
+
import"./cli-xvgsycgz.js";
|
|
26
|
+
import"./cli-221r604x.js";
|
|
27
27
|
import"./cli-fw5r7pfj.js";
|
|
28
28
|
import"./cli-c8131c4q.js";
|
|
29
|
-
import"./cli-
|
|
30
|
-
import"./cli-
|
|
29
|
+
import"./cli-4z24gndv.js";
|
|
30
|
+
import"./cli-8178m9nm.js";
|
|
31
31
|
import"./cli-3k1x5rn3.js";
|
|
32
32
|
import"./cli-gpnb45ck.js";
|
|
33
|
-
import"./cli-
|
|
34
|
-
import"./cli-
|
|
35
|
-
import"./cli-
|
|
33
|
+
import"./cli-mp5rfvv0.js";
|
|
34
|
+
import"./cli-raphm7yk.js";
|
|
35
|
+
import"./cli-yh8j4ryf.js";
|
|
36
36
|
import"./cli-8rxa073f.js";
|
|
37
37
|
|
|
38
38
|
// src/cli/apps.ts
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import"./cli-
|
|
3
|
-
import"./cli-
|
|
4
|
-
import"./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
9
|
-
import"./cli-
|
|
2
|
+
import"./cli-6sd5m21c.js";
|
|
3
|
+
import"./cli-b8sa1p9c.js";
|
|
4
|
+
import"./cli-98mvjf5z.js";
|
|
5
|
+
import"./cli-0127pcvj.js";
|
|
6
|
+
import"./cli-3b4thz7t.js";
|
|
7
|
+
import"./cli-nqkhs46w.js";
|
|
8
|
+
import"./cli-rzdd876e.js";
|
|
9
|
+
import"./cli-k0phtdvs.js";
|
|
10
10
|
import"./cli-9fsre5pt.js";
|
|
11
|
-
import"./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
11
|
+
import"./cli-tcm18x3m.js";
|
|
12
|
+
import"./cli-xvgsycgz.js";
|
|
13
|
+
import"./cli-221r604x.js";
|
|
14
14
|
import"./cli-fw5r7pfj.js";
|
|
15
15
|
import"./cli-c8131c4q.js";
|
|
16
|
-
import"./cli-
|
|
16
|
+
import"./cli-4z24gndv.js";
|
|
17
17
|
import {
|
|
18
18
|
disconnect,
|
|
19
19
|
fetchWorkspaces,
|
|
@@ -26,15 +26,15 @@ import {
|
|
|
26
26
|
pollWorkOSToken,
|
|
27
27
|
selectWorkspace,
|
|
28
28
|
startDeviceFlow
|
|
29
|
-
} from "./cli-
|
|
29
|
+
} from "./cli-8178m9nm.js";
|
|
30
30
|
import"./cli-3k1x5rn3.js";
|
|
31
31
|
import"./cli-gpnb45ck.js";
|
|
32
32
|
import {
|
|
33
33
|
config,
|
|
34
34
|
init_config
|
|
35
|
-
} from "./cli-
|
|
36
|
-
import"./cli-
|
|
37
|
-
import"./cli-
|
|
35
|
+
} from "./cli-mp5rfvv0.js";
|
|
36
|
+
import"./cli-raphm7yk.js";
|
|
37
|
+
import"./cli-yh8j4ryf.js";
|
|
38
38
|
import {
|
|
39
39
|
__require
|
|
40
40
|
} from "./cli-8rxa073f.js";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
runAuthenticationAgent
|
|
3
|
+
} from "./cli-nqkhs46w.js";
|
|
4
|
+
import"./cli-9fsre5pt.js";
|
|
5
|
+
import"./cli-tcm18x3m.js";
|
|
6
|
+
import"./cli-xvgsycgz.js";
|
|
7
|
+
import"./cli-221r604x.js";
|
|
8
|
+
import"./cli-c8131c4q.js";
|
|
9
|
+
import"./cli-4z24gndv.js";
|
|
10
|
+
import"./cli-8178m9nm.js";
|
|
11
|
+
import"./cli-3k1x5rn3.js";
|
|
12
|
+
import"./cli-gpnb45ck.js";
|
|
13
|
+
import"./cli-mp5rfvv0.js";
|
|
14
|
+
import"./cli-raphm7yk.js";
|
|
15
|
+
import"./cli-yh8j4ryf.js";
|
|
16
|
+
import"./cli-8rxa073f.js";
|
|
17
|
+
export {
|
|
18
|
+
runAuthenticationAgent
|
|
19
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BlackboxAttackSurfaceAgent
|
|
3
|
+
} from "./cli-98mvjf5z.js";
|
|
4
|
+
import"./cli-9fsre5pt.js";
|
|
5
|
+
import"./cli-tcm18x3m.js";
|
|
6
|
+
import"./cli-xvgsycgz.js";
|
|
7
|
+
import"./cli-221r604x.js";
|
|
8
|
+
import"./cli-c8131c4q.js";
|
|
9
|
+
import"./cli-4z24gndv.js";
|
|
10
|
+
import"./cli-8178m9nm.js";
|
|
11
|
+
import"./cli-3k1x5rn3.js";
|
|
12
|
+
import"./cli-gpnb45ck.js";
|
|
13
|
+
import"./cli-mp5rfvv0.js";
|
|
14
|
+
import"./cli-raphm7yk.js";
|
|
15
|
+
import"./cli-yh8j4ryf.js";
|
|
16
|
+
import"./cli-8rxa073f.js";
|
|
17
|
+
export {
|
|
18
|
+
BlackboxAttackSurfaceAgent
|
|
19
|
+
};
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runPentestWorkflow
|
|
3
|
-
} from "./cli-
|
|
4
|
-
import"./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
3
|
+
} from "./cli-b8sa1p9c.js";
|
|
4
|
+
import"./cli-98mvjf5z.js";
|
|
5
|
+
import"./cli-0127pcvj.js";
|
|
6
|
+
import"./cli-3b4thz7t.js";
|
|
7
|
+
import"./cli-rzdd876e.js";
|
|
8
|
+
import"./cli-k0phtdvs.js";
|
|
9
9
|
import"./cli-9fsre5pt.js";
|
|
10
|
-
import"./cli-
|
|
11
|
-
import"./cli-
|
|
12
|
-
import"./cli-
|
|
10
|
+
import"./cli-tcm18x3m.js";
|
|
11
|
+
import"./cli-xvgsycgz.js";
|
|
12
|
+
import"./cli-221r604x.js";
|
|
13
13
|
import"./cli-fw5r7pfj.js";
|
|
14
14
|
import"./cli-c8131c4q.js";
|
|
15
|
-
import"./cli-
|
|
16
|
-
import"./cli-
|
|
15
|
+
import"./cli-4z24gndv.js";
|
|
16
|
+
import"./cli-8178m9nm.js";
|
|
17
17
|
import"./cli-3k1x5rn3.js";
|
|
18
18
|
import"./cli-gpnb45ck.js";
|
|
19
|
-
import"./cli-
|
|
20
|
-
import"./cli-
|
|
21
|
-
import"./cli-
|
|
19
|
+
import"./cli-mp5rfvv0.js";
|
|
20
|
+
import"./cli-raphm7yk.js";
|
|
21
|
+
import"./cli-yh8j4ryf.js";
|
|
22
22
|
import"./cli-8rxa073f.js";
|
|
23
23
|
|
|
24
24
|
// src/core/api/blackboxPentest.ts
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EvidenceFileEntrySchema
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-tcm18x3m.js";
|
|
4
4
|
import {
|
|
5
5
|
CweEntrySchema,
|
|
6
6
|
ValidatedCweEntrySchema,
|
|
7
7
|
hasCanonicalName
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-xvgsycgz.js";
|
|
9
9
|
import {
|
|
10
10
|
exports_external,
|
|
11
11
|
init_zod
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
createReportErrorTool,
|
|
6
6
|
isMemoryEnabled,
|
|
7
7
|
readPlan
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-xvgsycgz.js";
|
|
9
9
|
import {
|
|
10
10
|
createLogger,
|
|
11
11
|
hasToolCall,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
init_lazyLogger,
|
|
14
14
|
init_structured,
|
|
15
15
|
scopedLogger
|
|
16
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-4z24gndv.js";
|
|
17
17
|
import {
|
|
18
18
|
exports_external,
|
|
19
19
|
init_zod
|
|
@@ -46,6 +46,7 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
|
|
|
46
46
|
const {
|
|
47
47
|
model,
|
|
48
48
|
target,
|
|
49
|
+
grpc,
|
|
49
50
|
objectives,
|
|
50
51
|
session,
|
|
51
52
|
authConfig,
|
|
@@ -59,6 +60,7 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
|
|
|
59
60
|
messages,
|
|
60
61
|
context,
|
|
61
62
|
environmentVariables,
|
|
63
|
+
secretValues,
|
|
62
64
|
enableThinking,
|
|
63
65
|
thinkingEffort,
|
|
64
66
|
openAIReasoningEffort,
|
|
@@ -69,10 +71,11 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
|
|
|
69
71
|
let reportedError = null;
|
|
70
72
|
super({
|
|
71
73
|
system: buildPentestSystemPrompt(session, role),
|
|
72
|
-
prompt: buildPentestPrompt(target, objectives, session, findingsRegistry, context, environmentVariables ? Object.keys(environmentVariables) : undefined, subagentId, role, session.credentialManager?.formatForPrompt()),
|
|
74
|
+
prompt: buildPentestPrompt(target, objectives, session, findingsRegistry, context, environmentVariables ? Object.keys(environmentVariables) : undefined, subagentId, role, session.credentialManager?.formatForPrompt(), grpc),
|
|
73
75
|
model,
|
|
74
76
|
session,
|
|
75
77
|
target,
|
|
78
|
+
grpc,
|
|
76
79
|
authConfig,
|
|
77
80
|
onStepFinish,
|
|
78
81
|
onCacheMetrics,
|
|
@@ -84,6 +87,7 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
|
|
|
84
87
|
findingsRegistry,
|
|
85
88
|
messages,
|
|
86
89
|
environmentVariables,
|
|
90
|
+
secretValues,
|
|
87
91
|
enableThinking,
|
|
88
92
|
thinkingEffort,
|
|
89
93
|
openAIReasoningEffort,
|
|
@@ -196,6 +200,13 @@ var SECTION_AUTHENTICATION = `Authentication:
|
|
|
196
200
|
1. Prove a broken-authorization / privileged-role / IDOR boundary with a READ, or with a benign, reversible write to a low-impact field (e.g. your own display name). That a privileged call is accepted against an object you should not be able to reach is usually the finding — prefer this over disabling security controls, changing quotas/limits, or mutating another user.
|
|
197
201
|
2. If a reversible state-changing write is the only convincing proof, capture the current value, make the change, capture evidence (response/screenshot), then immediately restore the original value — and prefer your own account or a throwaway account you registered for this test over a shared or provided account. Do NOT rely on end-of-run cleanup alone; a crash mid-run can strip it before it runs.
|
|
198
202
|
3. NEVER complete an irreversible or security-weakening mutation against a shared or provided account, against any other user's account reached via broken authorization / IDOR, or against an org- or tenant-wide security setting (e.g. disabling MFA for an entire team): overwriting/resetting, disabling, or otherwise weakening an MFA/TOTP device or any second factor / security control, consuming a single-use reset token, changing the account email, rotating the password, or deleting the account. This hard ban is not limited to the identity you authenticated as — an IDOR or org-level authz flaw does not make it acceptable to actually disable or weaken another user's or the whole team's protections; prove the boundary is crossed without completing the weakening step. Irreversible changes cannot be undone (you never hold the original TOTP secret to restore), and locking an account out, disabling protections for other users, or weakening an org-wide control invalidates or endangers the credentials for every other agent — even a "reversible" toggle like disabling MFA leaves the account or team exposed if a crash strips the restore step. Demonstrate reachability/authorization instead, or perform the destructive step only against a throwaway account you registered for this test.`;
|
|
203
|
+
var SECTION_DESTRUCTIVE_ALLOWED = `Destructive Testing (AUTHORIZED):
|
|
204
|
+
- The client has authorized destructive testing for this engagement. You MAY perform DB deletes/drops/truncates, API write-deletes (HTTP DELETE), and other destructive operations when they are necessary to prove impact.
|
|
205
|
+
- Still prefer the least-invasive proof that convincingly demonstrates the flaw, and follow the blast-radius rungs in the Authentication section — authorization to be destructive is not license to be reckless with shared or provided accounts.`;
|
|
206
|
+
var SECTION_DESTRUCTIVE_BLOCKED = `Destructive Testing (OUT OF SCOPE):
|
|
207
|
+
- The client has NOT authorized destructive testing for this engagement. Destructive operations are BLOCKED at the tool boundary and will return an error, so do not attempt them — they only waste turns.
|
|
208
|
+
- Blocked operations include: destructive SQL (DROP / TRUNCATE / DELETE FROM / ALTER … DROP), destructive NoSQL/cache operations (collection/database drops, deleteMany, FLUSHALL/FLUSHDB), API write-deletes (HTTP DELETE, or writes overriding to DELETE / targeting a delete/destroy/purge route), and catastrophic host operations (rm -rf of a root/home, mkfs, dd to a device, fork bombs, power-state changes).
|
|
209
|
+
- Prove destructive-class flaws WITHOUT completing the destructive step: demonstrate that the authorization boundary is crossed (e.g. the DELETE endpoint accepts your request / returns a pre-flight that would delete) with a read or a benign, reversible action, and describe the impact rather than actually deleting or dropping data.`;
|
|
199
210
|
var SECTION_CREDENTIAL_DISCOVERY = `Credential & Secret Discovery:
|
|
200
211
|
- When you find exposed configuration in client-side code (JS bundles, HTML source, config files), distinguish between:
|
|
201
212
|
- SENSITIVE SECRETS (API keys granting backend access, database credentials, JWT signing keys, private keys, service account tokens) — document as a HIGH/CRITICAL finding
|
|
@@ -433,16 +444,25 @@ ${SECTION_SECURITY_HEADERS_CORS}
|
|
|
433
444
|
${SECTION_FINDING_QUALITY}
|
|
434
445
|
|
|
435
446
|
${SECTION_STATE_CHECKPOINTING}`;
|
|
447
|
+
function destructiveSection(allow) {
|
|
448
|
+
return allow ? SECTION_DESTRUCTIVE_ALLOWED : SECTION_DESTRUCTIVE_BLOCKED;
|
|
449
|
+
}
|
|
436
450
|
function buildPentestSystemPrompt(session, role = "orchestrator") {
|
|
451
|
+
const destructive = destructiveSection(session.config?.allowDestructiveActions);
|
|
437
452
|
if (role === "orchestrator") {
|
|
438
|
-
return PENTEST_SYSTEM_PROMPT_ORCHESTRATOR
|
|
453
|
+
return `${PENTEST_SYSTEM_PROMPT_ORCHESTRATOR}
|
|
454
|
+
|
|
455
|
+
${destructive}`;
|
|
439
456
|
}
|
|
440
457
|
const taskDriven = session.config?.taskDriven ?? false;
|
|
441
458
|
const exfilMode = session.config?.exfilMode ?? false;
|
|
442
459
|
const base = taskDriven ? exfilMode ? PENTEST_SYSTEM_PROMPT_TASK_DRIVEN_EXFIL : PENTEST_SYSTEM_PROMPT_TASK_DRIVEN : exfilMode ? PENTEST_SYSTEM_PROMPT_EXFIL : PENTEST_SYSTEM_PROMPT_BASE;
|
|
443
|
-
|
|
460
|
+
const withDestructive = `${base}
|
|
444
461
|
|
|
445
|
-
${
|
|
462
|
+
${destructive}`;
|
|
463
|
+
return session.config?.promptInjectionLibrarySource ? `${withDestructive}
|
|
464
|
+
|
|
465
|
+
${SECTION_PROMPT_INJECTION}` : withDestructive;
|
|
446
466
|
}
|
|
447
467
|
var SECTION_ORCHESTRATOR_DELEGATION = `Sub-Agent Delegation Rules:
|
|
448
468
|
- You DO NOT call document_vulnerability directly. Findings are documented by the workers you spawn.
|
|
@@ -489,7 +509,7 @@ ${SECTION_MATERIALITY_GUIDANCE}
|
|
|
489
509
|
${SECTION_BROWSER_INTERACTION}
|
|
490
510
|
|
|
491
511
|
${SECTION_STATE_CHECKPOINTING}`;
|
|
492
|
-
function buildPentestPrompt(target, objectives, session, findingsRegistry, context, envVarNames, subagentId, role = "orchestrator", credentialContext) {
|
|
512
|
+
function buildPentestPrompt(target, objectives, session, findingsRegistry, context, envVarNames, subagentId, role = "orchestrator", credentialContext, grpc) {
|
|
493
513
|
const sessionRootPath = session.rootPath;
|
|
494
514
|
const exfilMode = session.config?.exfilMode ?? false;
|
|
495
515
|
const taskDriven = role === "orchestrator" ? false : session.config?.taskDriven ?? false;
|
|
@@ -656,6 +676,37 @@ The following is context specific to the application under test. If it contains
|
|
|
656
676
|
|
|
657
677
|
${context}
|
|
658
678
|
` : "";
|
|
679
|
+
let grpcSection = "";
|
|
680
|
+
if (grpc) {
|
|
681
|
+
const lines = [
|
|
682
|
+
`
|
|
683
|
+
## gRPC Target`,
|
|
684
|
+
`This target is a gRPC method, not a plain HTTP endpoint. It rides HTTP/2 with binary protobuf and uses the path \`/package.Service/Method\`.`,
|
|
685
|
+
`- **Transport:** ${grpc.transport}`,
|
|
686
|
+
`- **Service:** ${grpc.serviceFqn}`,
|
|
687
|
+
`- **Method:** ${grpc.method}`
|
|
688
|
+
];
|
|
689
|
+
if (grpc.host)
|
|
690
|
+
lines.push(`- **Authority (host):** \`${grpc.host}\` — the method's gRPC authority; it differs from the app domain, so use this host directly as \`<authority>\` in the commands below.`);
|
|
691
|
+
if (grpc.streamingType)
|
|
692
|
+
lines.push(`- **Streaming:** ${grpc.streamingType}`);
|
|
693
|
+
if (grpc.schemaSource)
|
|
694
|
+
lines.push(`- **Schema source:** ${grpc.schemaSource}`);
|
|
695
|
+
if (grpc.reflectionAvailable !== undefined) {
|
|
696
|
+
lines.push(`- **Reflection available:** ${grpc.reflectionAvailable}`);
|
|
697
|
+
}
|
|
698
|
+
if (grpc.frontingGatewayOperation) {
|
|
699
|
+
lines.push(`- **Fronting gateway:** ${grpc.frontingGatewayOperation.gatewayType} operation \`${grpc.frontingGatewayOperation.operation}\` — if the direct gRPC authority is unreachable, test through this gateway operation instead.`);
|
|
700
|
+
} else {
|
|
701
|
+
lines.push(`- **Fronting gateway:** none — this method is reachable directly but is NOT exposed through the REST/GraphQL gateway. Treat it as a PRIME missing-authorization target: gateway-fronted methods usually get their authz enforced at the gateway, so a shadow method that bypasses the gateway may bypass that authz entirely.`);
|
|
702
|
+
}
|
|
703
|
+
lines.push(`
|
|
704
|
+
### gRPC Test Battery (OWASP gRPC Security Cheat Sheet)`, `Use \`grpcurl\`, \`buf\`, and \`protoc\` via \`execute_command\`. Work through this battery for the method above:`, `1. **Schema recovery.** Try reflection first: \`grpcurl -plaintext <authority> list\` / \`describe <service>\`. If reflection is disabled, recover the schema from a \`.proto\` file or protoset (e.g. via \`buf\` or \`protoc\`) before giving up on schema-dependent tests.`, `2. **Transport/content-type fallback.** Native gRPC, grpc-web, and Connect use different content-types over the same or adjacent paths. If one transport looks dead, retry as grpc-web (\`application/grpc-web\`) and Connect (\`application/connect+...\` or JSON) before declaring the endpoint unreachable.`, `3. **Status-code oracle.** Treat gRPC status codes as signal, not noise: 16 UNAUTHENTICATED, 7 PERMISSION_DENIED, 3 INVALID_ARGUMENT, 12 UNIMPLEMENTED. A flip from UNAUTHENTICATED to a data response after adding/removing metadata is a finding.`, `4. **Missing auth per method.** Call the method with valid credentials/metadata, then again with none and with garbage metadata. A successful response without auth is a critical finding.`, `5. **BOLA / IDOR.** Manipulate ID fields inside the request message (account/user/resource IDs) to access another principal's data.`, `6. **Metadata trust.** Test whether the service trusts client-supplied metadata it shouldn't (e.g. \`x-user-id\`, forwarded auth headers) instead of deriving identity server-side.`, `7. **Non-canonical \`:path\` authz bypass.** If authz is enforced by a proxy matching on \`:path\`, try case variants, trailing slashes, or alternate casing of the service/method path to see if the gRPC path parsing bypasses it.`, `8. **Protobuf/message fuzzing.** Send malformed, truncated, and type-mismatched field values; unknown field numbers; and deeply nested/repeated fields to probe deserialization handling.`, `9. **Streaming IDOR.** For client/server/bidi streaming methods, probe whether a stream opened for one principal's resource can be redirected mid-stream to another's.`, `10. **Decompression / size DoS.** Send oversized or highly compressible payloads to check for missing message-size limits or decompression bombs.`, `11. **Transport security.** Confirm whether the channel is plaintext or TLS/mTLS-enforced; plaintext gRPC in production is a finding on its own.`, `
|
|
705
|
+
If the method is unreachable from your network position (common for internal/in-cluster services), a finding is still valid via whitebox reasoning — schema plus routing/config evidence — even without an executed POC.`);
|
|
706
|
+
grpcSection = `${lines.join(`
|
|
707
|
+
`)}
|
|
708
|
+
`;
|
|
709
|
+
}
|
|
659
710
|
const envVarSection = envVarNames && envVarNames.length > 0 ? `
|
|
660
711
|
## Environment Variables
|
|
661
712
|
The following environment variables are pre-loaded in your shell and available in every \`execute_command\` call. Use them in scripts or commands (e.g. \`$${envVarNames[0]}\`) — do NOT hardcode their values.
|
|
@@ -666,7 +717,7 @@ ${envVarNames.map((n) => `- \`${n}\``).join(`
|
|
|
666
717
|
|
|
667
718
|
## Target
|
|
668
719
|
- **URL:** ${target}
|
|
669
|
-
${authSection}${credentialSection}
|
|
720
|
+
${grpcSection}${authSection}${credentialSection}
|
|
670
721
|
${knownFindingsSection}
|
|
671
722
|
${knowledgeBaseSection}
|
|
672
723
|
${planSection}${contextSection}${envVarSection}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
init_auth,
|
|
5
5
|
init_constants,
|
|
6
6
|
signGatewayRequest
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-8178m9nm.js";
|
|
8
8
|
import {
|
|
9
9
|
AISDKError,
|
|
10
10
|
APICallError,
|
|
@@ -87,11 +87,11 @@ import {
|
|
|
87
87
|
import {
|
|
88
88
|
config,
|
|
89
89
|
init_config
|
|
90
|
-
} from "./cli-
|
|
90
|
+
} from "./cli-mp5rfvv0.js";
|
|
91
91
|
import {
|
|
92
92
|
getCurrentVersion,
|
|
93
93
|
init_installation
|
|
94
|
-
} from "./cli-
|
|
94
|
+
} from "./cli-yh8j4ryf.js";
|
|
95
95
|
import {
|
|
96
96
|
__callDispose,
|
|
97
97
|
__commonJS,
|
|
@@ -8583,6 +8583,24 @@ var init_mantle2 = __esm(() => {
|
|
|
8583
8583
|
var OPENAI_MODELS;
|
|
8584
8584
|
var init_openai = __esm(() => {
|
|
8585
8585
|
OPENAI_MODELS = [
|
|
8586
|
+
{
|
|
8587
|
+
id: "gpt-5.6-sol",
|
|
8588
|
+
name: "GPT-5.6-sol",
|
|
8589
|
+
provider: "openai",
|
|
8590
|
+
contextLength: 1050000
|
|
8591
|
+
},
|
|
8592
|
+
{
|
|
8593
|
+
id: "gpt-5.6-terra",
|
|
8594
|
+
name: "GPT-5.6-terra",
|
|
8595
|
+
provider: "openai",
|
|
8596
|
+
contextLength: 1050000
|
|
8597
|
+
},
|
|
8598
|
+
{
|
|
8599
|
+
id: "gpt-5.6-luna",
|
|
8600
|
+
name: "GPT-5.6-luna",
|
|
8601
|
+
provider: "openai",
|
|
8602
|
+
contextLength: 1050000
|
|
8603
|
+
},
|
|
8586
8604
|
{
|
|
8587
8605
|
id: "gpt-5.5",
|
|
8588
8606
|
name: "GPT-5.5",
|
|
@@ -9034,6 +9052,12 @@ var init_openrouter = __esm(() => {
|
|
|
9034
9052
|
provider: "openrouter",
|
|
9035
9053
|
contextLength: 262144
|
|
9036
9054
|
},
|
|
9055
|
+
{
|
|
9056
|
+
id: "moonshotai/kimi-k3",
|
|
9057
|
+
name: "Kimi K3",
|
|
9058
|
+
provider: "openrouter",
|
|
9059
|
+
contextLength: 1e6
|
|
9060
|
+
},
|
|
9037
9061
|
{
|
|
9038
9062
|
id: "moonshot/kimi-k2-turbo",
|
|
9039
9063
|
name: "Kimi K2 Turbo",
|
|
@@ -45853,6 +45877,9 @@ function modelSupportsOpenAIReasoning(modelId) {
|
|
|
45853
45877
|
function getOpenAIReasoningEfforts(modelId) {
|
|
45854
45878
|
if (!modelSupportsOpenAIReasoning(modelId))
|
|
45855
45879
|
return [];
|
|
45880
|
+
if (/^gpt-5\.6(?:\b|-)/.test(modelId)) {
|
|
45881
|
+
return ["low", "medium", "high", "xhigh", "max", "ultra"];
|
|
45882
|
+
}
|
|
45856
45883
|
if (/^gpt-5\.5(?:\b|-)/.test(modelId)) {
|
|
45857
45884
|
return ["none", "low", "medium", "high", "xhigh"];
|
|
45858
45885
|
}
|
|
@@ -45862,8 +45889,9 @@ function normalizeOpenAIReasoningEffort(modelId, effort) {
|
|
|
45862
45889
|
const efforts = getOpenAIReasoningEfforts(modelId);
|
|
45863
45890
|
if (efforts.length === 0)
|
|
45864
45891
|
return;
|
|
45865
|
-
if (effort && efforts.includes(effort))
|
|
45866
|
-
return effort;
|
|
45892
|
+
if (effort && efforts.includes(effort)) {
|
|
45893
|
+
return effort === "ultra" ? "max" : effort;
|
|
45894
|
+
}
|
|
45867
45895
|
return DEFAULT_OPENAI_REASONING_EFFORT;
|
|
45868
45896
|
}
|
|
45869
45897
|
function buildReasoningProviderOptions(model, opts) {
|
|
@@ -46243,7 +46271,10 @@ var init_ai = __esm(() => {
|
|
|
46243
46271
|
"gpt-5.4-pro",
|
|
46244
46272
|
"gpt-5.4-pro-2026-03-05",
|
|
46245
46273
|
"gpt-5.5",
|
|
46246
|
-
"gpt-5.5-2026-04-23"
|
|
46274
|
+
"gpt-5.5-2026-04-23",
|
|
46275
|
+
"gpt-5.6-sol",
|
|
46276
|
+
"gpt-5.6-terra",
|
|
46277
|
+
"gpt-5.6-luna"
|
|
46247
46278
|
]);
|
|
46248
46279
|
stepContextStore = new AsyncLocalStorage;
|
|
46249
46280
|
SEQUENTIAL_TOOL_CALL_INSTRUCTION = "CRITICAL TOOL-CALLING RULE: Emit EXACTLY ONE tool call per response. " + "Never emit more than one tool call in a single turn. After each tool call, " + "wait for its result before making the next one. Emitting multiple tool " + "calls in one turn corrupts their arguments.";
|
|
@@ -47096,7 +47127,7 @@ async function create2(input) {
|
|
|
47096
47127
|
if (normalizedConfig?.headers !== undefined) {
|
|
47097
47128
|
snapshotHeaders = { ...normalizedConfig.headers };
|
|
47098
47129
|
} else {
|
|
47099
|
-
const { config: appConfig } = await import("./index-
|
|
47130
|
+
const { config: appConfig } = await import("./index-1gnn6wsw.js");
|
|
47100
47131
|
const cfg = await appConfig.get();
|
|
47101
47132
|
snapshotHeaders = cfg.defaultHeaders ? { ...cfg.defaultHeaders } : { ...DEFAULT_HEADER_RECORD };
|
|
47102
47133
|
}
|
|
@@ -47272,7 +47303,8 @@ async function updateOperatorSettings(sessionId, settings) {
|
|
|
47272
47303
|
session.config.operatorSettings = {
|
|
47273
47304
|
initialMode: "manual",
|
|
47274
47305
|
requireApproval: true,
|
|
47275
|
-
enableSuggestions: true
|
|
47306
|
+
enableSuggestions: true,
|
|
47307
|
+
strikeMode: false
|
|
47276
47308
|
};
|
|
47277
47309
|
}
|
|
47278
47310
|
if (settings.initialMode !== undefined) {
|
|
@@ -47284,6 +47316,9 @@ async function updateOperatorSettings(sessionId, settings) {
|
|
|
47284
47316
|
if (settings.enableSuggestions !== undefined) {
|
|
47285
47317
|
session.config.operatorSettings.enableSuggestions = settings.enableSuggestions;
|
|
47286
47318
|
}
|
|
47319
|
+
if (settings.strikeMode !== undefined) {
|
|
47320
|
+
session.config.operatorSettings.strikeMode = settings.strikeMode;
|
|
47321
|
+
}
|
|
47287
47322
|
});
|
|
47288
47323
|
}
|
|
47289
47324
|
async function updateSessionHeaders(sessionId, headers) {
|
|
@@ -47356,7 +47391,8 @@ var init_session = __esm(() => {
|
|
|
47356
47391
|
OperatorSettingsObject = zod_default.object({
|
|
47357
47392
|
initialMode: zod_default.enum(["plan", "manual", "auto"]).default("manual"),
|
|
47358
47393
|
requireApproval: zod_default.boolean().default(true),
|
|
47359
|
-
enableSuggestions: zod_default.boolean().default(true)
|
|
47394
|
+
enableSuggestions: zod_default.boolean().default(true),
|
|
47395
|
+
strikeMode: zod_default.boolean().optional()
|
|
47360
47396
|
});
|
|
47361
47397
|
EmailInboxConfigObject = zod_default.discriminatedUnion("provider", [
|
|
47362
47398
|
zod_default.object({
|
|
@@ -47391,6 +47427,14 @@ var init_session = __esm(() => {
|
|
|
47391
47427
|
username: zod_default.string(),
|
|
47392
47428
|
password: zod_default.string(),
|
|
47393
47429
|
tls: zod_default.boolean()
|
|
47430
|
+
}),
|
|
47431
|
+
zod_default.object({
|
|
47432
|
+
provider: zod_default.literal("http"),
|
|
47433
|
+
id: zod_default.string(),
|
|
47434
|
+
name: zod_default.string(),
|
|
47435
|
+
emailAddress: zod_default.string(),
|
|
47436
|
+
endpoint: zod_default.string(),
|
|
47437
|
+
token: zod_default.string()
|
|
47394
47438
|
})
|
|
47395
47439
|
]);
|
|
47396
47440
|
EmailIntegrationConfigObject = zod_default.object({
|
|
@@ -47414,6 +47458,7 @@ var init_session = __esm(() => {
|
|
|
47414
47458
|
authCredentials: zod_default.union([AuthCredentialsObject, zod_default.array(AuthCredentialsObject)]).optional(),
|
|
47415
47459
|
authenticationInstructions: zod_default.string().optional(),
|
|
47416
47460
|
requestsPerSecond: zod_default.number().optional(),
|
|
47461
|
+
allowDestructiveActions: zod_default.boolean().optional(),
|
|
47417
47462
|
operatorSettings: OperatorSettingsObject.optional(),
|
|
47418
47463
|
toolsetState: ToolsetStateSchema.optional(),
|
|
47419
47464
|
enumerateSubdomains: zod_default.boolean().optional(),
|