@link-foundation/sensitive-data-sanitizer 0.19.3 → 0.21.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 (71) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +22 -2
  3. package/bin/sensitive-data-sanitizer.js +50 -28
  4. package/docs/API.md +355 -16
  5. package/docs/COVERAGE.md +19 -9
  6. package/docs/RULES.md +218 -0
  7. package/examples/second-pass-placeholders.mjs +28 -0
  8. package/package.json +12 -3
  9. package/src/allow-list.js +93 -0
  10. package/src/confidence.js +24 -9
  11. package/src/context.js +287 -40
  12. package/src/credential-spans.js +180 -0
  13. package/src/credentials-entry.d.ts +23 -0
  14. package/src/credentials-entry.js +62 -0
  15. package/src/credentials.js +51 -0
  16. package/src/crypto-addresses.js +74 -0
  17. package/src/detection.js +87 -41
  18. package/src/document-person-cues.js +1 -1
  19. package/src/encoded.js +137 -51
  20. package/src/encrypt.js +95 -0
  21. package/src/engines.js +33 -10
  22. package/src/entities.js +4 -3
  23. package/src/exempt.js +72 -0
  24. package/src/fake-memory.js +32 -0
  25. package/src/fake.js +33 -29
  26. package/src/features.js +29 -0
  27. package/src/files.js +57 -12
  28. package/src/gitleaks.js +82 -27
  29. package/src/html-tags.js +8 -0
  30. package/src/identifier-detector.js +36 -0
  31. package/src/identity-types.js +63 -0
  32. package/src/identity.js +3 -47
  33. package/src/index.d.ts +157 -3
  34. package/src/index.js +13 -0
  35. package/src/known.js +33 -15
  36. package/src/national-checks.js +209 -0
  37. package/src/national.js +310 -92
  38. package/src/pattern-detector.js +219 -0
  39. package/src/personal-context.js +3 -2
  40. package/src/personal-evidence.js +233 -0
  41. package/src/personal-features.js +39 -0
  42. package/src/personal.js +66 -10
  43. package/src/placeholder-types.js +154 -4
  44. package/src/placeholders.js +127 -45
  45. package/src/projection.js +78 -26
  46. package/src/proper-names.js +48 -5
  47. package/src/prose-words.js +120 -0
  48. package/src/record-worker.js +1 -0
  49. package/src/rule-catalog.js +426 -0
  50. package/src/rules.js +8 -0
  51. package/src/sanitizer.js +133 -23
  52. package/src/sarif.js +127 -0
  53. package/src/stream-worker.js +1 -0
  54. package/src/strict-attributes.js +48 -4
  55. package/src/strict.js +1 -1
  56. package/src/structured.js +2 -0
  57. package/src/token-checksum.js +49 -0
  58. package/src/transforms.js +146 -33
  59. package/src/vendor/betterleaks/LICENSE +21 -0
  60. package/src/vendor/betterleaks/provenance.json +11 -0
  61. package/src/vendor/betterleaks/rules-0.json +463 -0
  62. package/src/vendor/betterleaks/rules-1.json +454 -0
  63. package/src/vendor/betterleaks/rules-2.json +461 -0
  64. package/src/vendor/betterleaks/rules-3.json +455 -0
  65. package/src/vendor/betterleaks/rules-4.json +483 -0
  66. package/src/vendor/betterleaks/rules-5.json +35 -0
  67. package/src/vendor/entities/aws.json +1 -1
  68. package/src/vendor/entities/azure.json +6 -2
  69. package/src/vendor/entities/google.json +2 -1
  70. package/src/vocabulary.js +27 -1
  71. package/src/worker-options.js +1 -0
