xypriss 2.2.5 → 2.3.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.
Files changed (83) hide show
  1. package/README.md +1 -3
  2. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +9 -5
  3. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  4. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +9 -5
  5. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  6. package/dist/cjs/mods/security/src/components/cache/index.js +9 -5
  7. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
  8. package/dist/cjs/mods/security/src/components/fortified-function/index.js +8 -4
  9. package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -1
  10. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +9 -5
  11. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  12. package/dist/cjs/mods/security/src/index.js +9 -5
  13. package/dist/cjs/mods/security/src/index.js.map +1 -1
  14. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +31 -2
  15. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  16. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +87 -30
  17. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -1
  18. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js +320 -0
  19. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js.map +1 -0
  20. package/dist/cjs/src/middleware/built-in/security/CommandInjectionDetector.js +215 -0
  21. package/dist/cjs/src/middleware/built-in/security/CommandInjectionDetector.js.map +1 -0
  22. package/dist/cjs/src/middleware/built-in/security/LDAPInjectionDetector.js +96 -0
  23. package/dist/cjs/src/middleware/built-in/security/LDAPInjectionDetector.js.map +1 -0
  24. package/dist/cjs/src/middleware/built-in/security/PathTraversalDetector.js +212 -0
  25. package/dist/cjs/src/middleware/built-in/security/PathTraversalDetector.js.map +1 -0
  26. package/dist/cjs/src/middleware/built-in/security/SQLInjectionDetector.js +335 -0
  27. package/dist/cjs/src/middleware/built-in/security/SQLInjectionDetector.js.map +1 -0
  28. package/dist/cjs/src/middleware/built-in/security/XXEProtector.js +175 -0
  29. package/dist/cjs/src/middleware/built-in/security/XXEProtector.js.map +1 -0
  30. package/dist/cjs/src/middleware/security-middleware.js +249 -132
  31. package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
  32. package/dist/cjs/src/plugins/modules/index.js +8 -4
  33. package/dist/cjs/src/plugins/modules/index.js.map +1 -1
  34. package/dist/cjs/src/server/FastServer.js +49 -32
  35. package/dist/cjs/src/server/FastServer.js.map +1 -1
  36. package/dist/cjs/src/server/ServerFactory.js +34 -1
  37. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  38. package/dist/cjs/src/server/components/multi-server/MultiServerManager.js +11 -2
  39. package/dist/cjs/src/server/components/multi-server/MultiServerManager.js.map +1 -1
  40. package/dist/cjs/src/server/const/default.js +15 -1
  41. package/dist/cjs/src/server/const/default.js.map +1 -1
  42. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +9 -5
  43. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  44. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +9 -5
  45. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  46. package/dist/esm/mods/security/src/components/cache/index.js +9 -5
  47. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  48. package/dist/esm/mods/security/src/components/fortified-function/index.js +8 -4
  49. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
  50. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +9 -5
  51. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  52. package/dist/esm/mods/security/src/index.js +9 -5
  53. package/dist/esm/mods/security/src/index.js.map +1 -1
  54. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +31 -2
  55. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  56. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +75 -18
  57. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -1
  58. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js +318 -0
  59. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js.map +1 -0
  60. package/dist/esm/src/middleware/built-in/security/CommandInjectionDetector.js +213 -0
  61. package/dist/esm/src/middleware/built-in/security/CommandInjectionDetector.js.map +1 -0
  62. package/dist/esm/src/middleware/built-in/security/LDAPInjectionDetector.js +94 -0
  63. package/dist/esm/src/middleware/built-in/security/LDAPInjectionDetector.js.map +1 -0
  64. package/dist/esm/src/middleware/built-in/security/PathTraversalDetector.js +210 -0
  65. package/dist/esm/src/middleware/built-in/security/PathTraversalDetector.js.map +1 -0
  66. package/dist/esm/src/middleware/built-in/security/SQLInjectionDetector.js +333 -0
  67. package/dist/esm/src/middleware/built-in/security/SQLInjectionDetector.js.map +1 -0
  68. package/dist/esm/src/middleware/built-in/security/XXEProtector.js +173 -0
  69. package/dist/esm/src/middleware/built-in/security/XXEProtector.js.map +1 -0
  70. package/dist/esm/src/middleware/security-middleware.js +248 -131
  71. package/dist/esm/src/middleware/security-middleware.js.map +1 -1
  72. package/dist/esm/src/plugins/modules/index.js +8 -4
  73. package/dist/esm/src/plugins/modules/index.js.map +1 -1
  74. package/dist/esm/src/server/FastServer.js +50 -33
  75. package/dist/esm/src/server/FastServer.js.map +1 -1
  76. package/dist/esm/src/server/ServerFactory.js +34 -1
  77. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  78. package/dist/esm/src/server/components/multi-server/MultiServerManager.js +11 -2
  79. package/dist/esm/src/server/components/multi-server/MultiServerManager.js.map +1 -1
  80. package/dist/esm/src/server/const/default.js +15 -1
  81. package/dist/esm/src/server/const/default.js.map +1 -1
  82. package/dist/index.d.ts +895 -39
  83. package/package.json +2 -2
