avana-cli 2.11.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/CHANGELOG.md +32 -0
- package/LICENSE +21 -0
- package/README.md +584 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +153 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +101 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/scan.d.ts +19 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +383 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/uninstall.d.ts +6 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +80 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +475 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/additional-patterns.d.ts +12 -0
- package/dist/rules/additional-patterns.d.ts.map +1 -0
- package/dist/rules/additional-patterns.js +170 -0
- package/dist/rules/additional-patterns.js.map +1 -0
- package/dist/rules/code-patterns.d.ts +26 -0
- package/dist/rules/code-patterns.d.ts.map +1 -0
- package/dist/rules/code-patterns.js +220 -0
- package/dist/rules/code-patterns.js.map +1 -0
- package/dist/rules/secret-patterns.d.ts +28 -0
- package/dist/rules/secret-patterns.d.ts.map +1 -0
- package/dist/rules/secret-patterns.js +1729 -0
- package/dist/rules/secret-patterns.js.map +1 -0
- package/dist/scanners/secret-scanner.d.ts +34 -0
- package/dist/scanners/secret-scanner.d.ts.map +1 -0
- package/dist/scanners/secret-scanner.js +281 -0
- package/dist/scanners/secret-scanner.js.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/error-handler.d.ts +126 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +222 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +52 -0
- package/dist/utils/exit-codes.d.ts.map +1 -0
- package/dist/utils/exit-codes.js +89 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/file-stream-scanner.d.ts +31 -0
- package/dist/utils/file-stream-scanner.d.ts.map +1 -0
- package/dist/utils/file-stream-scanner.js +159 -0
- package/dist/utils/file-stream-scanner.js.map +1 -0
- package/dist/utils/file-type-detector.d.ts +45 -0
- package/dist/utils/file-type-detector.d.ts.map +1 -0
- package/dist/utils/file-type-detector.js +237 -0
- package/dist/utils/file-type-detector.js.map +1 -0
- package/dist/utils/ignore-pattern-manager.d.ts +61 -0
- package/dist/utils/ignore-pattern-manager.d.ts.map +1 -0
- package/dist/utils/ignore-pattern-manager.js +204 -0
- package/dist/utils/ignore-pattern-manager.js.map +1 -0
- package/dist/utils/json-output-formatter.d.ts +232 -0
- package/dist/utils/json-output-formatter.d.ts.map +1 -0
- package/dist/utils/json-output-formatter.js +367 -0
- package/dist/utils/json-output-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +181 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +414 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown-output-formatter.d.ts +65 -0
- package/dist/utils/markdown-output-formatter.d.ts.map +1 -0
- package/dist/utils/markdown-output-formatter.js +316 -0
- package/dist/utils/markdown-output-formatter.js.map +1 -0
- package/dist/utils/memory-manager.d.ts +77 -0
- package/dist/utils/memory-manager.d.ts.map +1 -0
- package/dist/utils/memory-manager.js +157 -0
- package/dist/utils/memory-manager.js.map +1 -0
- package/dist/utils/parallel-scanner-worker.d.ts +19 -0
- package/dist/utils/parallel-scanner-worker.d.ts.map +1 -0
- package/dist/utils/parallel-scanner-worker.js +51 -0
- package/dist/utils/parallel-scanner-worker.js.map +1 -0
- package/dist/utils/parallel-scanner.d.ts +82 -0
- package/dist/utils/parallel-scanner.d.ts.map +1 -0
- package/dist/utils/parallel-scanner.js +229 -0
- package/dist/utils/parallel-scanner.js.map +1 -0
- package/dist/utils/pattern-validator.d.ts +108 -0
- package/dist/utils/pattern-validator.d.ts.map +1 -0
- package/dist/utils/pattern-validator.js +315 -0
- package/dist/utils/pattern-validator.js.map +1 -0
- package/dist/utils/progress-reporter.d.ts +68 -0
- package/dist/utils/progress-reporter.d.ts.map +1 -0
- package/dist/utils/progress-reporter.js +194 -0
- package/dist/utils/progress-reporter.js.map +1 -0
- package/dist/utils/result-cache.d.ts +99 -0
- package/dist/utils/result-cache.d.ts.map +1 -0
- package/dist/utils/result-cache.js +335 -0
- package/dist/utils/result-cache.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Avana - Additional Secret Patterns
|
|
4
|
+
* Extended patterns for less common but still important services
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ADDITIONAL_SECRET_PATTERNS = void 0;
|
|
8
|
+
exports.getAdditionalSecretPatterns = getAdditionalSecretPatterns;
|
|
9
|
+
/**
|
|
10
|
+
* Additional secret patterns for specialized services
|
|
11
|
+
* NOTE: Only includes high-confidence patterns with specific prefixes or context
|
|
12
|
+
*/
|
|
13
|
+
exports.ADDITIONAL_SECRET_PATTERNS = [
|
|
14
|
+
// ============================================
|
|
15
|
+
// Analytics & Monitoring
|
|
16
|
+
// ============================================
|
|
17
|
+
{
|
|
18
|
+
id: 'new-relic-key',
|
|
19
|
+
name: 'New Relic License Key',
|
|
20
|
+
pattern: /NRAK-[A-Z0-9]{27}/g,
|
|
21
|
+
severity: 'high',
|
|
22
|
+
description: 'New Relic license key detected',
|
|
23
|
+
suggestion: 'Move to environment variable: NEW_RELIC_LICENSE_KEY',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'sentry-dsn',
|
|
27
|
+
name: 'Sentry DSN',
|
|
28
|
+
pattern: /https:\/\/[a-f0-9]{32}@[a-z0-9]+\.ingest\.sentry\.io\/[0-9]+/g,
|
|
29
|
+
severity: 'medium',
|
|
30
|
+
description: 'Sentry DSN detected',
|
|
31
|
+
suggestion: 'Move to environment variable: SENTRY_DSN',
|
|
32
|
+
},
|
|
33
|
+
// ============================================
|
|
34
|
+
// CI/CD & DevOps
|
|
35
|
+
// ============================================
|
|
36
|
+
{
|
|
37
|
+
id: 'docker-hub-token',
|
|
38
|
+
name: 'Docker Hub Token',
|
|
39
|
+
pattern: /dckr_pat_[a-zA-Z0-9_-]{36}/g,
|
|
40
|
+
severity: 'critical',
|
|
41
|
+
description: 'Docker Hub access token detected',
|
|
42
|
+
suggestion: 'Revoke token and use Docker secrets',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'npm-token',
|
|
46
|
+
name: 'NPM Token',
|
|
47
|
+
pattern: /npm_[a-zA-Z0-9]{36}/g,
|
|
48
|
+
severity: 'critical',
|
|
49
|
+
description: 'NPM access token detected',
|
|
50
|
+
suggestion: 'Revoke token and use .npmrc with environment variable',
|
|
51
|
+
},
|
|
52
|
+
// ============================================
|
|
53
|
+
// Social Media & Marketing
|
|
54
|
+
// ============================================
|
|
55
|
+
{
|
|
56
|
+
id: 'facebook-access-token',
|
|
57
|
+
name: 'Facebook Access Token',
|
|
58
|
+
pattern: /EAACEdEose0cBA[0-9A-Za-z]+/g,
|
|
59
|
+
severity: 'high',
|
|
60
|
+
description: 'Facebook access token detected',
|
|
61
|
+
suggestion: 'Revoke token and move to environment variable',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'twitter-bearer-token',
|
|
65
|
+
name: 'Twitter Bearer Token',
|
|
66
|
+
pattern: /AAAAAAAAAAAAAAAAAAAAAA[a-zA-Z0-9%]+/g,
|
|
67
|
+
severity: 'critical',
|
|
68
|
+
description: 'Twitter Bearer token detected',
|
|
69
|
+
suggestion: 'Revoke token and move to environment variable',
|
|
70
|
+
},
|
|
71
|
+
// ============================================
|
|
72
|
+
// Storage & CDN
|
|
73
|
+
// ============================================
|
|
74
|
+
{
|
|
75
|
+
id: 'digitalocean-token',
|
|
76
|
+
name: 'DigitalOcean Token',
|
|
77
|
+
pattern: /dop_v1_[a-f0-9]{64}/g,
|
|
78
|
+
severity: 'critical',
|
|
79
|
+
description: 'DigitalOcean access token detected',
|
|
80
|
+
suggestion: 'Revoke token and move to environment variable',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'heroku-api-key',
|
|
84
|
+
name: 'Heroku API Key',
|
|
85
|
+
pattern: /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/g,
|
|
86
|
+
severity: 'critical',
|
|
87
|
+
description: 'Heroku API key detected',
|
|
88
|
+
suggestion: 'Revoke key and use Heroku config vars',
|
|
89
|
+
},
|
|
90
|
+
// ============================================
|
|
91
|
+
// Search & Database Services
|
|
92
|
+
// ============================================
|
|
93
|
+
{
|
|
94
|
+
id: 'elasticsearch-password',
|
|
95
|
+
name: 'Elasticsearch Password',
|
|
96
|
+
pattern: /elastic:[^@]+@/gi,
|
|
97
|
+
severity: 'critical',
|
|
98
|
+
description: 'Elasticsearch credentials detected',
|
|
99
|
+
suggestion: 'Move to environment variable: ELASTICSEARCH_URL',
|
|
100
|
+
},
|
|
101
|
+
// ============================================
|
|
102
|
+
// Authentication Services
|
|
103
|
+
// ============================================
|
|
104
|
+
{
|
|
105
|
+
id: 'okta-api-token',
|
|
106
|
+
name: 'Okta API Token',
|
|
107
|
+
pattern: /00[a-zA-Z0-9_-]{40}/g,
|
|
108
|
+
severity: 'critical',
|
|
109
|
+
description: 'Okta API token detected',
|
|
110
|
+
suggestion: 'Revoke token and move to environment variable',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'firebase-api-key',
|
|
114
|
+
name: 'Firebase API Key',
|
|
115
|
+
pattern: /AIza[0-9A-Za-z\-_]{35}/g,
|
|
116
|
+
severity: 'high',
|
|
117
|
+
description: 'Firebase API key detected',
|
|
118
|
+
suggestion: 'Move to environment variable and restrict API key',
|
|
119
|
+
},
|
|
120
|
+
// ============================================
|
|
121
|
+
// Cryptocurrency & Blockchain
|
|
122
|
+
// ============================================
|
|
123
|
+
{
|
|
124
|
+
id: 'ethereum-private-key',
|
|
125
|
+
name: 'Ethereum Private Key',
|
|
126
|
+
pattern: /0x[a-fA-F0-9]{64}/g,
|
|
127
|
+
severity: 'critical',
|
|
128
|
+
description: 'Ethereum private key detected',
|
|
129
|
+
suggestion: 'Remove immediately and use hardware wallet',
|
|
130
|
+
},
|
|
131
|
+
// ============================================
|
|
132
|
+
// Miscellaneous Services
|
|
133
|
+
// ============================================
|
|
134
|
+
{
|
|
135
|
+
id: 'shopify-token',
|
|
136
|
+
name: 'Shopify Access Token',
|
|
137
|
+
pattern: /shpat_[a-fA-F0-9]{32}/g,
|
|
138
|
+
severity: 'critical',
|
|
139
|
+
description: 'Shopify access token detected',
|
|
140
|
+
suggestion: 'Revoke token and move to environment variable',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'shopify-shared-secret',
|
|
144
|
+
name: 'Shopify Shared Secret',
|
|
145
|
+
pattern: /shpss_[a-fA-F0-9]{32}/g,
|
|
146
|
+
severity: 'critical',
|
|
147
|
+
description: 'Shopify shared secret detected',
|
|
148
|
+
suggestion: 'Move to environment variable: SHOPIFY_SHARED_SECRET',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: 'airtable-api-key',
|
|
152
|
+
name: 'Airtable API Key',
|
|
153
|
+
pattern: /key[a-zA-Z0-9]{14}/g,
|
|
154
|
+
severity: 'high',
|
|
155
|
+
description: 'Airtable API key detected',
|
|
156
|
+
suggestion: 'Move to environment variable: AIRTABLE_API_KEY',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
id: 'notion-token',
|
|
160
|
+
name: 'Notion Integration Token',
|
|
161
|
+
pattern: /secret_[a-zA-Z0-9]{43}/g,
|
|
162
|
+
severity: 'high',
|
|
163
|
+
description: 'Notion integration token detected',
|
|
164
|
+
suggestion: 'Move to environment variable: NOTION_TOKEN',
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
function getAdditionalSecretPatterns() {
|
|
168
|
+
return exports.ADDITIONAL_SECRET_PATTERNS;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=additional-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"additional-patterns.js","sourceRoot":"","sources":["../../src/rules/additional-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Avana - Insecure Code Patterns
|
|
3
|
+
* Patterns for detecting security vulnerabilities in code
|
|
4
|
+
*/
|
|
5
|
+
import type { SecretPattern } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Insecure code patterns that could lead to security vulnerabilities
|
|
8
|
+
*/
|
|
9
|
+
export declare const CODE_PATTERNS: SecretPattern[];
|
|
10
|
+
/**
|
|
11
|
+
* Get all code patterns
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAllCodePatterns(): SecretPattern[];
|
|
14
|
+
/**
|
|
15
|
+
* Get code patterns by severity
|
|
16
|
+
*/
|
|
17
|
+
export declare function getCodePatternsBySeverity(severity: 'critical' | 'high' | 'medium' | 'low'): SecretPattern[];
|
|
18
|
+
/**
|
|
19
|
+
* Get code pattern by ID
|
|
20
|
+
*/
|
|
21
|
+
export declare function getCodePatternById(id: string): SecretPattern | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Get pattern count
|
|
24
|
+
*/
|
|
25
|
+
export declare function getCodePatternCount(): number;
|
|
26
|
+
//# sourceMappingURL=code-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-patterns.d.ts","sourceRoot":"","sources":["../../src/rules/code-patterns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,EA4LxC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,aAAa,EAAE,CAE3G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Avana - Insecure Code Patterns
|
|
4
|
+
* Patterns for detecting security vulnerabilities in code
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CODE_PATTERNS = void 0;
|
|
8
|
+
exports.getAllCodePatterns = getAllCodePatterns;
|
|
9
|
+
exports.getCodePatternsBySeverity = getCodePatternsBySeverity;
|
|
10
|
+
exports.getCodePatternById = getCodePatternById;
|
|
11
|
+
exports.getCodePatternCount = getCodePatternCount;
|
|
12
|
+
/**
|
|
13
|
+
* Insecure code patterns that could lead to security vulnerabilities
|
|
14
|
+
*/
|
|
15
|
+
exports.CODE_PATTERNS = [
|
|
16
|
+
// ============================================
|
|
17
|
+
// Code Execution Vulnerabilities
|
|
18
|
+
// ============================================
|
|
19
|
+
{
|
|
20
|
+
id: 'eval-usage',
|
|
21
|
+
name: 'Eval Usage',
|
|
22
|
+
pattern: /\beval\s*\(/g,
|
|
23
|
+
severity: 'high',
|
|
24
|
+
description: 'eval() can execute arbitrary code and is a security risk',
|
|
25
|
+
suggestion: 'Use safer alternatives like JSON.parse() or Function constructor with validation',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'function-constructor',
|
|
29
|
+
name: 'Function Constructor with String',
|
|
30
|
+
pattern: /new\s+Function\s*\(\s*['"`][^'"`]*['"`]\s*\)/g,
|
|
31
|
+
severity: 'high',
|
|
32
|
+
description: 'Function constructor with string can execute arbitrary code',
|
|
33
|
+
suggestion: 'Avoid dynamic code execution or use safer alternatives',
|
|
34
|
+
},
|
|
35
|
+
// ============================================
|
|
36
|
+
// SQL Injection Vulnerabilities
|
|
37
|
+
// ============================================
|
|
38
|
+
{
|
|
39
|
+
id: 'sql-concatenation',
|
|
40
|
+
name: 'SQL String Concatenation',
|
|
41
|
+
pattern: /(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE).*\+.*FROM|VALUES/gi,
|
|
42
|
+
severity: 'critical',
|
|
43
|
+
description: 'SQL string concatenation can lead to SQL injection',
|
|
44
|
+
suggestion: 'Use parameterized queries or prepared statements',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'sql-template-literal',
|
|
48
|
+
name: 'SQL Template Literal',
|
|
49
|
+
pattern: /`(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE).*\$\{.*\}.*`/gi,
|
|
50
|
+
severity: 'critical',
|
|
51
|
+
description: 'SQL template literals with variables can lead to SQL injection',
|
|
52
|
+
suggestion: 'Use parameterized queries instead of template literals',
|
|
53
|
+
},
|
|
54
|
+
// ============================================
|
|
55
|
+
// Command Injection Vulnerabilities
|
|
56
|
+
// ============================================
|
|
57
|
+
{
|
|
58
|
+
id: 'child-process-exec',
|
|
59
|
+
name: 'Child Process Exec with User Input',
|
|
60
|
+
pattern: /exec\s*\(\s*[^)]*\$\{|exec\s*\(\s*[^)]*\+/g,
|
|
61
|
+
severity: 'critical',
|
|
62
|
+
description: 'exec() with user input can lead to command injection',
|
|
63
|
+
suggestion: 'Use execFile() with array arguments or validate input strictly',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: 'shell-true',
|
|
67
|
+
name: 'Shell True in Spawn',
|
|
68
|
+
pattern: /spawn\s*\([^)]*shell\s*:\s*true/gi,
|
|
69
|
+
severity: 'high',
|
|
70
|
+
description: 'Using shell:true in spawn can lead to command injection',
|
|
71
|
+
suggestion: 'Avoid shell:true or validate all inputs strictly',
|
|
72
|
+
},
|
|
73
|
+
// ============================================
|
|
74
|
+
// Cryptography Issues
|
|
75
|
+
// ============================================
|
|
76
|
+
{
|
|
77
|
+
id: 'weak-crypto-md5',
|
|
78
|
+
name: 'Weak Cryptography (MD5)',
|
|
79
|
+
pattern: /crypto\.createHash\s*\(\s*['"]md5['"]\s*\)/g,
|
|
80
|
+
severity: 'high',
|
|
81
|
+
description: 'MD5 is cryptographically broken and should not be used',
|
|
82
|
+
suggestion: 'Use SHA-256 or stronger: crypto.createHash("sha256")',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'weak-crypto-sha1',
|
|
86
|
+
name: 'Weak Cryptography (SHA1)',
|
|
87
|
+
pattern: /crypto\.createHash\s*\(\s*['"]sha1['"]\s*\)/g,
|
|
88
|
+
severity: 'high',
|
|
89
|
+
description: 'SHA1 is deprecated and vulnerable to collision attacks',
|
|
90
|
+
suggestion: 'Use SHA-256 or stronger: crypto.createHash("sha256")',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'insecure-random',
|
|
94
|
+
name: 'Insecure Random Number Generation',
|
|
95
|
+
pattern: /Math\.random\s*\(\s*\)/g,
|
|
96
|
+
severity: 'medium',
|
|
97
|
+
description: 'Math.random() is not cryptographically secure',
|
|
98
|
+
suggestion: 'Use crypto.randomBytes() for security-sensitive operations',
|
|
99
|
+
},
|
|
100
|
+
// ============================================
|
|
101
|
+
// Path Traversal Vulnerabilities
|
|
102
|
+
// ============================================
|
|
103
|
+
{
|
|
104
|
+
id: 'path-traversal',
|
|
105
|
+
name: 'Path Traversal',
|
|
106
|
+
pattern: /\.\.[\/\\]/g,
|
|
107
|
+
severity: 'high',
|
|
108
|
+
description: 'Path traversal pattern detected - could allow unauthorized file access',
|
|
109
|
+
suggestion: 'Validate and sanitize file paths, use path.resolve() and check if result is within allowed directory',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: 'unsafe-file-read',
|
|
113
|
+
name: 'Unsafe File Read',
|
|
114
|
+
pattern: /fs\.(readFile|readFileSync)\s*\([^)]*\$\{|fs\.(readFile|readFileSync)\s*\([^)]*\+/g,
|
|
115
|
+
severity: 'high',
|
|
116
|
+
description: 'Reading files with user-controlled paths can lead to path traversal',
|
|
117
|
+
suggestion: 'Validate file paths and ensure they are within allowed directories',
|
|
118
|
+
},
|
|
119
|
+
// ============================================
|
|
120
|
+
// Deserialization Vulnerabilities
|
|
121
|
+
// ============================================
|
|
122
|
+
{
|
|
123
|
+
id: 'unsafe-yaml-load',
|
|
124
|
+
name: 'Unsafe YAML Load',
|
|
125
|
+
pattern: /yaml\.load\s*\(/g,
|
|
126
|
+
severity: 'critical',
|
|
127
|
+
description: 'yaml.load() can execute arbitrary code',
|
|
128
|
+
suggestion: 'Use yaml.safeLoad() instead',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'unsafe-pickle',
|
|
132
|
+
name: 'Unsafe Pickle (Python)',
|
|
133
|
+
pattern: /pickle\.loads?\s*\(/g,
|
|
134
|
+
severity: 'critical',
|
|
135
|
+
description: 'pickle.load() can execute arbitrary code',
|
|
136
|
+
suggestion: 'Use JSON or validate pickle data source',
|
|
137
|
+
},
|
|
138
|
+
// ============================================
|
|
139
|
+
// XSS and Injection Vulnerabilities
|
|
140
|
+
// ============================================
|
|
141
|
+
{
|
|
142
|
+
id: 'innerhtml-assignment',
|
|
143
|
+
name: 'innerHTML Assignment',
|
|
144
|
+
pattern: /\.innerHTML\s*=\s*[^;]*\$\{|\.innerHTML\s*=\s*[^;]*\+/g,
|
|
145
|
+
severity: 'high',
|
|
146
|
+
description: 'Setting innerHTML with user input can lead to XSS',
|
|
147
|
+
suggestion: 'Use textContent or sanitize HTML with DOMPurify',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
id: 'dangerously-set-html',
|
|
151
|
+
name: 'Dangerously Set HTML (React)',
|
|
152
|
+
pattern: /dangerouslySetInnerHTML/g,
|
|
153
|
+
severity: 'medium',
|
|
154
|
+
description: 'dangerouslySetInnerHTML can lead to XSS if not sanitized',
|
|
155
|
+
suggestion: 'Sanitize HTML content with DOMPurify before using',
|
|
156
|
+
},
|
|
157
|
+
// ============================================
|
|
158
|
+
// Configuration Issues
|
|
159
|
+
// ============================================
|
|
160
|
+
{
|
|
161
|
+
id: 'hardcoded-localhost',
|
|
162
|
+
name: 'Hardcoded Localhost URL',
|
|
163
|
+
pattern: /['"]https?:\/\/localhost:\d+/g,
|
|
164
|
+
severity: 'low',
|
|
165
|
+
description: 'Hardcoded localhost URLs may cause issues in production',
|
|
166
|
+
suggestion: 'Use environment variables for API endpoints',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: 'cors-wildcard',
|
|
170
|
+
name: 'CORS Wildcard',
|
|
171
|
+
pattern: /Access-Control-Allow-Origin['"]?\s*:\s*['"]?\*/g,
|
|
172
|
+
severity: 'medium',
|
|
173
|
+
description: 'CORS wildcard (*) allows any origin to access resources',
|
|
174
|
+
suggestion: 'Specify allowed origins explicitly',
|
|
175
|
+
},
|
|
176
|
+
// ============================================
|
|
177
|
+
// Authentication/Authorization Issues
|
|
178
|
+
// ============================================
|
|
179
|
+
{
|
|
180
|
+
id: 'weak-jwt-secret',
|
|
181
|
+
name: 'Weak JWT Secret',
|
|
182
|
+
pattern: /jwt\.sign\s*\([^)]*['"]secret['"]/gi,
|
|
183
|
+
severity: 'critical',
|
|
184
|
+
description: 'Weak JWT secret detected',
|
|
185
|
+
suggestion: 'Use a strong, randomly generated secret from environment variables',
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'missing-auth-check',
|
|
189
|
+
name: 'Missing Authentication Check',
|
|
190
|
+
pattern: /app\.(get|post|put|delete|patch)\s*\([^)]*\)\s*,\s*(?!.*auth|.*authenticate|.*isAuthenticated)/gi,
|
|
191
|
+
severity: 'medium',
|
|
192
|
+
description: 'Route handler without authentication middleware',
|
|
193
|
+
suggestion: 'Add authentication middleware to protect routes',
|
|
194
|
+
},
|
|
195
|
+
];
|
|
196
|
+
/**
|
|
197
|
+
* Get all code patterns
|
|
198
|
+
*/
|
|
199
|
+
function getAllCodePatterns() {
|
|
200
|
+
return exports.CODE_PATTERNS;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get code patterns by severity
|
|
204
|
+
*/
|
|
205
|
+
function getCodePatternsBySeverity(severity) {
|
|
206
|
+
return exports.CODE_PATTERNS.filter(p => p.severity === severity);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get code pattern by ID
|
|
210
|
+
*/
|
|
211
|
+
function getCodePatternById(id) {
|
|
212
|
+
return exports.CODE_PATTERNS.find(p => p.id === id);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get pattern count
|
|
216
|
+
*/
|
|
217
|
+
function getCodePatternCount() {
|
|
218
|
+
return exports.CODE_PATTERNS.length;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=code-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-patterns.js","sourceRoot":"","sources":["../../src/rules/code-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Avana - Secret Patterns
|
|
3
|
+
* Comprehensive database of 100+ patterns for detecting secrets in code
|
|
4
|
+
*/
|
|
5
|
+
import type { SecretPattern } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Comprehensive list of secret patterns to detect
|
|
8
|
+
* Covers major cloud providers, payment processors, communication tools, Web3/blockchain networks,
|
|
9
|
+
* DeFi protocols, NFT platforms, blockchain analytics services, and more
|
|
10
|
+
*/
|
|
11
|
+
export declare const SECRET_PATTERNS: SecretPattern[];
|
|
12
|
+
/**
|
|
13
|
+
* Get all secret patterns
|
|
14
|
+
*/
|
|
15
|
+
export declare function getAllSecretPatterns(): SecretPattern[];
|
|
16
|
+
/**
|
|
17
|
+
* Get secret patterns by severity
|
|
18
|
+
*/
|
|
19
|
+
export declare function getSecretPatternsBySeverity(severity: 'critical' | 'high' | 'medium' | 'low'): SecretPattern[];
|
|
20
|
+
/**
|
|
21
|
+
* Get secret pattern by ID
|
|
22
|
+
*/
|
|
23
|
+
export declare function getSecretPatternById(id: string): SecretPattern | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Get pattern count
|
|
26
|
+
*/
|
|
27
|
+
export declare function getPatternCount(): number;
|
|
28
|
+
//# sourceMappingURL=secret-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-patterns.d.ts","sourceRoot":"","sources":["../../src/rules/secret-patterns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAwrD1C,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,aAAa,EAAE,CAE7G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|