@agent-beam/beam 0.2.37 → 0.2.39
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 +7 -13
- package/dist/access-risk.d.ts +10 -0
- package/dist/access-risk.js +43 -0
- package/dist/access-risk.js.map +1 -0
- package/dist/action-context.d.ts +30 -0
- package/dist/action-context.js +203 -0
- package/dist/action-context.js.map +1 -0
- package/dist/activity.d.ts +22 -0
- package/dist/activity.js +132 -0
- package/dist/activity.js.map +1 -0
- package/dist/agent-hook-install.d.ts +8 -0
- package/dist/agent-hook-install.js +278 -0
- package/dist/agent-hook-install.js.map +1 -0
- package/dist/agent-installers.js +16 -3
- package/dist/agent-installers.js.map +1 -1
- package/dist/agent-plugins.d.ts +3 -0
- package/dist/agent-plugins.js +66 -0
- package/dist/agent-plugins.js.map +1 -0
- package/dist/agents.d.ts +1 -0
- package/dist/agents.js +30 -184
- package/dist/agents.js.map +1 -1
- package/dist/behavioral-anomaly.d.ts +16 -0
- package/dist/behavioral-anomaly.js +66 -0
- package/dist/behavioral-anomaly.js.map +1 -0
- package/dist/cli.js +28 -10
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +203 -100
- package/dist/client.js.map +1 -1
- package/dist/connect.d.ts +7 -0
- package/dist/connect.js +12 -0
- package/dist/connect.js.map +1 -1
- package/dist/core.d.ts +50 -2
- package/dist/core.js +73 -24
- package/dist/core.js.map +1 -1
- package/dist/credential-egress.d.ts +17 -0
- package/dist/credential-egress.js +325 -0
- package/dist/credential-egress.js.map +1 -0
- package/dist/custom-rules.js +2 -1
- package/dist/custom-rules.js.map +1 -1
- package/dist/data-detectors.js +60 -4
- package/dist/data-detectors.js.map +1 -1
- package/dist/destructive-risk.d.ts +1 -0
- package/dist/destructive-risk.js +70 -0
- package/dist/destructive-risk.js.map +1 -0
- package/dist/edit-stats.js +5 -5
- package/dist/edit-stats.js.map +1 -1
- package/dist/entity-redaction.d.ts +11 -0
- package/dist/entity-redaction.js +88 -0
- package/dist/entity-redaction.js.map +1 -0
- package/dist/file-lock.d.ts +1 -0
- package/dist/file-lock.js +54 -0
- package/dist/file-lock.js.map +1 -0
- package/dist/forward.d.ts +13 -6
- package/dist/forward.js +120 -42
- package/dist/forward.js.map +1 -1
- package/dist/hook-adapters.d.ts +2 -2
- package/dist/hook-adapters.js +59 -60
- package/dist/hook-adapters.js.map +1 -1
- package/dist/hook-catalog.d.ts +12 -0
- package/dist/hook-catalog.js +469 -0
- package/dist/hook-catalog.js.map +1 -0
- package/dist/hook-config.d.ts +8 -0
- package/dist/hook-config.js +80 -0
- package/dist/hook-config.js.map +1 -0
- package/dist/hook-spool.d.ts +3 -0
- package/dist/hook-spool.js +56 -0
- package/dist/hook-spool.js.map +1 -0
- package/dist/install.d.ts +5 -5
- package/dist/install.js +48 -199
- package/dist/install.js.map +1 -1
- package/dist/inventory.js +1 -1
- package/dist/inventory.js.map +1 -1
- package/dist/jev.js +2 -1
- package/dist/jev.js.map +1 -1
- package/dist/judge.js +2 -1
- package/dist/judge.js.map +1 -1
- package/dist/mitigation-pattern.d.ts +1 -0
- package/dist/mitigation-pattern.js +140 -0
- package/dist/mitigation-pattern.js.map +1 -0
- package/dist/package-risk-rules.js +2 -2
- package/dist/package-risk-rules.js.map +1 -1
- package/dist/policy-paths.d.ts +20 -0
- package/dist/policy-paths.js +145 -0
- package/dist/policy-paths.js.map +1 -0
- package/dist/policy.d.ts +5 -0
- package/dist/policy.js +78 -10
- package/dist/policy.js.map +1 -1
- package/dist/rule-catalog.d.ts +3 -1
- package/dist/rule-catalog.js +124 -24
- package/dist/rule-catalog.js.map +1 -1
- package/dist/rule-matches.d.ts +13 -0
- package/dist/rule-matches.js +42 -0
- package/dist/rule-matches.js.map +1 -0
- package/dist/serve.js +55 -5
- package/dist/serve.js.map +1 -1
- package/dist/server.js +7 -6
- package/dist/server.js.map +1 -1
- package/dist/setup.js +26 -13
- package/dist/setup.js.map +1 -1
- package/dist/skill-risk-rules.js +2 -2
- package/dist/skill-risk-rules.js.map +1 -1
- package/dist/skill-setup.js +4 -5
- package/dist/skill-setup.js.map +1 -1
- package/dist/skill-sync.d.ts +5 -1
- package/dist/skill-sync.js +115 -14
- package/dist/skill-sync.js.map +1 -1
- package/dist/store.js +6 -9
- package/dist/store.js.map +1 -1
- package/dist/studio.js +2 -2
- package/package.json +6 -3
- package/stress-report.json +48 -48
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/** A bounded suggestion for commands with a concrete, stable target. */
|
|
2
|
+
function basicPattern(command) {
|
|
3
|
+
if (!command || command.length > 4000 || /\[(?:REDACTED|TRUNCATED)[^\]]*\]|…|[$`\\\n\r]/i.test(command))
|
|
4
|
+
return null;
|
|
5
|
+
const source = command.trim();
|
|
6
|
+
if (/^(?:(?:sudo|command)\s+)?(?:env|printenv)(?:\s+-0)?$/i.test(source))
|
|
7
|
+
return String.raw `(?:^|[;&|]\s*)(?:(?:sudo|command)\s+)?(?:env|printenv)(?:\s+-0)?(?=\s*(?:[;&|]|$))`;
|
|
8
|
+
const ping = /^(?:(?:sudo|command)\s+)?(?:\/[A-Za-z0-9_.\/-]+\/)?ping(?:\s+(?:--|-[A-Za-z][A-Za-z0-9-]*(?:=\d{1,6})?|\d{1,6}))*\s+(['"]?)([A-Za-z0-9.-]+)\1$/i.exec(source);
|
|
9
|
+
const host = ping?.[2]?.replace(/\.$/, "");
|
|
10
|
+
if (!host || host.length > 200 || !/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$/.test(host))
|
|
11
|
+
return null;
|
|
12
|
+
const pattern = String.raw `(?:^|[;&|]\s*)(?:(?:sudo|command)\s+)?(?:\/?[A-Za-z0-9_.-]+\/)*ping(?:\s+(?:--|-[A-Za-z][A-Za-z0-9-]*(?:=\d{1,6})?|\d{1,6}))*\s+['"]?${host.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\.?['"]?(?=$|[\s;&|])`;
|
|
13
|
+
return pattern.length <= 1000 ? pattern : null;
|
|
14
|
+
}
|
|
15
|
+
const escape = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
16
|
+
const cleanTarget = (value) => value.length >= 2 && !/\[(?:REDACTED|TRUNCATED)|…|[$`\r\n]/i.test(value);
|
|
17
|
+
const executablePrefix = String.raw `(?:^|[;&|\n]\s*)(?:(?:sudo|command|exec)\s+)?(?:[\w./\\-]*[/\\])?`;
|
|
18
|
+
function scopedPattern(executable, target, operation, inlineCode = false) {
|
|
19
|
+
if (!cleanTarget(target))
|
|
20
|
+
return null;
|
|
21
|
+
const targetSource = escape(target).replace(/\\\*/g, String.raw `[^\s"';|&]*`);
|
|
22
|
+
const range = inlineCode ? String.raw `[\s\S]{0,16000}` : String.raw `[^;&|\n]{0,4000}`;
|
|
23
|
+
const pattern = executablePrefix + executable + String.raw `\b` +
|
|
24
|
+
(operation ? "(?=" + range + operation + ")" : "") +
|
|
25
|
+
"(?=" + range + String.raw `(?:[\s"'=(@]|^)` + targetSource + String.raw `(?=$|[\s"';|&,?)\]}]))`;
|
|
26
|
+
return pattern.length <= 1000 ? pattern : null;
|
|
27
|
+
}
|
|
28
|
+
/** Derive stable operation + target patterns. Never execute or evaluate the command. */
|
|
29
|
+
function derivePattern(command) {
|
|
30
|
+
if (!command.trim() || command.length > 16000 || /\[TRUNCATED[^\]]*\]|…/i.test(command))
|
|
31
|
+
return null;
|
|
32
|
+
const basic = basicPattern(command);
|
|
33
|
+
if (basic)
|
|
34
|
+
return basic;
|
|
35
|
+
// Interpreter file operations: retain the path and operation, not the changing payload.
|
|
36
|
+
const interpreter = /^\s*(?:(?:sudo|command)\s+)?(?:[\w./\\-]*[/\\])?(python[23]?|node|bun|ruby|perl|pwsh|powershell)\b/i.exec(command)?.[1];
|
|
37
|
+
if (interpreter) {
|
|
38
|
+
const pathOperation = /(?:Path|open|readFileSync|readFile|writeFileSync|writeFile|appendFileSync|appendFile|read_text|write_text)\s*\(\s*['"]([^'"\r\n]{2,200})['"]/g;
|
|
39
|
+
for (const match of command.matchAll(pathOperation)) {
|
|
40
|
+
const target = match[1] ?? "";
|
|
41
|
+
if (!/(?:[\\/]|\.[A-Za-z0-9_*.-]+$)/.test(target))
|
|
42
|
+
continue;
|
|
43
|
+
const write = /(?:write_text|write_bytes|writeFile|appendFile|\.write\s*\(|open\s*\([^\n]{0,220},\s*['"][wax])/i.test(command);
|
|
44
|
+
const read = /(?:read_text|read_bytes|readFile|\.read\s*\(|open\s*\([^\n]{0,220},\s*['"]r)/i.test(command);
|
|
45
|
+
const operation = write ? String.raw `(?:write_text|write_bytes|writeFile|appendFile|\.write\s*\(|['"][wax][+b]?['"])` : read ? String.raw `(?:read_text|read_bytes|readFile|\.read\s*\(|['"]r[+b]?['"])` : undefined;
|
|
46
|
+
if (operation) {
|
|
47
|
+
const pattern = scopedPattern(escape(interpreter), target, operation, true);
|
|
48
|
+
if (pattern)
|
|
49
|
+
return pattern;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
// Parse quoted words without evaluating substitutions, variables or script bodies.
|
|
55
|
+
const segments = [];
|
|
56
|
+
let start = 0, quote = "";
|
|
57
|
+
for (let i = 0; i < command.length && segments.length < 40; i++) {
|
|
58
|
+
const c = command[i] ?? "";
|
|
59
|
+
if (c === "\\" && quote !== "'") {
|
|
60
|
+
i++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (quote) {
|
|
64
|
+
if (c === quote)
|
|
65
|
+
quote = "";
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (c === "'" || c === '"') {
|
|
69
|
+
quote = c;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (/[;|&\n]/.test(c)) {
|
|
73
|
+
segments.push(command.slice(start, i));
|
|
74
|
+
start = i + 1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
segments.push(command.slice(start));
|
|
78
|
+
for (const segment of segments) {
|
|
79
|
+
const words = segment.match(/"[^"\r\n]*"|'[^'\r\n]*'|[^\s]+/g)?.map(w => w.replace(/^(['"])([\s\S]*)\1$/, "$2")) ?? [];
|
|
80
|
+
let at = 0;
|
|
81
|
+
while (/^(?:sudo|command|exec)$/.test(words[at] ?? "") || /^[A-Za-z_]\w*=/.test(words[at] ?? ""))
|
|
82
|
+
at++;
|
|
83
|
+
const executable = (words[at] ?? "").split(/[\\/]/).pop()?.toLowerCase() ?? "";
|
|
84
|
+
const args = words.slice(at + 1);
|
|
85
|
+
if (/^(?:curl|wget|invoke-webrequest|invoke-restmethod)$/.test(executable)) {
|
|
86
|
+
const destination = args.find(a => /^https?:\/\//i.test(a));
|
|
87
|
+
if (destination) {
|
|
88
|
+
try {
|
|
89
|
+
const url = new URL(destination);
|
|
90
|
+
if (url.username || url.password)
|
|
91
|
+
continue;
|
|
92
|
+
const target = `${url.protocol}//${url.host}${url.pathname}`;
|
|
93
|
+
const pattern = scopedPattern("(?:curl|wget|Invoke-WebRequest|Invoke-RestMethod)", target);
|
|
94
|
+
if (pattern)
|
|
95
|
+
return pattern;
|
|
96
|
+
}
|
|
97
|
+
catch { /* no complete destination */ }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (/^(?:cat|head|tail|less|more|sed|grep|rg|rm|unlink|rmdir|chmod|chown|cp|mv|tee|touch|truncate|Get-Content|Set-Content|Remove-Item|Select-String)$/i.test(executable)) {
|
|
101
|
+
const targets = args.filter(a => !a.startsWith("-") && cleanTarget(a) && /(?:[\\/]|\.[A-Za-z0-9_*.-]+$)/.test(a));
|
|
102
|
+
const target = targets.find(a => /(?:^|[\\/])(?:\.env|\.ssh|\.aws|credentials|id_(?:rsa|ed25519))/i.test(a)) ?? targets.at(-1);
|
|
103
|
+
if (target) {
|
|
104
|
+
const pattern = scopedPattern(escape(executable), target);
|
|
105
|
+
if (pattern)
|
|
106
|
+
return pattern;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (executable === "git" && /^(?:push|reset|clean|checkout|restore)$/.test(args[0] ?? "")) {
|
|
110
|
+
const behavior = args.includes("--hard") ? "--hard" : args.includes("--force") ? "--force" : args.find((a, i) => i > 0 && !a.startsWith("-"));
|
|
111
|
+
if (behavior) {
|
|
112
|
+
const pattern = scopedPattern("git", behavior, escape(args[0] ?? "") + String.raw `\b`);
|
|
113
|
+
if (pattern)
|
|
114
|
+
return pattern;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (/^(?:npm|pnpm|yarn|pip|pip3|uv|cargo|gem)$/.test(executable) && /^(?:install|add|remove|uninstall)$/.test(args[0] ?? "")) {
|
|
118
|
+
const target = args.slice(1).find(a => !a.startsWith("-") && cleanTarget(a));
|
|
119
|
+
if (target) {
|
|
120
|
+
const pattern = scopedPattern(escape(executable), target, escape(args[0] ?? "") + String.raw `\b`);
|
|
121
|
+
if (pattern)
|
|
122
|
+
return pattern;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
export function commandBehaviorRegex(command) {
|
|
129
|
+
const pattern = derivePattern(command);
|
|
130
|
+
if (!pattern || pattern.length > 1000 || /\[(?:REDACTED|TRUNCATED)/i.test(pattern))
|
|
131
|
+
return null;
|
|
132
|
+
try {
|
|
133
|
+
const regex = new RegExp(pattern, "i");
|
|
134
|
+
return !regex.test("") && regex.test(command) ? pattern : null;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=mitigation-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mitigation-pattern.js","sourceRoot":"","sources":["../src/mitigation-pattern.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export const codeRules = [
|
|
|
21
21
|
find: regex(/discord(?:app)?\.com\/api\/webhooks\/\d{15,20}\/[\w-]{30,}|api\.telegram\.org\/bot\d{6,12}:[\w-]{30,}|\bwebhook\.site\/[\w-]{8,}|\.m\.pipedream\.net\b|\b(?:interact\.sh|oast\.(?:fun|live|me|online|pro|site)|burpcollaborator\.net|requestbin\.(?:net|com)|requestcatcher\.com|canarytokens\.com)\b|\b[\w-]+\.ngrok(?:-free)?\.(?:io|app)\b|\btransfer\.sh\b|\bpastebin\.com\/raw\b/) },
|
|
22
22
|
{ id: "pkg.env_harvest", title: "Serializes the whole environment", severity: "high", explanation: "Every environment variable, which on a developer machine or CI runner includes API keys and tokens, is turned into one string. Ordinary code reads the variables it needs by name.",
|
|
23
23
|
hints: ["process.env", "os.environ"],
|
|
24
|
-
find: regex(/JSON\.stringify\(\s*process\.env\b|json\.dumps\(\s*(?:dict\(\s*)?os\.environ\b|\bstr\(\s*os\.environ\s*\)/) },
|
|
24
|
+
find: regex(/JSON\.stringify\(\s*process\.env\b|json\.dumps\(\s*(?:dict\(\s*)?os\.environ\b|\bstr\(\s*os\.environ\s*\)|Object\.(?:entries|keys|values|assign)\(\s*process\.env\b/) },
|
|
25
25
|
{ id: "pkg.obfuscated", title: "Obfuscated code", severity: "high", explanation: "The file looks like javascript-obfuscator output or a long run of hex escapes. Published libraries are minified, not obfuscated; obfuscation exists to stop a reviewer from reading the code.",
|
|
26
26
|
hints: ["_0x", "\\x"],
|
|
27
27
|
find: content => Math.max(many(/\b_0x[0-9a-f]{4,6}\b/g, 40)(content), regex(/(?:\\x[2-7][0-9a-fA-F]){40,}/)(content)) },
|
|
@@ -42,7 +42,7 @@ export const codeRules = [
|
|
|
42
42
|
} },
|
|
43
43
|
{ id: "pkg.network", title: "Makes network calls", severity: "info", explanation: "The file sends requests or opens sockets.", signal: true,
|
|
44
44
|
hints: ["http", "fetch", "axios", "XMLHttpRequest", "net", "dns", "WebSocket", "requests.", "urlopen", "socket.", "curl", "wget"],
|
|
45
|
-
find: regex(/\brequire\(\s*["'](?:node:)?(?:https?|net|dns|tls|dgram)["']\s*\)\.\w+\s*\(|\bhttps?\.(?:request|get)\s*\(|\bfetch\s*\(|\baxios(?:\.\w+)?\s*\(|\bXMLHttpRequest\b|\bnet\.(?:connect|createConnection)\s*\(|\bdns\.(?:lookup|resolve\w*)\s*\(|\bnew\s+WebSocket\s*\(|\brequests\.(?:get|post|put)\s*\(|\burlopen\s*\(|\burllib\.request\.Request\b|\bhttp\.client\.HTTPS?Connection\b|\bsocket\.(?:socket|create_connection)\s*\(|\bhttpx\.(?:get|post|Client)\b|\b(?:curl|wget)\s[^\n]{0,80}https?:\/\//) },
|
|
45
|
+
find: regex(/\brequire\(\s*["'](?:node:)?(?:https?|net|dns|tls|dgram)["']\s*\)\.\w+\s*\(|\bhttps?\.(?:request|get)\s*\(|\bfetch\s*\(|\baxios(?:\.\w+)?\s*\(|\bXMLHttpRequest\b|\bnet\.(?:connect|createConnection)\s*\(|\bnew\s+(?:net\.)?Socket\s*\(|\bdns\.(?:lookup|resolve\w*)\s*\(|\bnew\s+WebSocket\s*\(|\brequests\.(?:get|post|put)\s*\(|\burlopen\s*\(|\burllib\.request\.Request\b|\bhttp\.client\.HTTPS?Connection\b|\bsocket\.(?:socket|create_connection)\s*\(|\bhttpx\.(?:get|post|Client)\b|\b(?:curl|wget)\s[^\n]{0,80}https?:\/\//) },
|
|
46
46
|
];
|
|
47
47
|
// Shell-shaped rules borrowed from the skill scanner. They only run on code that executes at
|
|
48
48
|
// install time and on bundled shell scripts: `launchctl load` in pm2's runtime code is its job; in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-risk-rules.js","sourceRoot":"","sources":["../src/package-risk-rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"package-risk-rules.js","sourceRoot":"","sources":["../src/package-risk-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type PolicyPathTarget = {
|
|
2
|
+
path: string;
|
|
3
|
+
eventType: string;
|
|
4
|
+
};
|
|
5
|
+
type Request = {
|
|
6
|
+
path?: string;
|
|
7
|
+
cwd?: string;
|
|
8
|
+
command: string;
|
|
9
|
+
tool: string;
|
|
10
|
+
eventType?: string;
|
|
11
|
+
input?: Record<string, unknown>;
|
|
12
|
+
};
|
|
13
|
+
/** Resolve aliases without opening file contents, including a missing leaf below a symlink. */
|
|
14
|
+
export declare function canonicalPolicyPath(value: string, cwd?: string): string | undefined;
|
|
15
|
+
/** Canonicalize the static part of a policy pattern; preserve its glob suffix. */
|
|
16
|
+
export declare function canonicalPolicyPattern(pattern: string, cwd?: string): string | undefined;
|
|
17
|
+
/** Targets visible in hook arguments or static shell syntax, shared by every agent adapter.
|
|
18
|
+
* This is a preflight check, not an OS sandbox for arbitrary programs. */
|
|
19
|
+
export declare function policyPathTargets(request: Request): PolicyPathTarget[];
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { basename, dirname, isAbsolute, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { classifyActionContext } from "./action-context.js";
|
|
6
|
+
import { shellActionCommands } from "./credential-egress.js";
|
|
7
|
+
const PATH_KEYS = /^(?:file_path|filePath|file_paths|filePaths|absolute_path|absolutePath|relative_path|relativePath|path|paths|files|filename|fileName|file|target_file|targetPath|directory|directory_path|directories|directoryPath|dir|folder|folders|target|source|destination|root_path|rootPath|search_path|searchPath|uri)$/;
|
|
8
|
+
const CODE_KEYS = /^(?:code|script|expression|patch|patchText|patch_text|diff)$/;
|
|
9
|
+
/** Resolve aliases without opening file contents, including a missing leaf below a symlink. */
|
|
10
|
+
export function canonicalPolicyPath(value, cwd) {
|
|
11
|
+
if (!value || value.includes("\0"))
|
|
12
|
+
return undefined;
|
|
13
|
+
if (value.startsWith("file://")) {
|
|
14
|
+
try {
|
|
15
|
+
value = fileURLToPath(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (value === "~" || value.startsWith("~/"))
|
|
22
|
+
value = homedir() + value.slice(1);
|
|
23
|
+
if (!isAbsolute(value) && !cwd)
|
|
24
|
+
return undefined;
|
|
25
|
+
const absolute = resolve(cwd || "/", value);
|
|
26
|
+
const suffix = [];
|
|
27
|
+
let parent = absolute;
|
|
28
|
+
for (;;) {
|
|
29
|
+
try {
|
|
30
|
+
return resolve(realpathSync(parent), ...suffix);
|
|
31
|
+
}
|
|
32
|
+
catch { /* look for an existing ancestor */ }
|
|
33
|
+
const next = dirname(parent);
|
|
34
|
+
if (next === parent)
|
|
35
|
+
return absolute;
|
|
36
|
+
suffix.unshift(basename(parent));
|
|
37
|
+
parent = next;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Canonicalize the static part of a policy pattern; preserve its glob suffix. */
|
|
41
|
+
export function canonicalPolicyPattern(pattern, cwd) {
|
|
42
|
+
const wildcard = pattern.search(/[*?]/);
|
|
43
|
+
if (wildcard < 0)
|
|
44
|
+
return canonicalPolicyPath(pattern, cwd);
|
|
45
|
+
const slash = pattern.lastIndexOf("/", wildcard);
|
|
46
|
+
if (slash < 0)
|
|
47
|
+
return undefined;
|
|
48
|
+
const root = canonicalPolicyPath(pattern.slice(0, slash) || "/", cwd);
|
|
49
|
+
return root === undefined ? undefined : `${root === "/" ? "" : root}/${pattern.slice(slash + 1)}`;
|
|
50
|
+
}
|
|
51
|
+
/** Targets visible in hook arguments or static shell syntax, shared by every agent adapter.
|
|
52
|
+
* This is a preflight check, not an OS sandbox for arbitrary programs. */
|
|
53
|
+
export function policyPathTargets(request) {
|
|
54
|
+
const targets = [];
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
const cwd = request.cwd;
|
|
57
|
+
const add = (path, eventType = request.eventType || "file.read", working = cwd) => {
|
|
58
|
+
if (typeof path !== "string" || !path || path.length > 16384 || /^https?:\/\//i.test(path))
|
|
59
|
+
return;
|
|
60
|
+
const key = `${eventType}\0${working}\0${path}`;
|
|
61
|
+
if (!seen.has(key)) {
|
|
62
|
+
seen.add(key);
|
|
63
|
+
targets.push({ path: canonicalPolicyPath(path, working) ?? path, eventType });
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const readType = /^(?:command.exec|tool.call|directory.read|file.search)$/.test(request.eventType ?? "") ? "file.read" : request.eventType;
|
|
67
|
+
add(request.path, readType);
|
|
68
|
+
const walk = (value, depth, pathField = false) => {
|
|
69
|
+
if (depth > 12)
|
|
70
|
+
return;
|
|
71
|
+
if (typeof value === "string") {
|
|
72
|
+
if (pathField)
|
|
73
|
+
add(value, readType);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (Array.isArray(value)) {
|
|
77
|
+
for (const entry of value)
|
|
78
|
+
walk(entry, depth + 1, pathField);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (value && typeof value === "object") {
|
|
82
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
83
|
+
if (CODE_KEYS.test(key) && typeof entry === "string")
|
|
84
|
+
literals(entry);
|
|
85
|
+
walk(entry, depth + 1, PATH_KEYS.test(key));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
// Literal file paths in scripts/patches can be checked even for unfamiliar tools.
|
|
90
|
+
const literals = (code, working = cwd) => {
|
|
91
|
+
for (const match of code.matchAll(/["'`]([^"'`\n]+)["'`]/g)) {
|
|
92
|
+
if (/^(?:\/|\.\.?\/|~\/|file:\/\/)/.test(match[1]))
|
|
93
|
+
add(match[1], "file.read", working);
|
|
94
|
+
}
|
|
95
|
+
for (const match of code.matchAll(/^\*\*\* (?:Update|Add|Delete) File:\s*(.+)$/gm))
|
|
96
|
+
add(match[1].trim(), "file.write", working);
|
|
97
|
+
for (const match of code.matchAll(/(?:\bopen|\breadFile(?:Sync)?|\bPath)\s*\(\s*["']([^"'\n]+)["']/g))
|
|
98
|
+
add(match[1], "file.read", working);
|
|
99
|
+
};
|
|
100
|
+
walk(request.input, 0);
|
|
101
|
+
if (!request.command)
|
|
102
|
+
return targets;
|
|
103
|
+
const classified = classifyActionContext(request.tool, request.input ?? {}, cwd ?? "", request.command, (s) => s, false);
|
|
104
|
+
for (const action of classified.actions) {
|
|
105
|
+
const type = { "file-read": "file.read", "file-search": "file.read", "source-search": "file.read", "file-write": "file.write", delete: "file.write" }[action.operation];
|
|
106
|
+
if (type && action.target !== "standard input")
|
|
107
|
+
add(action.resolvedPath ?? action.target, type);
|
|
108
|
+
}
|
|
109
|
+
let working = cwd;
|
|
110
|
+
for (const command of shellActionCommands(request.command)) {
|
|
111
|
+
const tokens = command.tokens.map((token) => token.value);
|
|
112
|
+
let index = 0;
|
|
113
|
+
while (/^[A-Za-z_]\w*=/.test(tokens[index] ?? "") || /^(?:sudo|command|exec|env)$/.test(tokens[index] ?? ""))
|
|
114
|
+
index++;
|
|
115
|
+
const executable = basename(tokens[index] ?? "").toLowerCase();
|
|
116
|
+
const args = tokens.slice(index + 1);
|
|
117
|
+
if (executable === "cd") {
|
|
118
|
+
working = canonicalPolicyPath(args[0] ?? "~", working);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// Check explicit path arguments conservatively, including interpreter script files,
|
|
122
|
+
// upload sources and input redirection, without disabling the shell tool itself.
|
|
123
|
+
for (const argument of args) {
|
|
124
|
+
const path = argument.replace(/^\d*[<>]+/, "");
|
|
125
|
+
if (/^(?:\/|\.\.?\/|~\/|file:\/\/)/.test(path))
|
|
126
|
+
add(path, "file.read", working);
|
|
127
|
+
else if (working && !path.startsWith("-") && existsSync(resolve(working, path)))
|
|
128
|
+
add(path, "file.read", working);
|
|
129
|
+
}
|
|
130
|
+
if (/^(?:ls|find|grep|rg|cat|head|tail|sed|awk|wc|cp|scp|tar|zip|python[23]?|node|bun|ruby|perl|bash|sh|zsh)$/.test(executable)) {
|
|
131
|
+
literals(args.join(" "), working);
|
|
132
|
+
if (/^(?:ls|find|rg|grep)$/.test(executable))
|
|
133
|
+
add(working, "file.read", working);
|
|
134
|
+
// Relative filenames without a ./ prefix, including shell input redirection.
|
|
135
|
+
for (let i = 0; i < args.length; i++) {
|
|
136
|
+
if (args[i] === "<")
|
|
137
|
+
add(args[i + 1], "file.read", working);
|
|
138
|
+
if (/^(?:cat|head|tail|wc|cp|scp)$/.test(executable) && !args[i].startsWith("-") && !/^\d+$/.test(args[i]))
|
|
139
|
+
add(args[i], "file.read", working);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return targets;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=policy-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-paths.js","sourceRoot":"","sources":["../src/policy-paths.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
CHANGED
|
@@ -6,10 +6,13 @@ export interface PolicyRule {
|
|
|
6
6
|
id: string;
|
|
7
7
|
title?: string;
|
|
8
8
|
action: PolicyAction;
|
|
9
|
+
enforce?: true;
|
|
9
10
|
risk?: number;
|
|
11
|
+
eventType?: string;
|
|
10
12
|
tool?: string;
|
|
11
13
|
command?: string;
|
|
12
14
|
commandLine?: string;
|
|
15
|
+
commandRegex?: string;
|
|
13
16
|
args?: string[];
|
|
14
17
|
path?: string;
|
|
15
18
|
url?: string;
|
|
@@ -50,6 +53,8 @@ export declare function lastGoodPolicyPath(): string;
|
|
|
50
53
|
export declare function readPolicy(): Promise<PolicyBundle | null>;
|
|
51
54
|
export type DecisionAction = "allow" | "ask" | "block" | "redact" | "audit" | "warn" | "deny";
|
|
52
55
|
export interface ActionContext {
|
|
56
|
+
eventType?: string;
|
|
57
|
+
input?: Record<string, unknown>;
|
|
53
58
|
agent: string;
|
|
54
59
|
tool: string;
|
|
55
60
|
command: string;
|
package/dist/policy.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { activityType } from "./activity.js";
|
|
2
|
+
import { classifyActionContext } from "./action-context.js";
|
|
3
|
+
import { environmentRisk } from "./access-risk.js";
|
|
4
|
+
import { builtinRulesById } from "./rule-catalog.js";
|
|
1
5
|
import { readFile } from "node:fs/promises";
|
|
2
6
|
import { join } from "node:path";
|
|
3
7
|
import { getDataDirectory } from "./config.js";
|
|
8
|
+
import { canonicalPolicyPath, canonicalPolicyPattern, policyPathTargets } from "./policy-paths.js";
|
|
4
9
|
const EMPTY = { mode: "observe", blockedTools: [], blockedCommandPatterns: [], disabledAgents: [], rules: [], customDetectors: [] };
|
|
5
10
|
export function policyPath() { return join(getDataDirectory(), "policy.json"); }
|
|
6
11
|
export function lastGoodPolicyPath() { return join(getDataDirectory(), "policy.last-good.json"); }
|
|
@@ -19,6 +24,30 @@ function validRule(v, index, errors) {
|
|
|
19
24
|
errors.push(`rules[${index}] (${r.id}) has an invalid action`);
|
|
20
25
|
return undefined;
|
|
21
26
|
}
|
|
27
|
+
if (r.enforce !== undefined && (r.enforce !== true || String(r.action).toUpperCase() !== "BLOCK")) {
|
|
28
|
+
errors.push(`rules[${index}] (${r.id}).enforce is only supported for explicit BLOCK rules`);
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
if (r.eventType !== undefined && (typeof r.eventType !== "string" || !r.eventType.trim())) {
|
|
32
|
+
errors.push(`rules[${index}] (${r.id}).eventType must be a non-empty string`);
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
if (r.commandRegex !== undefined) {
|
|
36
|
+
if (typeof r.commandRegex !== "string" || r.commandRegex.length < 3 || r.commandRegex.length > 1000) {
|
|
37
|
+
errors.push(`rules[${index}] (${r.id}).commandRegex must be 3-1000 characters`);
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
if (new RegExp(r.commandRegex, "i").test("")) {
|
|
42
|
+
errors.push(`rules[${index}] (${r.id}).commandRegex matches every command`);
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
errors.push(`rules[${index}] (${r.id}).commandRegex is invalid`);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
22
51
|
if (r.args !== undefined && (!Array.isArray(r.args) || r.args.some(a => typeof a !== "string"))) {
|
|
23
52
|
errors.push(`rules[${index}] (${r.id}).args must be strings`);
|
|
24
53
|
return undefined;
|
|
@@ -69,7 +98,11 @@ export async function readPolicy() {
|
|
|
69
98
|
const safety = { ALLOW: 0, AUDIT: 1, REDACT: 2, ASK: 3, BLOCK: 4 };
|
|
70
99
|
function glob(pattern, value) { const e = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*/g, "§§").replace(/\*/g, "[^/]*").replace(/§§/g, ".*").replace(/\?/g, "."); return new RegExp(`^${e}$`, "i").test(value); }
|
|
71
100
|
function same(a, b) { return !a || (b ?? "").toLowerCase() === a.toLowerCase(); }
|
|
72
|
-
function riskInfo(c) { const s = `${c.command} ${c.path ?? ""} ${c.url ?? ""}`; const factors = []; let n = 0; if (
|
|
101
|
+
function riskInfo(c) { const s = `${c.command} ${c.path ?? ""} ${c.url ?? ""}`; const factors = []; const accessContext = classifyActionContext(c.tool, { file_path: c.path }, c.cwd ?? "", c.command, v => v, false); const access = environmentRisk(accessContext); const routineNamed = !!access && "severity" in access && access.severity === "info" && accessContext.actions.every(a => a.operation === "environment-lookup"); let n = 0; if (builtinRulesById(["destructive.delete"])[0]?.severityFor?.(c.command) === "medium") {
|
|
102
|
+
n += 35;
|
|
103
|
+
factors.push("scoped temporary test cleanup");
|
|
104
|
+
}
|
|
105
|
+
else if (/\brm\s+.*-rf\s+\//i.test(s)) {
|
|
73
106
|
n += 98;
|
|
74
107
|
factors.push("destructive operation");
|
|
75
108
|
}
|
|
@@ -83,12 +116,14 @@ else if (/\brm\b/i.test(s)) {
|
|
|
83
116
|
n += 25;
|
|
84
117
|
factors.push("external destination");
|
|
85
118
|
} if (/\.env|\.ssh|\.aws|private.?key|api.?key|token|secret/i.test(s)) {
|
|
86
|
-
n += 35;
|
|
87
|
-
factors.push("sensitive data or file");
|
|
119
|
+
n += routineNamed ? 5 : 35;
|
|
120
|
+
factors.push(routineNamed ? "scoped named environment lookup" : "sensitive data or file");
|
|
88
121
|
} const score = Math.min(100, n); return { score, level: score >= 90 ? "CRITICAL" : score >= 70 ? "HIGH" : score >= 30 ? "MEDIUM" : "LOW", factors }; }
|
|
89
122
|
function matches(r, c) {
|
|
90
123
|
// r.tool supports glob wildcards (e.g. "mcp__posthog__*") so a dashboard rule can target one
|
|
91
124
|
// MCP server's tools without matching every MCP call; other identity fields stay exact-match.
|
|
125
|
+
if (!r.path && r.eventType && !glob(r.eventType, c.eventType ?? ""))
|
|
126
|
+
return false;
|
|
92
127
|
if (r.tool && !glob(r.tool, c.tool))
|
|
93
128
|
return false;
|
|
94
129
|
if (!same(r.role, c.role) || !same(r.user, c.user) || !same(r.agent, c.agent) || !same(r.repository, c.repository) || !same(r.branch, c.branch) || !same(r.environment, c.environment))
|
|
@@ -99,8 +134,28 @@ function matches(r, c) {
|
|
|
99
134
|
return false;
|
|
100
135
|
if (r.commandLine && !glob(r.commandLine, c.command))
|
|
101
136
|
return false;
|
|
102
|
-
if (r.
|
|
103
|
-
|
|
137
|
+
if (r.commandRegex) {
|
|
138
|
+
try {
|
|
139
|
+
if (!new RegExp(r.commandRegex, "i").test(c.command))
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (r.path) {
|
|
147
|
+
const rulePath = r.path;
|
|
148
|
+
const pattern = canonicalPolicyPattern(rulePath, c.cwd) ?? rulePath;
|
|
149
|
+
const targets = c.pathTargets ?? (c.path ? [{ path: c.path, eventType: c.eventType ?? "" }] : []);
|
|
150
|
+
if (!targets.some((target) => {
|
|
151
|
+
if (r.eventType && !glob(r.eventType, target.eventType) && !glob(r.eventType, c.eventType ?? ""))
|
|
152
|
+
return false;
|
|
153
|
+
const path = canonicalPolicyPath(target.path, c.cwd) ?? target.path;
|
|
154
|
+
// A subtree restriction covers both the directory itself and its contents.
|
|
155
|
+
return glob(pattern, path) || (pattern.endsWith("/**") && glob(pattern.slice(0, -3), path)) || glob(rulePath, target.path);
|
|
156
|
+
}))
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
104
159
|
if (r.url && !glob(r.url, c.url ?? ""))
|
|
105
160
|
return false;
|
|
106
161
|
if (r.args && r.args.some((a, i) => !glob(a, c.args?.[i] ?? "")))
|
|
@@ -114,8 +169,10 @@ function matches(r, c) {
|
|
|
114
169
|
}
|
|
115
170
|
return true;
|
|
116
171
|
}
|
|
117
|
-
function specificity(r) { return [r.tool, r.command, r.commandLine, r.args?.length, r.path, r.url, r.role, r.user, r.agent, r.cwd, r.repository, r.branch, r.environment, r.time].filter(Boolean).length; }
|
|
172
|
+
function specificity(r) { return [r.eventType, r.tool, r.command, r.commandLine, r.commandRegex, r.args?.length, r.path, r.url, r.role, r.user, r.agent, r.cwd, r.repository, r.branch, r.environment, r.time].filter(Boolean).length; }
|
|
118
173
|
export function evaluate(bundle, ctx) {
|
|
174
|
+
// Use the same classifier as Activity, including argument-dependent web tools.
|
|
175
|
+
ctx = { ...ctx, eventType: ctx.eventType ?? activityType({ tool_name: ctx.tool, tool_input: ctx.input }, "tool.call") };
|
|
119
176
|
const info = riskInfo(ctx);
|
|
120
177
|
const score = info.score;
|
|
121
178
|
const base = { mode: bundle?.rules.mode ?? "observe", policyVersion: bundle?.version ?? 0, riskScore: score, riskLevel: info.level, riskFactors: info.factors, customDetectors: bundle?.rules.customDetectors ?? [], actor: ctx.user, role: ctx.role, agent: ctx.agent, tool: ctx.tool, command: ctx.command, args: ctx.args, resource: ctx.path ?? ctx.url, errors: bundle?.errors };
|
|
@@ -123,19 +180,30 @@ export function evaluate(bundle, ctx) {
|
|
|
123
180
|
return { action: "allow", ...base };
|
|
124
181
|
if (bundle.errors?.length)
|
|
125
182
|
return { action: "deny", ...base, reason: `Security policy rejected: ${bundle.errors.join("; ")}`, rule: "policy.invalid" };
|
|
126
|
-
if (bundle.
|
|
183
|
+
if (bundle.notAfter && Date.parse(bundle.notAfter) < Date.now())
|
|
127
184
|
return { action: "allow", ...base };
|
|
185
|
+
const pathTargets = bundle.rules.rules?.some((r) => r.path && (bundle.rules.mode !== "observe" || r.enforce)) ? policyPathTargets(ctx) : undefined;
|
|
186
|
+
// A manager can enforce a narrow mitigation without enabling unrelated policy
|
|
187
|
+
// rules or risk thresholds for this member's other tools and agents.
|
|
188
|
+
const mandatory = (bundle.rules.rules ?? []).filter((r) => r.enforce === true && r.action === "BLOCK" && matches(r, { ...ctx, riskScore: score, pathTargets })).sort((a, b) => specificity(b) - specificity(a))[0];
|
|
189
|
+
if (mandatory)
|
|
190
|
+
return { ...base, mode: "enforce", action: "deny", reason: mandatory.reason, policy: "local policy", rule: mandatory.id };
|
|
191
|
+
if (bundle.rules.mode === "observe")
|
|
192
|
+
return { action: "allow", ...base };
|
|
193
|
+
// A disabled agent is a suspension, so a more specific command ALLOW must not
|
|
194
|
+
// re-enable it. User-scoped bundles limit this suspension to their recipient.
|
|
195
|
+
if (bundle.rules.disabledAgents.some(a => a.toLowerCase() === ctx.agent.toLowerCase())) {
|
|
196
|
+
return { ...base, action: bundle.rules.mode === "enforce" ? "deny" : "ask", reason: `${ctx.agent} is disabled by workspace policy.`, policy: "local policy", rule: "legacy.disabled-agent" };
|
|
197
|
+
}
|
|
128
198
|
const candidates = [];
|
|
129
199
|
for (const r of bundle.rules.rules ?? [])
|
|
130
|
-
if (matches(r, { ...ctx, riskScore: score }))
|
|
200
|
+
if (matches(r, { ...ctx, riskScore: score, pathTargets }))
|
|
131
201
|
candidates.push({ r, rank: specificity(r) });
|
|
132
202
|
for (const tool of bundle.rules.blockedTools) {
|
|
133
203
|
const r = { id: `legacy.tool.${tool}`, tool, action: "BLOCK", reason: `The ${tool} tool is blocked by workspace policy.` };
|
|
134
204
|
if (matches(r, { ...ctx, riskScore: score }))
|
|
135
205
|
candidates.push({ r, rank: 1 });
|
|
136
206
|
}
|
|
137
|
-
if (bundle.rules.disabledAgents.some(a => a.toLowerCase() === ctx.agent.toLowerCase()))
|
|
138
|
-
candidates.push({ r: { id: "legacy.disabled-agent", agent: ctx.agent, action: "BLOCK", reason: `${ctx.agent} is disabled by workspace policy.` }, rank: 1 });
|
|
139
207
|
for (const pattern of bundle.rules.blockedCommandPatterns) {
|
|
140
208
|
try {
|
|
141
209
|
if (new RegExp(pattern, "i").test(ctx.command))
|