@runsec/mcp 1.0.70 → 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.
@@ -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
- - name: OAuth Client ID
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|mail)\s*[:=]\s*[''"]?[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}[''"]?'
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,})'