@link-foundation/sensitive-data-sanitizer 0.19.2 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +8 -1
  3. package/bin/sensitive-data-sanitizer.js +49 -28
  4. package/docs/API.md +193 -2
  5. package/docs/COVERAGE.md +22 -4
  6. package/docs/RULES.md +217 -0
  7. package/package.json +1 -1
  8. package/src/allow-list.js +93 -0
  9. package/src/confidence.js +24 -9
  10. package/src/context.js +121 -25
  11. package/src/credentials.js +44 -0
  12. package/src/crypto-addresses.js +74 -0
  13. package/src/detection.js +21 -6
  14. package/src/document-person-cues.js +1 -1
  15. package/src/encrypt.js +95 -0
  16. package/src/entities.js +4 -3
  17. package/src/fake.js +29 -1
  18. package/src/files.js +57 -12
  19. package/src/gitleaks.js +82 -27
  20. package/src/identifier-detector.js +36 -0
  21. package/src/identity.js +14 -0
  22. package/src/index.d.ts +117 -1
  23. package/src/index.js +7 -0
  24. package/src/national-checks.js +209 -0
  25. package/src/national.js +310 -92
  26. package/src/pattern-detector.js +219 -0
  27. package/src/personal-context.js +3 -2
  28. package/src/personal-evidence.js +233 -0
  29. package/src/personal.js +42 -10
  30. package/src/projection.js +85 -26
  31. package/src/rule-catalog.js +424 -0
  32. package/src/sanitizer.js +48 -3
  33. package/src/sarif.js +127 -0
  34. package/src/strict-attributes.js +71 -0
  35. package/src/strict.js +2 -12
  36. package/src/token-checksum.js +49 -0
  37. package/src/transforms.js +108 -25
  38. package/src/vendor/betterleaks/LICENSE +21 -0
  39. package/src/vendor/betterleaks/provenance.json +11 -0
  40. package/src/vendor/betterleaks/rules-0.json +463 -0
  41. package/src/vendor/betterleaks/rules-1.json +454 -0
  42. package/src/vendor/betterleaks/rules-2.json +461 -0
  43. package/src/vendor/betterleaks/rules-3.json +455 -0
  44. package/src/vendor/betterleaks/rules-4.json +483 -0
  45. package/src/vendor/betterleaks/rules-5.json +35 -0
  46. package/src/vendor/entities/aws.json +1 -1
  47. package/src/vendor/entities/azure.json +6 -2
  48. package/src/vendor/entities/google.json +2 -1
