@zhin.js/agent 0.0.11 → 0.0.13
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/CHANGELOG.md +16 -0
- package/lib/builtin-tools.d.ts.map +1 -1
- package/lib/builtin-tools.js +21 -6
- package/lib/builtin-tools.js.map +1 -1
- package/lib/file-policy.d.ts +39 -0
- package/lib/file-policy.d.ts.map +1 -0
- package/lib/file-policy.js +159 -0
- package/lib/file-policy.js.map +1 -0
- package/package.json +3 -3
- package/src/builtin-tools.ts +20 -5
- package/src/file-policy.ts +185 -0
- package/tests/file-policy.test.ts +217 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @zhin.js/agent
|
|
2
2
|
|
|
3
|
+
## 0.0.13
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2510365: fix: 文件安全拦截
|
|
8
|
+
- @zhin.js/core@1.0.50
|
|
9
|
+
- @zhin.js/ai@1.0.11
|
|
10
|
+
|
|
11
|
+
## 0.0.12
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [b00b6c9]
|
|
16
|
+
- @zhin.js/core@1.0.49
|
|
17
|
+
- @zhin.js/ai@1.0.10
|
|
18
|
+
|
|
3
19
|
## 0.0.11
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-tools.d.ts","sourceRoot":"","sources":["../src/builtin-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"builtin-tools.d.ts","sourceRoot":"","sources":["../src/builtin-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAyCnF,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,QAAQ,EAAE,CA8d5E;AAmHD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAmHpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAEjE;AAaD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAclF;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAgBjE"}
|
package/lib/builtin-tools.js
CHANGED
|
@@ -20,6 +20,7 @@ import { exec } from 'child_process';
|
|
|
20
20
|
import { promisify } from 'util';
|
|
21
21
|
import { Logger } from '@zhin.js/core';
|
|
22
22
|
import { ZhinTool } from '@zhin.js/core';
|
|
23
|
+
import { assertFileAccess, checkBashCommandSafety, shellEscape } from './file-policy.js';
|
|
23
24
|
// 从新模块中 re-export 向后兼容的函数
|
|
24
25
|
export { loadSoulPersona, loadToolsGuide, loadAgentsMemory } from './bootstrap.js';
|
|
25
26
|
const execAsync = promisify(exec);
|
|
@@ -75,9 +76,8 @@ export function createBuiltinTools(options) {
|
|
|
75
76
|
.execute(async (args) => {
|
|
76
77
|
try {
|
|
77
78
|
const fp = expandHome(args.file_path);
|
|
79
|
+
assertFileAccess(fp);
|
|
78
80
|
const stat = await fs.promises.stat(fp);
|
|
79
|
-
if (!stat.isFile())
|
|
80
|
-
return `Error: Not a file: ${fp}`;
|
|
81
81
|
const content = await fs.promises.readFile(fp, 'utf-8');
|
|
82
82
|
const lines = content.split('\n');
|
|
83
83
|
const offset = args.offset ?? 0;
|
|
@@ -101,6 +101,7 @@ export function createBuiltinTools(options) {
|
|
|
101
101
|
.execute(async (args) => {
|
|
102
102
|
try {
|
|
103
103
|
const fp = expandHome(args.file_path);
|
|
104
|
+
assertFileAccess(fp);
|
|
104
105
|
await fs.promises.mkdir(path.dirname(fp), { recursive: true });
|
|
105
106
|
await fs.promises.writeFile(fp, args.content, 'utf-8');
|
|
106
107
|
return `✅ Wrote ${Buffer.byteLength(args.content)} bytes to ${fp}`;
|
|
@@ -121,6 +122,7 @@ export function createBuiltinTools(options) {
|
|
|
121
122
|
.execute(async (args) => {
|
|
122
123
|
try {
|
|
123
124
|
const fp = expandHome(args.file_path);
|
|
125
|
+
assertFileAccess(fp);
|
|
124
126
|
const content = await fs.promises.readFile(fp, 'utf-8');
|
|
125
127
|
const count = content.split(args.old_string).length - 1;
|
|
126
128
|
if (count === 0)
|
|
@@ -147,6 +149,7 @@ export function createBuiltinTools(options) {
|
|
|
147
149
|
.execute(async (args) => {
|
|
148
150
|
try {
|
|
149
151
|
const dirPath = path.resolve(process.cwd(), expandHome(args.path));
|
|
152
|
+
assertFileAccess(dirPath);
|
|
150
153
|
const stat = await fs.promises.stat(dirPath);
|
|
151
154
|
if (!stat.isDirectory()) {
|
|
152
155
|
return `Error: Not a directory: ${args.path}`;
|
|
@@ -176,7 +179,10 @@ export function createBuiltinTools(options) {
|
|
|
176
179
|
.execute(async (args) => {
|
|
177
180
|
try {
|
|
178
181
|
const cwd = args.cwd || process.cwd();
|
|
179
|
-
|
|
182
|
+
assertFileAccess(cwd);
|
|
183
|
+
// 安全转义 glob pattern 防止命令注入
|
|
184
|
+
const safePattern = shellEscape(args.pattern);
|
|
185
|
+
const { stdout } = await execAsync(`find . -path ./${safePattern} -type f 2>/dev/null | head -100`, { cwd });
|
|
180
186
|
const files = stdout.trim().split('\n').filter(Boolean);
|
|
181
187
|
return files.length === 0
|
|
182
188
|
? `No files matching '${args.pattern}'`
|
|
@@ -198,8 +204,12 @@ export function createBuiltinTools(options) {
|
|
|
198
204
|
.execute(async (args) => {
|
|
199
205
|
try {
|
|
200
206
|
const searchPath = args.path || '.';
|
|
201
|
-
|
|
202
|
-
|
|
207
|
+
assertFileAccess(path.resolve(process.cwd(), searchPath));
|
|
208
|
+
// 安全转义 pattern 和 include 参数防止命令注入
|
|
209
|
+
const safePattern = shellEscape(args.pattern);
|
|
210
|
+
const safePath = shellEscape(searchPath);
|
|
211
|
+
const includeFlag = args.include ? `--include=${shellEscape(args.include)}` : '';
|
|
212
|
+
const { stdout } = await execAsync(`grep -rn ${includeFlag} ${safePattern} ${safePath} 2>/dev/null | head -50`, { cwd: process.cwd() });
|
|
203
213
|
return stdout.trim() || `No matches for '${args.pattern}'`;
|
|
204
214
|
}
|
|
205
215
|
catch (e) {
|
|
@@ -221,7 +231,12 @@ export function createBuiltinTools(options) {
|
|
|
221
231
|
.execute(async (args) => {
|
|
222
232
|
try {
|
|
223
233
|
const timeout = args.timeout ?? 30000;
|
|
224
|
-
const
|
|
234
|
+
const cmd = String(args.command || '');
|
|
235
|
+
// 检查命令是否可能泄漏敏感信息
|
|
236
|
+
const safety = checkBashCommandSafety(cmd);
|
|
237
|
+
if (!safety.safe)
|
|
238
|
+
return `Error: ${safety.reason}`;
|
|
239
|
+
const { stdout, stderr } = await execAsync(cmd, {
|
|
225
240
|
cwd: args.cwd || process.cwd(),
|
|
226
241
|
timeout,
|
|
227
242
|
maxBuffer: 1024 * 1024,
|
package/lib/builtin-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-tools.js","sourceRoot":"","sources":["../src/builtin-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builtin-tools.js","sourceRoot":"","sources":["../src/builtin-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文件访问安全策略
|
|
3
|
+
*
|
|
4
|
+
* 防止 AI Agent 读写敏感文件(如 .env、密钥、证书等),
|
|
5
|
+
* 并将 bash/grep/glob 等工具的命令注入风险降到最低。
|
|
6
|
+
*
|
|
7
|
+
* 三层防御:
|
|
8
|
+
* 1. 敏感文件名/路径模式 — 阻止 .env、私钥、证书等
|
|
9
|
+
* 2. 敏感目录 — 阻止 .ssh, .gnupg 等
|
|
10
|
+
* 3. bash 环境变量泄漏 — 过滤 env/printenv/export 输出中的敏感值
|
|
11
|
+
*/
|
|
12
|
+
export interface FileAccessCheckResult {
|
|
13
|
+
allowed: boolean;
|
|
14
|
+
reason?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 检查文件路径是否允许被 AI Agent 访问。
|
|
18
|
+
* 该函数只做「阻止明确敏感文件」的检查,不做正向白名单。
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkFileAccess(filePath: string): FileAccessCheckResult;
|
|
21
|
+
/**
|
|
22
|
+
* 检查文件路径,若不允许则抛出 Error。
|
|
23
|
+
* 用于在工具 execute 中调用。
|
|
24
|
+
*/
|
|
25
|
+
export declare function assertFileAccess(filePath: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* 检查 bash 命令是否可能泄漏敏感环境变量或文件。
|
|
28
|
+
* 返回 { safe: true } 或 { safe: false, reason: string }。
|
|
29
|
+
*/
|
|
30
|
+
export declare function checkBashCommandSafety(command: string): {
|
|
31
|
+
safe: boolean;
|
|
32
|
+
reason?: string;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* 安全地转义 shell 参数,防止命令注入。
|
|
36
|
+
* 用单引号包裹,内部单引号用 '\'' 转义。
|
|
37
|
+
*/
|
|
38
|
+
export declare function shellEscape(arg: string): string;
|
|
39
|
+
//# sourceMappingURL=file-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-policy.d.ts","sourceRoot":"","sources":["../src/file-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwEH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAoCvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKvD;AAYD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB1F;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文件访问安全策略
|
|
3
|
+
*
|
|
4
|
+
* 防止 AI Agent 读写敏感文件(如 .env、密钥、证书等),
|
|
5
|
+
* 并将 bash/grep/glob 等工具的命令注入风险降到最低。
|
|
6
|
+
*
|
|
7
|
+
* 三层防御:
|
|
8
|
+
* 1. 敏感文件名/路径模式 — 阻止 .env、私钥、证书等
|
|
9
|
+
* 2. 敏感目录 — 阻止 .ssh, .gnupg 等
|
|
10
|
+
* 3. bash 环境变量泄漏 — 过滤 env/printenv/export 输出中的敏感值
|
|
11
|
+
*/
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import * as os from 'os';
|
|
14
|
+
// ── 敏感文件名模式 ──────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* 匹配文件基名(不含目录)的敏感模式。
|
|
17
|
+
* 大小写不敏感匹配。
|
|
18
|
+
*/
|
|
19
|
+
const SENSITIVE_BASENAME_PATTERNS = [
|
|
20
|
+
// 环境变量文件
|
|
21
|
+
/^\.env(\..*)?$/i,
|
|
22
|
+
/^\.zhin\.config(\..*)?$/i, // .env, .env.local, .env.production 等
|
|
23
|
+
// 密钥 / 证书
|
|
24
|
+
/\.pem$/i,
|
|
25
|
+
/\.key$/i,
|
|
26
|
+
/\.p12$/i,
|
|
27
|
+
/\.pfx$/i,
|
|
28
|
+
/\.jks$/i,
|
|
29
|
+
/\.keystore$/i,
|
|
30
|
+
/^id_rsa$/i,
|
|
31
|
+
/^id_ed25519$/i,
|
|
32
|
+
/^id_ecdsa$/i,
|
|
33
|
+
/^id_dsa$/i,
|
|
34
|
+
// 凭据文件
|
|
35
|
+
/^\.npmrc$/i,
|
|
36
|
+
/^\.pypirc$/i,
|
|
37
|
+
/^\.netrc$/i,
|
|
38
|
+
/^\.docker\/config\.json$/i,
|
|
39
|
+
/^credentials$/i,
|
|
40
|
+
/^credentials\.json$/i,
|
|
41
|
+
/^service[_-]?account.*\.json$/i,
|
|
42
|
+
/^token\.json$/i,
|
|
43
|
+
// 数据库 / 密码文件
|
|
44
|
+
/^\.pgpass$/i,
|
|
45
|
+
/^\.my\.cnf$/i,
|
|
46
|
+
/^\.passwd$/i,
|
|
47
|
+
// 历史文件(可能含输入的密码等)
|
|
48
|
+
/^\.bash_history$/i,
|
|
49
|
+
/^\.zsh_history$/i,
|
|
50
|
+
/^\.node_repl_history$/i,
|
|
51
|
+
/^\.python_history$/i,
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* 被完全禁止访问的目录名(在路径中任何位置出现即拦截)。
|
|
55
|
+
*/
|
|
56
|
+
const SENSITIVE_DIR_NAMES = new Set([
|
|
57
|
+
'.ssh',
|
|
58
|
+
'.gnupg',
|
|
59
|
+
'.gpg',
|
|
60
|
+
'.aws',
|
|
61
|
+
'.azure',
|
|
62
|
+
'data',
|
|
63
|
+
'.gcloud',
|
|
64
|
+
'.config/gcloud',
|
|
65
|
+
'.kube',
|
|
66
|
+
]);
|
|
67
|
+
/**
|
|
68
|
+
* 被禁止访问的绝对路径前缀(系统级敏感目录)。
|
|
69
|
+
*/
|
|
70
|
+
const SENSITIVE_PATH_PREFIXES = [
|
|
71
|
+
'/etc/shadow',
|
|
72
|
+
'/etc/gshadow',
|
|
73
|
+
'/etc/ssl/private',
|
|
74
|
+
];
|
|
75
|
+
/**
|
|
76
|
+
* 检查文件路径是否允许被 AI Agent 访问。
|
|
77
|
+
* 该函数只做「阻止明确敏感文件」的检查,不做正向白名单。
|
|
78
|
+
*/
|
|
79
|
+
export function checkFileAccess(filePath) {
|
|
80
|
+
// 解析为绝对路径
|
|
81
|
+
const resolved = path.resolve(filePath.replace(/^~/, os.homedir()));
|
|
82
|
+
const basename = path.basename(resolved);
|
|
83
|
+
const normalized = resolved.replace(/\\/g, '/');
|
|
84
|
+
// 1. 检查敏感路径前缀
|
|
85
|
+
for (const prefix of SENSITIVE_PATH_PREFIXES) {
|
|
86
|
+
if (normalized.startsWith(prefix)) {
|
|
87
|
+
return { allowed: false, reason: `拒绝访问系统敏感文件: ${prefix}` };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// 2. 检查敏感目录
|
|
91
|
+
const parts = normalized.split('/');
|
|
92
|
+
for (let i = 0; i < parts.length; i++) {
|
|
93
|
+
if (SENSITIVE_DIR_NAMES.has(parts[i])) {
|
|
94
|
+
return { allowed: false, reason: `拒绝访问敏感目录: ${parts[i]}` };
|
|
95
|
+
}
|
|
96
|
+
// 对多级目录名做拼接检查(如 .config/gcloud)
|
|
97
|
+
if (i > 0) {
|
|
98
|
+
const twoLevel = `${parts[i - 1]}/${parts[i]}`;
|
|
99
|
+
if (SENSITIVE_DIR_NAMES.has(twoLevel)) {
|
|
100
|
+
return { allowed: false, reason: `拒绝访问敏感目录: ${twoLevel}` };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// 3. 检查敏感文件名
|
|
105
|
+
for (const pattern of SENSITIVE_BASENAME_PATTERNS) {
|
|
106
|
+
if (pattern.test(basename)) {
|
|
107
|
+
return { allowed: false, reason: `拒绝访问敏感文件: ${basename} 可能包含密钥或凭据` };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { allowed: true };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 检查文件路径,若不允许则抛出 Error。
|
|
114
|
+
* 用于在工具 execute 中调用。
|
|
115
|
+
*/
|
|
116
|
+
export function assertFileAccess(filePath) {
|
|
117
|
+
const result = checkFileAccess(filePath);
|
|
118
|
+
if (!result.allowed) {
|
|
119
|
+
throw new Error(result.reason);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ── bash 输出敏感信息过滤 ───────────────────────────────────────────
|
|
123
|
+
/**
|
|
124
|
+
* 用于检测 bash 命令是否意图泄漏环境变量的模式。
|
|
125
|
+
* 匹配命令开头(支持管道前的部分)。
|
|
126
|
+
*/
|
|
127
|
+
const ENV_DUMP_COMMANDS = /^\s*(env|printenv|export|set)\b/;
|
|
128
|
+
const ENV_ECHO_PATTERN = /\$\{?\w*(KEY|SECRET|TOKEN|PASSWORD|PASS|CREDENTIAL|AUTH|APIKEY|API_KEY)\w*\}?/i;
|
|
129
|
+
const ENV_CAT_SENSITIVE = /\bcat\b.*\.(env|pem|key|p12|pfx)\b/i;
|
|
130
|
+
/**
|
|
131
|
+
* 检查 bash 命令是否可能泄漏敏感环境变量或文件。
|
|
132
|
+
* 返回 { safe: true } 或 { safe: false, reason: string }。
|
|
133
|
+
*/
|
|
134
|
+
export function checkBashCommandSafety(command) {
|
|
135
|
+
const trimmed = command.trim();
|
|
136
|
+
// 拆管道,检查每段
|
|
137
|
+
const segments = trimmed.split(/\s*\|\s*/);
|
|
138
|
+
for (const seg of segments) {
|
|
139
|
+
if (ENV_DUMP_COMMANDS.test(seg)) {
|
|
140
|
+
return { safe: false, reason: '禁止执行环境变量导出命令(env/printenv/export/set),可能泄漏密钥' };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (ENV_ECHO_PATTERN.test(trimmed)) {
|
|
144
|
+
return { safe: false, reason: '禁止通过 echo/printf 输出含密钥名的环境变量' };
|
|
145
|
+
}
|
|
146
|
+
if (ENV_CAT_SENSITIVE.test(trimmed)) {
|
|
147
|
+
return { safe: false, reason: '禁止通过 cat 读取敏感文件(.env/.pem/.key)' };
|
|
148
|
+
}
|
|
149
|
+
return { safe: true };
|
|
150
|
+
}
|
|
151
|
+
// ── 命令参数转义 ────────────────────────────────────────────────────
|
|
152
|
+
/**
|
|
153
|
+
* 安全地转义 shell 参数,防止命令注入。
|
|
154
|
+
* 用单引号包裹,内部单引号用 '\'' 转义。
|
|
155
|
+
*/
|
|
156
|
+
export function shellEscape(arg) {
|
|
157
|
+
return "'" + arg.replace(/'/g, "'\\''") + "'";
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=file-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-policy.js","sourceRoot":"","sources":["../src/file-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,2BAA2B,GAAa;IAC5C,SAAS;IACT,iBAAiB;IACjB,0BAA0B,EAAuB,sCAAsC;IACvF,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,cAAc;IACd,WAAW;IACX,eAAe;IACf,aAAa;IACb,WAAW;IACX,OAAO;IACP,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,2BAA2B;IAC3B,gBAAgB;IAChB,sBAAsB;IACtB,gCAAgC;IAChC,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,wBAAwB;IACxB,qBAAqB;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IACvD,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,SAAS;IACT,gBAAgB;IAChB,OAAO;CACR,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,uBAAuB,GAAa;IACxC,aAAa;IACb,cAAc;IACd,kBAAkB;CACnB,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,UAAU;IACV,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEhD,cAAc;IACd,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,MAAM,EAAE,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,YAAY;IACZ,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7D,CAAC;QACD,gCAAgC;QAChC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,QAAQ,EAAE,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa;IACb,KAAK,MAAM,OAAO,IAAI,2BAA2B,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,QAAQ,YAAY,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAO,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,+DAA+D;AAE/D;;;GAGG;AACH,MAAM,iBAAiB,GAAG,iCAAiC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,gFAAgF,CAAC;AAC1G,MAAM,iBAAiB,GAAG,qCAAqC,CAAC;AAEhE;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,WAAW;IACX,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;QACjF,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,iEAAiE;AAEjE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;AAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/agent",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "Zhin AI Agent — session, ZhinAgent, init; composes @zhin.js/core providers and tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"js-yaml": "^4.1.0",
|
|
17
|
-
"@zhin.js/ai": "1.0.
|
|
18
|
-
"@zhin.js/core": "1.0.
|
|
17
|
+
"@zhin.js/ai": "1.0.11",
|
|
18
|
+
"@zhin.js/core": "1.0.50"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/js-yaml": "^4.0.9",
|
package/src/builtin-tools.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { exec } from 'child_process';
|
|
|
21
21
|
import { promisify } from 'util';
|
|
22
22
|
import { Logger, type PropertySchema } from '@zhin.js/core';
|
|
23
23
|
import { ZhinTool } from '@zhin.js/core';
|
|
24
|
+
import { assertFileAccess, checkBashCommandSafety, shellEscape } from './file-policy.js';
|
|
24
25
|
|
|
25
26
|
// 从新模块中 re-export 向后兼容的函数
|
|
26
27
|
export { loadSoulPersona, loadToolsGuide, loadAgentsMemory } from './bootstrap.js';
|
|
@@ -91,8 +92,8 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
91
92
|
.execute(async (args) => {
|
|
92
93
|
try {
|
|
93
94
|
const fp = expandHome(args.file_path);
|
|
95
|
+
assertFileAccess(fp);
|
|
94
96
|
const stat = await fs.promises.stat(fp);
|
|
95
|
-
if (!stat.isFile()) return `Error: Not a file: ${fp}`;
|
|
96
97
|
const content = await fs.promises.readFile(fp, 'utf-8');
|
|
97
98
|
const lines = content.split('\n');
|
|
98
99
|
const offset = args.offset ?? 0;
|
|
@@ -118,6 +119,7 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
118
119
|
.execute(async (args) => {
|
|
119
120
|
try {
|
|
120
121
|
const fp = expandHome(args.file_path);
|
|
122
|
+
assertFileAccess(fp);
|
|
121
123
|
await fs.promises.mkdir(path.dirname(fp), { recursive: true });
|
|
122
124
|
await fs.promises.writeFile(fp, args.content, 'utf-8');
|
|
123
125
|
return `✅ Wrote ${Buffer.byteLength(args.content)} bytes to ${fp}`;
|
|
@@ -140,6 +142,7 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
140
142
|
.execute(async (args) => {
|
|
141
143
|
try {
|
|
142
144
|
const fp = expandHome(args.file_path);
|
|
145
|
+
assertFileAccess(fp);
|
|
143
146
|
const content = await fs.promises.readFile(fp, 'utf-8');
|
|
144
147
|
const count = content.split(args.old_string).length - 1;
|
|
145
148
|
if (count === 0) return `Error: old_string not found in file. Make sure it matches exactly.`;
|
|
@@ -167,6 +170,7 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
167
170
|
.execute(async (args) => {
|
|
168
171
|
try {
|
|
169
172
|
const dirPath = path.resolve(process.cwd(), expandHome(args.path));
|
|
173
|
+
assertFileAccess(dirPath);
|
|
170
174
|
const stat = await fs.promises.stat(dirPath);
|
|
171
175
|
if (!stat.isDirectory()) {
|
|
172
176
|
return `Error: Not a directory: ${args.path}`;
|
|
@@ -198,8 +202,11 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
198
202
|
.execute(async (args) => {
|
|
199
203
|
try {
|
|
200
204
|
const cwd = args.cwd || process.cwd();
|
|
205
|
+
assertFileAccess(cwd);
|
|
206
|
+
// 安全转义 glob pattern 防止命令注入
|
|
207
|
+
const safePattern = shellEscape(args.pattern);
|
|
201
208
|
const { stdout } = await execAsync(
|
|
202
|
-
`find . -path
|
|
209
|
+
`find . -path ./${safePattern} -type f 2>/dev/null | head -100`,
|
|
203
210
|
{ cwd },
|
|
204
211
|
);
|
|
205
212
|
const files = stdout.trim().split('\n').filter(Boolean);
|
|
@@ -225,9 +232,13 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
225
232
|
.execute(async (args) => {
|
|
226
233
|
try {
|
|
227
234
|
const searchPath = args.path || '.';
|
|
228
|
-
|
|
235
|
+
assertFileAccess(path.resolve(process.cwd(), searchPath));
|
|
236
|
+
// 安全转义 pattern 和 include 参数防止命令注入
|
|
237
|
+
const safePattern = shellEscape(args.pattern);
|
|
238
|
+
const safePath = shellEscape(searchPath);
|
|
239
|
+
const includeFlag = args.include ? `--include=${shellEscape(args.include)}` : '';
|
|
229
240
|
const { stdout } = await execAsync(
|
|
230
|
-
`grep -rn ${includeFlag}
|
|
241
|
+
`grep -rn ${includeFlag} ${safePattern} ${safePath} 2>/dev/null | head -50`,
|
|
231
242
|
{ cwd: process.cwd() },
|
|
232
243
|
);
|
|
233
244
|
return stdout.trim() || `No matches for '${args.pattern}'`;
|
|
@@ -252,7 +263,11 @@ export function createBuiltinTools(options?: BuiltinToolsOptions): ZhinTool[] {
|
|
|
252
263
|
.execute(async (args) => {
|
|
253
264
|
try {
|
|
254
265
|
const timeout = args.timeout ?? 30000;
|
|
255
|
-
const
|
|
266
|
+
const cmd = String(args.command || '');
|
|
267
|
+
// 检查命令是否可能泄漏敏感信息
|
|
268
|
+
const safety = checkBashCommandSafety(cmd);
|
|
269
|
+
if (!safety.safe) return `Error: ${safety.reason}`;
|
|
270
|
+
const { stdout, stderr } = await execAsync(cmd, {
|
|
256
271
|
cwd: args.cwd || process.cwd(),
|
|
257
272
|
timeout,
|
|
258
273
|
maxBuffer: 1024 * 1024,
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文件访问安全策略
|
|
3
|
+
*
|
|
4
|
+
* 防止 AI Agent 读写敏感文件(如 .env、密钥、证书等),
|
|
5
|
+
* 并将 bash/grep/glob 等工具的命令注入风险降到最低。
|
|
6
|
+
*
|
|
7
|
+
* 三层防御:
|
|
8
|
+
* 1. 敏感文件名/路径模式 — 阻止 .env、私钥、证书等
|
|
9
|
+
* 2. 敏感目录 — 阻止 .ssh, .gnupg 等
|
|
10
|
+
* 3. bash 环境变量泄漏 — 过滤 env/printenv/export 输出中的敏感值
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import * as os from 'os';
|
|
15
|
+
|
|
16
|
+
// ── 敏感文件名模式 ──────────────────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 匹配文件基名(不含目录)的敏感模式。
|
|
20
|
+
* 大小写不敏感匹配。
|
|
21
|
+
*/
|
|
22
|
+
const SENSITIVE_BASENAME_PATTERNS: RegExp[] = [
|
|
23
|
+
// 环境变量文件
|
|
24
|
+
/^\.env(\..*)?$/i,
|
|
25
|
+
/^\.zhin\.config(\..*)?$/i, // .env, .env.local, .env.production 等
|
|
26
|
+
// 密钥 / 证书
|
|
27
|
+
/\.pem$/i,
|
|
28
|
+
/\.key$/i,
|
|
29
|
+
/\.p12$/i,
|
|
30
|
+
/\.pfx$/i,
|
|
31
|
+
/\.jks$/i,
|
|
32
|
+
/\.keystore$/i,
|
|
33
|
+
/^id_rsa$/i,
|
|
34
|
+
/^id_ed25519$/i,
|
|
35
|
+
/^id_ecdsa$/i,
|
|
36
|
+
/^id_dsa$/i,
|
|
37
|
+
// 凭据文件
|
|
38
|
+
/^\.npmrc$/i,
|
|
39
|
+
/^\.pypirc$/i,
|
|
40
|
+
/^\.netrc$/i,
|
|
41
|
+
/^\.docker\/config\.json$/i,
|
|
42
|
+
/^credentials$/i,
|
|
43
|
+
/^credentials\.json$/i,
|
|
44
|
+
/^service[_-]?account.*\.json$/i,
|
|
45
|
+
/^token\.json$/i,
|
|
46
|
+
// 数据库 / 密码文件
|
|
47
|
+
/^\.pgpass$/i,
|
|
48
|
+
/^\.my\.cnf$/i,
|
|
49
|
+
/^\.passwd$/i,
|
|
50
|
+
// 历史文件(可能含输入的密码等)
|
|
51
|
+
/^\.bash_history$/i,
|
|
52
|
+
/^\.zsh_history$/i,
|
|
53
|
+
/^\.node_repl_history$/i,
|
|
54
|
+
/^\.python_history$/i,
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 被完全禁止访问的目录名(在路径中任何位置出现即拦截)。
|
|
59
|
+
*/
|
|
60
|
+
const SENSITIVE_DIR_NAMES: ReadonlySet<string> = new Set([
|
|
61
|
+
'.ssh',
|
|
62
|
+
'.gnupg',
|
|
63
|
+
'.gpg',
|
|
64
|
+
'.aws',
|
|
65
|
+
'.azure',
|
|
66
|
+
'data',
|
|
67
|
+
'.gcloud',
|
|
68
|
+
'.config/gcloud',
|
|
69
|
+
'.kube',
|
|
70
|
+
]);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 被禁止访问的绝对路径前缀(系统级敏感目录)。
|
|
74
|
+
*/
|
|
75
|
+
const SENSITIVE_PATH_PREFIXES: string[] = [
|
|
76
|
+
'/etc/shadow',
|
|
77
|
+
'/etc/gshadow',
|
|
78
|
+
'/etc/ssl/private',
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
// ── 核心检查函数 ────────────────────────────────────────────────────
|
|
82
|
+
|
|
83
|
+
export interface FileAccessCheckResult {
|
|
84
|
+
allowed: boolean;
|
|
85
|
+
reason?: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* 检查文件路径是否允许被 AI Agent 访问。
|
|
90
|
+
* 该函数只做「阻止明确敏感文件」的检查,不做正向白名单。
|
|
91
|
+
*/
|
|
92
|
+
export function checkFileAccess(filePath: string): FileAccessCheckResult {
|
|
93
|
+
// 解析为绝对路径
|
|
94
|
+
const resolved = path.resolve(filePath.replace(/^~/, os.homedir()));
|
|
95
|
+
const basename = path.basename(resolved);
|
|
96
|
+
const normalized = resolved.replace(/\\/g, '/');
|
|
97
|
+
|
|
98
|
+
// 1. 检查敏感路径前缀
|
|
99
|
+
for (const prefix of SENSITIVE_PATH_PREFIXES) {
|
|
100
|
+
if (normalized.startsWith(prefix)) {
|
|
101
|
+
return { allowed: false, reason: `拒绝访问系统敏感文件: ${prefix}` };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 2. 检查敏感目录
|
|
106
|
+
const parts = normalized.split('/');
|
|
107
|
+
for (let i = 0; i < parts.length; i++) {
|
|
108
|
+
if (SENSITIVE_DIR_NAMES.has(parts[i])) {
|
|
109
|
+
return { allowed: false, reason: `拒绝访问敏感目录: ${parts[i]}` };
|
|
110
|
+
}
|
|
111
|
+
// 对多级目录名做拼接检查(如 .config/gcloud)
|
|
112
|
+
if (i > 0) {
|
|
113
|
+
const twoLevel = `${parts[i - 1]}/${parts[i]}`;
|
|
114
|
+
if (SENSITIVE_DIR_NAMES.has(twoLevel)) {
|
|
115
|
+
return { allowed: false, reason: `拒绝访问敏感目录: ${twoLevel}` };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// 3. 检查敏感文件名
|
|
121
|
+
for (const pattern of SENSITIVE_BASENAME_PATTERNS) {
|
|
122
|
+
if (pattern.test(basename)) {
|
|
123
|
+
return { allowed: false, reason: `拒绝访问敏感文件: ${basename} 可能包含密钥或凭据` };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return { allowed: true };
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* 检查文件路径,若不允许则抛出 Error。
|
|
132
|
+
* 用于在工具 execute 中调用。
|
|
133
|
+
*/
|
|
134
|
+
export function assertFileAccess(filePath: string): void {
|
|
135
|
+
const result = checkFileAccess(filePath);
|
|
136
|
+
if (!result.allowed) {
|
|
137
|
+
throw new Error(result.reason!);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ── bash 输出敏感信息过滤 ───────────────────────────────────────────
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 用于检测 bash 命令是否意图泄漏环境变量的模式。
|
|
145
|
+
* 匹配命令开头(支持管道前的部分)。
|
|
146
|
+
*/
|
|
147
|
+
const ENV_DUMP_COMMANDS = /^\s*(env|printenv|export|set)\b/;
|
|
148
|
+
const ENV_ECHO_PATTERN = /\$\{?\w*(KEY|SECRET|TOKEN|PASSWORD|PASS|CREDENTIAL|AUTH|APIKEY|API_KEY)\w*\}?/i;
|
|
149
|
+
const ENV_CAT_SENSITIVE = /\bcat\b.*\.(env|pem|key|p12|pfx)\b/i;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 检查 bash 命令是否可能泄漏敏感环境变量或文件。
|
|
153
|
+
* 返回 { safe: true } 或 { safe: false, reason: string }。
|
|
154
|
+
*/
|
|
155
|
+
export function checkBashCommandSafety(command: string): { safe: boolean; reason?: string } {
|
|
156
|
+
const trimmed = command.trim();
|
|
157
|
+
|
|
158
|
+
// 拆管道,检查每段
|
|
159
|
+
const segments = trimmed.split(/\s*\|\s*/);
|
|
160
|
+
for (const seg of segments) {
|
|
161
|
+
if (ENV_DUMP_COMMANDS.test(seg)) {
|
|
162
|
+
return { safe: false, reason: '禁止执行环境变量导出命令(env/printenv/export/set),可能泄漏密钥' };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (ENV_ECHO_PATTERN.test(trimmed)) {
|
|
167
|
+
return { safe: false, reason: '禁止通过 echo/printf 输出含密钥名的环境变量' };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (ENV_CAT_SENSITIVE.test(trimmed)) {
|
|
171
|
+
return { safe: false, reason: '禁止通过 cat 读取敏感文件(.env/.pem/.key)' };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return { safe: true };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ── 命令参数转义 ────────────────────────────────────────────────────
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* 安全地转义 shell 参数,防止命令注入。
|
|
181
|
+
* 用单引号包裹,内部单引号用 '\'' 转义。
|
|
182
|
+
*/
|
|
183
|
+
export function shellEscape(arg: string): string {
|
|
184
|
+
return "'" + arg.replace(/'/g, "'\\''") + "'";
|
|
185
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { checkFileAccess, assertFileAccess, checkBashCommandSafety, shellEscape } from '../src/file-policy.js';
|
|
3
|
+
|
|
4
|
+
describe('file-policy', () => {
|
|
5
|
+
// ── checkFileAccess ──
|
|
6
|
+
|
|
7
|
+
describe('checkFileAccess', () => {
|
|
8
|
+
describe('应阻止敏感文件', () => {
|
|
9
|
+
const blocked = [
|
|
10
|
+
'.env',
|
|
11
|
+
'.env.local',
|
|
12
|
+
'.env.production',
|
|
13
|
+
'.env.development.local',
|
|
14
|
+
'id_rsa',
|
|
15
|
+
'id_ed25519',
|
|
16
|
+
'server.pem',
|
|
17
|
+
'private.key',
|
|
18
|
+
'cert.p12',
|
|
19
|
+
'keystore.pfx',
|
|
20
|
+
'store.jks',
|
|
21
|
+
'app.keystore',
|
|
22
|
+
'.npmrc',
|
|
23
|
+
'.pypirc',
|
|
24
|
+
'.netrc',
|
|
25
|
+
'credentials',
|
|
26
|
+
'credentials.json',
|
|
27
|
+
'service_account.json',
|
|
28
|
+
'service-account-key.json',
|
|
29
|
+
'token.json',
|
|
30
|
+
'.pgpass',
|
|
31
|
+
'.my.cnf',
|
|
32
|
+
'.passwd',
|
|
33
|
+
'.bash_history',
|
|
34
|
+
'.zsh_history',
|
|
35
|
+
'.node_repl_history',
|
|
36
|
+
'.python_history',
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
for (const name of blocked) {
|
|
40
|
+
it(`阻止 ${name}`, () => {
|
|
41
|
+
const result = checkFileAccess(`/home/user/${name}`);
|
|
42
|
+
expect(result.allowed).toBe(false);
|
|
43
|
+
expect(result.reason).toBeTruthy();
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
describe('应阻止敏感目录', () => {
|
|
49
|
+
const blockedPaths = [
|
|
50
|
+
'/home/user/.ssh/id_rsa.pub',
|
|
51
|
+
'/home/user/.gnupg/secring.gpg',
|
|
52
|
+
'/home/user/.aws/credentials',
|
|
53
|
+
'/home/user/.azure/config',
|
|
54
|
+
'/home/user/.gcloud/properties',
|
|
55
|
+
'/home/user/.kube/config',
|
|
56
|
+
'/root/.ssh/authorized_keys',
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
for (const p of blockedPaths) {
|
|
60
|
+
it(`阻止 ${p}`, () => {
|
|
61
|
+
const result = checkFileAccess(p);
|
|
62
|
+
expect(result.allowed).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('应阻止系统敏感路径', () => {
|
|
68
|
+
it('阻止 /etc/shadow', () => {
|
|
69
|
+
expect(checkFileAccess('/etc/shadow').allowed).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('阻止 /etc/gshadow', () => {
|
|
73
|
+
expect(checkFileAccess('/etc/gshadow').allowed).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('阻止 /etc/ssl/private/key.pem', () => {
|
|
77
|
+
expect(checkFileAccess('/etc/ssl/private/key.pem').allowed).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe('应允许正常文件', () => {
|
|
82
|
+
const allowed = [
|
|
83
|
+
'/home/user/project/src/index.ts',
|
|
84
|
+
'/home/user/project/package.json',
|
|
85
|
+
'/home/user/project/README.md',
|
|
86
|
+
'/home/user/project/tsconfig.json',
|
|
87
|
+
'./src/utils.ts',
|
|
88
|
+
'data/memory/notes.md',
|
|
89
|
+
'/tmp/test.txt',
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
for (const p of allowed) {
|
|
93
|
+
it(`允许 ${p}`, () => {
|
|
94
|
+
expect(checkFileAccess(p).allowed).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// ── assertFileAccess ──
|
|
101
|
+
|
|
102
|
+
describe('assertFileAccess', () => {
|
|
103
|
+
it('对敏感文件抛出错误', () => {
|
|
104
|
+
expect(() => assertFileAccess('/home/user/.env')).toThrow('敏感文件');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('对正常文件不抛出', () => {
|
|
108
|
+
expect(() => assertFileAccess('/home/user/src/index.ts')).not.toThrow();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// ── checkBashCommandSafety ──
|
|
113
|
+
|
|
114
|
+
describe('checkBashCommandSafety', () => {
|
|
115
|
+
describe('应阻止环境变量泄漏命令', () => {
|
|
116
|
+
const blocked = [
|
|
117
|
+
'env',
|
|
118
|
+
'printenv',
|
|
119
|
+
'export',
|
|
120
|
+
'set',
|
|
121
|
+
'env | grep SECRET',
|
|
122
|
+
'printenv TOKEN',
|
|
123
|
+
' env ',
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
for (const cmd of blocked) {
|
|
127
|
+
it(`阻止: ${cmd}`, () => {
|
|
128
|
+
const result = checkBashCommandSafety(cmd);
|
|
129
|
+
expect(result.safe).toBe(false);
|
|
130
|
+
expect(result.reason).toContain('环境变量');
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
describe('应阻止 echo 敏感环境变量', () => {
|
|
136
|
+
const blocked = [
|
|
137
|
+
'echo $SECRET_KEY',
|
|
138
|
+
'echo ${API_KEY}',
|
|
139
|
+
'echo $TOKEN',
|
|
140
|
+
'echo $PASSWORD',
|
|
141
|
+
'printf "%s" $AUTH_TOKEN',
|
|
142
|
+
'echo $MY_CREDENTIAL',
|
|
143
|
+
];
|
|
144
|
+
|
|
145
|
+
for (const cmd of blocked) {
|
|
146
|
+
it(`阻止: ${cmd}`, () => {
|
|
147
|
+
expect(checkBashCommandSafety(cmd).safe).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe('应阻止 cat 敏感文件', () => {
|
|
153
|
+
const blocked = [
|
|
154
|
+
'cat .env',
|
|
155
|
+
'cat /path/to/.env.local',
|
|
156
|
+
'cat server.pem',
|
|
157
|
+
'cat private.key',
|
|
158
|
+
'cat cert.p12',
|
|
159
|
+
];
|
|
160
|
+
|
|
161
|
+
for (const cmd of blocked) {
|
|
162
|
+
it(`阻止: ${cmd}`, () => {
|
|
163
|
+
expect(checkBashCommandSafety(cmd).safe).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
describe('应允许安全命令', () => {
|
|
169
|
+
const safe = [
|
|
170
|
+
'ls -la',
|
|
171
|
+
'cat README.md',
|
|
172
|
+
'node --version',
|
|
173
|
+
'pnpm install',
|
|
174
|
+
'git status',
|
|
175
|
+
'tsc --build',
|
|
176
|
+
'echo "hello world"',
|
|
177
|
+
'grep -rn "function" src/',
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
for (const cmd of safe) {
|
|
181
|
+
it(`允许: ${cmd}`, () => {
|
|
182
|
+
expect(checkBashCommandSafety(cmd).safe).toBe(true);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// ── shellEscape ──
|
|
189
|
+
|
|
190
|
+
describe('shellEscape', () => {
|
|
191
|
+
it('普通字符串加引号', () => {
|
|
192
|
+
expect(shellEscape('hello')).toBe("'hello'");
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('转义单引号', () => {
|
|
196
|
+
expect(shellEscape("it's")).toBe("'it'\\''s'");
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('空字符串', () => {
|
|
200
|
+
expect(shellEscape('')).toBe("''");
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it('含特殊字符', () => {
|
|
204
|
+
const escaped = shellEscape('$(rm -rf /)');
|
|
205
|
+
expect(escaped).toBe("'$(rm -rf /)'");
|
|
206
|
+
// 被单引号包裹后 shell 不会执行内部的命令替换
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('含分号', () => {
|
|
210
|
+
expect(shellEscape('foo; rm -rf /')).toBe("'foo; rm -rf /'");
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it('含反引号', () => {
|
|
214
|
+
expect(shellEscape('`whoami`')).toBe("'`whoami`'");
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|