narvy-cli 1.0.0__py3-none-any.whl

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 (93) hide show
  1. narvy/__init__.py +3 -0
  2. narvy/android/__init__.py +0 -0
  3. narvy/android/source_analyzer.py +268 -0
  4. narvy/android/split_bundle.py +475 -0
  5. narvy/android_rule_context.py +196 -0
  6. narvy/apk_memory_preflight.py +248 -0
  7. narvy/auth.py +40 -0
  8. narvy/ci_templates/bitbucket.yml +25 -0
  9. narvy/ci_templates/github.yml +60 -0
  10. narvy/ci_templates/gitlab.yml +32 -0
  11. narvy/cloud/__init__.py +0 -0
  12. narvy/cloud/aws_scan.py +1188 -0
  13. narvy/comment_filter.py +134 -0
  14. narvy/crypto_taint_lite.py +82 -0
  15. narvy/decompiler.py +337 -0
  16. narvy/doctor.py +244 -0
  17. narvy/host/__init__.py +0 -0
  18. narvy/host/audit.py +157 -0
  19. narvy/host/host_knowledge.py +982 -0
  20. narvy/host/lynis_bootstrap.py +400 -0
  21. narvy/host/lynis_parser.py +358 -0
  22. narvy/host/narvy_checks.py +789 -0
  23. narvy/host/report.py +69 -0
  24. narvy/host/ssh_exec.py +219 -0
  25. narvy/ios/__init__.py +0 -0
  26. narvy/ios/binary_analyzer.py +1201 -0
  27. narvy/ios/plist_checks.py +249 -0
  28. narvy/ios/source_analyzer.py +301 -0
  29. narvy/ios/third_party_filter.py +242 -0
  30. narvy/ios/trust_all_context.py +66 -0
  31. narvy/main.py +1983 -0
  32. narvy/native_hardening.py +503 -0
  33. narvy/reporter.py +151 -0
  34. narvy/rule_engine.py +57 -0
  35. narvy/rules/android/config.yml +77 -0
  36. narvy/rules/android/crypto.yml +34 -0
  37. narvy/rules/android/secrets.yml +161 -0
  38. narvy/rules/android/storage.yml +24 -0
  39. narvy/rules/android/webview.yml +23 -0
  40. narvy/rules/android.yml +219 -0
  41. narvy/rules/ios/objc/crypto.yml +56 -0
  42. narvy/rules/ios/objc/network.yml +67 -0
  43. narvy/rules/ios/objc/secrets.yml +79 -0
  44. narvy/rules/ios/objc/storage.yml +45 -0
  45. narvy/rules/ios/objc/webview.yml +45 -0
  46. narvy/rules/ios_swift.yml +327 -0
  47. narvy/rules/web/go.yml +2837 -0
  48. narvy/rules/web/java.yml +1576 -0
  49. narvy/rules/web/javascript.yml +3683 -0
  50. narvy/rules/web/kotlin.yml +413 -0
  51. narvy/rules/web/local/csharp_narvy/config.yml +61 -0
  52. narvy/rules/web/local/csharp_narvy/crypto.yml +64 -0
  53. narvy/rules/web/local/csharp_narvy/deserialization.yml +59 -0
  54. narvy/rules/web/local/csharp_narvy/injection.yml +122 -0
  55. narvy/rules/web/local/csharp_narvy/xxe.yml +48 -0
  56. narvy/rules/web/local/java_narvy/auth_jwt.yml +134 -0
  57. narvy/rules/web/local/java_narvy/deserialization.yml +108 -0
  58. narvy/rules/web/local/java_narvy/mybatis.yml +39 -0
  59. narvy/rules/web/local/java_narvy/snakeyaml.yml +34 -0
  60. narvy/rules/web/local/java_narvy/spring_authz.yml +32 -0
  61. narvy/rules/web/local/java_narvy/spring_config.yml +67 -0
  62. narvy/rules/web/local/java_narvy/spring_hardening.yml +291 -0
  63. narvy/rules/web/local/java_narvy/sqli.yml +235 -0
  64. narvy/rules/web/local/java_narvy/xxe.yml +212 -0
  65. narvy/rules/web/php.yml +1644 -0
  66. narvy/rules/web/python.yml +3967 -0
  67. narvy/rules/web/ruby.yml +703 -0
  68. narvy/rules/web/rust.yml +258 -0
  69. narvy/rules/web/secrets.yml +1420 -0
  70. narvy/rules/web/secrets_supplement.yml +383 -0
  71. narvy/sca/__init__.py +1 -0
  72. narvy/sca/android_deps.py +349 -0
  73. narvy/sca/ios_deps.py +578 -0
  74. narvy/sca/osv_client.py +617 -0
  75. narvy/sca/web_deps.py +955 -0
  76. narvy/scope_config.py +195 -0
  77. narvy/semgrep_engine.py +219 -0
  78. narvy/stack_protector_evidence.py +96 -0
  79. narvy/third_party_filter.py +211 -0
  80. narvy/uploader.py +92 -0
  81. narvy/weak_prng_context.py +270 -0
  82. narvy/web/__init__.py +0 -0
  83. narvy/web/nuclei_binary.py +105 -0
  84. narvy/web/scan_blocklist.py +96 -0
  85. narvy/web/scanner.py +842 -0
  86. narvy/web/source_analyzer.py +714 -0
  87. narvy/web/ssrf_guard.py +374 -0
  88. narvy_cli-1.0.0.dist-info/METADATA +165 -0
  89. narvy_cli-1.0.0.dist-info/RECORD +93 -0
  90. narvy_cli-1.0.0.dist-info/WHEEL +5 -0
  91. narvy_cli-1.0.0.dist-info/entry_points.txt +2 -0
  92. narvy_cli-1.0.0.dist-info/licenses/LICENSE +202 -0
  93. narvy_cli-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1420 @@