@@ -0,0 +1,461 @@
1
+ [
2
+ {
3
+ "id": "groq-api-key",
4
+ "description": "Identified a Groq API Key, which may expose high-speed AI inference services to unauthorized access.",
5
+ "regex": "(?i)\\b(gsk_[A-Z0-9]{52})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
6
+ "keywords": [
7
+ "gsk_"
8
+ ],
9
+ "confidence": "high",
10
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
11
+ "entropy": 3.5,
12
+ "entropyInclusive": true
13
+ },
14
+ {
15
+ "id": "gumroad-access-token",
16
+ "description": "Detected a Gumroad access token, which may expose Gumroad account and product data.",
17
+ "regex": "(?i)(?:gumroad)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}((?:[a-f0-9]{64}|[A-Za-z0-9-]{43}))(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
18
+ "keywords": [
19
+ "gumroad"
20
+ ],
21
+ "confidence": "high",
22
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
23
+ "entropy": 3.5
24
+ },
25
+ {
26
+ "id": "highnote-secret-live-key",
27
+ "description": "Highnote secret API key for the live environment.",
28
+ "regex": "(?i:(?:highnote(?:[_. -]*(?:api))?[_. -]*(?:secret|key|token|sk[_. -]*live))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(sk_live_a2V5Xz[A-Za-z0-9+/]{69}={0,2})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
29
+ "keywords": [
30
+ "highnote"
31
+ ],
32
+ "confidence": "high",
33
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
34
+ "entropy": 3.5
35
+ },
36
+ {
37
+ "id": "honeycomb-api-key",
38
+ "description": "Detected a Honeycomb API key, which may expose Honeycomb telemetry and environment data.",
39
+ "regex": "(?i)(?:honeycomb)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}((?:[a-f0-9]{32}|[a-z0-9]{22}))(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
40
+ "keywords": [
41
+ "honeycomb"
42
+ ],
43
+ "confidence": "medium",
44
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
45
+ "entropy": 3.5
46
+ },
47
+ {
48
+ "id": "hunter-api-key.1",
49
+ "description": "Hunter API key, which may allow access to account and email intelligence data.",
50
+ "regex": "(?i:(?:hunter)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-f0-9]{40})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
51
+ "keywords": [
52
+ "hunter"
53
+ ],
54
+ "confidence": "medium",
55
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
56
+ "entropy": 3.5
57
+ },
58
+ {
59
+ "id": "ibm-cloud-user-api-key",
60
+ "description": "Detected an IBM Cloud user API key, which may expose IBM Cloud account resources.",
61
+ "regex": "(?i)(?:ibm(?:cloud)?|bx)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9_-]{42,44})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
62
+ "keywords": [
63
+ "ibm"
64
+ ],
65
+ "confidence": "high",
66
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
67
+ "entropy": 3.5
68
+ },
69
+ {
70
+ "id": "influxdb-api-token",
71
+ "description": "Detected an InfluxDB API token, which may allow unauthorized access to time-series data and InfluxDB organization resources.",
72
+ "regex": "(?i)(?:\\binflux(?:db)?\\b(?:.|[\\n\\r]){0,64}?\\b(?:token|api[_-]?key)\\b(?:.|[\\n\\r]){0,32}?)[=:\"'\\s]{1,8}([A-Za-z0-9+/=_-]{88,})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
73
+ "keywords": [
74
+ "influx"
75
+ ],
76
+ "confidence": "high",
77
+ "filter": "filter.entropy(finding[\"secret\"]) < 4.0 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
78
+ "entropy": 4.0
79
+ },
80
+ {
81
+ "id": "infomaniak-api-token",
82
+ "description": "Detected an Infomaniak API token, which may expose hosting, mail, and cloud services to unauthorized access.",
83
+ "regex": "(?i)(?:infomaniak)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_\\-]{60,100})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
84
+ "keywords": [
85
+ "infomaniak"
86
+ ],
87
+ "confidence": "high",
88
+ "filter": "filter.entropy(finding[\"secret\"]) < 4.0 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
89
+ "entropy": 4.0
90
+ },
91
+ {
92
+ "id": "instantly-api-key.1",
93
+ "description": "Instantly API key, which may allow access to campaigns, accounts, leads, and analytics.",
94
+ "regex": "(?i:(?:instantly)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9+/]{66}==)(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
95
+ "keywords": [
96
+ "instantly"
97
+ ],
98
+ "confidence": "medium",
99
+ "filter": "entropy(finding[\"secret\"]) < 3.3\n",
100
+ "entropy": 3.3
101
+ },
102
+ {
103
+ "id": "ionic-personal-access-token",
104
+ "description": "Ionic personal access token.",
105
+ "regex": "\\b(ion_[A-Za-z0-9]{42})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
106
+ "keywords": [
107
+ "ionic"
108
+ ],
109
+ "confidence": "high",
110
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
111
+ "entropy": 3.5
112
+ },
113
+ {
114
+ "id": "jumpcloud-api-key",
115
+ "description": "Detected a JumpCloud API key, which may expose JumpCloud directory data.",
116
+ "regex": "(?i)(?:jumpcloud)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9]{40})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
117
+ "keywords": [
118
+ "jumpcloud"
119
+ ],
120
+ "confidence": "high",
121
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
122
+ "entropy": 3.5
123
+ },
124
+ {
125
+ "id": "kagi-api-key",
126
+ "description": "Detected a Kagi API key, which may expose Kagi API usage.",
127
+ "regex": "(?i)(?:kagi)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9_-]{11}\\.[a-z0-9_-]{43})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
128
+ "keywords": [
129
+ "kagi"
130
+ ],
131
+ "confidence": "high",
132
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
133
+ "entropy": 3.5
134
+ },
135
+ {
136
+ "id": "kimi-api-key",
137
+ "description": "Detected a Kimi API key, which may expose Moonshot AI model access and usage to unauthorized parties.",
138
+ "regex": "(?i)(?:kimi|moonshot)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(sk-[A-Za-z0-9_-]{48})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
139
+ "keywords": [
140
+ "kimi",
141
+ "moonshot"
142
+ ],
143
+ "confidence": "high",
144
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
145
+ "entropy": 3.5,
146
+ "entropyInclusive": true
147
+ },
148
+ {
149
+ "id": "klaviyo-api-key",
150
+ "description": "Detected a Klaviyo API key, which may expose Klaviyo account and marketing data.",
151
+ "regex": "(?i)(?:klaviyo)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(pk_[a-z0-9]{34})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
152
+ "keywords": [
153
+ "klaviyo"
154
+ ],
155
+ "confidence": "high",
156
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
157
+ "entropy": 3.5
158
+ },
159
+ {
160
+ "id": "langchain-langsmith-personal-access-token",
161
+ "description": "LangSmith personal access token.",
162
+ "regex": "\\b(lsv2_pt_[0-9a-fA-F]{32}_[0-9a-fA-F]{10})",
163
+ "keywords": [
164
+ "lsv2_pt_"
165
+ ],
166
+ "confidence": "high",
167
+ "filter": "entropy(finding[\"secret\"]) < 4.0\n",
168
+ "entropy": 4.0
169
+ },
170
+ {
171
+ "id": "langchain-langsmith-service-key",
172
+ "description": "LangSmith service API key.",
173
+ "regex": "\\b(lsv2_sk_[0-9a-fA-F]{32}_[0-9a-fA-F]{10})",
174
+ "keywords": [
175
+ "lsv2_sk_"
176
+ ],
177
+ "confidence": "high",
178
+ "filter": "entropy(finding[\"secret\"]) < 4.0\n",
179
+ "entropy": 4.0
180
+ },
181
+ {
182
+ "id": "langfuse-secret-key.1",
183
+ "description": "Langfuse secret key, which authenticates project API access when paired with its public key.",
184
+ "regex": "\\b(sk-lf-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
185
+ "keywords": [
186
+ "sk-lf-"
187
+ ],
188
+ "confidence": "high",
189
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
190
+ "entropy": 3.0
191
+ },
192
+ {
193
+ "id": "lark-app-secret",
194
+ "description": "Lark application secret.",
195
+ "regex": "(?i)(?:lark|larksuite)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
196
+ "keywords": [
197
+ "lark"
198
+ ],
199
+ "confidence": "high",
200
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
201
+ "entropy": 3.5
202
+ },
203
+ {
204
+ "id": "lichess-personal-access-token",
205
+ "description": "Lichess personal access token.",
206
+ "regex": "\\b(lip_[A-Za-z0-9_]{16,60})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
207
+ "keywords": [
208
+ "lip_"
209
+ ],
210
+ "confidence": "high",
211
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
212
+ "entropy": 3.5
213
+ },
214
+ {
215
+ "id": "lighton-paradigm-api-key",
216
+ "description": "Detected a LightOn Paradigm API key, which may expose enterprise LLM services to unauthorized access.",
217
+ "regex": "(?i)(?:lighton|paradigm)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_\\-]{40,80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
218
+ "keywords": [
219
+ "lighton",
220
+ "paradigm"
221
+ ],
222
+ "confidence": "medium",
223
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
224
+ "entropy": 3.5
225
+ },
226
+ {
227
+ "id": "llama-cloud-api-key.1",
228
+ "description": "LlamaCloud API key, which may allow access to managed parsing, ingestion, and retrieval projects.",
229
+ "regex": "\\b(llx-[A-Za-z0-9]{44,52})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
230
+ "keywords": [
231
+ "llx-"
232
+ ],
233
+ "confidence": "high",
234
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
235
+ "entropy": 3.5
236
+ },
237
+ {
238
+ "id": "mailersend-api-token",
239
+ "description": "MailerSend API token.",
240
+ "regex": "\\b(mlsn\\.[A-Za-z0-9]{30,100})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
241
+ "keywords": [
242
+ "mlsn."
243
+ ],
244
+ "confidence": "high",
245
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
246
+ "entropy": 3.5
247
+ },
248
+ {
249
+ "id": "mem0-api-key.1",
250
+ "description": "Mem0 API key, which may allow access to stored application memories.",
251
+ "regex": "(?i:(?:mem0)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(m0-[A-Za-z0-9]{24,44})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
252
+ "keywords": [
253
+ "mem0"
254
+ ],
255
+ "confidence": "high",
256
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
257
+ "entropy": 3.0
258
+ },
259
+ {
260
+ "id": "mercury-production-api-token",
261
+ "description": "Mercury production API token.",
262
+ "regex": "\\b(mercury_production_[a-z]{3,6}_[A-Za-z0-9]{40,50}_yrucrem)(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
263
+ "keywords": [
264
+ "mercury_production_"
265
+ ],
266
+ "confidence": "high",
267
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
268
+ "entropy": 3.5
269
+ },
270
+ {
271
+ "id": "mergify-application-key",
272
+ "description": "Mergify application API key.",
273
+ "regex": "\\b(mergify_application_key_[A-Za-z0-9_-]{40,200})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
274
+ "keywords": [
275
+ "mergify_application_key_"
276
+ ],
277
+ "confidence": "high",
278
+ "filter": "entropy(finding[\"secret\"]) < 3.2\n",
279
+ "entropy": 3.2
280
+ },
281
+ {
282
+ "id": "midtrans-production-server-client-key",
283
+ "description": "Midtrans production server or client key.",
284
+ "regex": "(?i)(?:midtrans|mid[_-]?)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(Mid-(?:server|client)-[A-Za-z0-9_]{10,20})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
285
+ "keywords": [
286
+ "mid-server-",
287
+ "mid-client-"
288
+ ],
289
+ "confidence": "high",
290
+ "filter": "entropy(finding[\"secret\"]) < 2.8\n",
291
+ "entropy": 2.8
292
+ },
293
+ {
294
+ "id": "minimax-api-key",
295
+ "description": "Detected a MiniMax API key, which may expose AI model, speech, image, video, or file services to unauthorized access.",
296
+ "regex": "(?i)\\b(sk-api-[A-Za-z0-9_-]{119})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
297
+ "keywords": [
298
+ "sk-api-",
299
+ "minimax"
300
+ ],
301
+ "confidence": "high",
302
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
303
+ "entropy": 3.5,
304
+ "entropyInclusive": true
305
+ },
306
+ {
307
+ "id": "miro-access-token",
308
+ "description": "Detected a Miro OAuth access token, which may allow unauthorized access to Miro users, teams, boards, and content.",
309
+ "regex": "\\b(eyJtaXJv[A-Za-z0-9-]{10,64}_[A-Za-z0-9_-]{20,64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
310
+ "keywords": [
311
+ "miro"
312
+ ],
313
+ "confidence": "high",
314
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
315
+ "entropy": 3.5
316
+ },
317
+ {
318
+ "id": "miro-client-secret",
319
+ "description": "Detected a Miro OAuth client secret, which may allow unauthorized OAuth client authentication when paired with a client ID.",
320
+ "regex": "(?i)(?:miro)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
321
+ "keywords": [
322
+ "miro"
323
+ ],
324
+ "confidence": "high",
325
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
326
+ "entropy": 3.5
327
+ },
328
+ {
329
+ "id": "mistral-api-key",
330
+ "description": "Detected a Mistral AI API Key, which may expose AI language model services to unauthorized access.",
331
+ "regex": "(?i)(?:mistral)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
332
+ "keywords": [
333
+ "mistral"
334
+ ],
335
+ "confidence": "medium",
336
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
337
+ "entropy": 3.5
338
+ },
339
+ {
340
+ "id": "monday-api-token.1",
341
+ "description": "monday.com API token, which may grant the same workspace access as its associated user or application.",
342
+ "regex": "(?i:(?:monday)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(eyJ[A-Za-z0-9_-]{10,200}\\.eyJ[A-Za-z0-9_-]{50,1000}\\.[A-Za-z0-9_-]{20,500})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
343
+ "keywords": [
344
+ "monday"
345
+ ],
346
+ "confidence": "high",
347
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
348
+ "entropy": 3.5
349
+ },
350
+ {
351
+ "id": "mongodb-atlas-service-account-secret",
352
+ "description": "Detected a MongoDB Atlas service account client secret, which could allow unauthorized Atlas administration API access when paired with a service account client ID.",
353
+ "regex": "\\b(mdb_sa_sk_[A-Za-z0-9_-]{40})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
354
+ "keywords": [
355
+ "mdb_sa_sk_"
356
+ ],
357
+ "confidence": "high",
358
+ "filter": "entropy(finding[\"secret\"]) <= 3.0\n|| matchesAny(finding[\"secret\"], [`^mdb_sa_sk_[0-9]{40}$`])\n",
359
+ "entropy": 3.0,
360
+ "entropyInclusive": true,
361
+ "reject": [
362
+ "^mdb_sa_sk_[0-9]{40}$"
363
+ ]
364
+ },
365
+ {
366
+ "id": "mongodb-connection-string",
367
+ "description": "Detected a MongoDB connection string with embedded credentials, potentially exposing direct database access and sensitive application data.",
368
+ "regex": "\\b(mongodb(?:\\+srv)?://(?P<username>[!-9;-~]{3,50}):(?P<password>[!-?A-~]{3,88})@(?P<host>(?:[a-zA-Z0-9][\\w.-]+|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d{1,5})?(?:,(?:[a-zA-Z0-9][\\w.-]+|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d{1,5})?)*)/?(?:(?P<authdb>[\\w-]+)?(?P<options>\\?\\w+=[\\w@/.$-]+(?:&(?:amp;)?\\w+=[\\w@/.$-]+)*)?)?)(?:['\"\\s;\\x60]|\\\\[nr]|\\b|$)",
369
+ "keywords": [
370
+ "mongodb://",
371
+ "mongodb+srv://"
372
+ ],
373
+ "confidence": "high",
374
+ "filter": "entropy(finding[\"secret\"]) <= 4.0\n|| matchesAny(finding[\"secret\"], [\n `(?i)\\bmongodb(?:\\+srv)?:\\/\\/(?:user(?:name)?|foo):(?:pass(?:word)?|bar)(?:[^@\\/]*)?@`,\n `(?i)\\bmongodb(?:\\+srv)?:\\/\\/[^\\s'\"\\x60]*(?:\\$\\{\\{[^}]+}}|\\$\\{[^}]+}|\\$[A-Za-z_][A-Za-z0-9_]*|{{[^}]+}}|<[^>]+>|\\[[^]]+])[^\\s'\"\\x60]*`\n])\n",
375
+ "entropy": 4.0,
376
+ "entropyInclusive": true,
377
+ "reject": [
378
+ "(?i)\\bmongodb(?:\\+srv)?:\\/\\/(?:user(?:name)?|foo):(?:pass(?:word)?|bar)(?:[^@\\/]*)?@",
379
+ "(?i)\\bmongodb(?:\\+srv)?:\\/\\/[^\\s'\"\\x60]*(?:\\$\\{\\{[^}]+}}|\\$\\{[^}]+}|\\$[A-Za-z_][A-Za-z0-9_]*|{{[^}]+}}|<[^>]+>|\\[[^]]+])[^\\s'\"\\x60]*"
380
+ ]
381
+ },
382
+ {
383
+ "id": "mux-access-token-secret.1",
384
+ "description": "Mux access-token secret, which may grant access to video, data, or system APIs when paired with its token ID.",
385
+ "regex": "(?i:(?:mux[_.-]?(?:access[_.-]?)?token[_.-]?(?:secret|private|key))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9+/]{75})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
386
+ "keywords": [
387
+ "mux"
388
+ ],
389
+ "confidence": "high",
390
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
391
+ "entropy": 3.5
392
+ },
393
+ {
394
+ "id": "neon-api-key",
395
+ "description": "Neon API key.",
396
+ "regex": "\\b(napi_[A-Za-z0-9]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
397
+ "keywords": [
398
+ "napi_"
399
+ ],
400
+ "confidence": "high",
401
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
402
+ "entropy": 3.5
403
+ },
404
+ {
405
+ "id": "ngrok-api-key.1",
406
+ "description": "ngrok API key or agent authtoken, which may allow tunnel access or account administration.",
407
+ "regex": "(?i:(?:ngrok[_. -]*(?:(?:api|agent)[_. -]*)?(?:secret|key|token|authtoken))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(2[A-Za-z0-9]{26}_[0-9][A-Za-z0-9]{20})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
408
+ "keywords": [
409
+ "ngrok"
410
+ ],
411
+ "confidence": "high",
412
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
413
+ "entropy": 3.5
414
+ },
415
+ {
416
+ "id": "nuget-api-key",
417
+ "description": "Detected a NuGet API key, which can push, unlist, or deprecate packages on nuget.org on behalf of its owner.",
418
+ "regex": "(?i)\\b(oy2[a-p][a-z2-7]{15}[aq][a-z2-7]{25}[aeimquy4])(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
419
+ "keywords": [
420
+ "oy2"
421
+ ],
422
+ "confidence": "high",
423
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
424
+ "entropy": 3.5
425
+ },
426
+ {
427
+ "id": "nvidia-api-key",
428
+ "description": "Detected an NVIDIA NIM API Key, which may expose AI inference and GPU cloud services to unauthorized access.",
429
+ "regex": "(?i)\\b(nvapi-[A-Z0-9_-]{60,70})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
430
+ "keywords": [
431
+ "nvapi-"
432
+ ],
433
+ "confidence": "high",
434
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
435
+ "entropy": 3.5,
436
+ "entropyInclusive": true
437
+ },
438
+ {
439
+ "id": "nylas-api-key.1",
440
+ "description": "Nylas API key, which may allow application-level access to connected email, calendar, and contact data.",
441
+ "regex": "\\b(nyk_[A-Za-z0-9]{67})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
442
+ "keywords": [
443
+ "nyk_"
444
+ ],
445
+ "confidence": "high",
446
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
447
+ "entropy": 3.5
448
+ },
449
+ {
450
+ "id": "ollama-api-key",
451
+ "description": "Detected an Ollama API Key, which may expose local and hosted AI model serving to unauthorized access.",
452
+ "regex": "(?i)(?:ollama)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-f0-9]{32}\\.[a-zA-Z0-9_-]{24})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
453
+ "keywords": [
454
+ "ollama"
455
+ ],
456
+ "confidence": "high",
457
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
458
+ "entropy": 3.5,
459
+ "entropyInclusive": true
460
+ }
461
+ ]