@clawdstrike/openclaw 0.1.3 → 0.2.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 +11 -0
- package/dist/audit/adapter-logger.d.ts +3 -3
- package/dist/audit/adapter-logger.d.ts.map +1 -1
- package/dist/audit/adapter-logger.js +3 -3
- package/dist/audit/adapter-logger.js.map +1 -1
- package/dist/audit/store.d.ts +2 -2
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +13 -13
- package/dist/audit/store.js.map +1 -1
- package/dist/classification.d.ts +2 -2
- package/dist/classification.d.ts.map +1 -1
- package/dist/classification.js +96 -28
- package/dist/classification.js.map +1 -1
- package/dist/cli/bin.js +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +29 -29
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/policy.d.ts.map +1 -1
- package/dist/cli/commands/policy.js +33 -33
- package/dist/cli/commands/policy.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +45 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -9
- package/dist/config.js.map +1 -1
- package/dist/e2e/openclaw-e2e.js +58 -49
- package/dist/e2e/openclaw-e2e.js.map +1 -1
- package/dist/engine-holder.d.ts +2 -2
- package/dist/engine-holder.js +1 -1
- package/dist/guards/egress.d.ts +2 -2
- package/dist/guards/egress.d.ts.map +1 -1
- package/dist/guards/egress.js +71 -73
- package/dist/guards/egress.js.map +1 -1
- package/dist/guards/forbidden-path.d.ts +2 -2
- package/dist/guards/forbidden-path.d.ts.map +1 -1
- package/dist/guards/forbidden-path.js +41 -43
- package/dist/guards/forbidden-path.js.map +1 -1
- package/dist/guards/index.d.ts +6 -6
- package/dist/guards/index.d.ts.map +1 -1
- package/dist/guards/index.js +5 -5
- package/dist/guards/index.js.map +1 -1
- package/dist/guards/patch-integrity.d.ts +2 -2
- package/dist/guards/patch-integrity.d.ts.map +1 -1
- package/dist/guards/patch-integrity.js +69 -70
- package/dist/guards/patch-integrity.js.map +1 -1
- package/dist/guards/secret-leak.d.ts +2 -2
- package/dist/guards/secret-leak.d.ts.map +1 -1
- package/dist/guards/secret-leak.js +81 -82
- package/dist/guards/secret-leak.js.map +1 -1
- package/dist/guards/types.d.ts +2 -2
- package/dist/guards/types.d.ts.map +1 -1
- package/dist/guards/types.js +4 -4
- package/dist/guards/types.js.map +1 -1
- package/dist/hooks/agent-bootstrap/handler.d.ts +1 -1
- package/dist/hooks/agent-bootstrap/handler.d.ts.map +1 -1
- package/dist/hooks/agent-bootstrap/handler.js +5 -5
- package/dist/hooks/agent-bootstrap/handler.js.map +1 -1
- package/dist/hooks/approval-state.d.ts +1 -1
- package/dist/hooks/approval-state.d.ts.map +1 -1
- package/dist/hooks/approval-state.js +15 -15
- package/dist/hooks/approval-state.js.map +1 -1
- package/dist/hooks/approval-utils.d.ts +1 -1
- package/dist/hooks/approval-utils.d.ts.map +1 -1
- package/dist/hooks/approval-utils.js +41 -20
- package/dist/hooks/approval-utils.js.map +1 -1
- package/dist/hooks/audit-logger/handler.d.ts +1 -1
- package/dist/hooks/audit-logger/handler.d.ts.map +1 -1
- package/dist/hooks/audit-logger/handler.js +9 -9
- package/dist/hooks/audit-logger/handler.js.map +1 -1
- package/dist/hooks/cua-bridge/handler.d.ts +4 -4
- package/dist/hooks/cua-bridge/handler.d.ts.map +1 -1
- package/dist/hooks/cua-bridge/handler.js +85 -70
- package/dist/hooks/cua-bridge/handler.js.map +1 -1
- package/dist/hooks/tool-guard/handler.d.ts +1 -1
- package/dist/hooks/tool-guard/handler.d.ts.map +1 -1
- package/dist/hooks/tool-guard/handler.js +112 -101
- package/dist/hooks/tool-guard/handler.js.map +1 -1
- package/dist/hooks/tool-preflight/handler.d.ts +2 -2
- package/dist/hooks/tool-preflight/handler.d.ts.map +1 -1
- package/dist/hooks/tool-preflight/handler.js +115 -91
- package/dist/hooks/tool-preflight/handler.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -18
- package/dist/index.js.map +1 -1
- package/dist/openclaw-adapter.d.ts +2 -2
- package/dist/openclaw-adapter.d.ts.map +1 -1
- package/dist/openclaw-adapter.js +4 -4
- package/dist/openclaw-adapter.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +39 -40
- package/dist/plugin.js.map +1 -1
- package/dist/policy/engine.d.ts +1 -1
- package/dist/policy/engine.d.ts.map +1 -1
- package/dist/policy/engine.js +237 -221
- package/dist/policy/engine.js.map +1 -1
- package/dist/policy/index.d.ts +3 -3
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +3 -3
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/loader.d.ts +1 -1
- package/dist/policy/loader.d.ts.map +1 -1
- package/dist/policy/loader.js +76 -63
- package/dist/policy/loader.js.map +1 -1
- package/dist/policy/validator.d.ts +1 -1
- package/dist/policy/validator.d.ts.map +1 -1
- package/dist/policy/validator.js +158 -151
- package/dist/policy/validator.js.map +1 -1
- package/dist/receipt/signer.d.ts +2 -2
- package/dist/receipt/signer.d.ts.map +1 -1
- package/dist/receipt/signer.js +12 -12
- package/dist/receipt/signer.js.map +1 -1
- package/dist/receipt/types.d.ts +2 -2
- package/dist/receipt/types.d.ts.map +1 -1
- package/dist/sanitizer/output-sanitizer.d.ts +1 -1
- package/dist/sanitizer/output-sanitizer.d.ts.map +1 -1
- package/dist/sanitizer/output-sanitizer.js +8 -8
- package/dist/sanitizer/output-sanitizer.js.map +1 -1
- package/dist/security-prompt.d.ts +1 -1
- package/dist/security-prompt.d.ts.map +1 -1
- package/dist/security-prompt.js +16 -12
- package/dist/security-prompt.js.map +1 -1
- package/dist/tools/policy-check.d.ts +3 -3
- package/dist/tools/policy-check.d.ts.map +1 -1
- package/dist/tools/policy-check.js +60 -52
- package/dist/tools/policy-check.js.map +1 -1
- package/dist/translator/openclaw-translator.d.ts +1 -1
- package/dist/translator/openclaw-translator.d.ts.map +1 -1
- package/dist/translator/openclaw-translator.js +100 -80
- package/dist/translator/openclaw-translator.js.map +1 -1
- package/dist/types.d.ts +11 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -4
|
@@ -3,133 +3,133 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Detects dangerous code patterns in patches and file writes.
|
|
5
5
|
*/
|
|
6
|
-
import { BaseGuard } from
|
|
6
|
+
import { BaseGuard } from "./types.js";
|
|
7
7
|
/**
|
|
8
8
|
* Built-in dangerous pattern detection
|
|
9
9
|
*/
|
|
10
10
|
const DANGEROUS_PATTERNS = [
|
|
11
11
|
// Shell injection patterns
|
|
12
12
|
{
|
|
13
|
-
name:
|
|
13
|
+
name: "curl_pipe_bash",
|
|
14
14
|
pattern: /curl\s+[^|]*\|\s*(bash|sh|zsh)/gi,
|
|
15
|
-
severity:
|
|
16
|
-
description:
|
|
15
|
+
severity: "critical",
|
|
16
|
+
description: "Curl piped to shell execution",
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
name:
|
|
19
|
+
name: "wget_pipe_bash",
|
|
20
20
|
pattern: /wget\s+[^|]*\|\s*(bash|sh|zsh)/gi,
|
|
21
|
-
severity:
|
|
22
|
-
description:
|
|
21
|
+
severity: "critical",
|
|
22
|
+
description: "Wget piped to shell execution",
|
|
23
23
|
},
|
|
24
24
|
// Dangerous command patterns
|
|
25
25
|
{
|
|
26
|
-
name:
|
|
26
|
+
name: "rm_rf_root",
|
|
27
27
|
pattern: /rm\s+(-rf?|--recursive)\s+[/\\]/gi,
|
|
28
|
-
severity:
|
|
29
|
-
description:
|
|
28
|
+
severity: "critical",
|
|
29
|
+
description: "Recursive removal from root",
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
|
-
name:
|
|
32
|
+
name: "fork_bomb",
|
|
33
33
|
pattern: /:\(\)\{\s*:\|:&\s*\};:/g,
|
|
34
|
-
severity:
|
|
35
|
-
description:
|
|
34
|
+
severity: "critical",
|
|
35
|
+
description: "Fork bomb",
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
|
-
name:
|
|
38
|
+
name: "dd_disk_wipe",
|
|
39
39
|
pattern: /dd\s+if=\/dev\/(zero|random|urandom)\s+of=\/dev\//gi,
|
|
40
|
-
severity:
|
|
41
|
-
description:
|
|
40
|
+
severity: "critical",
|
|
41
|
+
description: "DD disk wipe command",
|
|
42
42
|
},
|
|
43
43
|
// Dangerous JavaScript patterns
|
|
44
44
|
{
|
|
45
|
-
name:
|
|
45
|
+
name: "eval_usage",
|
|
46
46
|
pattern: /\beval\s*\([^)]*\)/gi,
|
|
47
|
-
severity:
|
|
48
|
-
description:
|
|
47
|
+
severity: "high",
|
|
48
|
+
description: "Eval function usage",
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
|
-
name:
|
|
51
|
+
name: "new_function",
|
|
52
52
|
pattern: /new\s+Function\s*\([^)]*\)/gi,
|
|
53
|
-
severity:
|
|
54
|
-
description:
|
|
53
|
+
severity: "high",
|
|
54
|
+
description: "new Function constructor",
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
|
-
name:
|
|
57
|
+
name: "document_write",
|
|
58
58
|
pattern: /document\.write\s*\([^)]*\)/gi,
|
|
59
|
-
severity:
|
|
60
|
-
description:
|
|
59
|
+
severity: "medium",
|
|
60
|
+
description: "document.write usage",
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
|
-
name:
|
|
63
|
+
name: "inner_html_assignment",
|
|
64
64
|
pattern: /\.innerHTML\s*=/gi,
|
|
65
|
-
severity:
|
|
66
|
-
description:
|
|
65
|
+
severity: "medium",
|
|
66
|
+
description: "innerHTML assignment (XSS risk)",
|
|
67
67
|
},
|
|
68
68
|
// Dangerous Python patterns
|
|
69
69
|
{
|
|
70
|
-
name:
|
|
70
|
+
name: "python_exec",
|
|
71
71
|
pattern: /\bexec\s*\([^)]*\)/gi,
|
|
72
|
-
severity:
|
|
73
|
-
description:
|
|
72
|
+
severity: "high",
|
|
73
|
+
description: "Python exec usage",
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
|
-
name:
|
|
76
|
+
name: "python_compile",
|
|
77
77
|
pattern: /\bcompile\s*\([^)]*,\s*[^)]*,\s*['"]exec['"]\)/gi,
|
|
78
|
-
severity:
|
|
79
|
-
description:
|
|
78
|
+
severity: "high",
|
|
79
|
+
description: "Python compile with exec mode",
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
|
-
name:
|
|
82
|
+
name: "python_subprocess_shell",
|
|
83
83
|
pattern: /subprocess\.(call|run|Popen)\s*\([^)]*shell\s*=\s*True/gi,
|
|
84
|
-
severity:
|
|
85
|
-
description:
|
|
84
|
+
severity: "high",
|
|
85
|
+
description: "Subprocess with shell=True",
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
|
-
name:
|
|
88
|
+
name: "python_os_system",
|
|
89
89
|
pattern: /os\.system\s*\([^)]*\)/gi,
|
|
90
|
-
severity:
|
|
91
|
-
description:
|
|
90
|
+
severity: "high",
|
|
91
|
+
description: "os.system usage",
|
|
92
92
|
},
|
|
93
93
|
// Environment manipulation
|
|
94
94
|
{
|
|
95
|
-
name:
|
|
95
|
+
name: "env_manipulation",
|
|
96
96
|
pattern: /process\.env\.[A-Z_]+\s*=\s*['"][^'"]+['"]/gi,
|
|
97
|
-
severity:
|
|
98
|
-
description:
|
|
97
|
+
severity: "medium",
|
|
98
|
+
description: "Environment variable manipulation",
|
|
99
99
|
},
|
|
100
100
|
// Credential patterns in code
|
|
101
101
|
{
|
|
102
|
-
name:
|
|
102
|
+
name: "hardcoded_password",
|
|
103
103
|
pattern: /(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]{4,}['"]/gi,
|
|
104
|
-
severity:
|
|
105
|
-
description:
|
|
104
|
+
severity: "high",
|
|
105
|
+
description: "Hardcoded password",
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
|
-
name:
|
|
108
|
+
name: "hardcoded_secret",
|
|
109
109
|
pattern: /(?:secret|api[_-]?key|auth[_-]?token)\s*[:=]\s*['"][^'"]{8,}['"]/gi,
|
|
110
|
-
severity:
|
|
111
|
-
description:
|
|
110
|
+
severity: "high",
|
|
111
|
+
description: "Hardcoded secret/API key",
|
|
112
112
|
},
|
|
113
113
|
// File permission changes
|
|
114
114
|
{
|
|
115
|
-
name:
|
|
115
|
+
name: "chmod_777",
|
|
116
116
|
pattern: /chmod\s+(?:777|a\+rwx)/gi,
|
|
117
|
-
severity:
|
|
118
|
-
description:
|
|
117
|
+
severity: "medium",
|
|
118
|
+
description: "Overly permissive chmod",
|
|
119
119
|
},
|
|
120
120
|
// Network exfiltration patterns
|
|
121
121
|
{
|
|
122
|
-
name:
|
|
122
|
+
name: "base64_encode_pipe",
|
|
123
123
|
pattern: /base64\s*[^|]*\|\s*(?:curl|wget|nc)/gi,
|
|
124
|
-
severity:
|
|
125
|
-
description:
|
|
124
|
+
severity: "high",
|
|
125
|
+
description: "Base64 encoded data exfiltration",
|
|
126
126
|
},
|
|
127
127
|
// SQL injection patterns
|
|
128
128
|
{
|
|
129
|
-
name:
|
|
129
|
+
name: "sql_concat",
|
|
130
130
|
pattern: /(?:SELECT|INSERT|UPDATE|DELETE|DROP)\s+[^;]*\+\s*[a-zA-Z_]+/gi,
|
|
131
|
-
severity:
|
|
132
|
-
description:
|
|
131
|
+
severity: "medium",
|
|
132
|
+
description: "Potential SQL injection (string concatenation)",
|
|
133
133
|
},
|
|
134
134
|
];
|
|
135
135
|
/**
|
|
@@ -142,10 +142,10 @@ export class PatchIntegrityGuard extends BaseGuard {
|
|
|
142
142
|
this.patterns = [...DANGEROUS_PATTERNS, ...additionalPatterns];
|
|
143
143
|
}
|
|
144
144
|
name() {
|
|
145
|
-
return
|
|
145
|
+
return "patch_integrity";
|
|
146
146
|
}
|
|
147
147
|
handles() {
|
|
148
|
-
return [
|
|
148
|
+
return ["patch_apply", "file_write", "command_exec"];
|
|
149
149
|
}
|
|
150
150
|
async check(event, policy) {
|
|
151
151
|
return this.checkSync(event, policy);
|
|
@@ -154,18 +154,18 @@ export class PatchIntegrityGuard extends BaseGuard {
|
|
|
154
154
|
const data = event.data;
|
|
155
155
|
let contentToCheck;
|
|
156
156
|
// Get content to check based on event type
|
|
157
|
-
if (data.type ===
|
|
157
|
+
if (data.type === "patch") {
|
|
158
158
|
contentToCheck = data.patchContent;
|
|
159
159
|
}
|
|
160
|
-
else if (data.type ===
|
|
161
|
-
contentToCheck = `${data.command} ${data.args.join(
|
|
160
|
+
else if (data.type === "command") {
|
|
161
|
+
contentToCheck = `${data.command} ${data.args.join(" ")}`;
|
|
162
162
|
// Also check against denied patterns from policy
|
|
163
163
|
const deniedPatterns = policy.execution?.denied_patterns ?? [];
|
|
164
164
|
for (const pattern of deniedPatterns) {
|
|
165
165
|
try {
|
|
166
|
-
const regex = new RegExp(pattern,
|
|
166
|
+
const regex = new RegExp(pattern, "gi");
|
|
167
167
|
if (regex.test(contentToCheck)) {
|
|
168
|
-
return this.deny(`Command matches denied pattern: ${pattern}`,
|
|
168
|
+
return this.deny(`Command matches denied pattern: ${pattern}`, "high");
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
catch {
|
|
@@ -180,7 +180,7 @@ export class PatchIntegrityGuard extends BaseGuard {
|
|
|
180
180
|
const detected = this.detectDangerousPatterns(contentToCheck);
|
|
181
181
|
if (detected.length > 0) {
|
|
182
182
|
const highestSeverity = this.getHighestSeverity(detected);
|
|
183
|
-
const patternNames = detected.map((p) => p.name).join(
|
|
183
|
+
const patternNames = detected.map((p) => p.name).join(", ");
|
|
184
184
|
return this.deny(`Detected dangerous patterns: ${patternNames}`, highestSeverity);
|
|
185
185
|
}
|
|
186
186
|
return this.allow();
|
|
@@ -205,11 +205,10 @@ export class PatchIntegrityGuard extends BaseGuard {
|
|
|
205
205
|
* Get the highest severity from detected patterns
|
|
206
206
|
*/
|
|
207
207
|
getHighestSeverity(patterns) {
|
|
208
|
-
const severityOrder = [
|
|
209
|
-
let highest =
|
|
208
|
+
const severityOrder = ["low", "medium", "high", "critical"];
|
|
209
|
+
let highest = "low";
|
|
210
210
|
for (const pattern of patterns) {
|
|
211
|
-
if (severityOrder.indexOf(pattern.severity) >
|
|
212
|
-
severityOrder.indexOf(highest)) {
|
|
211
|
+
if (severityOrder.indexOf(pattern.severity) > severityOrder.indexOf(highest)) {
|
|
213
212
|
highest = pattern.severity;
|
|
214
213
|
}
|
|
215
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-integrity.js","sourceRoot":"","sources":["../../src/guards/patch-integrity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"patch-integrity.js","sourceRoot":"","sources":["../../src/guards/patch-integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Detects and blocks exposure of secrets in tool outputs and patches.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
7
|
-
import { BaseGuard } from
|
|
6
|
+
import type { EventType, GuardResult, Policy, PolicyEvent, SecretPattern } from "../types.js";
|
|
7
|
+
import { BaseGuard } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* SecretLeakGuard - detects and blocks secret exposure
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-leak.d.ts","sourceRoot":"","sources":["../../src/guards/secret-leak.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"secret-leak.d.ts","sourceRoot":"","sources":["../../src/guards/secret-leak.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4KvC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,kBAAkB,GAAE,aAAa,EAAO;IAKpD,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,SAAS,EAAE;IAIhB,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrE,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW;IA8B3D;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAkB/C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAsB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAa3B"}
|
|
@@ -3,161 +3,161 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Detects and blocks exposure of secrets in tool outputs and patches.
|
|
5
5
|
*/
|
|
6
|
-
import { BaseGuard } from
|
|
6
|
+
import { BaseGuard } from "./types.js";
|
|
7
7
|
/**
|
|
8
8
|
* Built-in secret detection patterns
|
|
9
9
|
*/
|
|
10
10
|
const SECRET_PATTERNS = [
|
|
11
11
|
// AWS Keys
|
|
12
12
|
{
|
|
13
|
-
name:
|
|
13
|
+
name: "aws_access_key",
|
|
14
14
|
pattern: /AKIA[0-9A-Z]{16}/g,
|
|
15
|
-
severity:
|
|
16
|
-
description:
|
|
15
|
+
severity: "critical",
|
|
16
|
+
description: "AWS Access Key ID",
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
name:
|
|
19
|
+
name: "aws_secret_key",
|
|
20
20
|
pattern: /[A-Za-z0-9/+=]{40}/g,
|
|
21
|
-
severity:
|
|
22
|
-
description:
|
|
21
|
+
severity: "critical",
|
|
22
|
+
description: "AWS Secret Access Key",
|
|
23
23
|
},
|
|
24
24
|
// GitHub Tokens
|
|
25
25
|
{
|
|
26
|
-
name:
|
|
26
|
+
name: "github_pat",
|
|
27
27
|
pattern: /ghp_[A-Za-z0-9]{36}/g,
|
|
28
|
-
severity:
|
|
29
|
-
description:
|
|
28
|
+
severity: "critical",
|
|
29
|
+
description: "GitHub Personal Access Token",
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
|
-
name:
|
|
32
|
+
name: "github_oauth",
|
|
33
33
|
pattern: /gho_[A-Za-z0-9]{36}/g,
|
|
34
|
-
severity:
|
|
35
|
-
description:
|
|
34
|
+
severity: "critical",
|
|
35
|
+
description: "GitHub OAuth Token",
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
|
-
name:
|
|
38
|
+
name: "github_app_token",
|
|
39
39
|
pattern: /ghu_[A-Za-z0-9]{36}/g,
|
|
40
|
-
severity:
|
|
41
|
-
description:
|
|
40
|
+
severity: "critical",
|
|
41
|
+
description: "GitHub App User Token",
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
name:
|
|
44
|
+
name: "github_fine_grained",
|
|
45
45
|
pattern: /github_pat_[A-Za-z0-9]{22}_[A-Za-z0-9]{59}/g,
|
|
46
|
-
severity:
|
|
47
|
-
description:
|
|
46
|
+
severity: "critical",
|
|
47
|
+
description: "GitHub Fine-grained PAT",
|
|
48
48
|
},
|
|
49
49
|
// OpenAI Keys
|
|
50
50
|
{
|
|
51
|
-
name:
|
|
51
|
+
name: "openai_api_key",
|
|
52
52
|
pattern: /sk-[A-Za-z0-9]{48}/g,
|
|
53
|
-
severity:
|
|
54
|
-
description:
|
|
53
|
+
severity: "critical",
|
|
54
|
+
description: "OpenAI API Key",
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
|
-
name:
|
|
57
|
+
name: "openai_project_key",
|
|
58
58
|
pattern: /sk-proj-[A-Za-z0-9]{48}/g,
|
|
59
|
-
severity:
|
|
60
|
-
description:
|
|
59
|
+
severity: "critical",
|
|
60
|
+
description: "OpenAI Project API Key",
|
|
61
61
|
},
|
|
62
62
|
// Anthropic Keys
|
|
63
63
|
{
|
|
64
|
-
name:
|
|
64
|
+
name: "anthropic_api_key",
|
|
65
65
|
pattern: /sk-ant-[A-Za-z0-9]{32,}/g,
|
|
66
|
-
severity:
|
|
67
|
-
description:
|
|
66
|
+
severity: "critical",
|
|
67
|
+
description: "Anthropic API Key",
|
|
68
68
|
},
|
|
69
69
|
// Google Cloud
|
|
70
70
|
{
|
|
71
|
-
name:
|
|
71
|
+
name: "google_api_key",
|
|
72
72
|
pattern: /AIza[0-9A-Za-z\-_]{35}/g,
|
|
73
|
-
severity:
|
|
74
|
-
description:
|
|
73
|
+
severity: "critical",
|
|
74
|
+
description: "Google API Key",
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
|
-
name:
|
|
77
|
+
name: "gcp_service_account",
|
|
78
78
|
pattern: /"type":\s*"service_account"/g,
|
|
79
|
-
severity:
|
|
80
|
-
description:
|
|
79
|
+
severity: "high",
|
|
80
|
+
description: "GCP Service Account JSON",
|
|
81
81
|
},
|
|
82
82
|
// Private Keys
|
|
83
83
|
{
|
|
84
|
-
name:
|
|
84
|
+
name: "private_key_rsa",
|
|
85
85
|
pattern: /-----BEGIN RSA PRIVATE KEY-----/g,
|
|
86
|
-
severity:
|
|
87
|
-
description:
|
|
86
|
+
severity: "critical",
|
|
87
|
+
description: "RSA Private Key",
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
|
-
name:
|
|
90
|
+
name: "private_key_openssh",
|
|
91
91
|
pattern: /-----BEGIN OPENSSH PRIVATE KEY-----/g,
|
|
92
|
-
severity:
|
|
93
|
-
description:
|
|
92
|
+
severity: "critical",
|
|
93
|
+
description: "OpenSSH Private Key",
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
|
-
name:
|
|
96
|
+
name: "private_key_ec",
|
|
97
97
|
pattern: /-----BEGIN EC PRIVATE KEY-----/g,
|
|
98
|
-
severity:
|
|
99
|
-
description:
|
|
98
|
+
severity: "critical",
|
|
99
|
+
description: "EC Private Key",
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
name:
|
|
102
|
+
name: "private_key_generic",
|
|
103
103
|
pattern: /-----BEGIN PRIVATE KEY-----/g,
|
|
104
|
-
severity:
|
|
105
|
-
description:
|
|
104
|
+
severity: "critical",
|
|
105
|
+
description: "Private Key",
|
|
106
106
|
},
|
|
107
107
|
// Stripe
|
|
108
108
|
{
|
|
109
|
-
name:
|
|
109
|
+
name: "stripe_secret_key",
|
|
110
110
|
pattern: /sk_live_[A-Za-z0-9]{24,}/g,
|
|
111
|
-
severity:
|
|
112
|
-
description:
|
|
111
|
+
severity: "critical",
|
|
112
|
+
description: "Stripe Live Secret Key",
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
name:
|
|
115
|
+
name: "stripe_test_key",
|
|
116
116
|
pattern: /sk_test_[A-Za-z0-9]{24,}/g,
|
|
117
|
-
severity:
|
|
118
|
-
description:
|
|
117
|
+
severity: "medium",
|
|
118
|
+
description: "Stripe Test Secret Key",
|
|
119
119
|
},
|
|
120
120
|
// Stripe Restricted Key
|
|
121
121
|
{
|
|
122
|
-
name:
|
|
122
|
+
name: "stripe_restricted_key",
|
|
123
123
|
pattern: /rk_live_[A-Za-z0-9]{24,}/g,
|
|
124
|
-
severity:
|
|
125
|
-
description:
|
|
124
|
+
severity: "critical",
|
|
125
|
+
description: "Stripe Live Restricted Key",
|
|
126
126
|
},
|
|
127
127
|
// Slack
|
|
128
128
|
{
|
|
129
|
-
name:
|
|
129
|
+
name: "slack_token",
|
|
130
130
|
pattern: /xox[baprs]-[A-Za-z0-9-]{10,}/g,
|
|
131
|
-
severity:
|
|
132
|
-
description:
|
|
131
|
+
severity: "high",
|
|
132
|
+
description: "Slack Token",
|
|
133
133
|
},
|
|
134
134
|
// Azure Key Vault
|
|
135
135
|
{
|
|
136
|
-
name:
|
|
136
|
+
name: "azure_key_vault_token",
|
|
137
137
|
pattern: /azure[_-]?(?:key[_-]?vault|kv)[_-]?(?:secret|token|key)(?:'|")?\s*[:=]\s*(?:'|")?[A-Za-z0-9+/=_-]{32,}/gi,
|
|
138
|
-
severity:
|
|
139
|
-
description:
|
|
138
|
+
severity: "critical",
|
|
139
|
+
description: "Azure Key Vault Secret",
|
|
140
140
|
},
|
|
141
141
|
// GitLab Personal Access Token
|
|
142
142
|
{
|
|
143
|
-
name:
|
|
143
|
+
name: "gitlab_pat",
|
|
144
144
|
pattern: /glpat-[A-Za-z0-9_-]{20,}/g,
|
|
145
|
-
severity:
|
|
146
|
-
description:
|
|
145
|
+
severity: "critical",
|
|
146
|
+
description: "GitLab Personal Access Token",
|
|
147
147
|
},
|
|
148
148
|
// Generic high-entropy (likely secrets)
|
|
149
149
|
{
|
|
150
|
-
name:
|
|
150
|
+
name: "jwt_token",
|
|
151
151
|
pattern: /eyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*/g,
|
|
152
|
-
severity:
|
|
153
|
-
description:
|
|
152
|
+
severity: "high",
|
|
153
|
+
description: "JWT Token",
|
|
154
154
|
},
|
|
155
155
|
// Database URLs with credentials
|
|
156
156
|
{
|
|
157
|
-
name:
|
|
157
|
+
name: "database_url",
|
|
158
158
|
pattern: /(?:postgres|mysql|mongodb|redis):\/\/[^:]+:[^@]+@/g,
|
|
159
|
-
severity:
|
|
160
|
-
description:
|
|
159
|
+
severity: "critical",
|
|
160
|
+
description: "Database URL with credentials",
|
|
161
161
|
},
|
|
162
162
|
];
|
|
163
163
|
/**
|
|
@@ -170,10 +170,10 @@ export class SecretLeakGuard extends BaseGuard {
|
|
|
170
170
|
this.patterns = [...SECRET_PATTERNS, ...additionalPatterns];
|
|
171
171
|
}
|
|
172
172
|
name() {
|
|
173
|
-
return
|
|
173
|
+
return "secret_leak";
|
|
174
174
|
}
|
|
175
175
|
handles() {
|
|
176
|
-
return [
|
|
176
|
+
return ["patch_apply", "tool_call"];
|
|
177
177
|
}
|
|
178
178
|
async check(event, policy) {
|
|
179
179
|
return this.checkSync(event, policy);
|
|
@@ -182,13 +182,13 @@ export class SecretLeakGuard extends BaseGuard {
|
|
|
182
182
|
const data = event.data;
|
|
183
183
|
let contentToCheck;
|
|
184
184
|
// Get content to check based on event type
|
|
185
|
-
if (data.type ===
|
|
185
|
+
if (data.type === "patch") {
|
|
186
186
|
contentToCheck = data.patchContent;
|
|
187
187
|
}
|
|
188
|
-
else if (data.type ===
|
|
188
|
+
else if (data.type === "tool") {
|
|
189
189
|
// Check tool result for secrets
|
|
190
190
|
contentToCheck =
|
|
191
|
-
typeof data.result ===
|
|
191
|
+
typeof data.result === "string" ? data.result : JSON.stringify(data.result ?? "");
|
|
192
192
|
}
|
|
193
193
|
if (!contentToCheck) {
|
|
194
194
|
return this.allow();
|
|
@@ -197,7 +197,7 @@ export class SecretLeakGuard extends BaseGuard {
|
|
|
197
197
|
const detected = this.detectSecrets(contentToCheck);
|
|
198
198
|
if (detected.length > 0) {
|
|
199
199
|
const highestSeverity = this.getHighestSeverity(detected);
|
|
200
|
-
const secretNames = detected.map((s) => s.name).join(
|
|
200
|
+
const secretNames = detected.map((s) => s.name).join(", ");
|
|
201
201
|
return this.deny(`Detected potential secrets in output: ${secretNames}`, highestSeverity);
|
|
202
202
|
}
|
|
203
203
|
return this.allow();
|
|
@@ -229,9 +229,9 @@ export class SecretLeakGuard extends BaseGuard {
|
|
|
229
229
|
redacted = redacted.replace(pattern.pattern, (match) => {
|
|
230
230
|
// Show first 4 chars and last 4 chars, redact the middle
|
|
231
231
|
if (match.length > 12) {
|
|
232
|
-
return match.slice(0, 4) +
|
|
232
|
+
return match.slice(0, 4) + "[REDACTED]" + match.slice(-4);
|
|
233
233
|
}
|
|
234
|
-
return
|
|
234
|
+
return "[REDACTED]";
|
|
235
235
|
});
|
|
236
236
|
// Reset again after replace
|
|
237
237
|
pattern.pattern.lastIndex = 0;
|
|
@@ -242,11 +242,10 @@ export class SecretLeakGuard extends BaseGuard {
|
|
|
242
242
|
* Get the highest severity from detected patterns
|
|
243
243
|
*/
|
|
244
244
|
getHighestSeverity(patterns) {
|
|
245
|
-
const severityOrder = [
|
|
246
|
-
let highest =
|
|
245
|
+
const severityOrder = ["low", "medium", "high", "critical"];
|
|
246
|
+
let highest = "low";
|
|
247
247
|
for (const pattern of patterns) {
|
|
248
|
-
if (severityOrder.indexOf(pattern.severity) >
|
|
249
|
-
severityOrder.indexOf(highest)) {
|
|
248
|
+
if (severityOrder.indexOf(pattern.severity) > severityOrder.indexOf(highest)) {
|
|
250
249
|
highest = pattern.severity;
|
|
251
250
|
}
|
|
252
251
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-leak.js","sourceRoot":"","sources":["../../src/guards/secret-leak.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"secret-leak.js","sourceRoot":"","sources":["../../src/guards/secret-leak.ts"],"names":[],"mappings":"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"}
|
package/dist/guards/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Type definitions for the guard system.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { EventType, GuardResult, Policy, PolicyEvent } from "../types.js";
|
|
7
7
|
/**
|
|
8
8
|
* Guard interface - modular policy enforcement
|
|
9
9
|
*/
|
|
@@ -37,7 +37,7 @@ export declare abstract class BaseGuard implements Guard {
|
|
|
37
37
|
/**
|
|
38
38
|
* Helper to create a deny result
|
|
39
39
|
*/
|
|
40
|
-
protected deny(reason: string, severity?: GuardResult[
|
|
40
|
+
protected deny(reason: string, severity?: GuardResult["severity"]): GuardResult;
|
|
41
41
|
/**
|
|
42
42
|
* Helper to create a warn result
|
|
43
43
|
*/
|