@@ -0,0 +1,455 @@
1
+ [
2
+ {
3
+ "id": "onesignal-rich-authentication-token",
4
+ "description": "OneSignal rich authentication token.",
5
+ "regex": "\\b(os_v2_(?:app|org)_[a-z2-7]{103})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
6
+ "keywords": [
7
+ "os_v2_app_",
8
+ "os_v2_org_"
9
+ ],
10
+ "confidence": "high",
11
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
12
+ "entropy": 3.5
13
+ },
14
+ {
15
+ "id": "onfido-live-api-token-ca",
16
+ "description": "Onfido live API token.",
17
+ "regex": "\\b(api_live_ca\\.[A-Za-z0-9_-]{20,80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
18
+ "keywords": [
19
+ "api_live_ca."
20
+ ],
21
+ "confidence": "high",
22
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
23
+ "entropy": 3.5
24
+ },
25
+ {
26
+ "id": "onfido-live-api-token-eu",
27
+ "description": "Onfido live API token.",
28
+ "regex": "\\b(api_live\\.[A-Za-z0-9_-]{20,80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
29
+ "keywords": [
30
+ "api_live."
31
+ ],
32
+ "confidence": "high",
33
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
34
+ "entropy": 3.5
35
+ },
36
+ {
37
+ "id": "onfido-live-api-token-us",
38
+ "description": "Onfido live API token.",
39
+ "regex": "\\b(api_live_us\\.[A-Za-z0-9_-]{20,80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
40
+ "keywords": [
41
+ "api_live_us."
42
+ ],
43
+ "confidence": "high",
44
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
45
+ "entropy": 3.5
46
+ },
47
+ {
48
+ "id": "openrouter-api-key",
49
+ "description": "Detected an OpenRouter API Key, which may expose access to multiple AI models through the OpenRouter gateway.",
50
+ "regex": "(?i)\\b(sk-or-v1-[0-9a-f]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
51
+ "keywords": [
52
+ "sk-or-v1-"
53
+ ],
54
+ "confidence": "high",
55
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
56
+ "entropy": 3.5,
57
+ "entropyInclusive": true
58
+ },
59
+ {
60
+ "id": "openweather-api-key",
61
+ "description": "OpenWeather API key.",
62
+ "regex": "(?i:(?:openweather|pyowm)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
63
+ "keywords": [
64
+ "openweather",
65
+ "pyowm"
66
+ ],
67
+ "confidence": "medium",
68
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
69
+ "entropy": 3.5
70
+ },
71
+ {
72
+ "id": "opsgenie-api-key.1",
73
+ "description": "Opsgenie API key, which may allow access to alerts, incidents, and account configuration.",
74
+ "regex": "(?i)(?:opsgenie)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
75
+ "keywords": [
76
+ "opsgenie"
77
+ ],
78
+ "confidence": "high",
79
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
80
+ "entropy": 3.0
81
+ },
82
+ {
83
+ "id": "ovh-application-secret",
84
+ "description": "OVHcloud Application Secret - component of authenticated OVH API requests, which could allow unauthorized access to OVHcloud infrastructure when combined with Application and Consumer keys.",
85
+ "regex": "(?i)(?:app(?:lication)?[_.-]{0,1}secret)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9-]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
86
+ "keywords": [
87
+ "ovh"
88
+ ],
89
+ "confidence": "high",
90
+ "filter": "entropy(finding[\"secret\"]) <= 3.0\n",
91
+ "entropy": 3.0,
92
+ "entropyInclusive": true
93
+ },
94
+ {
95
+ "id": "paddle-live-api-key",
96
+ "description": "Paddle live API key.",
97
+ "regex": "\\b(pdl_live_apikey_[a-z0-9]{26}_[A-Za-z0-9]{22}_[A-Za-z0-9]{3})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
98
+ "keywords": [
99
+ "pdl_live_apikey_"
100
+ ],
101
+ "confidence": "high",
102
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
103
+ "entropy": 3.5
104
+ },
105
+ {
106
+ "id": "pagerduty-authorization-token.1",
107
+ "description": "PagerDuty authorization token, which may allow access to PagerDuty account and incident data.",
108
+ "regex": "(?i:(?:pagerduty)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(u\\+[A-Za-z0-9_+-]{18})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
109
+ "keywords": [
110
+ "pagerduty"
111
+ ],
112
+ "confidence": "high",
113
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
114
+ "entropy": 3.5
115
+ },
116
+ {
117
+ "id": "paypal-client-secret.1",
118
+ "description": "PayPal OAuth client secret, which may allow access to PayPal REST APIs when paired with its client ID.",
119
+ "regex": "(?i:(?:paypal[_.-]?(?:client[_.-]?)?(?:secret|private|access|key|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_.-]{78,120})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
120
+ "keywords": [
121
+ "paypal"
122
+ ],
123
+ "confidence": "high",
124
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
125
+ "entropy": 3.5
126
+ },
127
+ {
128
+ "id": "persona-production-api-key",
129
+ "description": "Persona production API key.",
130
+ "regex": "\\b(persona_production_[a-z0-9_-]{20,80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
131
+ "keywords": [
132
+ "persona_production_"
133
+ ],
134
+ "confidence": "high",
135
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
136
+ "entropy": 3.5
137
+ },
138
+ {
139
+ "id": "pinecone-api-key.1",
140
+ "description": "Pinecone API key version 1 (UUID format).",
141
+ "regex": "(?i:(?:pinecone(?:[_. -]*(?:api))?[_. -]*(?:secret|key|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
142
+ "keywords": [
143
+ "pinecone"
144
+ ],
145
+ "confidence": "medium",
146
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
147
+ "entropy": 3.0
148
+ },
149
+ {
150
+ "id": "pinecone-api-key.2",
151
+ "description": "Pinecone API key version 2 (pcsk format).",
152
+ "regex": "\\b(pcsk_[A-Za-z0-9]{5,6}_[A-Za-z0-9]{63})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
153
+ "keywords": [
154
+ "pcsk_"
155
+ ],
156
+ "confidence": "high",
157
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
158
+ "entropy": 3.5
159
+ },
160
+ {
161
+ "id": "pinterest-access-token",
162
+ "description": "Pinterest access token.",
163
+ "regex": "\\b(pina_[A-Za-z0-9_-]{20,200})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
164
+ "keywords": [
165
+ "pina_"
166
+ ],
167
+ "confidence": "high",
168
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
169
+ "entropy": 3.5
170
+ },
171
+ {
172
+ "id": "plivo-auth-token",
173
+ "description": "Plivo Auth Token.",
174
+ "regex": "(?i:(?:plivo(?:[_. -]*(?:auth))?[_. -]*(?:secret|token|key))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_-]{40})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
175
+ "keywords": [
176
+ "plivo"
177
+ ],
178
+ "confidence": "high",
179
+ "filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
180
+ "entropy": 3.5
181
+ },
182
+ {
183
+ "id": "polar-oauth-access-token",
184
+ "description": "Polar OAuth access token.",
185
+ "regex": "\\b(polar_at_[A-Za-z0-9_-]{20,100})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
186
+ "keywords": [
187
+ "polar_at_"
188
+ ],
189
+ "confidence": "high",
190
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
191
+ "entropy": 3.5
192
+ },
193
+ {
194
+ "id": "polar-organization-access-token",
195
+ "description": "Polar organization access token.",
196
+ "regex": "\\b(polar_oat_[A-Za-z0-9_-]{20,100})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
197
+ "keywords": [
198
+ "polar_oat_"
199
+ ],
200
+ "confidence": "high",
201
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
202
+ "entropy": 3.5
203
+ },
204
+ {
205
+ "id": "polar-personal-access-token",
206
+ "description": "Polar personal access token.",
207
+ "regex": "\\b(polar_pat_[A-Za-z0-9_-]{20,100})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
208
+ "keywords": [
209
+ "polar_pat_"
210
+ ],
211
+ "confidence": "high",
212
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
213
+ "entropy": 3.5
214
+ },
215
+ {
216
+ "id": "polymarket-api-key",
217
+ "description": "Identified a Polymarket API key, potentially compromising access to the Polymarket trading platform.",
218
+ "regex": "(?i:(?:poly.{0,20}key)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
219
+ "keywords": [
220
+ "poly"
221
+ ],
222
+ "confidence": "high",
223
+ "filter": "entropy(finding[\"secret\"]) <= 3.0\n",
224
+ "entropy": 3.0,
225
+ "entropyInclusive": true
226
+ },
227
+ {
228
+ "id": "polymarket-private-key",
229
+ "description": "Discovered a Polymarket private key, which could allow unauthorized trading and fund transfers.",
230
+ "regex": "(?i:(?:poly.{0,20}private.{0,20}key)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(0x[a-fA-F0-9]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
231
+ "keywords": [
232
+ "poly"
233
+ ],
234
+ "confidence": "medium",
235
+ "filter": "entropy(finding[\"secret\"]) <= 3.5\n",
236
+ "entropy": 3.5,
237
+ "entropyInclusive": true
238
+ },
239
+ {
240
+ "id": "posthog-personal-api-key",
241
+ "description": "Detected a PostHog Personal API Key, which may expose administrative access to PostHog analytics projects.",
242
+ "regex": "(?i)\\b(phx_[a-zA-Z0-9_\\-]{41,49})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
243
+ "keywords": [
244
+ "phx_"
245
+ ],
246
+ "confidence": "high",
247
+ "filter": "entropy(finding[\"secret\"]) <= 3.0\n",
248
+ "entropy": 3.0,
249
+ "entropyInclusive": true
250
+ },
251
+ {
252
+ "id": "posthog-project-api-key",
253
+ "description": "Detected a PostHog Project API Key, a public write-only token used to send events to a PostHog project.",
254
+ "regex": "(?i)\\b(phc_[a-zA-Z0-9_\\-]{41,44})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
255
+ "keywords": [
256
+ "phc_"
257
+ ],
258
+ "confidence": "high",
259
+ "filter": "entropy(finding[\"secret\"]) <= 3.0\n",
260
+ "entropy": 3.0,
261
+ "entropyInclusive": true
262
+ },
263
+ {
264
+ "id": "postmark-api-token.1",
265
+ "description": "Postmark server or account API token, which may allow access to email delivery and account configuration.",
266
+ "regex": "(?i)(?:postmark)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
267
+ "keywords": [
268
+ "postmark"
269
+ ],
270
+ "confidence": "high",
271
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
272
+ "entropy": 3.0
273
+ },
274
+ {
275
+ "id": "proof-full-access-api-key",
276
+ "description": "Proof production full-access API key.",
277
+ "regex": "\\b(prf_(?:cli_)?[A-Za-z0-9_-]{20,80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
278
+ "keywords": [
279
+ "prf_"
280
+ ],
281
+ "confidence": "high",
282
+ "filter": "filter.matchesAny(finding[\"secret\"], [\"^prf_(?:cli_)?test_\"])\n|| entropy(finding[\"secret\"]) < 3.5\n",
283
+ "entropy": 3.5,
284
+ "reject": [
285
+ "^prf_(?:cli_)?test_"
286
+ ]
287
+ },
288
+ {
289
+ "id": "rainforest-pay-production-api-key",
290
+ "description": "Rainforest Pay production API key.",
291
+ "regex": "(?i:(?:rainforest(?:[_. -]*pay)?(?:[_. -]*(?:api))?[_. -]*(?:secret|key|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(apikey_[a-f0-9]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
292
+ "keywords": [
293
+ "rainforest"
294
+ ],
295
+ "confidence": "medium",
296
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
297
+ "entropy": 3.5
298
+ },
299
+ {
300
+ "id": "ramp-client-secret",
301
+ "description": "Ramp OAuth client secret.",
302
+ "regex": "\\b(ramp_sec_[A-Za-z0-9]{48})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
303
+ "keywords": [
304
+ "ramp_sec_"
305
+ ],
306
+ "confidence": "high",
307
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
308
+ "entropy": 3.5
309
+ },
310
+ {
311
+ "id": "razorpay-key-secret.1",
312
+ "description": "Razorpay key secret, which may authorize payment APIs when paired with its key ID.",
313
+ "regex": "(?i:(?:razorpay[_.-]?(?:(?:api|key)[_.-]?)?(?:secret|private|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9]{24})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
314
+ "keywords": [
315
+ "razorpay"
316
+ ],
317
+ "confidence": "high",
318
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
319
+ "entropy": 3.0
320
+ },
321
+ {
322
+ "id": "redirect-pizza-api-token.1",
323
+ "description": "redirect.pizza API token.",
324
+ "regex": "\\b(rpa_[A-Za-z0-9]{30})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
325
+ "keywords": [
326
+ "rpa_"
327
+ ],
328
+ "confidence": "high",
329
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
330
+ "entropy": 3.5
331
+ },
332
+ {
333
+ "id": "render-api-key",
334
+ "description": "Detected a Render API key, which may expose hosted services and account resources to unauthorized access.",
335
+ "regex": "\\b(rnd_[A-Za-z0-9]{28})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
336
+ "keywords": [
337
+ "rnd_"
338
+ ],
339
+ "confidence": "high",
340
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
341
+ "entropy": 3.5
342
+ },
343
+ {
344
+ "id": "replicate-api-token",
345
+ "description": "Detected a Replicate API Token, which may expose AI model hosting and inference services to unauthorized access.",
346
+ "regex": "(?i)\\b(r8_[A-Za-z0-9]{37})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
347
+ "keywords": [
348
+ "r8_"
349
+ ],
350
+ "confidence": "high",
351
+ "filter": "entropy(finding[\"secret\"]) <= 3.0\n",
352
+ "entropy": 3.0,
353
+ "entropyInclusive": true
354
+ },
355
+ {
356
+ "id": "resend-api-key.1",
357
+ "description": "Resend API key, which may allow sending email or managing account resources.",
358
+ "regex": "\\b(re_[1-9A-HJ-NP-Za-km-z]{8}_[1-9A-HJ-NP-Za-km-z]{24})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
359
+ "keywords": [
360
+ "resend"
361
+ ],
362
+ "confidence": "high",
363
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
364
+ "entropy": 3.5
365
+ },
366
+ {
367
+ "id": "retell-api-key.1",
368
+ "description": "Retell AI API key, which may allow access to agents, calls, and account configuration.",
369
+ "regex": "(?i:(?:retell)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(key_[a-f0-9]{28})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
370
+ "keywords": [
371
+ "retell"
372
+ ],
373
+ "confidence": "high",
374
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
375
+ "entropy": 3.0
376
+ },
377
+ {
378
+ "id": "rootly-api-key.1",
379
+ "description": "Rootly API key.",
380
+ "regex": "\\b(rootly_[a-f0-9]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
381
+ "keywords": [
382
+ "rootly_"
383
+ ],
384
+ "confidence": "high",
385
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
386
+ "entropy": 3.5
387
+ },
388
+ {
389
+ "id": "runpod-api-key.1",
390
+ "description": "RunPod API key.",
391
+ "regex": "\\b(rpa_[A-Z0-9]{40}[A-Za-z0-9]{6})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
392
+ "keywords": [
393
+ "rpa_"
394
+ ],
395
+ "confidence": "high",
396
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
397
+ "entropy": 3.5
398
+ },
399
+ {
400
+ "id": "salesforce-access-token.1",
401
+ "description": "Salesforce access token.",
402
+ "regex": "\\b(00[A-Za-z0-9]{13}![A-Za-z0-9._-]{80,260})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
403
+ "keywords": [
404
+ "salesforce.com"
405
+ ],
406
+ "confidence": "high",
407
+ "filter": "entropy(finding[\"secret\"]) < 3.3\n",
408
+ "entropy": 3.3
409
+ },
410
+ {
411
+ "id": "samsara-api-token.1",
412
+ "description": "Samsara API token.",
413
+ "regex": "\\b(samsara_api_[A-Za-z0-9]{26,32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
414
+ "keywords": [
415
+ "samsara_api_"
416
+ ],
417
+ "confidence": "high",
418
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
419
+ "entropy": 3.0
420
+ },
421
+ {
422
+ "id": "scaleway-secret-key",
423
+ "description": "Identified a standalone Scaleway Secret Key. This can be used to authenticate API requests.",
424
+ "regex": "(?i)(?:(?:scaleway|scw).{0,20}?(?:secret|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
425
+ "keywords": [
426
+ "scaleway",
427
+ "scw"
428
+ ],
429
+ "confidence": "high",
430
+ "filter": "entropy(finding[\"secret\"]) < 3.0\n",
431
+ "entropy": 3.0
432
+ },
433
+ {
434
+ "id": "scalr-api-access-token.1",
435
+ "description": "Scalr API access token.",
436
+ "regex": "(?i:(?:scalr(?:[_. -]*(?:api|access))?[_. -]*(?:secret|key|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\\.eyJpc3MiOiJ1c2VyIiwianRpIjoiYXQt[A-Za-z0-9_-]{20,40}\\.[A-Za-z0-9_-]{43})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
437
+ "keywords": [
438
+ "scalr"
439
+ ],
440
+ "confidence": "high",
441
+ "filter": "entropy(finding[\"secret\"]) < 3.5\n",
442
+ "entropy": 3.5
443
+ },
444
+ {
445
+ "id": "segment-public-api-token.1",
446
+ "description": "Segment workspace bearer token for the Public API.",
447
+ "regex": "\\b(sgp_[A-Za-z0-9]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
448
+ "keywords": [
449
+ "sgp_"
450
+ ],
451
+ "confidence": "high",
452
+ "filter": "entropy(finding[\"secret\"]) < 3.3\n",
453
+ "entropy": 3.3
454
+ }
455
+ ]