@link-foundation/sensitive-data-sanitizer 0.19.3 → 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.
- package/CHANGELOG.md +6 -0
- package/README.md +8 -1
- package/bin/sensitive-data-sanitizer.js +49 -28
- package/docs/API.md +192 -1
- package/docs/COVERAGE.md +3 -3
- package/docs/RULES.md +217 -0
- package/package.json +1 -1
- package/src/allow-list.js +93 -0
- package/src/confidence.js +24 -9
- package/src/context.js +121 -25
- package/src/credentials.js +44 -0
- package/src/crypto-addresses.js +74 -0
- package/src/detection.js +21 -6
- package/src/document-person-cues.js +1 -1
- package/src/encrypt.js +95 -0
- package/src/entities.js +4 -3
- package/src/fake.js +29 -1
- package/src/files.js +57 -12
- package/src/gitleaks.js +82 -27
- package/src/identifier-detector.js +36 -0
- package/src/identity.js +14 -0
- package/src/index.d.ts +116 -1
- package/src/index.js +7 -0
- package/src/national-checks.js +209 -0
- package/src/national.js +310 -92
- package/src/pattern-detector.js +219 -0
- package/src/personal-context.js +3 -2
- package/src/personal-evidence.js +233 -0
- package/src/personal.js +42 -10
- package/src/projection.js +85 -26
- package/src/rule-catalog.js +424 -0
- package/src/sanitizer.js +48 -3
- package/src/sarif.js +127 -0
- package/src/token-checksum.js +49 -0
- package/src/transforms.js +108 -25
- package/src/vendor/betterleaks/LICENSE +21 -0
- package/src/vendor/betterleaks/provenance.json +11 -0
- package/src/vendor/betterleaks/rules-0.json +463 -0
- package/src/vendor/betterleaks/rules-1.json +454 -0
- package/src/vendor/betterleaks/rules-2.json +461 -0
- package/src/vendor/betterleaks/rules-3.json +455 -0
- package/src/vendor/betterleaks/rules-4.json +483 -0
- package/src/vendor/betterleaks/rules-5.json +35 -0
- package/src/vendor/entities/aws.json +1 -1
- package/src/vendor/entities/azure.json +6 -2
- package/src/vendor/entities/google.json +2 -1
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "abuseipdb-api-key.1",
|
|
4
|
+
"description": "AbuseIPDB API key, which may allow access to IP reputation data and abuse-reporting APIs.",
|
|
5
|
+
"regex": "(?i)(?:abuseipdb)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-f0-9]{80})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"abuseipdb"
|
|
8
|
+
],
|
|
9
|
+
"confidence": "high",
|
|
10
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
11
|
+
"entropy": 3.5
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "aikido-ci-token",
|
|
15
|
+
"description": "Detected an Aikido CI token, which may allow unauthorized CI scan integration activity in Aikido.",
|
|
16
|
+
"regex": "\\b(AIK_CI_[A-Za-z0-9]{20,44})\\b",
|
|
17
|
+
"keywords": [
|
|
18
|
+
"aik_ci_"
|
|
19
|
+
],
|
|
20
|
+
"confidence": "high",
|
|
21
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.0\n",
|
|
22
|
+
"entropy": 3.0
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "aikido-client-secret",
|
|
26
|
+
"description": "Detected an Aikido client secret, which may allow unauthorized access to Aikido APIs when paired with a client ID.",
|
|
27
|
+
"regex": "\\b(AIK_SECRET_[A-Za-z0-9]{64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
28
|
+
"keywords": [
|
|
29
|
+
"aik_secret_"
|
|
30
|
+
],
|
|
31
|
+
"confidence": "high",
|
|
32
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5\n",
|
|
33
|
+
"entropy": 3.5
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "airtable-oauth-token",
|
|
37
|
+
"description": "Detected an Airtable OAuth token, which may allow unauthorized access to Airtable resources granted to an OAuth integration.",
|
|
38
|
+
"regex": "(?i)(?:airtable)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Z0-9]+\\.v1\\.[A-Z0-9_-]+\\.[a-f0-9]+)(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
39
|
+
"keywords": [
|
|
40
|
+
"airtable"
|
|
41
|
+
],
|
|
42
|
+
"confidence": "high",
|
|
43
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
44
|
+
"entropy": 3.5
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "aiven-auth-token",
|
|
48
|
+
"description": "Detected an Aiven authentication token, which may expose Aiven projects and services.",
|
|
49
|
+
"regex": "(?i:aiven)[\\s\\S]{0,32}?\\b([A-Za-z0-9/+=]{372})(?:[^A-Za-z0-9/+=]|$)",
|
|
50
|
+
"keywords": [
|
|
51
|
+
"aiven"
|
|
52
|
+
],
|
|
53
|
+
"confidence": "high",
|
|
54
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 4.0 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
55
|
+
"entropy": 4.0
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "alibaba-sts-access-key-secret",
|
|
59
|
+
"description": "Detected an Alibaba Cloud STS AccessKey secret, which may allow temporary Alibaba Cloud API access when paired with an STS AccessKey ID and security token.",
|
|
60
|
+
"regex": "(?i)(?:alibaba|aliyun|secret|key)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9]{30,64})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
61
|
+
"keywords": [
|
|
62
|
+
"alibaba",
|
|
63
|
+
"aliyun"
|
|
64
|
+
],
|
|
65
|
+
"confidence": "high",
|
|
66
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
67
|
+
"entropy": 3.5
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "amplitude-secret-key",
|
|
71
|
+
"description": "Detected an Amplitude secret key, which may allow unauthorized event ingestion or access to Amplitude API functionality.",
|
|
72
|
+
"regex": "(?i)\\bamplitude(?:.|[\\n\\r]){0,32}?(?:SECRET|PRIVATE|ACCESS|KEY|TOKEN|AUTHORIZATION)(?:.|[\\n\\r]){0,16}?\\b([a-f0-9]{32})\\b",
|
|
73
|
+
"keywords": [
|
|
74
|
+
"amplitude"
|
|
75
|
+
],
|
|
76
|
+
"confidence": "medium",
|
|
77
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.3 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
78
|
+
"entropy": 3.3
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "apify-api-token",
|
|
82
|
+
"description": "Detected an Apify API token, which may expose actors, tasks, and stored data.",
|
|
83
|
+
"regex": "\\b(apify_api_[A-Za-z0-9]{34,38})\\b",
|
|
84
|
+
"keywords": [
|
|
85
|
+
"apify_api_"
|
|
86
|
+
],
|
|
87
|
+
"confidence": "high",
|
|
88
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
89
|
+
"entropy": 3.5
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "apollo-api-key.1",
|
|
93
|
+
"description": "Apollo.io API key, which may allow access to sales intelligence and engagement data.",
|
|
94
|
+
"regex": "(?i:(?:apollo)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_-]{22})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
95
|
+
"keywords": [
|
|
96
|
+
"apollo"
|
|
97
|
+
],
|
|
98
|
+
"confidence": "medium",
|
|
99
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.0 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
100
|
+
"entropy": 3.0
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "asaas-api-token",
|
|
104
|
+
"description": "Detected an Asaas API token, which may expose payment and customer data.",
|
|
105
|
+
"regex": "(?:^|[^A-Za-z0-9_-])(\\$aact_(?:prod|hmlg)_[A-Za-z0-9_-]{20,100})(?:[^A-Za-z0-9_-]|$)",
|
|
106
|
+
"keywords": [
|
|
107
|
+
"$aact_"
|
|
108
|
+
],
|
|
109
|
+
"confidence": "high",
|
|
110
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
111
|
+
"entropy": 3.5
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "assemblyai-api-key",
|
|
115
|
+
"description": "Detected an AssemblyAI API Key, which may expose speech-to-text services and associated audio data to unauthorized access.",
|
|
116
|
+
"regex": "(?i)(?:assemblyai)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
117
|
+
"keywords": [
|
|
118
|
+
"assemblyai"
|
|
119
|
+
],
|
|
120
|
+
"confidence": "medium",
|
|
121
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
122
|
+
"entropy": 3.5
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "auth0-client-secret.1",
|
|
126
|
+
"description": "Auth0 client secret, which may allow an application to impersonate its OAuth client.",
|
|
127
|
+
"regex": "(?i:(?:auth0[_.-]?(?:client[_.-]?)?(?:secret|private|key|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_-]{64,128})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
128
|
+
"keywords": [
|
|
129
|
+
"auth0"
|
|
130
|
+
],
|
|
131
|
+
"confidence": "high",
|
|
132
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
133
|
+
"entropy": 3.5
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "azure-app-configuration-connection-string",
|
|
137
|
+
"description": "Detected an Azure App Configuration connection string.",
|
|
138
|
+
"regex": "(?i)Endpoint=(?P<azure_appconfig_endpoint>https://[a-z0-9-]+\\.azconfig\\.io);Id=(?P<azure_appconfig_id>[^;\\s'\"]{4,80});Secret=([A-Za-z0-9+/]{36,100}={0,2})",
|
|
139
|
+
"secretGroup": 3,
|
|
140
|
+
"keywords": [
|
|
141
|
+
"azconfig.io",
|
|
142
|
+
"endpoint=",
|
|
143
|
+
"secret="
|
|
144
|
+
],
|
|
145
|
+
"confidence": "high",
|
|
146
|
+
"filter": "entropy(finding[\"secret\"]) <= 3.5\n",
|
|
147
|
+
"entropy": 3.5,
|
|
148
|
+
"entropyInclusive": true
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "azure-servicebus-connection-string",
|
|
152
|
+
"description": "Detected an Azure Service Bus or Event Hub shared access connection string.",
|
|
153
|
+
"regex": "(?i)(Endpoint=sb://[a-z0-9-]+\\.servicebus\\.windows\\.net/;SharedAccessKeyName=[^;=\\s'\"]{1,128};SharedAccessKey=[A-Za-z0-9+/]{32,100}={0,2}(?:;EntityPath=[^;\\s'\"]{1,128})?)",
|
|
154
|
+
"keywords": [
|
|
155
|
+
"endpoint=sb://",
|
|
156
|
+
"sharedaccesskey"
|
|
157
|
+
],
|
|
158
|
+
"confidence": "high",
|
|
159
|
+
"filter": "entropy(finding[\"secret\"]) <= 3.0\n",
|
|
160
|
+
"entropy": 3.0,
|
|
161
|
+
"entropyInclusive": true
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "azure-storage-account-key",
|
|
165
|
+
"description": "Detected an Azure Storage account key.",
|
|
166
|
+
"regex": "(?i)\\b(?:AccountKey|(?:azure[_\\s.-]*)?(?:storage[_\\s.-]*)?(?:account[_\\s.-]*)?(?:access[_\\s.-]*)?key)\\b(?s:.{0,24}?)([A-Za-z0-9+/]{86}==)",
|
|
167
|
+
"keywords": [
|
|
168
|
+
"accountkey",
|
|
169
|
+
"storage",
|
|
170
|
+
"accesskey",
|
|
171
|
+
"access_key",
|
|
172
|
+
"access-key"
|
|
173
|
+
],
|
|
174
|
+
"confidence": "high",
|
|
175
|
+
"filter": "entropy(finding[\"secret\"]) <= 4.0\n",
|
|
176
|
+
"entropy": 4.0,
|
|
177
|
+
"entropyInclusive": true
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "bitbucket-data-center-token",
|
|
181
|
+
"description": "Discovered a Bitbucket Data Center HTTP access token, risking unauthorized repository and project access.",
|
|
182
|
+
"regex": "\\b(BBDC-[A-Za-z0-9+/=]{32,})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
183
|
+
"keywords": [
|
|
184
|
+
"bbdc"
|
|
185
|
+
],
|
|
186
|
+
"confidence": "high",
|
|
187
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
188
|
+
"entropy": 3.5
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "bitly-access-token",
|
|
192
|
+
"description": "Detected a Bitly access token, which may allow unauthorized access to Bitly account and link management APIs.",
|
|
193
|
+
"regex": "(?i)\\bbitly(?:.|[\\n\\r]){0,32}?(?:SECRET|PRIVATE|ACCESS|KEY|TOKEN)(?:.|[\\n\\r]){0,32}?([a-f0-9]{40})\\b",
|
|
194
|
+
"keywords": [
|
|
195
|
+
"bitly"
|
|
196
|
+
],
|
|
197
|
+
"confidence": "high",
|
|
198
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.3 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
199
|
+
"entropy": 3.3
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"id": "bitrise-access-token",
|
|
203
|
+
"description": "Detected a Bitrise personal or workspace access token, which may expose CI/CD applications and builds.",
|
|
204
|
+
"regex": "(?i:(?:bitrise(?:[ _-]*(?:personal|workspace))?(?:[ _-]*(?:access|api))?[ _-]*token)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_-]{60,120})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
205
|
+
"keywords": [
|
|
206
|
+
"bitrise"
|
|
207
|
+
],
|
|
208
|
+
"confidence": "high",
|
|
209
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
210
|
+
"entropy": 3.5
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "box-api-access-token",
|
|
214
|
+
"description": "Detected a Box API access token, which may expose Box files and account data.",
|
|
215
|
+
"regex": "(?i)(?:box)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
216
|
+
"keywords": [
|
|
217
|
+
"box_",
|
|
218
|
+
"box-",
|
|
219
|
+
"boxt",
|
|
220
|
+
"boxk",
|
|
221
|
+
"boxa"
|
|
222
|
+
],
|
|
223
|
+
"confidence": "medium",
|
|
224
|
+
"filter": "let prefix = filter.findMatch(finding[\"fragment_raw\"][finding[\"match_line_start_idx\"]:finding[\"match_start_idx\"]], \"[\\\\w.-]*$\");\nlet identifier = prefix + filter.findMatch(finding[\"match\"], \"^[\\\\w .-]+\");\nlower(identifier) contains \"client\" || entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n\n",
|
|
225
|
+
"entropy": 3.5
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"id": "brave-search-api-key",
|
|
229
|
+
"description": "Detected a Brave Search API key, which may allow unauthorized use of Brave Search API quota.",
|
|
230
|
+
"regex": "\\b(BSA[A-Za-z0-9_-]{24,40})\\b",
|
|
231
|
+
"keywords": [
|
|
232
|
+
"bsa"
|
|
233
|
+
],
|
|
234
|
+
"confidence": "high",
|
|
235
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.2\n",
|
|
236
|
+
"entropy": 3.2
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"id": "browserstack-access-key.1",
|
|
240
|
+
"description": "BrowserStack access key, which may allow access to automated browser and device testing when paired with its username.",
|
|
241
|
+
"regex": "(?i:(?:browserstack[_.-]?(?:access[_.-]?)?(?:key|secret|token))(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3})(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9]{20})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
242
|
+
"keywords": [
|
|
243
|
+
"browserstack"
|
|
244
|
+
],
|
|
245
|
+
"confidence": "high",
|
|
246
|
+
"filter": "entropy(finding[\"secret\"]) < 3.0\n",
|
|
247
|
+
"entropy": 3.0
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"id": "buildkite-service-token",
|
|
251
|
+
"description": "Detected a Buildkite agent, package, or portal token, which may expose CI/CD workloads or packages.",
|
|
252
|
+
"regex": "\\b(bkaa_[A-Za-z0-9_-]{75}|bkaj_[A-Za-z0-9_-]{333}|bkar_[A-Za-z0-9_-]{73}|bkct_[A-Za-z0-9_-]{73}|bkpt_[A-Za-z0-9_-]{199}|bkpat_[A-Za-z0-9_-]{54}|bkps_[A-Za-z0-9_-]{64})(?:$|[^A-Za-z0-9_-])",
|
|
253
|
+
"keywords": [
|
|
254
|
+
"bkaa_",
|
|
255
|
+
"bkaj_",
|
|
256
|
+
"bkar_",
|
|
257
|
+
"bkct_",
|
|
258
|
+
"bkpt_",
|
|
259
|
+
"bkpat_",
|
|
260
|
+
"bkps_"
|
|
261
|
+
],
|
|
262
|
+
"confidence": "high",
|
|
263
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
264
|
+
"entropy": 3.5
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "buildkite-user-access-token",
|
|
268
|
+
"description": "Detected a Buildkite user access token, which may expose pipelines, builds, and organization data.",
|
|
269
|
+
"regex": "\\b(bkua_(?:[a-z0-9]{40}|[a-z0-9]{53}))\\b",
|
|
270
|
+
"keywords": [
|
|
271
|
+
"bkua_"
|
|
272
|
+
],
|
|
273
|
+
"confidence": "high",
|
|
274
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
275
|
+
"entropy": 3.5
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "canadian-digital-service-notify-api-key",
|
|
279
|
+
"description": "Detected a GC Notify API key, which may allow unauthorized notification access.",
|
|
280
|
+
"regex": "(?i:\\b(ApiKey-v1\\s+gcntfy-[a-z0-9_]+-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\b)",
|
|
281
|
+
"keywords": [
|
|
282
|
+
"gcntfy-"
|
|
283
|
+
],
|
|
284
|
+
"confidence": "high",
|
|
285
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
286
|
+
"entropy": 3.5
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"id": "canva-client-secret",
|
|
290
|
+
"description": "Detected a Canva Connect API client secret, which may allow unauthorized OAuth client authentication when paired with a client ID.",
|
|
291
|
+
"regex": "\\b(cnvca[a-zA-Z0-9_-]{51})\\b",
|
|
292
|
+
"keywords": [
|
|
293
|
+
"cnvca"
|
|
294
|
+
],
|
|
295
|
+
"confidence": "high",
|
|
296
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5\n",
|
|
297
|
+
"entropy": 3.5
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"id": "cartesia-api-key.1",
|
|
301
|
+
"description": "Cartesia API key, which grants server-side access to Cartesia voice APIs.",
|
|
302
|
+
"regex": "\\b(sk_car_[A-Za-z0-9_]{20})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
303
|
+
"keywords": [
|
|
304
|
+
"sk_car_"
|
|
305
|
+
],
|
|
306
|
+
"confidence": "high",
|
|
307
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
308
|
+
"entropy": 3.5
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"id": "cerebras-api-key",
|
|
312
|
+
"description": "Identified a Cerebras AI API Key, which may expose AI inference services to unauthorized access.",
|
|
313
|
+
"regex": "(?i)\\b(csk-[a-z0-9]{48})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
314
|
+
"keywords": [
|
|
315
|
+
"csk-"
|
|
316
|
+
],
|
|
317
|
+
"confidence": "high",
|
|
318
|
+
"filter": "entropy(finding[\"secret\"]) <= 3.0\n",
|
|
319
|
+
"entropy": 3.0,
|
|
320
|
+
"entropyInclusive": true
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"id": "checkout-secret-key",
|
|
324
|
+
"description": "Checkout.com secret key.",
|
|
325
|
+
"regex": "(?i)(?:checkout)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(sk_[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
326
|
+
"keywords": [
|
|
327
|
+
"checkout"
|
|
328
|
+
],
|
|
329
|
+
"confidence": "medium"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"id": "circleci-personal-token",
|
|
333
|
+
"description": "CircleCI personal access token.",
|
|
334
|
+
"regex": "\\b(CCIPAT_[a-zA-Z0-9]{22}_[a-z0-9]{40})",
|
|
335
|
+
"keywords": [
|
|
336
|
+
"ccipat_"
|
|
337
|
+
],
|
|
338
|
+
"confidence": "high",
|
|
339
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
340
|
+
"entropy": 3.5
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"id": "circleci-project-token",
|
|
344
|
+
"description": "CircleCI project token.",
|
|
345
|
+
"regex": "(?i)(?:circleci)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-f0-9]{40})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
346
|
+
"keywords": [
|
|
347
|
+
"circleci"
|
|
348
|
+
],
|
|
349
|
+
"confidence": "high",
|
|
350
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.3 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
351
|
+
"entropy": 3.3
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"id": "civo-api-key",
|
|
355
|
+
"description": "Detected a Civo Cloud API key, which may expose Kubernetes clusters and compute resources to unauthorized access.",
|
|
356
|
+
"regex": "(?i)(?:civo)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([a-z0-9]{50})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
357
|
+
"keywords": [
|
|
358
|
+
"civo"
|
|
359
|
+
],
|
|
360
|
+
"confidence": "high",
|
|
361
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
362
|
+
"entropy": 3.5
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "clerk-secret-key",
|
|
366
|
+
"description": "Detected a Clerk secret key, which may allow unauthorized access to Clerk backend APIs.",
|
|
367
|
+
"regex": "(?i)(?:clerk)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(sk_(?:test|live)_[A-Za-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
368
|
+
"keywords": [
|
|
369
|
+
"clerk"
|
|
370
|
+
],
|
|
371
|
+
"confidence": "medium",
|
|
372
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.3\n",
|
|
373
|
+
"entropy": 3.3
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"id": "clickup-personal-api-token",
|
|
377
|
+
"description": "Detected a ClickUp personal API token, which may allow unauthorized access to ClickUp workspaces and user data.",
|
|
378
|
+
"regex": "(?i)(?:clickup)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}(pk_[0-9]{8,9}_[a-z0-9]{32})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
379
|
+
"keywords": [
|
|
380
|
+
"clickup"
|
|
381
|
+
],
|
|
382
|
+
"confidence": "high",
|
|
383
|
+
"filter": "entropy(finding[\"secret\"]) < 3.5\n",
|
|
384
|
+
"entropy": 3.5
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"id": "cloudflare-api-key.2",
|
|
388
|
+
"description": "Detected a Cloudflare API key version 2 (cfut/cfat format), potentially granting access to Cloudflare account and service resources.",
|
|
389
|
+
"regex": "\\b(cf[ua]t_[A-Za-z0-9]{40}[a-f0-9]{8})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
390
|
+
"keywords": [
|
|
391
|
+
"cfut_",
|
|
392
|
+
"cfat_"
|
|
393
|
+
],
|
|
394
|
+
"confidence": "high",
|
|
395
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.0 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
396
|
+
"entropy": 3.0
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"id": "cloudinary-api-secret",
|
|
400
|
+
"description": "Detected a Cloudinary API secret, which may allow unauthorized access to Cloudinary media and account APIs when paired with a cloud name and API key.",
|
|
401
|
+
"regex": "(?i)\\bcloudinary(?:.|[\\n\\r]){0,32}?(?:SECRET|PRIVATE|API[_\\s]?SECRET)(?:.|[\\n\\r]){0,32}?\\b([A-Za-z0-9]{32})\\b",
|
|
402
|
+
"keywords": [
|
|
403
|
+
"cloudinary"
|
|
404
|
+
],
|
|
405
|
+
"confidence": "high",
|
|
406
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5 || filter.tokenRatio(finding[\"secret\"]) >= 2.5\n",
|
|
407
|
+
"entropy": 3.5
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"id": "cloudsmith-api-key",
|
|
411
|
+
"description": "Detected a Cloudsmith API key, which may expose package repositories and artifact management operations to unauthorized access.",
|
|
412
|
+
"regex": "\\b(csa_[a-f0-9]{30}[A-Za-z0-9]{6})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
413
|
+
"keywords": [
|
|
414
|
+
"csa_"
|
|
415
|
+
],
|
|
416
|
+
"confidence": "high"
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"id": "cockroachlabs-cloud-api-key",
|
|
420
|
+
"description": "Detected a CockroachDB Cloud service account API key, which may allow unauthorized access to CockroachDB Cloud resources.",
|
|
421
|
+
"regex": "\\b(CCDB1_[A-Za-z0-9]{22}_[A-Za-z0-9]{40})\\b",
|
|
422
|
+
"keywords": [
|
|
423
|
+
"ccdb1_"
|
|
424
|
+
],
|
|
425
|
+
"confidence": "high",
|
|
426
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5\n",
|
|
427
|
+
"entropy": 3.5
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"id": "configcat-sdk-key",
|
|
431
|
+
"description": "Detected a ConfigCat SDK key, which may allow access to feature flag configuration data.",
|
|
432
|
+
"regex": "(?i)(?:configcat)(?:[ \\t\\w.-]{0,20})[\\s'\"]{0,3}(?:=|>|:{1,3}=|\\|\\||:|=>|\\?=|,)[\\x60'\"\\s=]{0,5}([A-Za-z0-9_-]{22}/[A-Za-z0-9_-]{22})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
433
|
+
"keywords": [
|
|
434
|
+
"configcat"
|
|
435
|
+
],
|
|
436
|
+
"confidence": "high",
|
|
437
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5\n",
|
|
438
|
+
"entropy": 3.5
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"id": "configcat-sdk-key-extended",
|
|
442
|
+
"description": "Detected an extended ConfigCat SDK key, which may allow access to feature flag configuration data.",
|
|
443
|
+
"regex": "\\b(configcat-sdk-1/[A-Za-z0-9_-]{22}/[A-Za-z0-9_-]{22})(?:\\\\?['\"\\x60]|[\\s;]|\\\\[nr]|$)",
|
|
444
|
+
"keywords": [
|
|
445
|
+
"configcat-sdk-1"
|
|
446
|
+
],
|
|
447
|
+
"confidence": "high",
|
|
448
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 3.5\n",
|
|
449
|
+
"entropy": 3.5
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"id": "couchbase-capella-api-key",
|
|
453
|
+
"description": "Detected a Couchbase Capella API key secret, which may allow unauthorized access to Couchbase Capella management APIs.",
|
|
454
|
+
"regex": "(?i)\\b(?:couchbase|capella)(?:.|[\\n\\r]){0,32}?(?:api(?:.|[\\n\\r]){0,12}?(?:key|secret)|key(?:.|[\\n\\r]){0,12}?secret)(?:.|[\\n\\r]){0,32}?\\b([A-Za-z0-9+/]{60,120}={0,2})\\b",
|
|
455
|
+
"keywords": [
|
|
456
|
+
"couchbase",
|
|
457
|
+
"capella"
|
|
458
|
+
],
|
|
459
|
+
"confidence": "high",
|
|
460
|
+
"filter": "filter.entropy(finding[\"secret\"]) < 4.0\n",
|
|
461
|
+
"entropy": 4.0
|
|
462
|
+
}
|
|
463
|
+
]
|