@dotsetlabs/tollgate 0.1.0
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/LICENSE +21 -0
- package/README.md +885 -0
- package/dist/analyzers/filesystem.d.ts +26 -0
- package/dist/analyzers/filesystem.d.ts.map +1 -0
- package/dist/analyzers/filesystem.js +284 -0
- package/dist/analyzers/filesystem.js.map +1 -0
- package/dist/analyzers/http.d.ts +90 -0
- package/dist/analyzers/http.d.ts.map +1 -0
- package/dist/analyzers/http.js +433 -0
- package/dist/analyzers/http.js.map +1 -0
- package/dist/analyzers/index.d.ts +101 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +342 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/loader.d.ts +114 -0
- package/dist/analyzers/loader.d.ts.map +1 -0
- package/dist/analyzers/loader.js +184 -0
- package/dist/analyzers/loader.js.map +1 -0
- package/dist/analyzers/prompt-injection.d.ts +95 -0
- package/dist/analyzers/prompt-injection.d.ts.map +1 -0
- package/dist/analyzers/prompt-injection.js +725 -0
- package/dist/analyzers/prompt-injection.js.map +1 -0
- package/dist/analyzers/sdk.d.ts +230 -0
- package/dist/analyzers/sdk.d.ts.map +1 -0
- package/dist/analyzers/sdk.js +283 -0
- package/dist/analyzers/sdk.js.map +1 -0
- package/dist/analyzers/shell.d.ts +20 -0
- package/dist/analyzers/shell.d.ts.map +1 -0
- package/dist/analyzers/shell.js +297 -0
- package/dist/analyzers/shell.js.map +1 -0
- package/dist/analyzers/sql.d.ts +37 -0
- package/dist/analyzers/sql.d.ts.map +1 -0
- package/dist/analyzers/sql.js +455 -0
- package/dist/analyzers/sql.js.map +1 -0
- package/dist/analyzers/types.d.ts +117 -0
- package/dist/analyzers/types.d.ts.map +1 -0
- package/dist/analyzers/types.js +46 -0
- package/dist/analyzers/types.js.map +1 -0
- package/dist/approval/interactive.d.ts +72 -0
- package/dist/approval/interactive.d.ts.map +1 -0
- package/dist/approval/interactive.js +550 -0
- package/dist/approval/interactive.js.map +1 -0
- package/dist/approval/terminal.d.ts +59 -0
- package/dist/approval/terminal.d.ts.map +1 -0
- package/dist/approval/terminal.js +238 -0
- package/dist/approval/terminal.js.map +1 -0
- package/dist/approval/types.d.ts +66 -0
- package/dist/approval/types.d.ts.map +1 -0
- package/dist/approval/types.js +2 -0
- package/dist/approval/types.js.map +1 -0
- package/dist/audit/exporter.d.ts +138 -0
- package/dist/audit/exporter.d.ts.map +1 -0
- package/dist/audit/exporter.js +366 -0
- package/dist/audit/exporter.js.map +1 -0
- package/dist/audit/logger.d.ts +156 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/logger.js +406 -0
- package/dist/audit/logger.js.map +1 -0
- package/dist/audit/redaction.d.ts +110 -0
- package/dist/audit/redaction.d.ts.map +1 -0
- package/dist/audit/redaction.js +307 -0
- package/dist/audit/redaction.js.map +1 -0
- package/dist/audit/schema.d.ts +76 -0
- package/dist/audit/schema.d.ts.map +1 -0
- package/dist/audit/schema.js +122 -0
- package/dist/audit/schema.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +34 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +431 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/export.d.ts +18 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +63 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/init.d.ts +12 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +102 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +11 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +60 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +29 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +251 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +26 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +424 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/start.d.ts +20 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +82 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +10 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +42 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/templates.d.ts +26 -0
- package/dist/cli/commands/templates.d.ts.map +1 -0
- package/dist/cli/commands/templates.js +221 -0
- package/dist/cli/commands/templates.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +12 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +107 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/wrap.d.ts +19 -0
- package/dist/cli/commands/wrap.d.ts.map +1 -0
- package/dist/cli/commands/wrap.js +59 -0
- package/dist/cli/commands/wrap.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +202 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui.d.ts +139 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +271 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/constants.d.ts +33 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +54 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +28 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +37 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/index.d.ts +11 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +10 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/manager.d.ts +127 -0
- package/dist/orchestrator/manager.d.ts.map +1 -0
- package/dist/orchestrator/manager.js +498 -0
- package/dist/orchestrator/manager.js.map +1 -0
- package/dist/orchestrator/types.d.ts +141 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +9 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/policy/engine.d.ts +55 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +288 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/natural-language.d.ts +141 -0
- package/dist/policy/natural-language.d.ts.map +1 -0
- package/dist/policy/natural-language.js +552 -0
- package/dist/policy/natural-language.js.map +1 -0
- package/dist/policy/parser.d.ts +141 -0
- package/dist/policy/parser.d.ts.map +1 -0
- package/dist/policy/parser.js +314 -0
- package/dist/policy/parser.js.map +1 -0
- package/dist/policy/types.d.ts +428 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +32 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/policy/validator.d.ts +72 -0
- package/dist/policy/validator.d.ts.map +1 -0
- package/dist/policy/validator.js +453 -0
- package/dist/policy/validator.js.map +1 -0
- package/dist/proxy/bridge.d.ts +84 -0
- package/dist/proxy/bridge.d.ts.map +1 -0
- package/dist/proxy/bridge.js +217 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/client.d.ts +130 -0
- package/dist/proxy/client.d.ts.map +1 -0
- package/dist/proxy/client.js +290 -0
- package/dist/proxy/client.js.map +1 -0
- package/dist/proxy/server.d.ts +111 -0
- package/dist/proxy/server.d.ts.map +1 -0
- package/dist/proxy/server.js +444 -0
- package/dist/proxy/server.js.map +1 -0
- package/dist/scanner.d.ts +91 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +373 -0
- package/dist/scanner.js.map +1 -0
- package/dist/session/index.d.ts +32 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +31 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +166 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +454 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/sqlite-store.d.ts +54 -0
- package/dist/session/sqlite-store.d.ts.map +1 -0
- package/dist/session/sqlite-store.js +209 -0
- package/dist/session/sqlite-store.js.map +1 -0
- package/dist/session/types.d.ts +179 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +38 -0
- package/dist/session/types.js.map +1 -0
- package/dist/templates.d.ts +64 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +451 -0
- package/dist/templates.js.map +1 -0
- package/dist/utils/config.d.ts +57 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +104 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/errors.d.ts +18 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +35 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +144 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +300 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wizard.d.ts +68 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +395 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AnalysisResult, ContentAnalyzer, AnalyzerContext } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Filesystem Path Analyzer
|
|
4
|
+
*
|
|
5
|
+
* Classifies filesystem operations by risk level based on:
|
|
6
|
+
* - Path location (system dirs, home dir, project dirs)
|
|
7
|
+
* - File type (sensitive files like .env, .ssh)
|
|
8
|
+
* - Operation type (read vs write vs delete)
|
|
9
|
+
*/
|
|
10
|
+
export declare class FilesystemAnalyzer implements ContentAnalyzer {
|
|
11
|
+
readonly name = "filesystem";
|
|
12
|
+
private readonly FORBIDDEN_PATHS;
|
|
13
|
+
private readonly DANGEROUS_PATHS;
|
|
14
|
+
private readonly SENSITIVE_PATTERNS;
|
|
15
|
+
private readonly IMPORTANT_PATTERNS;
|
|
16
|
+
analyze(path: string, context?: AnalyzerContext): AnalysisResult;
|
|
17
|
+
private inferOperation;
|
|
18
|
+
private normalizePath;
|
|
19
|
+
private hasPathTraversal;
|
|
20
|
+
private hasDangerousGlob;
|
|
21
|
+
private matchesForbiddenPath;
|
|
22
|
+
private matchesDangerousPath;
|
|
23
|
+
private matchesSensitivePattern;
|
|
24
|
+
private matchesImportantPattern;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/analyzers/filesystem.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnF;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,QAAQ,CAAC,IAAI,gBAAgB;IAG7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAgB9B;IAGF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAS9B;IAGF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAgBjC;IAGF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAajC;IAEF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,cAAc;IA6GhE,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,uBAAuB;CAQhC"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { normalize, isAbsolute } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Filesystem Path Analyzer
|
|
5
|
+
*
|
|
6
|
+
* Classifies filesystem operations by risk level based on:
|
|
7
|
+
* - Path location (system dirs, home dir, project dirs)
|
|
8
|
+
* - File type (sensitive files like .env, .ssh)
|
|
9
|
+
* - Operation type (read vs write vs delete)
|
|
10
|
+
*/
|
|
11
|
+
export class FilesystemAnalyzer {
|
|
12
|
+
name = 'filesystem';
|
|
13
|
+
// Paths that should NEVER be modified
|
|
14
|
+
FORBIDDEN_PATHS = [
|
|
15
|
+
'/',
|
|
16
|
+
'/etc',
|
|
17
|
+
'/usr',
|
|
18
|
+
'/bin',
|
|
19
|
+
'/sbin',
|
|
20
|
+
'/var',
|
|
21
|
+
'/boot',
|
|
22
|
+
'/lib',
|
|
23
|
+
'/lib64',
|
|
24
|
+
'/System', // macOS
|
|
25
|
+
'/Applications', // macOS (system apps)
|
|
26
|
+
'/Windows', // Windows
|
|
27
|
+
'/Program Files', // Windows
|
|
28
|
+
'C:\\Windows', // Windows
|
|
29
|
+
'C:\\Program Files', // Windows
|
|
30
|
+
];
|
|
31
|
+
// Paths that are dangerous to modify
|
|
32
|
+
DANGEROUS_PATHS = [
|
|
33
|
+
homedir(), // Home directory root
|
|
34
|
+
`${homedir()}/.ssh`,
|
|
35
|
+
`${homedir()}/.gnupg`,
|
|
36
|
+
`${homedir()}/.aws`,
|
|
37
|
+
`${homedir()}/.kube`,
|
|
38
|
+
`${homedir()}/.config`,
|
|
39
|
+
'/tmp',
|
|
40
|
+
'/var/tmp',
|
|
41
|
+
];
|
|
42
|
+
// Sensitive file patterns
|
|
43
|
+
SENSITIVE_PATTERNS = [
|
|
44
|
+
/\.env($|\.)/, // .env, .env.local, .env.production
|
|
45
|
+
/\.pem$/, // SSL certificates
|
|
46
|
+
/\.key$/, // Private keys
|
|
47
|
+
/\.crt$/, // Certificates
|
|
48
|
+
/id_rsa/, // SSH keys
|
|
49
|
+
/id_ed25519/, // SSH keys
|
|
50
|
+
/\.gitconfig$/,
|
|
51
|
+
/\.npmrc$/,
|
|
52
|
+
/\.pypirc$/,
|
|
53
|
+
/credentials/i,
|
|
54
|
+
/secrets?\.ya?ml$/i,
|
|
55
|
+
/password/i,
|
|
56
|
+
/\.htpasswd$/,
|
|
57
|
+
/shadow$/, // Unix password file
|
|
58
|
+
/authorized_keys$/,
|
|
59
|
+
];
|
|
60
|
+
// Files that are important but less sensitive
|
|
61
|
+
IMPORTANT_PATTERNS = [
|
|
62
|
+
/\.git\//, // Git directory
|
|
63
|
+
/\.gitignore$/,
|
|
64
|
+
/package\.json$/,
|
|
65
|
+
/package-lock\.json$/,
|
|
66
|
+
/yarn\.lock$/,
|
|
67
|
+
/Cargo\.toml$/,
|
|
68
|
+
/go\.mod$/,
|
|
69
|
+
/requirements\.txt$/,
|
|
70
|
+
/Dockerfile$/,
|
|
71
|
+
/docker-compose\.ya?ml$/,
|
|
72
|
+
/\.github\//,
|
|
73
|
+
/\.gitlab-ci\.yml$/,
|
|
74
|
+
];
|
|
75
|
+
analyze(path, context) {
|
|
76
|
+
const operation = this.inferOperation(context?.tool);
|
|
77
|
+
const normalizedPath = this.normalizePath(path);
|
|
78
|
+
// Check for path traversal attempts
|
|
79
|
+
if (this.hasPathTraversal(path)) {
|
|
80
|
+
return {
|
|
81
|
+
risk: 'dangerous',
|
|
82
|
+
reason: 'Path traversal detected (..) - potential escape attempt',
|
|
83
|
+
triggers: ['path traversal'],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Check for glob patterns that could match too much
|
|
87
|
+
if (this.hasDangerousGlob(path)) {
|
|
88
|
+
return {
|
|
89
|
+
risk: operation === 'read' ? 'write' : 'dangerous',
|
|
90
|
+
reason: 'Glob pattern could match many files',
|
|
91
|
+
triggers: ['dangerous glob'],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Check forbidden paths
|
|
95
|
+
const forbiddenMatch = this.matchesForbiddenPath(normalizedPath);
|
|
96
|
+
if (forbiddenMatch) {
|
|
97
|
+
return {
|
|
98
|
+
risk: 'dangerous',
|
|
99
|
+
reason: `Path is in forbidden system directory: ${forbiddenMatch}`,
|
|
100
|
+
triggers: [forbiddenMatch],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Check dangerous paths (stricter for write/delete)
|
|
104
|
+
const dangerousMatch = this.matchesDangerousPath(normalizedPath);
|
|
105
|
+
if (dangerousMatch) {
|
|
106
|
+
if (operation === 'delete') {
|
|
107
|
+
return {
|
|
108
|
+
risk: 'dangerous',
|
|
109
|
+
reason: `Cannot delete from protected directory: ${dangerousMatch}`,
|
|
110
|
+
triggers: [dangerousMatch],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (operation === 'write') {
|
|
114
|
+
return {
|
|
115
|
+
risk: 'destructive',
|
|
116
|
+
reason: `Writing to protected directory: ${dangerousMatch}`,
|
|
117
|
+
triggers: [dangerousMatch],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// Read is allowed but noted
|
|
121
|
+
return {
|
|
122
|
+
risk: 'read',
|
|
123
|
+
reason: `Reading from protected directory: ${dangerousMatch}`,
|
|
124
|
+
triggers: [dangerousMatch],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Check sensitive file patterns
|
|
128
|
+
const sensitiveMatch = this.matchesSensitivePattern(normalizedPath);
|
|
129
|
+
if (sensitiveMatch) {
|
|
130
|
+
if (operation === 'delete') {
|
|
131
|
+
return {
|
|
132
|
+
risk: 'dangerous',
|
|
133
|
+
reason: `Cannot delete sensitive file matching: ${sensitiveMatch}`,
|
|
134
|
+
triggers: [sensitiveMatch],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
risk: operation === 'read' ? 'write' : 'destructive',
|
|
139
|
+
reason: `${operation === 'read' ? 'Reading' : 'Modifying'} sensitive file: ${sensitiveMatch}`,
|
|
140
|
+
triggers: [sensitiveMatch],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Check important file patterns
|
|
144
|
+
const importantMatch = this.matchesImportantPattern(normalizedPath);
|
|
145
|
+
if (importantMatch && operation !== 'read') {
|
|
146
|
+
return {
|
|
147
|
+
risk: 'write',
|
|
148
|
+
reason: `Modifying important project file: ${importantMatch}`,
|
|
149
|
+
triggers: [importantMatch],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// Default based on operation
|
|
153
|
+
switch (operation) {
|
|
154
|
+
case 'read':
|
|
155
|
+
return {
|
|
156
|
+
risk: 'safe',
|
|
157
|
+
reason: 'Reading from unrestricted path',
|
|
158
|
+
};
|
|
159
|
+
case 'write':
|
|
160
|
+
return {
|
|
161
|
+
risk: 'write',
|
|
162
|
+
reason: 'Writing to unrestricted path',
|
|
163
|
+
};
|
|
164
|
+
case 'delete':
|
|
165
|
+
return {
|
|
166
|
+
risk: 'destructive',
|
|
167
|
+
reason: 'Deleting from unrestricted path',
|
|
168
|
+
};
|
|
169
|
+
default:
|
|
170
|
+
return {
|
|
171
|
+
risk: 'write',
|
|
172
|
+
reason: 'Unknown filesystem operation',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
inferOperation(tool) {
|
|
177
|
+
if (!tool)
|
|
178
|
+
return 'write'; // Conservative default
|
|
179
|
+
const lowerTool = tool.toLowerCase();
|
|
180
|
+
if (lowerTool.includes('delete') || lowerTool.includes('remove') || lowerTool.includes('rm')) {
|
|
181
|
+
return 'delete';
|
|
182
|
+
}
|
|
183
|
+
if (lowerTool.includes('read') || lowerTool.includes('get') || lowerTool.includes('list') ||
|
|
184
|
+
lowerTool.includes('search') || lowerTool.includes('find')) {
|
|
185
|
+
return 'read';
|
|
186
|
+
}
|
|
187
|
+
return 'write';
|
|
188
|
+
}
|
|
189
|
+
normalizePath(path) {
|
|
190
|
+
// Expand home directory
|
|
191
|
+
let expanded = path;
|
|
192
|
+
if (path.startsWith('~/')) {
|
|
193
|
+
expanded = path.replace(/^~/, homedir());
|
|
194
|
+
}
|
|
195
|
+
else if (path === '~') {
|
|
196
|
+
expanded = homedir();
|
|
197
|
+
}
|
|
198
|
+
// Handle $HOME and other env vars
|
|
199
|
+
expanded = expanded.replace(/\$HOME/g, homedir());
|
|
200
|
+
expanded = expanded.replace(/\$\{HOME\}/g, homedir());
|
|
201
|
+
// Normalize the path
|
|
202
|
+
if (isAbsolute(expanded)) {
|
|
203
|
+
return normalize(expanded);
|
|
204
|
+
}
|
|
205
|
+
// For relative paths, just normalize
|
|
206
|
+
return normalize(expanded);
|
|
207
|
+
}
|
|
208
|
+
hasPathTraversal(path) {
|
|
209
|
+
// Check for .. that escapes current directory
|
|
210
|
+
const normalized = normalize(path);
|
|
211
|
+
// If normalization changes the path significantly and contains .., be suspicious
|
|
212
|
+
if (path.includes('..') && !normalized.includes('..')) {
|
|
213
|
+
// The .. was resolved - check if it escaped
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
// Direct check for suspicious patterns
|
|
217
|
+
if (/\.\.\/.*\.\./.test(path)) {
|
|
218
|
+
return true; // Multiple traversals
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
hasDangerousGlob(path) {
|
|
223
|
+
// Single * at root or home
|
|
224
|
+
if (path === '*' || path === '/*' || path === '~/*') {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
// ** without restriction
|
|
228
|
+
if (path === '**' || path === '/**' || path === '~/**') {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// * in sensitive locations
|
|
232
|
+
if (/^(\/etc|\/var|~\/\.)\/*\*/.test(path)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
matchesForbiddenPath(path) {
|
|
238
|
+
for (const forbidden of this.FORBIDDEN_PATHS) {
|
|
239
|
+
const normalizedForbidden = normalize(forbidden);
|
|
240
|
+
if (path === normalizedForbidden || path.startsWith(normalizedForbidden + '/')) {
|
|
241
|
+
// Exception: allow if it's deeper in a user project
|
|
242
|
+
if (path.includes('/node_modules/') || path.includes('/vendor/')) {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
return forbidden;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
matchesDangerousPath(path) {
|
|
251
|
+
for (const dangerous of this.DANGEROUS_PATHS) {
|
|
252
|
+
const normalizedDangerous = normalize(dangerous);
|
|
253
|
+
if (path === normalizedDangerous) {
|
|
254
|
+
return dangerous;
|
|
255
|
+
}
|
|
256
|
+
// Only flag if directly in the dangerous path (not a subdirectory of a project)
|
|
257
|
+
if (path.startsWith(normalizedDangerous + '/')) {
|
|
258
|
+
// Allow if it looks like a project path
|
|
259
|
+
const remainder = path.slice(normalizedDangerous.length + 1);
|
|
260
|
+
if (!remainder.includes('/') || remainder.split('/')[0]?.startsWith('.')) {
|
|
261
|
+
return dangerous;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
matchesSensitivePattern(path) {
|
|
268
|
+
for (const pattern of this.SENSITIVE_PATTERNS) {
|
|
269
|
+
if (pattern.test(path)) {
|
|
270
|
+
return pattern.source;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
matchesImportantPattern(path) {
|
|
276
|
+
for (const pattern of this.IMPORTANT_PATTERNS) {
|
|
277
|
+
if (pattern.test(path)) {
|
|
278
|
+
return pattern.source;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/analyzers/filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP/API Request Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Classifies HTTP requests by risk level based on:
|
|
5
|
+
* - HTTP method (GET = read, POST/PUT = write, DELETE = destructive)
|
|
6
|
+
* - Target host (internal IPs, localhost, cloud metadata = dangerous)
|
|
7
|
+
* - Sensitive headers (Authorization, Cookie, API keys)
|
|
8
|
+
* - Dangerous protocols (file://, ftp://)
|
|
9
|
+
*
|
|
10
|
+
* This analyzer is designed to prevent:
|
|
11
|
+
* - Server-Side Request Forgery (SSRF) attacks
|
|
12
|
+
* - Unauthorized access to internal services
|
|
13
|
+
* - Credential leakage
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const analyzer = new HttpAnalyzer();
|
|
18
|
+
*
|
|
19
|
+
* // Analyze a URL string
|
|
20
|
+
* analyzer.analyze('https://api.example.com/users');
|
|
21
|
+
* // → { risk: 'read', reason: 'GET request to external host' }
|
|
22
|
+
*
|
|
23
|
+
* // Analyze a JSON-encoded request
|
|
24
|
+
* analyzer.analyze(JSON.stringify({
|
|
25
|
+
* url: 'https://api.example.com/users',
|
|
26
|
+
* method: 'POST',
|
|
27
|
+
* headers: { 'Content-Type': 'application/json' }
|
|
28
|
+
* }));
|
|
29
|
+
* // → { risk: 'write', reason: 'POST request to external host' }
|
|
30
|
+
*
|
|
31
|
+
* // Dangerous request detection
|
|
32
|
+
* analyzer.analyze('http://169.254.169.254/latest/meta-data/');
|
|
33
|
+
* // → { risk: 'dangerous', reason: 'SSRF: AWS metadata endpoint' }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
import type { AnalysisResult, ContentAnalyzer, AnalyzerContext } from './types.js';
|
|
37
|
+
/**
|
|
38
|
+
* HTTP/API Request Analyzer
|
|
39
|
+
*
|
|
40
|
+
* Analyzes HTTP requests and URLs to determine risk levels.
|
|
41
|
+
* Prevents SSRF attacks, credential leakage, and unauthorized access.
|
|
42
|
+
*/
|
|
43
|
+
export declare class HttpAnalyzer implements ContentAnalyzer {
|
|
44
|
+
readonly name = "http";
|
|
45
|
+
/**
|
|
46
|
+
* Cloud metadata endpoints - critical SSRF targets
|
|
47
|
+
*/
|
|
48
|
+
private readonly METADATA_ENDPOINTS;
|
|
49
|
+
/**
|
|
50
|
+
* Internal/private IP ranges - SSRF and network access control
|
|
51
|
+
*/
|
|
52
|
+
private readonly INTERNAL_IP_PATTERNS;
|
|
53
|
+
private readonly DANGEROUS_PROTOCOLS;
|
|
54
|
+
/**
|
|
55
|
+
* Headers that indicate sensitive operations.
|
|
56
|
+
* These don't block the request but elevate risk level.
|
|
57
|
+
*/
|
|
58
|
+
private readonly SENSITIVE_HEADERS;
|
|
59
|
+
/**
|
|
60
|
+
* Maps HTTP methods to their base risk level.
|
|
61
|
+
*/
|
|
62
|
+
private readonly METHOD_RISK;
|
|
63
|
+
analyze(input: string, context?: AnalyzerContext): AnalysisResult;
|
|
64
|
+
/**
|
|
65
|
+
* Parses input into a structured request object.
|
|
66
|
+
* Accepts either a URL string or a JSON-encoded request object.
|
|
67
|
+
*/
|
|
68
|
+
private parseInput;
|
|
69
|
+
/**
|
|
70
|
+
* Normalizes headers object to lowercase keys.
|
|
71
|
+
*/
|
|
72
|
+
private normalizeHeaders;
|
|
73
|
+
/**
|
|
74
|
+
* Infers HTTP method from tool name.
|
|
75
|
+
*/
|
|
76
|
+
private inferMethod;
|
|
77
|
+
/**
|
|
78
|
+
* Detects sensitive headers in the request.
|
|
79
|
+
*/
|
|
80
|
+
private detectSensitiveHeaders;
|
|
81
|
+
/**
|
|
82
|
+
* Extracts host from URL for display.
|
|
83
|
+
*/
|
|
84
|
+
private extractHost;
|
|
85
|
+
/**
|
|
86
|
+
* Sanitizes URL for safe logging (removes credentials).
|
|
87
|
+
*/
|
|
88
|
+
private sanitizeUrl;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/analyzers/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA8BnF;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,eAAe;IAChD,QAAQ,CAAC,IAAI,UAAU;IAMvB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAyBjC;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAuFnC;IAMF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CA+BlC;IAMF;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQhC;IAMF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAgB1B;IAMF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,cAAc;IA0FjE;;;OAGG;IACH,OAAO,CAAC,UAAU;IA6BlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,WAAW;CAYtB"}
|