@@ -0,0 +1,215 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Command Injection Detection Module
5
+ *
6
+ * Detects and prevents OS command injection attacks with
7
+ * intelligent context-aware false positive reduction
8
+ */
9
+ class CommandInjectionDetector {
10
+ constructor(config = {}) {
11
+ // High-risk command injection patterns
12
+ this.highRiskPatterns = [
13
+ // Command chaining
14
+ /[;&|`]\s*(ls|cat|wget|curl|nc|netcat|bash|sh|cmd|powershell|eval|exec)/gi,
15
+ // Command substitution
16
+ /\$\(.*?\)/g,
17
+ /`.*?`/g,
18
+ // Pipe to dangerous commands
19
+ /\|\s*(bash|sh|cmd|powershell|python|perl|ruby|node)/gi,
20
+ // Redirection with dangerous commands
21
+ /[<>]\s*(\/etc\/|\/bin\/|C:\\)/gi,
22
+ // Encoded command injection
23
+ /%0a|%0d|%09/gi, // newline, carriage return, tab
24
+ // Dangerous system commands
25
+ /(rm\s+-rf|del\s+\/|format\s+|mkfs|dd\s+if=)/gi,
26
+ // Network commands
27
+ /(wget|curl|nc|netcat|telnet|ssh|ftp)\s+/gi,
28
+ // Eval/exec patterns
29
+ /(eval|exec|system|passthru|shell_exec|popen)\s*\(/gi,
30
+ ];
31
+ // Medium-risk patterns
32
+ this.mediumRiskPatterns = [
33
+ // Shell metacharacters
34
+ /[;&|`$()]/g,
35
+ // Redirection operators
36
+ /[<>]/g,
37
+ // Common command names (could be legitimate text)
38
+ /\b(ls|cat|echo|pwd|cd|mkdir|touch|grep|find|chmod|chown)\b/gi,
39
+ ];
40
+ this.config = {
41
+ enabled: config.enabled ?? true,
42
+ strictMode: config.strictMode ?? false,
43
+ logAttempts: config.logAttempts ?? true,
44
+ blockOnDetection: config.blockOnDetection ?? true,
45
+ falsePositiveThreshold: config.falsePositiveThreshold ?? 0.7,
46
+ customPatterns: config.customPatterns ?? [],
47
+ allowedCommands: config.allowedCommands ?? [],
48
+ contextualAnalysis: config.contextualAnalysis ?? true,
49
+ };
50
+ }
51
+ /**
52
+ * Detect command injection attempts
53
+ */
54
+ detect(input, context) {
55
+ if (!input || typeof input !== 'string') {
56
+ return {
57
+ isMalicious: false,
58
+ confidence: 0,
59
+ detectedPatterns: [],
60
+ riskLevel: 'LOW',
61
+ };
62
+ }
63
+ const result = {
64
+ isMalicious: false,
65
+ confidence: 0,
66
+ detectedPatterns: [],
67
+ sanitizedInput: input,
68
+ riskLevel: 'LOW',
69
+ };
70
+ // High-risk pattern detection
71
+ let highRiskScore = 0;
72
+ this.highRiskPatterns.forEach((pattern, index) => {
73
+ const matches = input.match(pattern);
74
+ if (matches) {
75
+ const patternName = this.getHighRiskPatternName(index);
76
+ result.detectedPatterns.push(`${patternName}: ${matches.join(', ')}`);
77
+ highRiskScore += this.getHighRiskWeight(index);
78
+ }
79
+ });
80
+ // Medium-risk pattern detection with context
81
+ let mediumRiskScore = 0;
82
+ if (this.config.contextualAnalysis && context) {
83
+ mediumRiskScore = this.analyzeContext(input, context);
84
+ }
85
+ else {
86
+ this.mediumRiskPatterns.forEach((pattern) => {
87
+ const matches = input.match(pattern);
88
+ if (matches) {
89
+ mediumRiskScore += 0.1 * matches.length;
90
+ }
91
+ });
92
+ }
93
+ // Legitimacy checks
94
+ const legitimacyScore = this.calculateLegitimacyScore(input);
95
+ // Calculate final confidence
96
+ result.confidence = Math.max(0, highRiskScore + mediumRiskScore * 0.3 - legitimacyScore);
97
+ result.confidence = Math.min(result.confidence, 1.0);
98
+ // Determine risk level
99
+ if (result.confidence >= 0.9) {
100
+ result.riskLevel = 'CRITICAL';
101
+ result.isMalicious = true;
102
+ }
103
+ else if (result.confidence >= this.config.falsePositiveThreshold) {
104
+ result.riskLevel = 'HIGH';
105
+ result.isMalicious = true;
106
+ }
107
+ else if (result.confidence >= 0.4) {
108
+ result.riskLevel = 'MEDIUM';
109
+ result.isMalicious = false;
110
+ }
111
+ // Sanitize input
112
+ if (result.confidence >= 0.4) {
113
+ result.sanitizedInput = this.sanitizeInput(input);
114
+ }
115
+ // Log attempts
116
+ if (this.config.logAttempts && result.confidence >= 0.7) {
117
+ this.logAttempt(input, result);
118
+ }
119
+ return result;
120
+ }
121
+ /**
122
+ * Sanitize input by removing command injection sequences
123
+ */
124
+ sanitizeInput(input) {
125
+ let sanitized = input;
126
+ // Remove command chaining characters
127
+ sanitized = sanitized.replace(/[;&|`]/g, '');
128
+ // Remove command substitution
129
+ sanitized = sanitized.replace(/\$\(.*?\)/g, '');
130
+ // Remove backticks
131
+ sanitized = sanitized.replace(/`/g, '');
132
+ // Remove redirection operators
133
+ sanitized = sanitized.replace(/[<>]/g, '');
134
+ // Remove encoded newlines/tabs
135
+ sanitized = sanitized.replace(/%0a|%0d|%09/gi, '');
136
+ return sanitized.trim();
137
+ }
138
+ /**
139
+ * Analyze context to reduce false positives
140
+ */
141
+ analyzeContext(input, context) {
142
+ let score = 0;
143
+ // Check if this is a code/technical field where commands might be legitimate
144
+ const technicalContexts = ['code', 'script', 'command', 'terminal', 'shell'];
145
+ const isTechnicalContext = technicalContexts.some(ctx => context.fieldName?.toLowerCase().includes(ctx) ||
146
+ context.fieldType?.toLowerCase().includes(ctx));
147
+ this.mediumRiskPatterns.forEach((pattern, index) => {
148
+ const matches = input.match(pattern);
149
+ if (matches) {
150
+ let patternScore = 0.1 * matches.length;
151
+ // Reduce score for technical contexts
152
+ if (isTechnicalContext && index > 1) {
153
+ patternScore *= 0.2; // Reduce by 80% for command names in technical fields
154
+ }
155
+ score += patternScore;
156
+ }
157
+ });
158
+ return score;
159
+ }
160
+ /**
161
+ * Calculate legitimacy score
162
+ */
163
+ calculateLegitimacyScore(input) {
164
+ let score = 0;
165
+ // Natural language indicators
166
+ const words = input.split(/\s+/);
167
+ if (words.length > 3 && words.every(w => /^[a-zA-Z]+$/.test(w))) {
168
+ score += 0.3; // Looks like natural text
169
+ }
170
+ // No shell metacharacters
171
+ if (!/[;&|`$()<>]/.test(input)) {
172
+ score += 0.2;
173
+ }
174
+ // Reasonable length for user input
175
+ if (input.length > 10 && input.length < 200) {
176
+ score += 0.1;
177
+ }
178
+ return Math.min(score, 0.5);
179
+ }
180
+ getHighRiskPatternName(index) {
181
+ const names = [
182
+ 'Command chaining',
183
+ 'Command substitution ($())',
184
+ 'Backtick substitution',
185
+ 'Pipe to shell',
186
+ 'Redirection to system paths',
187
+ 'Encoded injection',
188
+ 'Dangerous system commands',
189
+ 'Network commands',
190
+ 'Eval/exec functions',
191
+ ];
192
+ return names[index] || `High-risk pattern ${index}`;
193
+ }
194
+ getHighRiskWeight(index) {
195
+ const weights = [0.9, 0.9, 0.9, 0.8, 0.7, 0.6, 0.9, 0.7, 0.9];
196
+ return weights[index] || 0.7;
197
+ }
198
+ logAttempt(input, result) {
199
+ console.warn('[CommandInjection] Attack detected:', {
200
+ timestamp: new Date().toISOString(),
201
+ input: input.substring(0, 100),
202
+ confidence: result.confidence,
203
+ patterns: result.detectedPatterns,
204
+ });
205
+ }
206
+ updateConfig(newConfig) {
207
+ this.config = { ...this.config, ...newConfig };
208
+ }
209
+ getConfig() {
210
+ return { ...this.config };
211
+ }
212
+ }
213
+
214
+ module.exports = CommandInjectionDetector;
215
+ //# sourceMappingURL=CommandInjectionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandInjectionDetector.js","sources":["../../../../../../src/middleware/built-in/security/CommandInjectionDetector.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * LDAP Injection Detection Module
5
+ *
6
+ * Detects and prevents LDAP injection attacks
7
+ */
8
+ class LDAPInjectionDetector {
9
+ constructor(config = {}) {
10
+ // LDAP injection patterns
11
+ this.injectionPatterns = [
12
+ // LDAP filter metacharacters
13
+ /[*()\\|&]/g,
14
+ // Null byte
15
+ /\x00/g,
16
+ // LDAP filter injection attempts
17
+ /\)\s*\(\s*\|/gi, // )( | pattern
18
+ /\)\s*\(\s*&/gi, // )( & pattern
19
+ // Wildcard abuse
20
+ /\*{2,}/g,
21
+ // DN injection
22
+ /,\s*(cn|ou|dc|o)=/gi,
23
+ ];
24
+ this.config = {
25
+ enabled: config.enabled ?? true,
26
+ strictMode: config.strictMode ?? false,
27
+ logAttempts: config.logAttempts ?? true,
28
+ blockOnDetection: config.blockOnDetection ?? true,
29
+ falsePositiveThreshold: config.falsePositiveThreshold ?? 0.6,
30
+ customPatterns: config.customPatterns ?? [],
31
+ };
32
+ }
33
+ detect(input) {
34
+ if (!input || typeof input !== 'string') {
35
+ return {
36
+ isMalicious: false,
37
+ confidence: 0,
38
+ detectedPatterns: [],
39
+ riskLevel: 'LOW',
40
+ };
41
+ }
42
+ const result = {
43
+ isMalicious: false,
44
+ confidence: 0,
45
+ detectedPatterns: [],
46
+ sanitizedInput: input,
47
+ riskLevel: 'LOW',
48
+ };
49
+ let riskScore = 0;
50
+ this.injectionPatterns.forEach((pattern, index) => {
51
+ const matches = input.match(pattern);
52
+ if (matches) {
53
+ result.detectedPatterns.push(`LDAP metacharacter: ${matches.join(', ')}`);
54
+ riskScore += 0.3 * matches.length;
55
+ }
56
+ });
57
+ result.confidence = Math.min(riskScore, 1.0);
58
+ if (result.confidence >= 0.7) {
59
+ result.riskLevel = 'HIGH';
60
+ result.isMalicious = true;
61
+ }
62
+ else if (result.confidence >= this.config.falsePositiveThreshold) {
63
+ result.riskLevel = 'MEDIUM';
64
+ result.isMalicious = this.config.strictMode;
65
+ }
66
+ if (result.confidence >= 0.3) {
67
+ result.sanitizedInput = this.sanitize(input);
68
+ }
69
+ if (this.config.logAttempts && result.confidence >= 0.6) {
70
+ console.warn('[LDAP] Injection attempt detected:', {
71
+ timestamp: new Date().toISOString(),
72
+ input: input.substring(0, 100),
73
+ confidence: result.confidence,
74
+ });
75
+ }
76
+ return result;
77
+ }
78
+ sanitize(input) {
79
+ // Escape LDAP special characters
80
+ return input
81
+ .replace(/\\/g, '\\5c')
82
+ .replace(/\*/g, '\\2a')
83
+ .replace(/\(/g, '\\28')
84
+ .replace(/\)/g, '\\29')
85
+ .replace(/\x00/g, '\\00');
86
+ }
87
+ updateConfig(newConfig) {
88
+ this.config = { ...this.config, ...newConfig };
89
+ }
90
+ getConfig() {
91
+ return { ...this.config };
92
+ }
93
+ }
94
+
95
+ module.exports = LDAPInjectionDetector;
96
+ //# sourceMappingURL=LDAPInjectionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDAPInjectionDetector.js","sources":["../../../../../../src/middleware/built-in/security/LDAPInjectionDetector.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,212 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Path Traversal Detection Module
5
+ *
6
+ * Detects and prevents directory traversal attacks with intelligent
7
+ * false positive avoidance for legitimate file paths
8
+ */
9
+ class PathTraversalDetector {
10
+ constructor(config = {}) {
11
+ // High-risk path traversal patterns
12
+ this.highRiskPatterns = [
13
+ // Classic traversal with multiple levels
14
+ /(\.\.[\/\\]){2,}/g,
15
+ // URL encoded traversal
16
+ /(%2e%2e[\/\\]|%2e%2e%2f|%2e%2e%5c)/gi,
17
+ // Double URL encoded
18
+ /(%252e%252e[\/\\]|%252e%252e%252f)/gi,
19
+ // Unicode/UTF-8 encoded
20
+ /(\.\.%c0%af|\.\.%c1%9c)/gi,
21
+ // Null byte injection
22
+ /\.\.[\/\\].*%00/g,
23
+ // Absolute paths (Unix/Windows)
24
+ /^(\/|\\\\|[a-zA-Z]:\\)/,
25
+ // System directories
26
+ /(\/etc\/|\/proc\/|\/sys\/|\/dev\/|C:\\Windows\\|C:\\Program Files\\)/gi,
27
+ // Traversal with encoded slashes
28
+ /\.\.(%2f|%5c)/gi,
29
+ ];
30
+ // Medium-risk patterns (context-dependent)
31
+ this.mediumRiskPatterns = [
32
+ // Single parent directory reference
33
+ /\.\.[\/\\]/g,
34
+ // Hidden files (Unix)
35
+ /\/\.[^\/]+/g,
36
+ // Backup files
37
+ /\.(bak|backup|old|tmp|swp)$/gi,
38
+ // Config files
39
+ /\.(conf|config|ini|env)$/gi,
40
+ ];
41
+ this.config = {
42
+ enabled: config.enabled ?? true,
43
+ strictMode: config.strictMode ?? false,
44
+ logAttempts: config.logAttempts ?? true,
45
+ blockOnDetection: config.blockOnDetection ?? true,
46
+ falsePositiveThreshold: config.falsePositiveThreshold ?? 0.6,
47
+ customPatterns: config.customPatterns ?? [],
48
+ allowedPaths: config.allowedPaths ?? [],
49
+ allowedExtensions: config.allowedExtensions ?? ['.jpg', '.png', '.pdf', '.txt'],
50
+ maxDepth: config.maxDepth ?? 3,
51
+ };
52
+ }
53
+ /**
54
+ * Detect path traversal attempts
55
+ */
56
+ detect(path, context) {
57
+ if (!path || typeof path !== 'string') {
58
+ return {
59
+ isMalicious: false,
60
+ confidence: 0,
61
+ detectedPatterns: [],
62
+ riskLevel: 'LOW',
63
+ };
64
+ }
65
+ const result = {
66
+ isMalicious: false,
67
+ confidence: 0,
68
+ detectedPatterns: [],
69
+ sanitizedInput: path,
70
+ riskLevel: 'LOW',
71
+ };
72
+ // Check if path is in allowed paths
73
+ if (this.isAllowedPath(path)) {
74
+ return result;
75
+ }
76
+ // High-risk pattern detection
77
+ let highRiskScore = 0;
78
+ this.highRiskPatterns.forEach((pattern, index) => {
79
+ const matches = path.match(pattern);
80
+ if (matches) {
81
+ const patternName = this.getHighRiskPatternName(index);
82
+ result.detectedPatterns.push(`${patternName}: ${matches.join(', ')}`);
83
+ highRiskScore += 0.8;
84
+ }
85
+ });
86
+ // Medium-risk pattern detection
87
+ let mediumRiskScore = 0;
88
+ this.mediumRiskPatterns.forEach((pattern) => {
89
+ const matches = path.match(pattern);
90
+ if (matches) {
91
+ mediumRiskScore += 0.2 * matches.length;
92
+ }
93
+ });
94
+ // Calculate depth
95
+ const depth = this.calculatePathDepth(path);
96
+ if (depth > this.config.maxDepth) {
97
+ result.detectedPatterns.push(`Excessive depth: ${depth}`);
98
+ mediumRiskScore += 0.3;
99
+ }
100
+ // Legitimacy checks
101
+ const legitimacyScore = this.calculateLegitimacyScore(path);
102
+ // Calculate final confidence
103
+ result.confidence = Math.max(0, highRiskScore + mediumRiskScore * 0.4 - legitimacyScore);
104
+ result.confidence = Math.min(result.confidence, 1.0);
105
+ // Determine risk level
106
+ if (result.confidence >= 0.8) {
107
+ result.riskLevel = 'CRITICAL';
108
+ result.isMalicious = true;
109
+ }
110
+ else if (result.confidence >= this.config.falsePositiveThreshold) {
111
+ result.riskLevel = 'HIGH';
112
+ result.isMalicious = true;
113
+ }
114
+ else if (result.confidence >= 0.3) {
115
+ result.riskLevel = 'MEDIUM';
116
+ result.isMalicious = false;
117
+ }
118
+ // Sanitize path
119
+ if (result.confidence >= 0.3) {
120
+ result.sanitizedInput = this.sanitizePath(path);
121
+ }
122
+ // Log attempts
123
+ if (this.config.logAttempts && result.confidence >= 0.7) {
124
+ this.logAttempt(path, result);
125
+ }
126
+ return result;
127
+ }
128
+ /**
129
+ * Sanitize path by removing traversal sequences
130
+ */
131
+ sanitizePath(path) {
132
+ let sanitized = path;
133
+ // Remove all traversal sequences
134
+ sanitized = sanitized.replace(/\.\.[\/\\]/g, '');
135
+ // Remove URL encoded traversal
136
+ sanitized = sanitized.replace(/%2e%2e[\/\\%]/gi, '');
137
+ // Remove null bytes
138
+ sanitized = sanitized.replace(/%00/g, '');
139
+ // Normalize slashes
140
+ sanitized = sanitized.replace(/[\\]/g, '/');
141
+ // Remove duplicate slashes
142
+ sanitized = sanitized.replace(/\/+/g, '/');
143
+ // Remove leading slash if present
144
+ sanitized = sanitized.replace(/^\//, '');
145
+ return sanitized;
146
+ }
147
+ /**
148
+ * Check if path is in allowed paths
149
+ */
150
+ isAllowedPath(path) {
151
+ return this.config.allowedPaths.some(allowed => path.startsWith(allowed));
152
+ }
153
+ /**
154
+ * Calculate path depth
155
+ */
156
+ calculatePathDepth(path) {
157
+ const normalized = path.replace(/[\\]/g, '/');
158
+ const parts = normalized.split('/').filter(p => p && p !== '.');
159
+ return parts.length;
160
+ }
161
+ /**
162
+ * Calculate legitimacy score
163
+ */
164
+ calculateLegitimacyScore(path) {
165
+ let score = 0;
166
+ // Check for allowed extensions
167
+ const hasAllowedExt = this.config.allowedExtensions.some(ext => path.toLowerCase().endsWith(ext));
168
+ if (hasAllowedExt) {
169
+ score += 0.3;
170
+ }
171
+ // Simple filename pattern (no traversal)
172
+ if (/^[a-zA-Z0-9_\-\.]+$/.test(path)) {
173
+ score += 0.3;
174
+ }
175
+ // Reasonable path depth
176
+ const depth = this.calculatePathDepth(path);
177
+ if (depth <= 2) {
178
+ score += 0.2;
179
+ }
180
+ return Math.min(score, 0.5);
181
+ }
182
+ getHighRiskPatternName(index) {
183
+ const names = [
184
+ 'Multiple traversal sequences',
185
+ 'URL encoded traversal',
186
+ 'Double URL encoded traversal',
187
+ 'Unicode encoded traversal',
188
+ 'Null byte injection',
189
+ 'Absolute path',
190
+ 'System directory access',
191
+ 'Encoded slash traversal',
192
+ ];
193
+ return names[index] || `High-risk pattern ${index}`;
194
+ }
195
+ logAttempt(path, result) {
196
+ console.warn('[PathTraversal] Attack detected:', {
197
+ timestamp: new Date().toISOString(),
198
+ path: path.substring(0, 100),
199
+ confidence: result.confidence,
200
+ patterns: result.detectedPatterns,
201
+ });
202
+ }
203
+ updateConfig(newConfig) {
204
+ this.config = { ...this.config, ...newConfig };
205
+ }
206
+ getConfig() {
207
+ return { ...this.config };
208
+ }
209
+ }
210
+
211
+ module.exports = PathTraversalDetector;
212
+ //# sourceMappingURL=PathTraversalDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathTraversalDetector.js","sources":["../../../../../../src/middleware/built-in/security/PathTraversalDetector.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}