1
+ # Cross-language hardcoded-credential rules, authored by Narvy.
2
+ # Provider tokens and generic high-entropy assignments. Loaded for every stack.
3
+
4
+ rules:
5
+ - id: narvy.secrets.aws-access-key-id
6
+ patterns:
7
+ - pattern-regex: \b(AKIA|ASIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA)[A-Z0-9]{16}\b
8
+ - pattern-not-regex: (?i)(example|sample|test|fake|dummy)
9
+ languages:
10
+ - regex
11
+ message: AWS Access Key ID detected (AKIA/ASIA/AGPA/... 16-char format). This credential grants direct
12
+ API access to an AWS account. Revoke it in IAM immediately and load credentials from the environment,
13
+ an instance role, or a secrets manager instead.
14
+ severity: ERROR
15
+ metadata:
16
+ cwe:
17
+ - 'CWE-798: Use of Hard-coded Credentials'
18
+ owasp:
19
+ - A07:2021 - Identification and Authentication Failures
20
+ - A07:2025 - Authentication Failures
21
+ category: security
22
+ technology:
23
+ - secrets
24
+ - aws
25
+ confidence: HIGH
26
+ subcategory:
27
+ - vuln
28
+ likelihood: HIGH
29
+ impact: HIGH
30
+ vulnerability_class:
31
+ - Hard-coded Secrets
32
+ source: narvy-local
33
+ license: Apache-2.0
34
+ - id: narvy.secrets.aws-secret-access-key
35
+ patterns:
36
+ - pattern-regex: (?i)\baws[a-z0-9_]*secret[a-z0-9_]*\s*(=|:|=>)\s*['\"`]?[A-Za-z0-9/+]{40}['\"`]?
37
+ - pattern-not-regex: (?i)(example|sample|placeholder|dummy|xxxx|00000000|changeme)
38
+ languages:
39
+ - regex
40
+ message: A variable named like an AWS secret access key is assigned a 40-char base64-alphabet literal.
41
+ AWS secret keys must never be committed; rotate the key and read it from the environment or a secrets
42
+ manager.
43
+ severity: ERROR
44
+ metadata:
45
+ cwe:
46
+ - 'CWE-798: Use of Hard-coded Credentials'
47
+ owasp:
48
+ - A07:2021 - Identification and Authentication Failures
49
+ - A07:2025 - Authentication Failures
50
+ category: security
51
+ technology:
52
+ - secrets
53
+ - aws
54
+ confidence: MEDIUM
55
+ subcategory:
56
+ - vuln
57
+ likelihood: MEDIUM
58
+ impact: HIGH
59
+ vulnerability_class:
60
+ - Hard-coded Secrets
61
+ source: narvy-local
62
+ license: Apache-2.0
63
+ - id: narvy.secrets.aws-session-token
64
+ patterns:
65
+ - pattern-regex: (?i)aws_session_token\s*(=|:|=>)\s*['\"`]?[A-Za-z0-9/+=]{32,}['\"`]?
66
+ - pattern-not-regex: (?i)(example|sample|placeholder|dummy)
67
+ languages:
68
+ - regex
69
+ message: An AWS_SESSION_TOKEN-style variable is assigned a long literal value. Session tokens are short-lived
70
+ but still grant active AWS API access if leaked; do not hardcode them.
71
+ severity: ERROR
72
+ metadata:
73
+ cwe:
74
+ - 'CWE-798: Use of Hard-coded Credentials'
75
+ owasp:
76
+ - A07:2021 - Identification and Authentication Failures
77
+ - A07:2025 - Authentication Failures
78
+ category: security
79
+ technology:
80
+ - secrets
81
+ - aws
82
+ confidence: MEDIUM
83
+ subcategory:
84
+ - vuln
85
+ likelihood: MEDIUM
86
+ impact: HIGH
87
+ vulnerability_class:
88
+ - Hard-coded Secrets
89
+ source: narvy-local
90
+ license: Apache-2.0
91
+ - id: narvy.secrets.aws-appsync-key
92
+ pattern-regex: \bda2-[a-z0-9]{26}\b
93
+ languages:
94
+ - regex
95
+ message: AWS AppSync GraphQL API key detected (da2-... format).
96
+ severity: ERROR
97
+ metadata:
98
+ cwe:
99
+ - 'CWE-798: Use of Hard-coded Credentials'
100
+ owasp:
101
+ - A07:2021 - Identification and Authentication Failures
102
+ - A07:2025 - Authentication Failures
103
+ category: security
104
+ technology:
105
+ - secrets
106
+ - aws
107
+ - appsync
108
+ confidence: HIGH
109
+ subcategory:
110
+ - vuln
111
+ likelihood: MEDIUM
112
+ impact: HIGH
113
+ vulnerability_class:
114
+ - Hard-coded Secrets
115
+ source: narvy-local
116
+ license: Apache-2.0
117
+ - id: narvy.secrets.amazon-mws-token
118
+ pattern-regex: \bamzn\.mws\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b
119
+ languages:
120
+ - regex
121
+ message: Amazon Marketplace Web Service (MWS) auth token detected (amzn.mws.<uuid> format). This grants
122
+ seller-account API access.
123
+ severity: ERROR
124
+ metadata:
125
+ cwe:
126
+ - 'CWE-798: Use of Hard-coded Credentials'
127
+ owasp:
128
+ - A07:2021 - Identification and Authentication Failures
129
+ - A07:2025 - Authentication Failures
130
+ category: security
131
+ technology:
132
+ - secrets
133
+ - aws
134
+ confidence: HIGH
135
+ subcategory:
136
+ - vuln
137
+ likelihood: MEDIUM
138
+ impact: HIGH
139
+ vulnerability_class:
140
+ - Hard-coded Secrets
141
+ source: narvy-local
142
+ license: Apache-2.0
143
+ - id: narvy.secrets.terraform-aws-provider-static-credentials
144
+ patterns:
145
+ - pattern-inside: "provider \"aws\" {\n ...\n}\n"
146
+ - pattern-either:
147
+ - pattern: 'access_key = "..."
148
+
149
+ '
150
+ - pattern: 'secret_key = "..."
151
+
152
+ '
153
+ languages:
154
+ - hcl
155
+ message: A Terraform `provider "aws"` block hardcodes access_key/secret_key instead of using an instance
156
+ profile, SSO, or environment credentials. Anyone with read access to this .tf file (or state backend
157
+ history) gets live AWS credentials.
158
+ severity: ERROR
159
+ metadata:
160
+ cwe:
161
+ - 'CWE-798: Use of Hard-coded Credentials'
162
+ owasp:
163
+ - A07:2021 - Identification and Authentication Failures
164
+ - A07:2025 - Authentication Failures
165
+ category: security
166
+ technology:
167
+ - secrets
168
+ - aws
169
+ - terraform
170
+ confidence: MEDIUM
171
+ subcategory:
172
+ - vuln
173
+ likelihood: MEDIUM
174
+ impact: HIGH
175
+ vulnerability_class:
176
+ - Hard-coded Secrets
177
+ source: narvy-local
178
+ license: Apache-2.0
179
+ - id: narvy.secrets.terraform-lambda-env-credentials
180
+ patterns:
181
+ - pattern-inside: "resource \"aws_lambda_function\" \"...\" {\n ...\n environment {\n variables\
182
+ \ = {\n ...\n }\n }\n ...\n}\n"
183
+ - pattern: '$KEY = "..."
184
+
185
+ '
186
+ - metavariable-regex:
187
+ metavariable: $KEY
188
+ regex: ^(AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AWS_SESSION_TOKEN)$
189
+ languages:
190
+ - hcl
191
+ message: An AWS Lambda `environment { variables = {...} }` block hardcodes an AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY
192
+ / AWS_SESSION_TOKEN literal. Lambda already has an execution role, so static keys in the function
193
+ definition leak through the console, CloudFormation template, and state file.
194
+ severity: ERROR
195
+ metadata:
196
+ cwe:
197
+ - 'CWE-326: Inadequate Encryption Strength'
198
+ owasp:
199
+ - A02:2021 - Cryptographic Failures
200
+ - A04:2025 - Cryptographic Failures
201
+ category: security
202
+ technology:
203
+ - secrets
204
+ - aws
205
+ - terraform
206
+ confidence: MEDIUM
207
+ subcategory:
208
+ - vuln
209
+ likelihood: MEDIUM
210
+ impact: HIGH
211
+ vulnerability_class:
212
+ - Cryptographic Issues
213
+ source: narvy-local
214
+ license: Apache-2.0
215
+ - id: narvy.secrets.terraform-rds-hardcoded-password
216
+ patterns:
217
+ - pattern-either:
218
+ - patterns:
219
+ - pattern: 'password = "..."
220
+
221
+ '
222
+ - pattern-inside: "resource \"aws_db_instance\" \"...\" {\n ...\n}\n"
223
+ - patterns:
224
+ - pattern: 'master_password = "..."
225
+
226
+ '
227
+ - pattern-inside: "resource \"aws_rds_cluster\" \"...\" {\n ...\n}\n"
228
+ languages:
229
+ - hcl
230
+ message: An `aws_db_instance` or `aws_rds_cluster` Terraform resource sets `password` / `master_password`
231
+ to a literal string instead of sourcing it from a `random_password` resource or a secrets manager
232
+ reference.
233
+ severity: WARNING
234
+ metadata:
235
+ cwe:
236
+ - 'CWE-798: Use of Hard-coded Credentials'
237
+ owasp:
238
+ - A07:2021 - Identification and Authentication Failures
239
+ - A07:2025 - Authentication Failures
240
+ category: security
241
+ technology:
242
+ - secrets
243
+ - aws
244
+ - terraform
245
+ confidence: MEDIUM
246
+ subcategory:
247
+ - vuln
248
+ likelihood: MEDIUM
249
+ impact: HIGH
250
+ vulnerability_class:
251
+ - Hard-coded Secrets
252
+ source: narvy-local
253
+ license: Apache-2.0
254
+ - id: narvy.secrets.python-boto3-hardcoded-credential
255
+ patterns:
256
+ - pattern-either:
257
+ - pattern: 'boto3.client(..., $CRED="...", ...)
258
+
259
+ '
260
+ - pattern: 'boto3.resource(..., $CRED="...", ...)
261
+
262
+ '
263
+ - pattern: 'boto3.Session(..., $CRED="...", ...)
264
+
265
+ '
266
+ - metavariable-regex:
267
+ metavariable: $CRED
268
+ regex: (aws_access_key_id|aws_secret_access_key|aws_session_token)$
269
+ languages:
270
+ - python
271
+ message: A boto3 client/resource/Session constructor is called with a literal string for aws_access_key_id
272
+ / aws_secret_access_key / aws_session_token. Let boto3 pick up credentials from the environment, ~/.aws/credentials,
273
+ or an instance/task role instead.
274
+ severity: ERROR
275
+ metadata:
276
+ cwe:
277
+ - 'CWE-798: Use of Hard-coded Credentials'
278
+ owasp:
279
+ - A07:2021 - Identification and Authentication Failures
280
+ - A07:2025 - Authentication Failures
281
+ category: security
282
+ technology:
283
+ - secrets
284
+ - aws
285
+ - boto3
286
+ confidence: HIGH
287
+ subcategory:
288
+ - vuln
289
+ likelihood: HIGH
290
+ impact: MEDIUM
291
+ vulnerability_class:
292
+ - Hard-coded Secrets
293
+ source: narvy-local
294
+ license: Apache-2.0
295
+ - id: narvy.secrets.stripe-secret-key
296
+ pattern-regex: \bsk_live_[0-9a-zA-Z]{24,}\b
297
+ languages:
298
+ - regex
299
+ message: Stripe live secret key detected (sk_live_...). This key can move money and read all customer/payment
300
+ data on the account. Revoke it in the Stripe dashboard and use environment-provided credentials.
301
+ severity: ERROR
302
+ metadata:
303
+ cwe:
304
+ - 'CWE-798: Use of Hard-coded Credentials'
305
+ owasp:
306
+ - A07:2021 - Identification and Authentication Failures
307
+ - A07:2025 - Authentication Failures
308
+ category: security
309
+ technology:
310
+ - secrets
311
+ - stripe
312
+ confidence: HIGH
313
+ subcategory:
314
+ - vuln
315
+ likelihood: MEDIUM
316
+ impact: HIGH
317
+ vulnerability_class:
318
+ - Hard-coded Secrets
319
+ source: narvy-local
320
+ license: Apache-2.0
321
+ - id: narvy.secrets.stripe-restricted-key
322
+ pattern-regex: \brk_live_[0-9a-zA-Z]{24,}\b
323
+ languages:
324
+ - regex
325
+ message: Stripe restricted live API key detected (rk_live_...). Scope is narrower than a full secret
326
+ key but it still grants live API access and should not be hardcoded.
327
+ severity: ERROR
328
+ metadata:
329
+ cwe:
330
+ - 'CWE-798: Use of Hard-coded Credentials'
331
+ owasp:
332
+ - A07:2021 - Identification and Authentication Failures
333
+ - A07:2025 - Authentication Failures
334
+ category: security
335
+ technology:
336
+ - secrets
337
+ - stripe
338
+ confidence: HIGH
339
+ subcategory:
340
+ - vuln
341
+ likelihood: MEDIUM
342
+ impact: MEDIUM
343
+ vulnerability_class:
344
+ - Hard-coded Secrets
345
+ source: narvy-local
346
+ license: Apache-2.0
347
+ - id: narvy.secrets.square-access-token
348
+ pattern-regex: \bsq0atp-[0-9A-Za-z\-_]{22}\b
349
+ languages:
350
+ - regex
351
+ message: Square access token detected (sq0atp-... format).
352
+ severity: ERROR
353
+ metadata:
354
+ cwe:
355
+ - 'CWE-798: Use of Hard-coded Credentials'
356
+ owasp:
357
+ - A07:2021 - Identification and Authentication Failures
358
+ - A07:2025 - Authentication Failures
359
+ category: security
360
+ technology:
361
+ - secrets
362
+ - square
363
+ confidence: HIGH
364
+ subcategory:
365
+ - vuln
366
+ likelihood: MEDIUM
367
+ impact: MEDIUM
368
+ vulnerability_class:
369
+ - Hard-coded Secrets
370
+ source: narvy-local
371
+ license: Apache-2.0
372
+ - id: narvy.secrets.square-oauth-secret
373
+ pattern-regex: \bsq0csp-[0-9A-Za-z\-_]{43}\b
374
+ languages:
375
+ - regex
376
+ message: Square OAuth application secret detected (sq0csp-... format).
377
+ severity: ERROR
378
+ metadata:
379
+ cwe:
380
+ - 'CWE-798: Use of Hard-coded Credentials'
381
+ owasp:
382
+ - A07:2021 - Identification and Authentication Failures
383
+ - A07:2025 - Authentication Failures
384
+ category: security
385
+ technology:
386
+ - secrets
387
+ - square
388
+ confidence: HIGH
389
+ subcategory:
390
+ - vuln
391
+ likelihood: MEDIUM
392
+ impact: MEDIUM
393
+ vulnerability_class:
394
+ - Hard-coded Secrets
395
+ source: narvy-local
396
+ license: Apache-2.0
397
+ - id: narvy.secrets.paypal-braintree-token
398
+ pattern-regex: access_token\$production\$[0-9a-z]{16}\$[0-9a-z]{32}
399
+ languages:
400
+ - regex
401
+ message: PayPal / Braintree production access token detected (access_token$production$...$... format).
402
+ severity: ERROR
403
+ metadata:
404
+ cwe:
405
+ - 'CWE-798: Use of Hard-coded Credentials'
406
+ owasp:
407
+ - A07:2021 - Identification and Authentication Failures
408
+ - A07:2025 - Authentication Failures
409
+ category: security
410
+ technology:
411
+ - secrets
412
+ - paypal
413
+ - braintree
414
+ confidence: HIGH
415
+ subcategory:
416
+ - vuln
417
+ likelihood: MEDIUM
418
+ impact: MEDIUM
419
+ vulnerability_class:
420
+ - Hard-coded Secrets
421
+ source: narvy-local
422
+ license: Apache-2.0
423
+ - id: narvy.secrets.picatic-api-key
424
+ pattern-regex: \bsk_live_[0-9a-z]{32}\b
425
+ languages:
426
+ - regex
427
+ message: Picatic live secret key detected (sk_live_ + 32 lowercase alphanumeric). Note this shares the
428
+ sk_live_ prefix with Stripe; the 32-char lowercase-only body is Picatic's distinct format.
429
+ severity: ERROR
430
+ metadata:
431
+ cwe:
432
+ - 'CWE-798: Use of Hard-coded Credentials'
433
+ owasp:
434
+ - A07:2021 - Identification and Authentication Failures
435
+ - A07:2025 - Authentication Failures
436
+ category: security
437
+ technology:
438
+ - secrets
439
+ - picatic
440
+ confidence: LOW
441
+ subcategory:
442
+ - vuln
443
+ likelihood: MEDIUM
444
+ impact: MEDIUM
445
+ vulnerability_class:
446
+ - Hard-coded Secrets
447
+ source: narvy-local
448
+ license: Apache-2.0
449
+ - id: narvy.secrets.twilio-api-key
450
+ pattern-regex: \bSK[0-9a-fA-F]{32}\b
451
+ languages:
452
+ - regex
453
+ message: Twilio API key SID detected (SK followed by 32 hex chars). Pair with a leaked API secret this
454
+ grants full Twilio account API access (SMS, calls, billing).
455
+ severity: ERROR
456
+ metadata:
457
+ cwe:
458
+ - 'CWE-798: Use of Hard-coded Credentials'
459
+ owasp:
460
+ - A07:2021 - Identification and Authentication Failures
461
+ - A07:2025 - Authentication Failures
462
+ category: security
463
+ technology:
464
+ - secrets
465
+ - twilio
466
+ confidence: MEDIUM
467
+ subcategory:
468
+ - vuln
469
+ likelihood: MEDIUM
470
+ impact: MEDIUM
471
+ vulnerability_class:
472
+ - Hard-coded Secrets
473
+ source: narvy-local
474
+ license: Apache-2.0
475
+ - id: narvy.secrets.mailgun-api-key
476
+ pattern-regex: \bkey-[0-9a-zA-Z]{32}\b
477
+ languages:
478
+ - regex
479
+ message: Mailgun API key detected (key-... format, legacy but still accepted by Mailgun's v3 API).
480
+ severity: ERROR
481
+ metadata:
482
+ cwe:
483
+ - 'CWE-798: Use of Hard-coded Credentials'
484
+ owasp:
485
+ - A07:2021 - Identification and Authentication Failures
486
+ - A07:2025 - Authentication Failures
487
+ category: security
488
+ technology:
489
+ - secrets
490
+ - mailgun
491
+ confidence: LOW
492
+ subcategory:
493
+ - vuln
494
+ likelihood: MEDIUM
495
+ impact: MEDIUM
496
+ vulnerability_class:
497
+ - Hard-coded Secrets
498
+ source: narvy-local
499
+ license: Apache-2.0
500
+ - id: narvy.secrets.mailchimp-api-key
501
+ pattern-regex: \b[0-9a-f]{32}-us[0-9]{1,2}\b
502
+ languages:
503
+ - regex
504
+ message: MailChimp API key detected (32 hex chars + -usNN datacenter suffix).
505
+ severity: ERROR
506
+ metadata:
507
+ cwe:
508
+ - 'CWE-798: Use of Hard-coded Credentials'
509
+ owasp:
510
+ - A07:2021 - Identification and Authentication Failures
511
+ - A07:2025 - Authentication Failures
512
+ category: security
513
+ technology:
514
+ - secrets
515
+ - mailchimp
516
+ confidence: MEDIUM
517
+ subcategory:
518
+ - vuln
519
+ likelihood: MEDIUM
520
+ impact: MEDIUM
521
+ vulnerability_class:
522
+ - Hard-coded Secrets
523
+ source: narvy-local
524
+ license: Apache-2.0
525
+ - id: narvy.secrets.slack-token
526
+ pattern-either:
527
+ - pattern-regex: \bxox[baop]-[0-9]{10,13}-[0-9]{10,13}-[0-9a-zA-Z]{24,32}\b
528
+ - pattern-regex: \bxoxr-[0-9]{10,13}-[0-9]{10,13}-[0-9a-zA-Z]{24,32}\b
529
+ languages:
530
+ - regex
531
+ message: Slack token detected (xoxb-/xoxp-/xoxa-/xoxo- bot/user/app/legacy token format). Grants workspace
532
+ API access as the associated app or user.
533
+ severity: ERROR
534
+ metadata:
535
+ cwe:
536
+ - 'CWE-798: Use of Hard-coded Credentials'
537
+ owasp:
538
+ - A07:2021 - Identification and Authentication Failures
539
+ - A07:2025 - Authentication Failures
540
+ category: security
541
+ technology:
542
+ - secrets
543
+ - slack
544
+ confidence: HIGH
545
+ subcategory:
546
+ - vuln
547
+ likelihood: MEDIUM
548
+ impact: MEDIUM
549
+ vulnerability_class:
550
+ - Hard-coded Secrets
551
+ source: narvy-local
552
+ license: Apache-2.0
553
+ - id: narvy.secrets.slack-webhook
554
+ patterns:
555
+ - pattern-regex: https://hooks\.slack\.com/services/T[A-Za-z0-9_]{8,12}/B[A-Za-z0-9_]{8,12}/[A-Za-z0-9_]{20,32}
556
+ - pattern-not-regex: T0{8}|B0{8}|X{20,}
557
+ languages:
558
+ - regex
559
+ message: Slack Incoming Webhook URL detected. Anyone holding this URL can post messages into the target
560
+ channel as the configured integration.
561
+ severity: ERROR
562
+ metadata:
563
+ cwe:
564
+ - 'CWE-798: Use of Hard-coded Credentials'
565
+ owasp:
566
+ - A07:2021 - Identification and Authentication Failures
567
+ - A07:2025 - Authentication Failures
568
+ category: security
569
+ technology:
570
+ - secrets
571
+ - slack
572
+ confidence: HIGH
573
+ subcategory:
574
+ - vuln
575
+ likelihood: MEDIUM
576
+ impact: MEDIUM
577
+ vulnerability_class:
578
+ - Hard-coded Secrets
579
+ source: narvy-local
580
+ license: Apache-2.0
581
+ - id: narvy.secrets.outlook-webhook-url
582
+ pattern-regex: https://outlook\.office\.com/webhook/[0-9a-fA-F-]{36}
583
+ languages:
584
+ - regex
585
+ message: Microsoft Outlook / Office connector webhook URL detected (outlook.office.com/webhook/<guid>).
586
+ Lets anyone holding the URL post into the connected Outlook group.
587
+ severity: ERROR
588
+ metadata:
589
+ cwe:
590
+ - 'CWE-798: Use of Hard-coded Credentials'
591
+ owasp:
592
+ - A07:2021 - Identification and Authentication Failures
593
+ - A07:2025 - Authentication Failures
594
+ category: security
595
+ technology:
596
+ - secrets
597
+ - outlook
598
+ confidence: HIGH
599
+ subcategory:
600
+ - vuln
601
+ likelihood: MEDIUM
602
+ impact: MEDIUM
603
+ vulnerability_class:
604
+ - Hard-coded Secrets
605
+ source: narvy-local
606
+ license: Apache-2.0
607
+ - id: narvy.secrets.telegram-bot-token
608
+ patterns:
609
+ - pattern-regex: \b[0-9]{6,12}:AA[0-9A-Za-z_-]{33}\b
610
+ - pattern-not-regex: go\.mod|v[0-9]+\.[0-9]+\.[0-9]+
611
+ languages:
612
+ - regex
613
+ message: Telegram Bot API token detected (<numeric-id>:AA<33 chars> format). Full control of the bot
614
+ (send messages, read updates) for anyone holding this token.
615
+ severity: ERROR
616
+ metadata:
617
+ cwe:
618
+ - 'CWE-798: Use of Hard-coded Credentials'
619
+ owasp:
620
+ - A07:2021 - Identification and Authentication Failures
621
+ - A07:2025 - Authentication Failures
622
+ category: security
623
+ technology:
624
+ - secrets
625
+ - telegram
626
+ confidence: HIGH
627
+ subcategory:
628
+ - vuln
629
+ likelihood: MEDIUM
630
+ impact: MEDIUM
631
+ vulnerability_class:
632
+ - Hard-coded Secrets
633
+ source: narvy-local
634
+ license: Apache-2.0
635
+ - id: narvy.secrets.onfido-live-token
636
+ pattern-regex: \bapi_live(?:_[a-zA-Z]{2})?\.[a-zA-Z0-9_-]{11}\.[a-zA-Z0-9_-]{32}\b
637
+ languages:
638
+ - regex
639
+ message: Onfido live API token detected (api_live[_xx].<11 chars>.<32 chars> format). Grants live identity-verification
640
+ API access.
641
+ severity: ERROR
642
+ metadata:
643
+ cwe:
644
+ - 'CWE-798: Use of Hard-coded Credentials'
645
+ owasp:
646
+ - A07:2021 - Identification and Authentication Failures
647
+ - A07:2025 - Authentication Failures
648
+ category: security
649
+ technology:
650
+ - secrets
651
+ - onfido
652
+ confidence: HIGH
653
+ subcategory:
654
+ - vuln
655
+ likelihood: MEDIUM
656
+ impact: HIGH
657
+ vulnerability_class:
658
+ - Hard-coded Secrets
659
+ source: narvy-local
660
+ license: Apache-2.0
661
+ - id: narvy.secrets.heroku-api-key
662
+ pattern-regex: (?i)heroku[^\n]{0,50}[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
663
+ languages:
664
+ - regex
665
+ message: A variable/string near the word 'heroku' holds a UUID-shaped value. Heroku API keys are UUIDs;
666
+ treat any hardcoded UUID adjacent to a heroku reference as a leaked credential.
667
+ severity: ERROR
668
+ metadata:
669
+ cwe:
670
+ - 'CWE-798: Use of Hard-coded Credentials'
671
+ owasp:
672
+ - A07:2021 - Identification and Authentication Failures
673
+ - A07:2025 - Authentication Failures
674
+ category: security
675
+ technology:
676
+ - secrets
677
+ - heroku
678
+ confidence: LOW
679
+ subcategory:
680
+ - vuln
681
+ likelihood: MEDIUM
682
+ impact: MEDIUM
683
+ vulnerability_class:
684
+ - Hard-coded Secrets
685
+ source: narvy-local
686
+ license: Apache-2.0
687
+ - id: narvy.secrets.hockeyapp-api-key
688
+ pattern-regex: (?i)\b(hockeyapp[_.]?api[_.]?token|hockey_app_token|HOCKEYAPP_API_TOKEN)\s*[:=]\s*[\"'`]?[0-9a-f]{32}\b
689
+ languages:
690
+ - regex
691
+ message: A value is assigned directly to a HockeyApp/App Center API-token variable name (e.g. `apiToken`
692
+ in a Gradle `hockeyapp {}` block, or the `HOCKEYAPP_API_TOKEN` env var used by CI plugins) and holds
693
+ a 32-char hex string, the token's known length.
694
+ severity: ERROR
695
+ metadata:
696
+ cwe:
697
+ - 'CWE-798: Use of Hard-coded Credentials'
698
+ owasp:
699
+ - A07:2021 - Identification and Authentication Failures
700
+ - A07:2025 - Authentication Failures
701
+ category: security
702
+ technology:
703
+ - secrets
704
+ - hockeyapp
705
+ confidence: LOW
706
+ subcategory:
707
+ - vuln
708
+ likelihood: MEDIUM
709
+ impact: MEDIUM
710
+ vulnerability_class:
711
+ - Hard-coded Secrets
712
+ source: narvy-local
713
+ license: Apache-2.0
714
+ - id: narvy.secrets.codeclimate-token
715
+ pattern-regex: (?i)\bCC_TEST_REPORTER_ID\s*[:=]\s*[\"'`]?[0-9a-f]{64}\b
716
+ languages:
717
+ - regex
718
+ message: A value is assigned directly to `CC_TEST_REPORTER_ID`, the exact environment variable name
719
+ Code Climate's `test-reporter` binary reads its upload token from, and holds a 64-char hex string,
720
+ the token's known length.
721
+ severity: ERROR
722
+ metadata:
723
+ cwe:
724
+ - 'CWE-798: Use of Hard-coded Credentials'
725
+ owasp:
726
+ - A07:2021 - Identification and Authentication Failures
727
+ - A07:2025 - Authentication Failures
728
+ category: security
729
+ technology:
730
+ - secrets
731
+ - codeclimate
732
+ confidence: LOW
733
+ subcategory:
734
+ - vuln
735
+ likelihood: MEDIUM
736
+ impact: MEDIUM
737
+ vulnerability_class:
738
+ - Hard-coded Secrets
739
+ source: narvy-local
740
+ license: Apache-2.0
741
+ - id: narvy.secrets.sonarqube-token
742
+ pattern-regex: (?i)\b(sonar\.(login|token|password)|SONAR_TOKEN|SONARQUBE_TOKEN)\s*[:=]\s*[\"'`]?[0-9a-f]{40}\b
743
+ languages:
744
+ - regex
745
+ message: A value is assigned directly to a documented SonarScanner auth parameter (`sonar.login` /
746
+ `sonar.token` / `sonar.password`, or the `SONAR_TOKEN` env var) and holds a 40-char hex string, matching
747
+ a SonarQube/SonarCloud user token's known length.
748
+ severity: ERROR
749
+ metadata:
750
+ cwe:
751
+ - 'CWE-798: Use of Hard-coded Credentials'
752
+ owasp:
753
+ - A07:2021 - Identification and Authentication Failures
754
+ - A07:2025 - Authentication Failures
755
+ category: security
756
+ technology:
757
+ - secrets
758
+ - sonarqube
759
+ confidence: LOW
760
+ subcategory:
761
+ - vuln
762
+ likelihood: MEDIUM
763
+ impact: MEDIUM
764
+ vulnerability_class:
765
+ - Hard-coded Secrets
766
+ source: narvy-local
767
+ license: Apache-2.0
768
+ paths:
769
+ exclude:
770
+ - '*.svg'
771
+ - '*go.sum'
772
+ - '*go.mod'
773
+ - '*package.json'
774
+ - '*package-lock.json'
775
+ - '*yarn.lock'
776
+ - '*pnpm-lock*'
777
+ - '*Podfile.lock'
778
+ - '*Cargo.lock'
779
+ - '*.xcscmblueprint'
780
+ - id: narvy.secrets.saucelabs-token
781
+ pattern-regex: (?i)\b(SAUCE_ACCESS_KEY|sauceAccessKey|sauce[_-]?access[_-]?key)\s*[:=]\s*[\"'`]?[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}\b
782
+ languages:
783
+ - regex
784
+ message: A value is assigned directly to `SAUCE_ACCESS_KEY` (or the equivalent `sauceAccessKey` config
785
+ property used by WebDriver/Sauce Connect integrations) and is a UUIDv4, the documented shape of a
786
+ Sauce Labs access key.
787
+ severity: ERROR
788
+ metadata:
789
+ cwe:
790
+ - 'CWE-798: Use of Hard-coded Credentials'
791
+ owasp:
792
+ - A07:2021 - Identification and Authentication Failures
793
+ - A07:2025 - Authentication Failures
794
+ category: security
795
+ technology:
796
+ - secrets
797
+ - saucelabs
798
+ confidence: LOW
799
+ subcategory:
800
+ - vuln
801
+ likelihood: MEDIUM
802
+ impact: MEDIUM
803
+ vulnerability_class:
804
+ - Hard-coded Secrets
805
+ source: narvy-local
806
+ license: Apache-2.0
807
+ - id: narvy.secrets.facebook-access-token
808
+ pattern-regex: (?i)\b(fb|facebook|graph)[a-z0-9_]{0,15}(access)?_?token\s*[:=]\s*[\"'`]?EAA[A-Za-z0-9]{20,}
809
+ languages:
810
+ - regex
811
+ message: A value is assigned directly to a Facebook/Meta-token-looking variable name and starts with
812
+ `EAA`, the prefix Meta's Graph API has used on every issued user/page/app access token since the
813
+ API's early versions. Meta does not publish a formal token format spec (their own docs describe
814
+ access tokens only as "opaque strings" of variable length), so this is a context+prefix heuristic,
815
+ not a fingerprint match against a documented format. Treat findings as a strong lead, not certainty.
816
+ severity: ERROR
817
+ metadata:
818
+ cwe:
819
+ - 'CWE-798: Use of Hard-coded Credentials'
820
+ owasp:
821
+ - A07:2021 - Identification and Authentication Failures
822
+ - A07:2025 - Authentication Failures
823
+ category: security
824
+ technology:
825
+ - secrets
826
+ - facebook
827
+ confidence: MEDIUM
828
+ subcategory:
829
+ - vuln
830
+ likelihood: MEDIUM
831
+ impact: MEDIUM
832
+ vulnerability_class:
833
+ - Hard-coded Secrets
834
+ source: narvy-local
835
+ license: Apache-2.0
836
+ - id: narvy.secrets.facebook-oauth-token
837
+ pattern-regex: (?i)facebook[^\n]{0,80}token[^\n]{0,20}[\"'`]?[0-9a-f]{32}[\"'`]?
838
+ languages:
839
+ - regex
840
+ message: A variable/string containing 'facebook' near 'token' holds a 32-char hex value, matching a
841
+ Facebook OAuth token shape.
842
+ severity: ERROR
843
+ metadata:
844
+ cwe:
845
+ - 'CWE-798: Use of Hard-coded Credentials'
846
+ owasp:
847
+ - A07:2021 - Identification and Authentication Failures
848
+ - A07:2025 - Authentication Failures
849
+ category: security
850
+ technology:
851
+ - secrets
852
+ - facebook
853
+ confidence: LOW
854
+ subcategory:
855
+ - vuln
856
+ likelihood: MEDIUM
857
+ impact: MEDIUM
858
+ vulnerability_class:
859
+ - Hard-coded Secrets
860
+ source: narvy-local
861
+ license: Apache-2.0
862
+ - id: narvy.secrets.google-oauth-access-token
863
+ pattern-regex: \bya29\.[0-9A-Za-z_-]{20,}\b
864
+ languages:
865
+ - regex
866
+ message: Google OAuth2 access token detected (ya29.<token> format).
867
+ severity: ERROR
868
+ metadata:
869
+ cwe:
870
+ - 'CWE-798: Use of Hard-coded Credentials'
871
+ owasp:
872
+ - A07:2021 - Identification and Authentication Failures
873
+ - A07:2025 - Authentication Failures
874
+ category: security
875
+ technology:
876
+ - secrets
877
+ - google
878
+ confidence: HIGH
879
+ subcategory:
880
+ - vuln
881
+ likelihood: MEDIUM
882
+ impact: MEDIUM
883
+ vulnerability_class:
884
+ - Hard-coded Secrets
885
+ source: narvy-local
886
+ license: Apache-2.0
887
+ - id: narvy.secrets.google-service-account-json
888
+ pattern-regex: '[\"''`]?type[\"''`]?\s*(:|=>|=)\s*[\"''`]?service_account[\"''`]?'
889
+ languages:
890
+ - regex
891
+ message: 'A JSON blob with `"type": "service_account"` was found in source. GCP service-account key
892
+ files grant standing API access scoped to IAM roles and must never be committed. Store them in a
893
+ secrets manager or workload-identity federation instead.'
894
+ severity: ERROR
895
+ metadata:
896
+ cwe:
897
+ - 'CWE-798: Use of Hard-coded Credentials'
898
+ owasp:
899
+ - A07:2021 - Identification and Authentication Failures
900
+ - A07:2025 - Authentication Failures
901
+ category: security
902
+ technology:
903
+ - secrets
904
+ - gcp
905
+ confidence: MEDIUM
906
+ subcategory:
907
+ - vuln
908
+ likelihood: MEDIUM
909
+ impact: HIGH
910
+ vulnerability_class:
911
+ - Hard-coded Secrets
912
+ source: narvy-local
913
+ license: Apache-2.0
914
+ - id: narvy.secrets.artifactory-password
915
+ patterns:
916
+ - pattern-either:
917
+ - pattern-regex: (?i)artifactory[^\n]{0,80}\bAP[2-9A-F][A-Za-z0-9]{8,}\b
918
+ - pattern-regex: \bAP[2-9A-F][A-Za-z0-9]{8,}\b[^\n]{0,80}(?i)artifactory
919
+ - pattern-not-regex: (?i)sha(1|2|3|118|256|512)
920
+ languages:
921
+ - regex
922
+ message: JFrog Artifactory encrypted password detected (AP[2-9ABCDEF]... high-entropy token), co-located
923
+ with the word 'artifactory'.
924
+ severity: ERROR
925
+ metadata:
926
+ cwe:
927
+ - 'CWE-798: Use of Hard-coded Credentials'
928
+ owasp:
929
+ - A07:2021 - Identification and Authentication Failures
930
+ - A07:2025 - Authentication Failures
931
+ category: security
932
+ technology:
933
+ - secrets
934
+ - artifactory
935
+ confidence: LOW
936
+ subcategory:
937
+ - vuln
938
+ likelihood: MEDIUM
939
+ impact: HIGH
940
+ vulnerability_class:
941
+ - Hard-coded Secrets
942
+ source: narvy-local
943
+ license: Apache-2.0
944
+ paths:
945
+ exclude:
946
+ - '*.svg'
947
+ - '*go.sum'
948
+ - '*go.mod'
949
+ - '*package.json'
950
+ - '*package-lock.json'
951
+ - '*yarn.lock'
952
+ - '*pnpm-lock*'
953
+ - '*Podfile.lock'
954
+ - '*Cargo.lock'
955
+ - '*.xcscmblueprint'
956
+ - id: narvy.secrets.artifactory-token
957
+ patterns:
958
+ - pattern-regex: \bAKC[a-zA-Z0-9]{10,}\b
959
+ - pattern-not-regex: (?i)sha(128|256|512)
960
+ languages:
961
+ - regex
962
+ message: JFrog Artifactory API token detected (AKC... high-entropy prefix).
963
+ severity: ERROR
964
+ metadata:
965
+ cwe:
966
+ - 'CWE-798: Use of Hard-coded Credentials'
967
+ owasp:
968
+ - A07:2021 - Identification and Authentication Failures
969
+ - A07:2025 - Authentication Failures
970
+ category: security
971
+ technology:
972
+ - secrets
973
+ - artifactory
974
+ confidence: LOW
975
+ subcategory:
976
+ - vuln
977
+ likelihood: MEDIUM
978
+ impact: HIGH
979
+ vulnerability_class:
980
+ - Hard-coded Secrets
981
+ source: narvy-local
982
+ license: Apache-2.0
983
+ paths:
984
+ exclude:
985
+ - '*.svg'
986
+ - '*go.sum'
987
+ - '*go.mod'
988
+ - '*package.json'
989
+ - '*package-lock.json'
990
+ - '*yarn.lock'
991
+ - '*pnpm-lock*'
992
+ - '*Podfile.lock'
993
+ - '*Cargo.lock'
994
+ - '*.xcscmblueprint'
995
+ - id: narvy.secrets.npm-registry-authtoken-assignment
996
+ patterns:
997
+ - pattern-regex: //[^\s=]+/?:_(authToken|password)=\S+
998
+ - pattern-not-regex: \$\{|%s|<[A-Za-z_]+>
999
+ languages:
1000
+ - regex
1001
+ message: An .npmrc-style registry auth line (`//<registry-host>/:_authToken=` or `:_password=`) holds a
1002
+ literal token instead of an `${NPM_TOKEN}`-style environment interpolation. Anyone with read access to
1003
+ the file can publish to that registry as you. Move the token to an env var and reference it here.
1004
+ severity: ERROR
1005
+ metadata:
1006
+ cwe:
1007
+ - 'CWE-798: Use of Hard-coded Credentials'
1008
+ owasp:
1009
+ - A07:2021 - Identification and Authentication Failures
1010
+ - A07:2025 - Authentication Failures
1011
+ category: security
1012
+ technology:
1013
+ - secrets
1014
+ - npm
1015
+ confidence: HIGH
1016
+ subcategory:
1017
+ - vuln
1018
+ likelihood: MEDIUM
1019
+ impact: MEDIUM
1020
+ vulnerability_class:
1021
+ - Hard-coded Secrets
1022
+ source: narvy-local
1023
+ license: Apache-2.0
1024
+ - id: narvy.secrets.kubernetes-secret-manifest-committed-value
1025
+ patterns:
1026
+ - pattern: |
1027
+ kind: Secret
1028
+ ...
1029
+ data:
1030
+ ...
1031
+ $KEY: $VALUE
1032
+ ...
1033
+ - metavariable-regex:
1034
+ metavariable: $VALUE
1035
+ regex: ^(?!([A-Za-z0-9+/])\1{6,}=*$)[A-Za-z0-9+/]{24,}={0,2}$
1036
+ languages:
1037
+ - yaml
1038
+ message: 'A `kind: Secret` document''s `data:` map has a value that decodes as base64 committed directly
1039
+ to the manifest. Kubernetes Secrets are only base64-encoded, not encrypted at rest by default. Use
1040
+ Sealed Secrets, SOPS, or an external secrets operator instead of committing the encoded value.'
1041
+ severity: WARNING
1042
+ metadata:
1043
+ cwe:
1044
+ - 'CWE-798: Use of Hard-coded Credentials'
1045
+ owasp:
1046
+ - A07:2021 - Identification and Authentication Failures
1047
+ - A07:2025 - Authentication Failures
1048
+ category: security
1049
+ technology:
1050
+ - secrets
1051
+ - kubernetes
1052
+ confidence: MEDIUM
1053
+ subcategory:
1054
+ - vuln
1055
+ likelihood: LOW
1056
+ impact: MEDIUM
1057
+ vulnerability_class:
1058
+ - Hard-coded Secrets
1059
+ source: narvy-local
1060
+ license: Apache-2.0
1061
+ - id: narvy.secrets.gradle-password-hardcoded
1062
+ patterns:
1063
+ - pattern: '$PASS = $ENVCALL ?: "$FALLBACK"
1064
+
1065
+ '
1066
+ - metavariable-regex:
1067
+ metavariable: $PASS
1068
+ regex: (?i).*(password|passwd|secret|apikey|token|credential)
1069
+ - metavariable-regex:
1070
+ metavariable: $FALLBACK
1071
+ regex: (?i)^(?!.*(placeholder|changeme|change_me|example|dummy|xxx|todo|fixme|your_|replace_?me|insert_)).*$
1072
+ languages:
1073
+ - kotlin
1074
+ message: 'A `build.gradle.kts` variable named like a password/credential falls back to a literal default
1075
+ when the matching env var is unset (`val PASS = System.getenv("X") ?: "literal"`). The literal fallback
1076
+ ships in every build and in version control.'
1077
+ severity: WARNING
1078
+ metadata:
1079
+ cwe:
1080
+ - 'CWE-798: Use of Hard-coded Credentials'
1081
+ owasp:
1082
+ - A07:2021 - Identification and Authentication Failures
1083
+ - A07:2025 - Authentication Failures
1084
+ category: security
1085
+ technology:
1086
+ - secrets
1087
+ - gradle
1088
+ confidence: MEDIUM
1089
+ subcategory:
1090
+ - vuln
1091
+ likelihood: LOW
1092
+ impact: HIGH
1093
+ vulnerability_class:
1094
+ - Hard-coded Secrets
1095
+ source: narvy-local
1096
+ license: Apache-2.0
1097
+ paths:
1098
+ include:
1099
+ - '*build.gradle.kts'
1100
+ - id: narvy.secrets.detected-private-key
1101
+ message: A PEM-encoded private key block ('-----BEGIN ... PRIVATE KEY-----') was found in source. Private
1102
+ keys must never ship in a repository. Rotate the key pair and load the key from a secrets manager,
1103
+ KMS, or an untracked local file.
1104
+ severity: ERROR
1105
+ languages:
1106
+ - regex
1107
+ pattern-regex: '-----BEGIN\s+((RSA|DSA|EC|OPENSSH|PGP)\s+)?PRIVATE KEY(\s+BLOCK)?-----'
1108
+ metadata:
1109
+ cwe:
1110
+ - 'CWE-798: Use of Hard-coded Credentials'
1111
+ owasp:
1112
+ - A07:2021 - Identification and Authentication Failures
1113
+ - A07:2025 - Authentication Failures
1114
+ category: security
1115
+ technology:
1116
+ - secrets
1117
+ confidence: HIGH
1118
+ subcategory:
1119
+ - vuln
1120
+ likelihood: HIGH
1121
+ impact: HIGH
1122
+ vulnerability_class:
1123
+ - Hard-coded Secrets
1124
+ source: narvy-local
1125
+ license: Apache-2.0
1126
+ - id: narvy.secrets.pgp-private-key-block
1127
+ pattern-regex: '-----BEGIN\s+PGP\s+PRIVATE\s+KEY\s+BLOCK-----'
1128
+ languages:
1129
+ - regex
1130
+ message: 'A PGP private key block (''-----BEGIN ... PGP PRIVATE ... KEY BLOCK-----'') was found in source.
1131
+ Treat identically to any other private key leak: rotate and remove from history.'
1132
+ severity: ERROR
1133
+ metadata:
1134
+ cwe:
1135
+ - 'CWE-798: Use of Hard-coded Credentials'
1136
+ owasp:
1137
+ - A07:2021 - Identification and Authentication Failures
1138
+ - A07:2025 - Authentication Failures
1139
+ category: security
1140
+ technology:
1141
+ - secrets
1142
+ - pgp
1143
+ confidence: HIGH
1144
+ subcategory:
1145
+ - vuln
1146
+ likelihood: HIGH
1147
+ impact: HIGH
1148
+ vulnerability_class:
1149
+ - Hard-coded Secrets
1150
+ source: narvy-local
1151
+ license: Apache-2.0
1152
+ - id: narvy.secrets.credentials-in-uri
1153
+ patterns:
1154
+ - pattern: '$SCHEME://$USER:$PASS@$HOST
1155
+
1156
+ '
1157
+ - metavariable-regex:
1158
+ metavariable: $SCHEME
1159
+ regex: (?i)^(https?|ftp|smtp|ssh|sftp|postgres(ql)?|mysql|mongodb(\+srv)?|redis|amqp|ldap)$
1160
+ - metavariable-regex:
1161
+ metavariable: $PASS
1162
+ regex: ^.{3,64}$
1163
+ - pattern-not-regex: (?i)(user|username|xxxx|\$\{|%s|<[a-z_]+>|localhost)
1164
+ languages:
1165
+ - generic
1166
+ message: A connection string / URL embeds a username:password before the host (scheme://user:pass@host).
1167
+ Database, message-queue, and API URIs with inline credentials leak into logs, shell history, and process
1168
+ listings. Pass credentials via a separate auth mechanism or env var instead.
1169
+ severity: ERROR
1170
+ metadata:
1171
+ cwe:
1172
+ - 'CWE-798: Use of Hard-coded Credentials'
1173
+ owasp:
1174
+ - A07:2021 - Identification and Authentication Failures
1175
+ - A07:2025 - Authentication Failures
1176
+ category: security
1177
+ technology:
1178
+ - secrets
1179
+ - database
1180
+ confidence: MEDIUM
1181
+ subcategory:
1182
+ - vuln
1183
+ likelihood: MEDIUM
1184
+ impact: MEDIUM
1185
+ vulnerability_class:
1186
+ - Hard-coded Secrets
1187
+ source: narvy-local
1188
+ license: Apache-2.0
1189
+ - id: narvy.secrets.etc-shadow-contents
1190
+ message: Contents matching a Linux /etc/shadow entry (root:$hash:...) were found in source. A committed
1191
+ shadow file leaks every local account's password hash for offline cracking.
1192
+ severity: ERROR
1193
+ languages:
1194
+ - regex
1195
+ pattern-regex: '^\s*root:[$!*][^\n:]*:[0-9]*:[0-9]*:'
1196
+ metadata:
1197
+ cwe:
1198
+ - 'CWE-798: Use of Hard-coded Credentials'
1199
+ owasp:
1200
+ - A07:2021 - Identification and Authentication Failures
1201
+ - A07:2025 - Authentication Failures
1202
+ category: security
1203
+ technology:
1204
+ - secrets
1205
+ confidence: MEDIUM
1206
+ subcategory:
1207
+ - vuln
1208
+ likelihood: LOW
1209
+ impact: HIGH
1210
+ vulnerability_class:
1211
+ - Hard-coded Secrets
1212
+ source: narvy-local
1213
+ license: Apache-2.0
1214
+ - id: narvy.secrets.bcrypt-hash-hardcoded
1215
+ pattern-regex: \$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}
1216
+ languages:
1217
+ - regex
1218
+ message: A bcrypt password hash ($2a$/$2b$/$2y$ + cost + 53-char salt+hash) is hardcoded. Even though
1219
+ it's a hash and not the plaintext, a committed hash is crackable offline and usually indicates a seeded/default
1220
+ account. Verify it is test-only or remove it.
1221
+ severity: ERROR
1222
+ metadata:
1223
+ cwe:
1224
+ - 'CWE-798: Use of Hard-coded Credentials'
1225
+ owasp:
1226
+ - A07:2021 - Identification and Authentication Failures
1227
+ - A07:2025 - Authentication Failures
1228
+ category: security
1229
+ technology:
1230
+ - secrets
1231
+ - bcrypt
1232
+ confidence: MEDIUM
1233
+ subcategory:
1234
+ - vuln
1235
+ likelihood: LOW
1236
+ impact: HIGH
1237
+ vulnerability_class:
1238
+ - Hard-coded Secrets
1239
+ source: narvy-local
1240
+ license: Apache-2.0
1241
+ - id: narvy.secrets.ssh-password-cli
1242
+ pattern-regex: sshpass\s+-p\s*['\"][^'\"%]
1243
+ languages:
1244
+ - regex
1245
+ message: '`sshpass -p` passes an SSH password as a plaintext CLI argument, which is visible to every
1246
+ local user via `ps` and lands in shell history. Use `sshpass -f <file>` reading from a private, restricted-permission
1247
+ file, or switch to key-based auth.'
1248
+ severity: ERROR
1249
+ metadata:
1250
+ cwe:
1251
+ - 'CWE-798: Use of Hard-coded Credentials'
1252
+ owasp:
1253
+ - A07:2021 - Identification and Authentication Failures
1254
+ - A07:2025 - Authentication Failures
1255
+ category: security
1256
+ technology:
1257
+ - secrets
1258
+ - ssh
1259
+ confidence: MEDIUM
1260
+ subcategory:
1261
+ - vuln
1262
+ likelihood: MEDIUM
1263
+ impact: HIGH
1264
+ vulnerability_class:
1265
+ - Hard-coded Secrets
1266
+ source: narvy-local
1267
+ license: Apache-2.0
1268
+ - id: narvy.secrets.ruby-hardcoded-http-basic-auth
1269
+ pattern: http_basic_authenticate_with ..., :password => "...", ...
1270
+ languages:
1271
+ - ruby
1272
+ message: A `http_basic_authenticate_with` call hardcodes the `:password` option. This isn't limited to
1273
+ `ApplicationController` subclasses. API-only controllers and controllers that pull the method in
1274
+ via a concern/module call it the same way. Anyone with source access has the credential; move it to
1275
+ Rails credentials / an env var.
1276
+ severity: WARNING
1277
+ metadata:
1278
+ cwe:
1279
+ - 'CWE-798: Use of Hard-coded Credentials'
1280
+ owasp:
1281
+ - A07:2021 - Identification and Authentication Failures
1282
+ - A07:2025 - Authentication Failures
1283
+ category: security
1284
+ technology:
1285
+ - secrets
1286
+ - ruby
1287
+ confidence: HIGH
1288
+ subcategory:
1289
+ - vuln
1290
+ likelihood: MEDIUM
1291
+ impact: HIGH
1292
+ vulnerability_class:
1293
+ - Hard-coded Secrets
1294
+ source: narvy-local
1295
+ license: Apache-2.0
1296
+ - id: narvy.secrets.ruby-rsa-passphrase-hardcoded
1297
+ pattern-either:
1298
+ - pattern: 'OpenSSL::PKey::RSA.new(..., ''...'')
1299
+
1300
+ '
1301
+ - pattern: 'OpenSSL::PKey::RSA.new(...).to_pem(..., ''...'')
1302
+
1303
+ '
1304
+ - pattern: 'OpenSSL::PKey::RSA.new(...).export(..., ''...'')
1305
+
1306
+ '
1307
+ languages:
1308
+ - ruby
1309
+ message: An `OpenSSL::PKey::RSA` key is constructed, exported, or PEM-encoded with a literal string
1310
+ passphrase argument. The passphrase protects the private key at rest, and hardcoding it defeats that
1311
+ protection entirely.
1312
+ severity: WARNING
1313
+ metadata:
1314
+ cwe:
1315
+ - 'CWE-798: Use of Hard-coded Credentials'
1316
+ owasp:
1317
+ - A07:2021 - Identification and Authentication Failures
1318
+ - A07:2025 - Authentication Failures
1319
+ category: security
1320
+ technology:
1321
+ - secrets
1322
+ - ruby
1323
+ confidence: HIGH
1324
+ subcategory:
1325
+ - vuln
1326
+ likelihood: MEDIUM
1327
+ impact: HIGH
1328
+ vulnerability_class:
1329
+ - Hard-coded Secrets
1330
+ source: narvy-local
1331
+ license: Apache-2.0
1332
+ - id: narvy.secrets.js-express-session-hardcoded-secret
1333
+ patterns:
1334
+ - pattern-either:
1335
+ - pattern-inside: '$SESSION = require(''express-session'')
1336
+
1337
+ ...
1338
+
1339
+ '
1340
+ - pattern-inside: 'import $SESSION from ''express-session''
1341
+
1342
+ ...
1343
+
1344
+ '
1345
+ - pattern: '$APP.use($SESSION({ ..., secret: "...", ... }))
1346
+
1347
+ '
1348
+ languages:
1349
+ - javascript
1350
+ - typescript
1351
+ message: '`express-session` is configured with a literal `secret:` string. This secret signs the session-id
1352
+ cookie; a hardcoded value lets anyone who reads the source forge valid session cookies.'
1353
+ severity: WARNING
1354
+ metadata:
1355
+ cwe:
1356
+ - 'CWE-798: Use of Hard-coded Credentials'
1357
+ owasp:
1358
+ - A07:2021 - Identification and Authentication Failures
1359
+ - A07:2025 - Authentication Failures
1360
+ category: security
1361
+ technology:
1362
+ - secrets
1363
+ - express
1364
+ - jwt
1365
+ confidence: HIGH
1366
+ subcategory:
1367
+ - vuln
1368
+ likelihood: HIGH
1369
+ impact: HIGH
1370
+ vulnerability_class:
1371
+ - Hard-coded Secrets
1372
+ source: narvy-local
1373
+ license: Apache-2.0
1374
+ - id: narvy.secrets.js-jsonwebtoken-hardcoded-secret
1375
+ patterns:
1376
+ - pattern-either:
1377
+ - pattern-inside: '$JWT = require("jsonwebtoken")
1378
+
1379
+ ...
1380
+
1381
+ '
1382
+ - pattern-inside: 'import $JWT from "jsonwebtoken"
1383
+
1384
+ ...
1385
+
1386
+ '
1387
+ - pattern-either:
1388
+ - pattern: '$JWT.sign($DATA, "...", ...)
1389
+
1390
+ '
1391
+ - pattern: '$JWT.verify($DATA, "...", ...)
1392
+
1393
+ '
1394
+ languages:
1395
+ - javascript
1396
+ - typescript
1397
+ message: '`jsonwebtoken`''s `sign()`/`verify()` is called with a literal string as the secret/key argument.
1398
+ This is the value that authenticates every issued token; a hardcoded copy in source lets anyone forge
1399
+ tokens.'
1400
+ severity: WARNING
1401
+ metadata:
1402
+ cwe:
1403
+ - 'CWE-798: Use of Hard-coded Credentials'
1404
+ owasp:
1405
+ - A07:2021 - Identification and Authentication Failures
1406
+ - A07:2025 - Authentication Failures
1407
+ category: security
1408
+ technology:
1409
+ - secrets
1410
+ - javascript
1411
+ - jwt
1412
+ confidence: HIGH
1413
+ subcategory:
1414
+ - vuln
1415
+ likelihood: HIGH
1416
+ impact: MEDIUM
1417
+ vulnerability_class:
1418
+ - Hard-coded Secrets
1419
+ source: narvy-local
1420
+ license: Apache-2.0