@runsec/mcp 1.0.69 → 1.0.71
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/bin/engine-resolve.cjs +49 -0
- package/dist/data/trufflehog-config.yaml +275 -7
- package/dist/index.js +310 -150
- package/package.json +3 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Shared optional @runsec/engine-* resolution (runsec-mcp.cjs + binaryResolver must agree).
|
|
5
|
+
*/
|
|
6
|
+
const fs = require("node:fs");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
const { createRequire } = require("node:module");
|
|
9
|
+
|
|
10
|
+
const PKG_ROOT = path.join(__dirname, "..");
|
|
11
|
+
|
|
12
|
+
function packageRequire() {
|
|
13
|
+
return createRequire(path.join(PKG_ROOT, "package.json"));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function binCandidates(engine) {
|
|
17
|
+
const pkg = `@runsec/engine-${engine}-${process.platform}-${process.arch}`;
|
|
18
|
+
const posixBin = path.posix.join("bin", engine);
|
|
19
|
+
if (process.platform === "win32") {
|
|
20
|
+
return [`${pkg}/${posixBin}.exe`, `${pkg}/${posixBin}`];
|
|
21
|
+
}
|
|
22
|
+
return [`${pkg}/${posixBin}`];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** @returns {string | null} absolute path to binary */
|
|
26
|
+
function resolveOptionalEngineBinary(engine) {
|
|
27
|
+
const req = packageRequire();
|
|
28
|
+
for (const candidate of binCandidates(engine)) {
|
|
29
|
+
try {
|
|
30
|
+
const resolved = req.resolve(candidate);
|
|
31
|
+
if (fs.existsSync(resolved) && fs.statSync(resolved).size >= 1024) {
|
|
32
|
+
return resolved;
|
|
33
|
+
}
|
|
34
|
+
} catch {
|
|
35
|
+
// try next candidate
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function hasOptionalEngine(engine) {
|
|
42
|
+
return Boolean(resolveOptionalEngineBinary(engine));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
module.exports = {
|
|
46
|
+
PKG_ROOT,
|
|
47
|
+
resolveOptionalEngineBinary,
|
|
48
|
+
hasOptionalEngine,
|
|
49
|
+
};
|
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
# соответствующие детекторы сюда (те же regex/keywords, формат YAML).
|
|
8
8
|
#
|
|
9
9
|
# Usage: trufflehog git file:///path/to/repo --config=./trufflehog-custom-detectors.yaml --json
|
|
10
|
+
#
|
|
11
|
+
# Синхронизация: все детекторы из базового MOEX/gitleaks-списка присутствуют.
|
|
12
|
+
# Дополнительно в этом файле (расширения репозитория):
|
|
13
|
+
# - ITS-002 Keycloak Client Secret Policy Violation
|
|
14
|
+
# - ITS-002 Vault Token Policy Violation
|
|
15
|
+
# Для assignment-детекторов (key:=value) — exclude_regexes_match отсекает ${VAR}, $VAR, getenv и т.п.
|
|
16
|
+
# PCI-DSS / SOC2: криптография, object storage, telemetry — см. секцию COMPLIANCE в конце файла.
|
|
17
|
+
# OAuth Client ID удалён (публичный идентификатор, не секрет).
|
|
10
18
|
|
|
11
19
|
detectors:
|
|
12
20
|
# ============================================================================
|
|
@@ -39,6 +47,14 @@ detectors:
|
|
|
39
47
|
- yandex-service-token
|
|
40
48
|
regex:
|
|
41
49
|
pattern: '(?i)(yandex[_-]?cloud[_-]?token|yc[_-]?iam[_-]?token|yandex[_-]?service[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{40,}[''"]?'
|
|
50
|
+
exclude_regexes_match:
|
|
51
|
+
- '\$\{[^}]+\}'
|
|
52
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
53
|
+
- '%\([^)]+\)s'
|
|
54
|
+
- 'process\.env\.'
|
|
55
|
+
- 'os\.getenv\('
|
|
56
|
+
- 'getenv\('
|
|
57
|
+
- 'environ\['
|
|
42
58
|
|
|
43
59
|
- name: Yandex 360 API Token
|
|
44
60
|
keywords:
|
|
@@ -46,6 +62,14 @@ detectors:
|
|
|
46
62
|
- y360-api-token
|
|
47
63
|
regex:
|
|
48
64
|
pattern: '(?i)(yandex[_-]?360[_-]?token|y360[_-]?api[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{32,}[''"]?'
|
|
65
|
+
exclude_regexes_match:
|
|
66
|
+
- '\$\{[^}]+\}'
|
|
67
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
68
|
+
- '%\([^)]+\)s'
|
|
69
|
+
- 'process\.env\.'
|
|
70
|
+
- 'os\.getenv\('
|
|
71
|
+
- 'getenv\('
|
|
72
|
+
- 'environ\['
|
|
49
73
|
|
|
50
74
|
- name: VK Cloud API Token
|
|
51
75
|
keywords:
|
|
@@ -53,6 +77,14 @@ detectors:
|
|
|
53
77
|
- vcloud-api-token
|
|
54
78
|
regex:
|
|
55
79
|
pattern: '(?i)(vk[_-]?cloud[_-]?token|vcloud[_-]?api[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{40,}[''"]?'
|
|
80
|
+
exclude_regexes_match:
|
|
81
|
+
- '\$\{[^}]+\}'
|
|
82
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
83
|
+
- '%\([^)]+\)s'
|
|
84
|
+
- 'process\.env\.'
|
|
85
|
+
- 'os\.getenv\('
|
|
86
|
+
- 'getenv\('
|
|
87
|
+
- 'environ\['
|
|
56
88
|
|
|
57
89
|
- name: VK OAuth Token
|
|
58
90
|
keywords:
|
|
@@ -60,6 +92,14 @@ detectors:
|
|
|
60
92
|
- vk-access-token
|
|
61
93
|
regex:
|
|
62
94
|
pattern: '(?i)(vk[_-]?oauth[_-]?token|vk[_-]?access[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{20,}[''"]?'
|
|
95
|
+
exclude_regexes_match:
|
|
96
|
+
- '\$\{[^}]+\}'
|
|
97
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
98
|
+
- '%\([^)]+\)s'
|
|
99
|
+
- 'process\.env\.'
|
|
100
|
+
- 'os\.getenv\('
|
|
101
|
+
- 'getenv\('
|
|
102
|
+
- 'environ\['
|
|
63
103
|
|
|
64
104
|
- name: SberCloud API Token
|
|
65
105
|
keywords:
|
|
@@ -67,6 +107,14 @@ detectors:
|
|
|
67
107
|
- sber-cloud-api-token
|
|
68
108
|
regex:
|
|
69
109
|
pattern: '(?i)(sbercloud[_-]?token|sber[_-]?cloud[_-]?api[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{40,}[''"]?'
|
|
110
|
+
exclude_regexes_match:
|
|
111
|
+
- '\$\{[^}]+\}'
|
|
112
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
113
|
+
- '%\([^)]+\)s'
|
|
114
|
+
- 'process\.env\.'
|
|
115
|
+
- 'os\.getenv\('
|
|
116
|
+
- 'getenv\('
|
|
117
|
+
- 'environ\['
|
|
70
118
|
|
|
71
119
|
- name: 1C HTTP API Token
|
|
72
120
|
keywords:
|
|
@@ -75,6 +123,14 @@ detectors:
|
|
|
75
123
|
- 1c-basic-auth
|
|
76
124
|
regex:
|
|
77
125
|
pattern: '(?i)(1c[_-]?api[_-]?token|1c[_-]?http[_-]?auth|1c[_-]?basic[_-]?auth)\s*[:=]\s*[''"]?[A-Za-z0-9_\-+/=]{20,}[''"]?'
|
|
126
|
+
exclude_regexes_match:
|
|
127
|
+
- '\$\{[^}]+\}'
|
|
128
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
129
|
+
- '%\([^)]+\)s'
|
|
130
|
+
- 'process\.env\.'
|
|
131
|
+
- 'os\.getenv\('
|
|
132
|
+
- 'getenv\('
|
|
133
|
+
- 'environ\['
|
|
78
134
|
|
|
79
135
|
- name: Bitrix24 REST Token
|
|
80
136
|
keywords:
|
|
@@ -83,6 +139,14 @@ detectors:
|
|
|
83
139
|
- bx24-token
|
|
84
140
|
regex:
|
|
85
141
|
pattern: '(?i)(bitrix24[_-]?token|bitrix[_-]?rest[_-]?token|bx24[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9]{32,}[''"]?'
|
|
142
|
+
exclude_regexes_match:
|
|
143
|
+
- '\$\{[^}]+\}'
|
|
144
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
145
|
+
- '%\([^)]+\)s'
|
|
146
|
+
- 'process\.env\.'
|
|
147
|
+
- 'os\.getenv\('
|
|
148
|
+
- 'getenv\('
|
|
149
|
+
- 'environ\['
|
|
86
150
|
|
|
87
151
|
# ============================================================================
|
|
88
152
|
# CREDENTIALS IN URL (BASIC AUTH)
|
|
@@ -123,12 +187,16 @@ detectors:
|
|
|
123
187
|
- client_secret
|
|
124
188
|
regex:
|
|
125
189
|
pattern: '(?i)(client_secret)\s*[:=]\s*[''"]?[0-9A-Za-z\-._~]{16,}[''"]?'
|
|
190
|
+
exclude_regexes_match:
|
|
191
|
+
- '\$\{[^}]+\}'
|
|
192
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
193
|
+
- '%\([^)]+\)s'
|
|
194
|
+
- 'process\.env\.'
|
|
195
|
+
- 'os\.getenv\('
|
|
196
|
+
- 'getenv\('
|
|
197
|
+
- 'environ\['
|
|
126
198
|
|
|
127
|
-
|
|
128
|
-
keywords:
|
|
129
|
-
- client_id
|
|
130
|
-
regex:
|
|
131
|
-
pattern: '(?i)(client_id)\s*[:=]\s*[''"]?[0-9A-Za-z\-._~]{10,}[''"]?'
|
|
199
|
+
# OAuth Client ID — removed: public identifier, not a secret (PCI-DSS/SOC2 noise reduction).
|
|
132
200
|
|
|
133
201
|
- name: OIDC Keycloak Client Secret
|
|
134
202
|
keywords:
|
|
@@ -137,6 +205,14 @@ detectors:
|
|
|
137
205
|
- KEYCLOAK_CLIENT_SECRET
|
|
138
206
|
regex:
|
|
139
207
|
pattern: '(?i)(oidc|oauth2|keycloak).*client[_-]?secret.*[:=]\s*[''"]?[0-9A-Za-z\-._~]{16,}[''"]?'
|
|
208
|
+
exclude_regexes_match:
|
|
209
|
+
- '\$\{[^}]+\}'
|
|
210
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
211
|
+
- '%\([^)]+\)s'
|
|
212
|
+
- 'process\.env\.'
|
|
213
|
+
- 'os\.getenv\('
|
|
214
|
+
- 'getenv\('
|
|
215
|
+
- 'environ\['
|
|
140
216
|
|
|
141
217
|
- name: ITS-002 Keycloak Client Secret Policy Violation
|
|
142
218
|
keywords:
|
|
@@ -145,6 +221,14 @@ detectors:
|
|
|
145
221
|
- keycloak_client_secret
|
|
146
222
|
regex:
|
|
147
223
|
pattern: '(?i)(keycloak[_\.-]?client[_-]?secret|KEYCLOAK_CLIENT_SECRET)\s*[:=]\s*[''"]?[0-9A-Za-z\-._~]{12,}[''"]?'
|
|
224
|
+
exclude_regexes_match:
|
|
225
|
+
- '\$\{[^}]+\}'
|
|
226
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
227
|
+
- '%\([^)]+\)s'
|
|
228
|
+
- 'process\.env\.'
|
|
229
|
+
- 'os\.getenv\('
|
|
230
|
+
- 'getenv\('
|
|
231
|
+
- 'environ\['
|
|
148
232
|
|
|
149
233
|
- name: Spring OAuth2 Client Secret
|
|
150
234
|
keywords:
|
|
@@ -152,6 +236,14 @@ detectors:
|
|
|
152
236
|
- client-secret
|
|
153
237
|
regex:
|
|
154
238
|
pattern: '(?i)spring\.security\.oauth2\.client\.registration\.[^.\s]+\.client-secret\s*=\s*[''"]?[0-9A-Za-z\-._~]{16,}[''"]?'
|
|
239
|
+
exclude_regexes_match:
|
|
240
|
+
- '\$\{[^}]+\}'
|
|
241
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
242
|
+
- '%\([^)]+\)s'
|
|
243
|
+
- 'process\.env\.'
|
|
244
|
+
- 'os\.getenv\('
|
|
245
|
+
- 'getenv\('
|
|
246
|
+
- 'environ\['
|
|
155
247
|
|
|
156
248
|
# ============================================================================
|
|
157
249
|
# GITLAB / GITHUB TOKENS (Custom - keep for consistency)
|
|
@@ -193,6 +285,14 @@ detectors:
|
|
|
193
285
|
- openvpn-key
|
|
194
286
|
regex:
|
|
195
287
|
pattern: '(?i)(vpn[_-]?user|vpn[_-]?login|vpn[_-]?password|vpn[_-]?cert|openvpn[_-]?key)\s*[:=]\s*[''"]?[A-Za-z0-9_\-+/=]{16,}[''"]?'
|
|
288
|
+
exclude_regexes_match:
|
|
289
|
+
- '\$\{[^}]+\}'
|
|
290
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
291
|
+
- '%\([^)]+\)s'
|
|
292
|
+
- 'process\.env\.'
|
|
293
|
+
- 'os\.getenv\('
|
|
294
|
+
- 'getenv\('
|
|
295
|
+
- 'environ\['
|
|
196
296
|
|
|
197
297
|
- name: Proxy Credentials
|
|
198
298
|
keywords:
|
|
@@ -202,6 +302,14 @@ detectors:
|
|
|
202
302
|
- proxy-auth
|
|
203
303
|
regex:
|
|
204
304
|
pattern: '(?i)(proxy[_-]?user|proxy[_-]?login|proxy[_-]?password|proxy[_-]?auth)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{8,}[''"]?'
|
|
305
|
+
exclude_regexes_match:
|
|
306
|
+
- '\$\{[^}]+\}'
|
|
307
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
308
|
+
- '%\([^)]+\)s'
|
|
309
|
+
- 'process\.env\.'
|
|
310
|
+
- 'os\.getenv\('
|
|
311
|
+
- 'getenv\('
|
|
312
|
+
- 'environ\['
|
|
205
313
|
|
|
206
314
|
- name: GitLab Runner Token
|
|
207
315
|
keywords:
|
|
@@ -210,6 +318,14 @@ detectors:
|
|
|
210
318
|
- runner-registration-token
|
|
211
319
|
regex:
|
|
212
320
|
pattern: '(?i)(gitlab[_-]?runner[_-]?token|ci[_-]?cd[_-]?token|runner[_-]?registration[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{20,}[''"]?'
|
|
321
|
+
exclude_regexes_match:
|
|
322
|
+
- '\$\{[^}]+\}'
|
|
323
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
324
|
+
- '%\([^)]+\)s'
|
|
325
|
+
- 'process\.env\.'
|
|
326
|
+
- 'os\.getenv\('
|
|
327
|
+
- 'getenv\('
|
|
328
|
+
- 'environ\['
|
|
213
329
|
|
|
214
330
|
- name: Self-Hosted CI/CD Token
|
|
215
331
|
keywords:
|
|
@@ -219,6 +335,14 @@ detectors:
|
|
|
219
335
|
- self-hosted-ci-token
|
|
220
336
|
regex:
|
|
221
337
|
pattern: '(?i)(jenkins[_-]?token|teamcity[_-]?token|bamboo[_-]?token|self[_-]?hosted[_-]?ci[_-]?token)\s*[:=]\s*[''"]?[A-Za-z0-9_\-]{20,}[''"]?'
|
|
338
|
+
exclude_regexes_match:
|
|
339
|
+
- '\$\{[^}]+\}'
|
|
340
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
341
|
+
- '%\([^)]+\)s'
|
|
342
|
+
- 'process\.env\.'
|
|
343
|
+
- 'os\.getenv\('
|
|
344
|
+
- 'getenv\('
|
|
345
|
+
- 'environ\['
|
|
222
346
|
|
|
223
347
|
# ============================================================================
|
|
224
348
|
# INFRASTRUCTURE (Vault, Atlassian, Grafana, Nexus/NPM, Elastic, 1C, Kafka)
|
|
@@ -239,6 +363,14 @@ detectors:
|
|
|
239
363
|
- vault-token
|
|
240
364
|
regex:
|
|
241
365
|
pattern: '(?i)(vault[_-]?token|VAULT_TOKEN)\s*[:=]\s*[''"]?(hvs\.CAES[A-Za-z0-9_\-]+|hvc\.CAES[A-Za-z0-9_\-]+|s\.[A-Za-z0-9_\-]{8,})[''"]?'
|
|
366
|
+
exclude_regexes_match:
|
|
367
|
+
- '\$\{[^}]+\}'
|
|
368
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
369
|
+
- '%\([^)]+\)s'
|
|
370
|
+
- 'process\.env\.'
|
|
371
|
+
- 'os\.getenv\('
|
|
372
|
+
- 'getenv\('
|
|
373
|
+
- 'environ\['
|
|
242
374
|
|
|
243
375
|
- name: Atlassian API Token
|
|
244
376
|
keywords:
|
|
@@ -265,6 +397,14 @@ detectors:
|
|
|
265
397
|
- registry.npmjs.org_auth
|
|
266
398
|
regex:
|
|
267
399
|
pattern: '(?i)(_authToken|_auth|registry\.npmjs\.org[_-]?auth)\s*=\s*[A-Za-z0-9_\-=]{20,}'
|
|
400
|
+
exclude_regexes_match:
|
|
401
|
+
- '\$\{[^}]+\}'
|
|
402
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
403
|
+
- '%\([^)]+\)s'
|
|
404
|
+
- 'process\.env\.'
|
|
405
|
+
- 'os\.getenv\('
|
|
406
|
+
- 'getenv\('
|
|
407
|
+
- 'environ\['
|
|
268
408
|
|
|
269
409
|
- name: Elasticsearch OpenSearch Auth
|
|
270
410
|
keywords:
|
|
@@ -274,6 +414,14 @@ detectors:
|
|
|
274
414
|
- elasticsearch.password
|
|
275
415
|
regex:
|
|
276
416
|
pattern: '(?i)(xpack\.security\.(user|password)|cloud\.auth|api_key|elasticsearch\.password)\s*[:=]\s*[''"]?[A-Za-z0-9_\-=]{16,}[''"]?'
|
|
417
|
+
exclude_regexes_match:
|
|
418
|
+
- '\$\{[^}]+\}'
|
|
419
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
420
|
+
- '%\([^)]+\)s'
|
|
421
|
+
- 'process\.env\.'
|
|
422
|
+
- 'os\.getenv\('
|
|
423
|
+
- 'getenv\('
|
|
424
|
+
- 'environ\['
|
|
277
425
|
|
|
278
426
|
- name: 1C Base Connection String
|
|
279
427
|
keywords:
|
|
@@ -290,6 +438,14 @@ detectors:
|
|
|
290
438
|
- sasl.password
|
|
291
439
|
regex:
|
|
292
440
|
pattern: '(?i)(sasl\.(jaas\.config|username|password)|org\.apache\.kafka\.common\.security\.plain\.(username|password))\s*[:=]\s*[''"]?[^''"\s]{8,}[''"]?'
|
|
441
|
+
exclude_regexes_match:
|
|
442
|
+
- '\$\{[^}]+\}'
|
|
443
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
444
|
+
- '%\([^)]+\)s'
|
|
445
|
+
- 'process\.env\.'
|
|
446
|
+
- 'os\.getenv\('
|
|
447
|
+
- 'getenv\('
|
|
448
|
+
- 'environ\['
|
|
293
449
|
|
|
294
450
|
- name: Generic Header API Key
|
|
295
451
|
keywords:
|
|
@@ -298,6 +454,14 @@ detectors:
|
|
|
298
454
|
- x-api-token
|
|
299
455
|
regex:
|
|
300
456
|
pattern: '(?i)(x-api-key|x-auth-token|x-api-token)\s*[:=]\s*[''"]?[0-9A-Za-z\-._~]{24,}[''"]?'
|
|
457
|
+
exclude_regexes_match:
|
|
458
|
+
- '\$\{[^}]+\}'
|
|
459
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
460
|
+
- '%\([^)]+\)s'
|
|
461
|
+
- 'process\.env\.'
|
|
462
|
+
- 'os\.getenv\('
|
|
463
|
+
- 'getenv\('
|
|
464
|
+
- 'environ\['
|
|
301
465
|
|
|
302
466
|
# ============================================================================
|
|
303
467
|
# GENERIC TOKENS / API KEYS
|
|
@@ -323,6 +487,14 @@ detectors:
|
|
|
323
487
|
- apikey
|
|
324
488
|
regex:
|
|
325
489
|
pattern: '(?i)(password|passwd|pwd|secret|key|token|salt|api_key|apikey)\s*[:=]\s*[''"][^''"]{8,}[''"]'
|
|
490
|
+
exclude_regexes_match:
|
|
491
|
+
- '\$\{[^}]+\}'
|
|
492
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
493
|
+
- '%\([^)]+\)s'
|
|
494
|
+
- 'process\.env\.'
|
|
495
|
+
- 'os\.getenv\('
|
|
496
|
+
- 'getenv\('
|
|
497
|
+
- 'environ\['
|
|
326
498
|
|
|
327
499
|
- name: Generic API Key
|
|
328
500
|
keywords:
|
|
@@ -331,6 +503,14 @@ detectors:
|
|
|
331
503
|
- apikey
|
|
332
504
|
regex:
|
|
333
505
|
pattern: '(?i)(api[_-]?key|apikey)\s*[:=]\s*[''"]?[0-9A-Za-z_\-]{32,}[''"]?'
|
|
506
|
+
exclude_regexes_match:
|
|
507
|
+
- '\$\{[^}]+\}'
|
|
508
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
509
|
+
- '%\([^)]+\)s'
|
|
510
|
+
- 'process\.env\.'
|
|
511
|
+
- 'os\.getenv\('
|
|
512
|
+
- 'getenv\('
|
|
513
|
+
- 'environ\['
|
|
334
514
|
|
|
335
515
|
- name: Generic Secret Token
|
|
336
516
|
keywords:
|
|
@@ -339,6 +519,14 @@ detectors:
|
|
|
339
519
|
- password
|
|
340
520
|
regex:
|
|
341
521
|
pattern: '(?i)(secret|token|password|passwd)\s*[:=]\s*[''"]?[0-9A-Za-z_\-]{40,}[''"]?'
|
|
522
|
+
exclude_regexes_match:
|
|
523
|
+
- '\$\{[^}]+\}'
|
|
524
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
525
|
+
- '%\([^)]+\)s'
|
|
526
|
+
- 'process\.env\.'
|
|
527
|
+
- 'os\.getenv\('
|
|
528
|
+
- 'getenv\('
|
|
529
|
+
- 'environ\['
|
|
342
530
|
|
|
343
531
|
# ============================================================================
|
|
344
532
|
# PII (PERSONAL IDENTIFIABLE INFORMATION) - GDPR/COMPLIANCE
|
|
@@ -348,9 +536,20 @@ detectors:
|
|
|
348
536
|
keywords:
|
|
349
537
|
- email
|
|
350
538
|
- e-mail
|
|
351
|
-
- mail
|
|
352
539
|
regex:
|
|
353
|
-
pattern: '(?i)(email|e-mail
|
|
540
|
+
pattern: '(?i)(?:email|e-mail)\s*[:=]\s*[\x27"]?(?!.*@(example\.(com|org|net)|test\.|mock\.|localhost|invalid|\.test|\.example|noreply\.|no-reply\.|fixture\.|sample\.|dummy\.|placeholder\.))[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,}[\x27"]?'
|
|
541
|
+
exclude_regexes_match:
|
|
542
|
+
- '@example\.(com|org|net)'
|
|
543
|
+
- '@test\.'
|
|
544
|
+
- '@mock\.'
|
|
545
|
+
- '@localhost'
|
|
546
|
+
- 'noreply@'
|
|
547
|
+
- 'no-reply@'
|
|
548
|
+
- 'fixture@'
|
|
549
|
+
- 'sample@'
|
|
550
|
+
- 'test@'
|
|
551
|
+
- 'user@example'
|
|
552
|
+
- '\$\{[^}]+\}'
|
|
354
553
|
|
|
355
554
|
- name: PII Phone RU
|
|
356
555
|
keywords:
|
|
@@ -405,3 +604,72 @@ detectors:
|
|
|
405
604
|
- инн
|
|
406
605
|
regex:
|
|
407
606
|
pattern: '(?i)(inn|инн)\s*[:=]\s*[''"]?[0-9]{10,12}[''"]?'
|
|
607
|
+
|
|
608
|
+
# ============================================================================
|
|
609
|
+
# PCI-DSS / SOC2 COMPLIANCE (cryptography, storage, telemetry)
|
|
610
|
+
# ============================================================================
|
|
611
|
+
|
|
612
|
+
- name: Private Key (RSA/ECC)
|
|
613
|
+
keywords:
|
|
614
|
+
- "-----BEGIN"
|
|
615
|
+
regex:
|
|
616
|
+
pattern: '-----BEGIN (?:\w+ )?PRIVATE KEY-----'
|
|
617
|
+
|
|
618
|
+
- name: Cryptographic Salt or Encryption Key
|
|
619
|
+
keywords:
|
|
620
|
+
- aes_key
|
|
621
|
+
- encryption_key
|
|
622
|
+
- secret_salt
|
|
623
|
+
regex:
|
|
624
|
+
pattern: '(?i)(aes[_-]?key|encryption[_-]?key|secret[_-]?salt)\s*[:=]\s*[''"][A-Za-z0-9+/=]{32,}[''"]'
|
|
625
|
+
exclude_regexes_match:
|
|
626
|
+
- '\$\{[^}]+\}'
|
|
627
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
628
|
+
- '%\([^)]+\)s'
|
|
629
|
+
- 'process\.env\.'
|
|
630
|
+
- 'os\.getenv\('
|
|
631
|
+
- 'getenv\('
|
|
632
|
+
- 'environ\['
|
|
633
|
+
|
|
634
|
+
- name: AWS S3 / MinIO Access Key ID
|
|
635
|
+
keywords:
|
|
636
|
+
- AKIA
|
|
637
|
+
- MINIO_ROOT_USER
|
|
638
|
+
regex:
|
|
639
|
+
pattern: '(^|[^A-Z0-9])[A-Z0-9]{20}($|[^A-Z0-9])'
|
|
640
|
+
|
|
641
|
+
- name: AWS S3 / MinIO Secret Access Key
|
|
642
|
+
keywords:
|
|
643
|
+
- aws_secret
|
|
644
|
+
- minio_root_password
|
|
645
|
+
regex:
|
|
646
|
+
pattern: '(^|[^A-Za-z0-9/+=])[A-Za-z0-9/+=]{40}($|[^A-Za-z0-9/+=])'
|
|
647
|
+
|
|
648
|
+
- name: Sentry Authentication Token
|
|
649
|
+
keywords:
|
|
650
|
+
- sentry
|
|
651
|
+
regex:
|
|
652
|
+
pattern: '\b[0-9a-fA-F]{64}\b'
|
|
653
|
+
|
|
654
|
+
- name: Redis Password
|
|
655
|
+
keywords:
|
|
656
|
+
- redis_password
|
|
657
|
+
- redis_pass
|
|
658
|
+
regex:
|
|
659
|
+
pattern: '(?i)(redis[_-]?(password|pass|pwd))\s*[:=]\s*[\x27"][^\x27"\s]{8,}[\x27"]'
|
|
660
|
+
exclude_regexes_match:
|
|
661
|
+
- '\$\{[^}]+\}'
|
|
662
|
+
- '\$[A-Z_][A-Z0-9_]*'
|
|
663
|
+
- '%\([^)]+\)s'
|
|
664
|
+
- 'process\.env\.'
|
|
665
|
+
- 'os\.getenv\('
|
|
666
|
+
- 'getenv\('
|
|
667
|
+
- 'environ\['
|
|
668
|
+
|
|
669
|
+
- name: Payment Gateway Secret Key (Yookassa/Stripe)
|
|
670
|
+
keywords:
|
|
671
|
+
- yoomoney
|
|
672
|
+
- sk_live_
|
|
673
|
+
- cloudpayments
|
|
674
|
+
regex:
|
|
675
|
+
pattern: '(?i)(sk_live_[0-9a-zA-Z]{24}|live_[0-9a-zA-Z]{32,})'
|