credsweeper 1.12.1__py3-none-any.whl → 1.13.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.

Potentially problematic release.


This version of credsweeper might be problematic. Click here for more details.

Files changed (47) hide show
  1. credsweeper/__init__.py +1 -1
  2. credsweeper/__main__.py +23 -13
  3. credsweeper/app.py +7 -2
  4. credsweeper/common/keyword_pattern.py +6 -3
  5. credsweeper/common/morpheme_checklist.txt +13 -1
  6. credsweeper/config/config.py +1 -0
  7. credsweeper/credentials/line_data.py +16 -0
  8. credsweeper/deep_scanner/deep_scanner.py +13 -7
  9. credsweeper/deep_scanner/rtf_scanner.py +41 -0
  10. credsweeper/deep_scanner/strings_scanner.py +52 -0
  11. credsweeper/file_handler/byte_content_provider.py +10 -1
  12. credsweeper/file_handler/file_path_extractor.py +2 -0
  13. credsweeper/file_handler/text_content_provider.py +7 -1
  14. credsweeper/filters/__init__.py +1 -1
  15. credsweeper/filters/group/token_pattern.py +2 -2
  16. credsweeper/filters/group/weird_base36_token.py +2 -2
  17. credsweeper/filters/group/weird_base64_token.py +2 -2
  18. credsweeper/filters/value_camel_case_check.py +2 -2
  19. credsweeper/filters/value_file_path_check.py +5 -3
  20. credsweeper/filters/value_github_check.py +3 -2
  21. credsweeper/filters/value_morphemes_check.py +43 -0
  22. credsweeper/filters/value_string_type_check.py +1 -0
  23. credsweeper/ml_model/features/feature.py +1 -18
  24. credsweeper/ml_model/features/file_extension.py +1 -1
  25. credsweeper/ml_model/features/has_html_tag.py +10 -8
  26. credsweeper/ml_model/features/is_secret_numeric.py +4 -3
  27. credsweeper/ml_model/features/rule_name.py +1 -1
  28. credsweeper/ml_model/features/word_in.py +9 -32
  29. credsweeper/ml_model/features/word_in_path.py +2 -3
  30. credsweeper/ml_model/features/word_in_postamble.py +1 -4
  31. credsweeper/ml_model/features/word_in_preamble.py +1 -4
  32. credsweeper/ml_model/features/word_in_transition.py +1 -4
  33. credsweeper/ml_model/features/word_in_value.py +2 -3
  34. credsweeper/ml_model/features/word_in_variable.py +2 -3
  35. credsweeper/ml_model/ml_config.json +15 -8
  36. credsweeper/ml_model/ml_model.onnx +0 -0
  37. credsweeper/ml_model/ml_validator.py +1 -1
  38. credsweeper/rules/config.yaml +174 -142
  39. credsweeper/scanner/scanner.py +12 -7
  40. credsweeper/secret/config.json +18 -5
  41. credsweeper/utils/util.py +21 -18
  42. {credsweeper-1.12.1.dist-info → credsweeper-1.13.0.dist-info}/METADATA +7 -7
  43. {credsweeper-1.12.1.dist-info → credsweeper-1.13.0.dist-info}/RECORD +46 -44
  44. credsweeper/filters/value_couple_keyword_check.py +0 -28
  45. {credsweeper-1.12.1.dist-info → credsweeper-1.13.0.dist-info}/WHEEL +0 -0
  46. {credsweeper-1.12.1.dist-info → credsweeper-1.13.0.dist-info}/entry_points.txt +0 -0
  47. {credsweeper-1.12.1.dist-info → credsweeper-1.13.0.dist-info}/licenses/LICENSE +0 -0
@@ -3,7 +3,7 @@
3
3
  confidence: weak
4
4
  type: pattern
5
5
  values:
6
- - (?P<variable>(\w*(?i:비밀번호|비번|패스워드|키|암호화?|토큰|(?<!by)pass(?!ed|ing|ion|es|age)|\bpwd?\b|token|secret|key|cred)\w*)\s*(설정은|[=:!]{1,3}))?\s*([._0-9A-Za-z\[\]]*get(env)?\s*\(\s*(?(variable)[^,]+|[\"'\\]*(\\*([\"']|&(quot|apos|#3[49]);)){0,4}(\w*(?i:(?<!by)pass(?!ed|ing|ion|es|age|\s+[a-z]{3,80})|\bpwd?\b|token|secret|key|cred)\w*))(\\*([\"']|&(quot|apos|#3[49]);)){0,4})\s*,\s*(default\s*=\s*)?([brufl@]{1,2}(?=\\*[\"'&]))?(?P<lq>(\\*([\"']|&(quot|apos|#3[49]);)){1,4})(?P<value>(.(?!(?P=lq))){4,80}.?)
6
+ - (?P<variable>(\w*(?i:비밀번호|비번|패스워드|키|암호화?|토큰|(?<!by)pass(?!e[dns]|ing|ion|age)|\bpwd?\b|token|secret|key|cred)\w*)\s*(설정은|[=:!]{1,3}))?\s*([._0-9A-Za-z\[\]]*get(env)?\s*\(\s*(?(variable)[^,]+|[\"'\\]*(\\*([\"']|&(quot|apos|#3[49]);)){0,4}(\w*(?i:(?<!by)pass(?!e[dns]|ing|ion|age|\s+[a-z]{3,80})|\bpwd?\b|token|secret|key|cred)\w*))(\\*([\"']|&(quot|apos|#3[49]);)){0,4})\s*,\s*(default\s*=\s*)?([brufl@]{1,2}(?=\\*[\"'&]))?(?P<lq>(\\*([\"']|&(quot|apos|#3[49]);)){1,4})(?P<value>(.(?!(?P=lq))){4,80}.?)
7
7
  filter_type:
8
8
  - ValueAllowlistCheck
9
9
  - LineGitBinaryCheck
@@ -34,7 +34,7 @@
34
34
  confidence: weak
35
35
  type: pattern
36
36
  values:
37
- - (?P<wrap>[\"'`(])?\s*(?P<variable>(\w*(?i:(?<!by)passw?o?r?d?s?(?!ed|ing|ion|es|age)|pwd?\b|\bp/w\b|token|secret|key|credential)\w*|비밀번호|비번|패스워드|키|암호화?|토큰))[\"'`]*(\s+(?i:is|are|was|were)(\s*[:-])?\s+|\s*(설정은|[=:!]{1,3})\s*)(?P<quote>[\"'`]{1,6})?(?P<value>(?(quote)(?(wrap)[^\"'`)]{4,80}|[^\"'`]{4,80})|(?(wrap)[^\"'`)]{4,80}|\S{4,80})))
37
+ - (?P<wrap>[\"'`(])?\s*(?P<variable>(\w*(?i:(?<!by)passw?o?r?d?s?(?!e[dns]|ing|ion|age)|pwd?\b|\bp/w\b|token|secret|key|credential)\w*|비밀번호|비번|패스워드|키|암호화?|토큰))[\"'`]*(\s+(?i:is|are|was|were)(\s*[:-])?\s+|\s*(설정은|[=:!]{1,3})\s*)(?P<quote>[\"'`]{1,6})?(?P<value>(?(quote)(?(wrap)[^\"'`)]{4,80}|[^\"'`]{4,80})|(?(wrap)[^\"'`)]{4,80}|\S{4,80})))
38
38
  filter_type:
39
39
  - ValueAllowlistCheck
40
40
  - LineGitBinaryCheck
@@ -73,7 +73,7 @@
73
73
  - ValueAllowlistCheck
74
74
  - ValuePatternCheck(4)
75
75
  - ValueEntropyBase64Check
76
- - ValueCoupleKeywordCheck
76
+ - ValueMorphemesCheck
77
77
  min_line_len: 16
78
78
  required_substrings:
79
79
  - token
@@ -90,7 +90,7 @@
90
90
  confidence: moderate
91
91
  type: pattern
92
92
  values:
93
- - (?P<variable>[\"'`]?(?i:(?<!id[ :/])pa[as]swo?r?ds?|pwd?|p/w|비밀번호|비번|패스워드|암호)[\"'`]?)((\s)*[=:](\s)*)(?P<quote>[\"'`(])?(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){8,31}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)[)\"'`])
93
+ - (?P<variable>[\"'`]?(?i:(?<!id[ :/])pa[as]swo?r?ds?|pwd?|p/w|비밀번호|비번|패스워드|암호)[\"'`]?)((\s)*[=:](\s)*)(?P<quote>[\"'`(])?(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){8,64}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)[)\"'`])
94
94
  filter_type:
95
95
  - ValueAllowlistCheck
96
96
  - ValuePatternCheck(4)
@@ -118,7 +118,7 @@
118
118
  confidence: moderate
119
119
  type: pattern
120
120
  values:
121
- - (^|\s|(?P<variable>(?i:\bip[\s/]{1,80}id[\s/]{1,80}pw[\s/:]{0,80}))|(?P<url>://))(?P<ip>(?<![0-9.])[0-2]?[0-9]{1,2}\.[0-2]?[0-9]{1,2}\.[0-2]?[0-9]{1,2}\.[0-2]?[0-9]{1,2}(?![0-9.]))((\s*[(])?|(?(variable)[\s,/]{1,80}|(?(url)[,]|[,/])))\s*\w[\w.-]{3,80}[\s,/]{1,80}(?P<value>(?(url)(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9_+=~!@#$%^&*;?-])){7,31}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x)|(?-i:(?P<e>[A-Z])|(?P<f>[a-z])|(?P<g>[0-9/_+=~!@#$%^&*;?-])){7,31}(?(e)(?(f)(?(g)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x)))(?:\s|[^/]|$)
121
+ - (^|\s|(?P<variable>(?i:\bip[\s/]{1,80}id[\s/]{1,80}pw[\s/:]{0,80}))|(?P<url>://))(?P<ip>(?<![0-9.])[0-2]?[0-9]{1,2}\.[0-2]?[0-9]{1,2}\.[0-2]?[0-9]{1,2}\.[0-2]?[0-9]{1,2}(?![0-9.]))((\s*[(])?|(?(variable)[\s,/]{1,80}|(?(url)[,]|[,/])))\s*\w[\w.-]{3,80}[\s,/]{1,80}(?P<value>(?(url)(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9_+=~!@#$%^&*;?-])){7,64}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x)|(?-i:(?P<e>[A-Z])|(?P<f>[a-z])|(?P<g>[0-9/_+=~!@#$%^&*;?-])){7,64}(?(e)(?(f)(?(g)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x)))(?:\s|[^/]|$)
122
122
  filter_type:
123
123
  - ValueAllowlistCheck
124
124
  - ValuePatternCheck(4)
@@ -134,7 +134,7 @@
134
134
  confidence: moderate
135
135
  type: pattern
136
136
  values:
137
- - (?P<ddash>--)?(?P<variable>\w*(?i:pa[as]swords?|passwd?|pwd|\bp/w|\bpw|비밀번호|비번|패스워드|암호))\s*?(?(ddash)[ =]|[:=/>-]{1,2})\s*(?P<quote>[\"'`]{1,8})?(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){4,31}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)(?P=quote)|(\s|$))
137
+ - (?P<ddash>--)?(?P<variable>\w*(?i:pa[as]swords?|passwd?|pwd|\bp/w|\bpw|비밀번호|비번|패스워드|암호))\s*?(?(ddash)[ =]|[:=/>-]{1,2})\s*(?P<quote>[\"'`]{1,8})?(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){4,64}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)(?P=quote)|(\s|$))
138
138
  - (?P<ddash>--)?(?P<variable>(?i:user\s*)?(?i:id|login|account|root|admin|user|name|wifi|role|host|default|계정|아이디))\s*?(?(ddash)[ =]|[ :=])\s*?(?P<value>\S+)
139
139
  filter_type:
140
140
  - ValueAllowlistCheck
@@ -157,7 +157,7 @@
157
157
  confidence: moderate
158
158
  type: pattern
159
159
  values:
160
- - (?P<variable>[\w.-]{0,80}(?i:(?P<id>\bid\b)|id\b|user|name|계정|아이디)[\w.-]{0,80}(?(id)[ :(/]{1,80}|[:(/]{1,80})(?i:pa[as]swo?r?ds?|pwd?|비밀번호|비번|패스워드|암호))\)?(\s*->\s*|[ =:)(/]{1,80}|\s+is\s+|\s+are\s+|\s*는\s*|\s*은\s*|\s*설정은\s*)\(?(?P<id_value>[\w.-]{2,31})[ :\(/\"',]{1,80}(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){4,31}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))
160
+ - (?P<variable>[\w.-]{0,80}(?i:(?P<id>\bid\b)|id\b|user|name|계정|아이디)[\w.-]{0,80}(?(id)[ :(/]{1,80}|[:(/]{1,80})(?i:pa[as]swo?r?ds?|pwd?|비밀번호|비번|패스워드|암호))\)?(\s*->\s*|[ =:)(/]{1,80}|\s+is\s+|\s+are\s+|\s*는\s*|\s*은\s*|\s*설정은\s*)\(?(?P<id_value>[\w.-]{2,64})[ :\(/\"',]{1,80}(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){4,64}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))
161
161
  filter_type:
162
162
  - ValueAllowlistCheck
163
163
  - ValuePatternCheck(4)
@@ -174,24 +174,6 @@
174
174
  target:
175
175
  - doc
176
176
 
177
- - name: SQL Password
178
- severity: medium
179
- confidence: weak
180
- type: pattern
181
- values:
182
- - (\\[nrt]|\b)(?i:(?P<variable>(CREATE|ALTER|SET\s{1,8}PASSWORD|INSERT(\s{1,8}IGNORE)?|UPDATE\s{1,8}[^\s;]{1,80})\s{1,8}(LOGIN|USER|ROLE|FOR|INTO|SET)\s{1,8}([^\s;]{1,80}\s{1,8}|VALUES\s*\(){1,8}(IDENTIFIED((\s{1,8}WITH\s{1,8}\S{1,80})?\s{1,8}(BY|AS))|(=|WITH)?\s*PASSWORD\b(\s*=)?)))\s*(?P<wrap>[(]\s*)?(?P<value_leftquote>((?P<esq>\\{1,8})?([\"'`]|&(quot|apos|#3[49]);)){1,4})?(?P<value>(?(value_leftquote)((?!(?P=value_leftquote))(?(esq)((?!(?P=esq)([\"'`]|&(quot|apos|#3[49]);)).)|((?!(?P=value_leftquote)).)))|(?!&(quot|apos|#3[49]);)(\\+([ tnr]|[^\s\"'`])|[^\s\"'`,;\\])){3,80})(?(value_leftquote)(?P<value_rightquote>(?<!\\)(?P=value_leftquote))|(?(wrap)[)]|[\s\"'`,;]))
183
- filter_type:
184
- - ValueAllowlistCheck
185
- - ValuePatternCheck
186
- min_line_len: 8
187
- required_substrings:
188
- - password
189
- - identified
190
- target:
191
- - doc
192
- - code
193
- use_ml: true
194
-
195
177
  - name: UUID
196
178
  severity: info
197
179
  confidence: strong
@@ -249,7 +231,7 @@
249
231
  - LineSpecificKeyCheck
250
232
  - ValuePatternCheck
251
233
  - ValueBase64PartCheck
252
- - ValueCoupleKeywordCheck(3)
234
+ - ValueMorphemesCheck
253
235
  required_substrings:
254
236
  - A
255
237
  min_line_len: 20
@@ -278,7 +260,7 @@
278
260
  type: pattern
279
261
  values:
280
262
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>dt0[A-Za-z]{1}[0-9]{2}\.[0-9A-Z]{24}\.[0-9A-Z]{64})(?![0-9A-Za-z_-])
281
- filter_type: GeneralPattern
263
+ filter_type: TokenPattern
282
264
  required_substrings:
283
265
  - dt0
284
266
  min_line_len: 90
@@ -308,7 +290,7 @@
308
290
  type: pattern
309
291
  values:
310
292
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>[0-9]{12,18}\|[0-9A-Za-z_-]{24,28})(?![0-9A-Za-z_+-])
311
- filter_type: GeneralPattern
293
+ filter_type: TokenPattern
312
294
  required_substrings:
313
295
  - "|"
314
296
  required_regex: "[0-9A-Za-z_/+-]{15}"
@@ -317,28 +299,13 @@
317
299
  - code
318
300
  - doc
319
301
 
320
- - name: Github Old Token
321
- severity: high
322
- confidence: moderate
323
- type: pattern
324
- values:
325
- - (?i)((git)[0-9A-Za-z_-]{0,80}(token|key|api)[0-9A-Za-z_-]{0,80}(\s)*(=|:|:=)(\s)*(["']?)(?P<value>[0-9a-z]{40})(["']?))
326
- filter_type: GeneralPattern
327
- use_ml: true
328
- required_substrings:
329
- - git
330
- min_line_len: 47
331
- target:
332
- - code
333
- - doc
334
-
335
302
  - name: Google API Key
336
303
  severity: high
337
304
  confidence: moderate
338
305
  type: pattern
339
306
  values:
340
307
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>AIza[0-9A-Za-z_-]{35})
341
- filter_type: GeneralPattern
308
+ filter_type: TokenPattern
342
309
  required_substrings:
343
310
  - AIza
344
311
  min_line_len: 39
@@ -367,7 +334,7 @@
367
334
  type: pattern
368
335
  values:
369
336
  - (?P<value>GOCSPX-[0-9A-Za-z_-]{28})(?![0-9A-Za-z_-])
370
- filter_type: GeneralPattern
337
+ filter_type: TokenPattern
371
338
  required_substrings:
372
339
  - GOCSPX-
373
340
  min_line_len: 40
@@ -381,7 +348,7 @@
381
348
  type: pattern
382
349
  values:
383
350
  - (?P<value>ya29\.[0-9A-Za-z_-]{22,8000})
384
- filter_type: GeneralPattern
351
+ filter_type: TokenPattern
385
352
  required_substrings:
386
353
  - ya29.
387
354
  min_line_len: 27
@@ -395,7 +362,7 @@
395
362
  type: pattern
396
363
  values:
397
364
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>1//0[0-9A-Za-z_-]{80,8000})
398
- filter_type: GeneralPattern
365
+ filter_type: TokenPattern
399
366
  required_substrings:
400
367
  - 1//0
401
368
  min_line_len: 84
@@ -409,7 +376,7 @@
409
376
  type: pattern
410
377
  values:
411
378
  - (?P<value>HRKU-([0-9A-Za-z_-]{60}|[0-9A-Fa-f]{8}(-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}))
412
- filter_type: GeneralPattern
379
+ filter_type: TokenPattern
413
380
  required_substrings:
414
381
  - HRKU-
415
382
  min_line_len: 41
@@ -423,7 +390,7 @@
423
390
  type: pattern
424
391
  values:
425
392
  - (?P<value>IGQVJ[=0-9A-Za-z_-]{100,8000})(?![=0-9A-Za-z_-])
426
- filter_type: GeneralPattern
393
+ filter_type: TokenPattern
427
394
  required_substrings:
428
395
  - IGQVJ
429
396
  min_line_len: 105
@@ -480,7 +447,7 @@
480
447
  - (?P<variable>\b[dk])[^0-9A-Za-z_-]{1,8}(?P<value>[0-9A-Za-z_-]{22,8000})(?![=0-9A-Za-z_-])
481
448
  filter_type:
482
449
  - ValuePatternCheck
483
- - ValueCoupleKeywordCheck(3)
450
+ - ValueMorphemesCheck
484
451
  required_substrings:
485
452
  - kty
486
453
  min_line_len: 8
@@ -494,7 +461,7 @@
494
461
  type: pattern
495
462
  values:
496
463
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>[0-9A-Za-z_-]{32}-us[0-9]{1,2})(?![0-9A-Za-z_-])
497
- filter_type: GeneralPattern
464
+ filter_type: TokenPattern
498
465
  required_substrings:
499
466
  - -us
500
467
  min_line_len: 35
@@ -507,10 +474,9 @@
507
474
  confidence: moderate
508
475
  type: pattern
509
476
  values:
510
- - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>key-[0-9A-Za-z_-]{32})(?![0-9A-Za-z_-])
511
- filter_type: GeneralPattern
512
- required_substrings:
513
- - key-
477
+ - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>key-[0-9a-f]{32}|[0-9a-f]{32}-[0-9a-f]{8}-[0-9a-f]{8})(?![0-9A-Za-z_-])
478
+ filter_type: TokenPattern
479
+ required_regex: "[0-9A-Za-z_/+-]{15}"
514
480
  min_line_len: 36
515
481
  target:
516
482
  - code
@@ -593,7 +559,7 @@
593
559
  type: pattern
594
560
  values:
595
561
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>SG\.[0-9A-Za-z_-]{16,32}\.[0-9A-Za-z_-]{16,64})
596
- filter_type: GeneralPattern
562
+ filter_type: TokenPattern
597
563
  required_substrings:
598
564
  - SG.
599
565
  min_line_len: 34
@@ -620,10 +586,11 @@
620
586
  confidence: strong
621
587
  type: pattern
622
588
  values:
623
- - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>xox[a-z]\-[0-9A-Za-z-]{10,250})(?![0-9A-Za-z_-])
624
- filter_type: GeneralPattern
589
+ - (?P<value>(xapp|xox[a-z])\-[0-9A-Za-z-]{10,250})(?![0-9A-Za-z_-])
590
+ filter_type: TokenPattern
625
591
  required_substrings:
626
592
  - xox
593
+ - xapp
627
594
  min_line_len: 15
628
595
  target:
629
596
  - code
@@ -681,7 +648,7 @@
681
648
  type: pattern
682
649
  values:
683
650
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>sq0[a-z]{3}-[0-9A-Za-z_-]{22}([0-9A-Za-z_-]{21})?)(?![0-9A-Za-z_-])
684
- filter_type: GeneralPattern
651
+ filter_type: TokenPattern
685
652
  required_substrings:
686
653
  - sq0
687
654
  min_line_len: 29
@@ -727,83 +694,13 @@
727
694
  - code
728
695
  - doc
729
696
 
730
- - name: CMD ConvertTo-SecureString
731
- severity: high
732
- confidence: moderate
733
- type: pattern
734
- values:
735
- - (?P<variable>ConvertTo-SecureString(\s\s*-(String|AsPlainText|Force))*)\s\s*(?P<value_leftquote>(\\?[\"']){1,3})?(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,800})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
736
- filter_type: GeneralKeyword
737
- use_ml: true
738
- required_substrings:
739
- - convertto-securestring
740
- min_line_len: 27
741
- target:
742
- - code
743
-
744
- - name: CMD Password
745
- severity: high
746
- confidence: moderate
747
- type: pattern
748
- values:
749
- - (^|\W|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<variable>-[A-Za-z_-]*(?i:pass(in|out|word|phrase)))(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(pass:)?(?!file:|env:|fd:)(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,80})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
750
- filter_type: GeneralKeyword
751
- use_ml: true
752
- required_substrings:
753
- - pass
754
- min_line_len: 12
755
- target:
756
- - code
757
-
758
- - name: CMD Token
759
- severity: high
760
- confidence: moderate
761
- type: pattern
762
- values:
763
- - (^|\W|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<variable>-[A-Za-z_-]*(?i:token))(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,4000})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
764
- filter_type: GeneralKeyword
765
- use_ml: true
766
- required_substrings:
767
- - token
768
- min_line_len: 12
769
- target:
770
- - code
771
-
772
- - name: CMD Secret
773
- severity: high
774
- confidence: moderate
775
- type: pattern
776
- values:
777
- - (^|\W|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<variable>-[A-Za-z_-]*(?i:secret)[A-Za-z_-]*)(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(pass:)?(?!file:|env:|fd:)(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,4000})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
778
- filter_type: GeneralKeyword
779
- use_ml: true
780
- required_substrings:
781
- - secret
782
- min_line_len: 12
783
- target:
784
- - code
785
-
786
- - name: URL Credentials
787
- severity: high
788
- confidence: moderate
789
- type: pattern
790
- values:
791
- - (?P<value_leftquote>[\"'])?(?P<variable>[+0-9A-Za-z-]{2,80}://)([^\s\'"<>\[\]^~`{|}:/]{0,80}:){1,3}(?P<value>[^\s\'"<>\[\]^~`{|}@:/]{3,80})@[^\s\'"<>\[\]^~`{|}@:/]{1,800}\\{0,8}(?P<value_rightquote>[\"'])?
792
- filter_type: UrlCredentialsGroup
793
- use_ml: true
794
- required_substrings:
795
- - ://
796
- min_line_len: 10
797
- target:
798
- - code
799
-
800
697
  - name: Telegram Bot API Token
801
698
  severity: high
802
699
  confidence: moderate
803
700
  type: pattern
804
701
  values:
805
702
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>[0-9]{8,10}:[0-9A-Za-z_-]{35})(?![0-9A-Za-z_-])
806
- filter_type: GeneralPattern
703
+ filter_type: TokenPattern
807
704
  required_substrings:
808
705
  - :AA
809
706
  min_line_len: 45
@@ -817,7 +714,7 @@
817
714
  type: pattern
818
715
  values:
819
716
  - (?P<value>pypi-[0-9A-Za-z_-]{150,255})
820
- filter_type: GeneralPattern
717
+ filter_type: TokenPattern
821
718
  required_substrings:
822
719
  - pypi-
823
720
  min_line_len: 155
@@ -825,6 +722,21 @@
825
722
  - code
826
723
  - doc
827
724
 
725
+ - name: NPM Token
726
+ severity: high
727
+ confidence: strong
728
+ type: pattern
729
+ values:
730
+ - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>npm_[0-9A-Za-z_-]{36,255})
731
+ filter_type:
732
+ - ValueGitHubCheck
733
+ required_substrings:
734
+ - npm_
735
+ min_line_len: 40
736
+ target:
737
+ - code
738
+ - doc
739
+
828
740
  - name: Github Classic Token
829
741
  severity: high
830
742
  confidence: strong
@@ -1071,12 +983,13 @@
1071
983
  confidence: strong
1072
984
  type: pattern
1073
985
  values:
1074
- - (?P<value>do[op]_v1_[a-f0-9]{64})(?![0-9A-Za-z_-])
986
+ - (?P<value>do[opr]_v1_[a-f0-9]{64})(?![0-9A-Za-z_-])
1075
987
  filter_type: TokenPattern
1076
988
  min_line_len: 71
1077
989
  required_substrings:
1078
990
  - doo_v1_
1079
991
  - dop_v1_
992
+ - dor_v1_
1080
993
  target:
1081
994
  - code
1082
995
  - doc
@@ -1260,7 +1173,7 @@
1260
1173
  - (?P<value>[0-9A-Za-z_-]{14}\.atlasv1\.[0-9A-Za-z_-]{67})(?![0-9A-Za-z_-])
1261
1174
  filter_type:
1262
1175
  - ValuePatternCheck
1263
- - ValueCoupleKeywordCheck(3)
1176
+ - ValueMorphemesCheck
1264
1177
  min_line_len: 90
1265
1178
  required_substrings:
1266
1179
  - .atlasv1.
@@ -1276,7 +1189,7 @@
1276
1189
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>S[ACNOPUX][A-Z2-7]{40,200})(?![=0-9A-Za-z_+-])
1277
1190
  min_line_len: 42
1278
1191
  filter_type:
1279
- - ValueCoupleKeywordCheck
1192
+ - ValueMorphemesCheck
1280
1193
  - ValuePatternCheck
1281
1194
  - ValueEntropyBase32Check
1282
1195
  - ValueBase32DataCheck
@@ -1301,7 +1214,7 @@
1301
1214
  values:
1302
1215
  - (?:^|[^0-9A-Za-z_+-]|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<value>([A-Z2-7]{16}){1,2})(?![=0-9A-Za-z_+-])
1303
1216
  filter_type:
1304
- - ValueCoupleKeywordCheck
1217
+ - ValueMorphemesCheck
1305
1218
  - ValuePatternCheck
1306
1219
  - ValueEntropyBase32Check
1307
1220
  - ValueBase32DataCheck
@@ -1322,7 +1235,7 @@
1322
1235
  min_line_len: 51
1323
1236
  filter_type:
1324
1237
  - ValuePatternCheck
1325
- - ValueCoupleKeywordCheck
1238
+ - ValueMorphemesCheck
1326
1239
  required_substrings:
1327
1240
  - T3BlbkFJ
1328
1241
  - 9wZW5BS
@@ -1340,7 +1253,7 @@
1340
1253
  min_line_len: 36
1341
1254
  filter_type:
1342
1255
  - ValuePatternCheck
1343
- - ValueCoupleKeywordCheck
1256
+ - ValueMorphemesCheck
1344
1257
  required_substrings:
1345
1258
  - dckr_pat_
1346
1259
  - dckr_oat_
@@ -1357,7 +1270,7 @@
1357
1270
  min_line_len: 85
1358
1271
  filter_type:
1359
1272
  - ValuePatternCheck
1360
- - ValueCoupleKeywordCheck
1273
+ - ValueMorphemesCheck
1361
1274
  required_substrings:
1362
1275
  - SWMTKN-1-
1363
1276
  target:
@@ -1373,7 +1286,7 @@
1373
1286
  min_line_len: 52
1374
1287
  filter_type:
1375
1288
  - ValuePatternCheck
1376
- - ValueCoupleKeywordCheck(3)
1289
+ - ValueMorphemesCheck
1377
1290
  required_substrings:
1378
1291
  - SWMKEY-1-
1379
1292
  target:
@@ -1389,7 +1302,7 @@
1389
1302
  min_line_len: 56
1390
1303
  filter_type:
1391
1304
  - ValuePatternCheck
1392
- - ValueCoupleKeywordCheck
1305
+ - ValueMorphemesCheck
1393
1306
  required_substrings:
1394
1307
  - WGdyb3FY
1395
1308
  - hncm9xW
@@ -1500,7 +1413,7 @@
1500
1413
  values:
1501
1414
  - (?P<variable>discord(?:app)?\.com/api/webhooks)(?P<value>/[0-9]{16,22}/[0-9A-Za-z_-]{40,100})
1502
1415
  filter_type:
1503
- - ValueCoupleKeywordCheck(3)
1416
+ - ValueMorphemesCheck
1504
1417
  required_substrings:
1505
1418
  - discordapp.com/api/webhooks
1506
1419
  - discord.com/api/webhooks
@@ -1541,6 +1454,22 @@
1541
1454
  - code
1542
1455
  - doc
1543
1456
 
1457
+ - name: Postman Credentials
1458
+ severity: medium
1459
+ confidence: moderate
1460
+ type: pattern
1461
+ values:
1462
+ - (?P<value>(PMAK-[0-9a-f]{24}-[0-9a-f]{34}|PMAT-[0-9A-Z]{26}))
1463
+ min_line_len: 29
1464
+ filter_type:
1465
+ - ValuePatternCheck
1466
+ required_substrings:
1467
+ - PMAK-
1468
+ - PMAT-
1469
+ target:
1470
+ - code
1471
+ - doc
1472
+
1544
1473
  - name: Basic Authorization
1545
1474
  severity: medium
1546
1475
  confidence: strong
@@ -1571,6 +1500,109 @@
1571
1500
  - code
1572
1501
  - doc
1573
1502
 
1503
+ - name: SQL Password
1504
+ severity: medium
1505
+ confidence: weak
1506
+ type: pattern
1507
+ values:
1508
+ - (\\[nrt]|\b)(?i:(?P<variable>(CREATE|ALTER|SET\s{1,8}PASSWORD|INSERT(\s{1,8}IGNORE)?|UPDATE\s{1,8}[^\s;]{1,80})\s{1,8}(LOGIN|USER|ROLE|FOR|INTO|SET)\s{1,8}([^\s;]{1,80}\s{1,8}|VALUES\s*\(){1,8}(IDENTIFIED((\s{1,8}WITH\s{1,8}\S{1,80})?\s{1,8}(BY|AS))|(=|WITH)?\s*PASSWORD\b(\s*=)?)))\s*(?P<wrap>[(]\s*)?(?P<value_leftquote>((?P<esq>\\{1,8})?([\"'`]|&(quot|apos|#3[49]);)){1,4})?(?P<value>(?(value_leftquote)((?!(?P=value_leftquote))(?(esq)((?!(?P=esq)([\"'`]|&(quot|apos|#3[49]);)).)|((?!(?P=value_leftquote)).)))|(?!&(quot|apos|#3[49]);)(\\+([ tnr]|[^\s\"'`])|[^\s\"'`,;\\])){3,80})(?(value_leftquote)(?P<value_rightquote>(?<!\\)(?P=value_leftquote))|(?(wrap)[)]|[\s\"'`,;]))
1509
+ filter_type:
1510
+ - ValueAllowlistCheck
1511
+ - ValuePatternCheck
1512
+ use_ml: true
1513
+ min_line_len: 8
1514
+ required_substrings:
1515
+ - password
1516
+ - identified
1517
+ target:
1518
+ - doc
1519
+ - code
1520
+
1521
+ - name: CURL User Password
1522
+ severity: high
1523
+ confidence: moderate
1524
+ type: pattern
1525
+ values:
1526
+ - (?P<variable>curl)\s.*(-[uU]|--(proxy-)?user)\s\s*(?P<value_leftquote>(\\*[\"']){1,3})?(?(value_leftquote)[^\"'\\:]|[^\s\"'\\:]){0,64}:(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,64})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
1527
+ filter_type: GeneralKeyword
1528
+ use_ml: true
1529
+ required_substrings:
1530
+ - curl
1531
+ min_line_len: 16
1532
+ target:
1533
+ - code
1534
+
1535
+ - name: CMD ConvertTo-SecureString
1536
+ severity: high
1537
+ confidence: moderate
1538
+ type: pattern
1539
+ values:
1540
+ - (?P<variable>ConvertTo-SecureString(\s\s*-(String|AsPlainText|Force))*)\s\s*(?P<value_leftquote>(\\?[\"']){1,3})?(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,800})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
1541
+ filter_type: GeneralKeyword
1542
+ use_ml: true
1543
+ required_substrings:
1544
+ - convertto-securestring
1545
+ min_line_len: 27
1546
+ target:
1547
+ - code
1548
+
1549
+ - name: CMD Password
1550
+ severity: high
1551
+ confidence: moderate
1552
+ type: pattern
1553
+ values:
1554
+ - (^|\W|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<variable>-[A-Za-z_-]*(?i:pass(in|out|word|phrase)))(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(pass:)?(?!file:|env:|fd:)(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,80})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
1555
+ filter_type: GeneralKeyword
1556
+ use_ml: true
1557
+ required_substrings:
1558
+ - pass
1559
+ min_line_len: 12
1560
+ target:
1561
+ - code
1562
+
1563
+ - name: CMD Token
1564
+ severity: high
1565
+ confidence: moderate
1566
+ type: pattern
1567
+ values:
1568
+ - (^|\W|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<variable>-[A-Za-z_-]*(?i:token|oauth2-bearer))(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,4000})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
1569
+ filter_type: GeneralKeyword
1570
+ use_ml: true
1571
+ required_substrings:
1572
+ - token
1573
+ - oauth2-bearer
1574
+ min_line_len: 12
1575
+ target:
1576
+ - code
1577
+
1578
+ - name: CMD Secret
1579
+ severity: high
1580
+ confidence: moderate
1581
+ type: pattern
1582
+ values:
1583
+ - (^|\W|\\[0abfnrtv]|(?:%|\\x)[0-9A-Fa-f]{2}|\\[0-7]{3}|\\[Uu][0-9A-Fa-f]{4}|\x1B\[[0-9;]{0,80}m)(?P<variable>-[A-Za-z_-]*(?i:secret)[A-Za-z_-]*)(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(pass:)?(?!file:|env:|fd:)(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,4000})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
1584
+ filter_type: GeneralKeyword
1585
+ use_ml: true
1586
+ required_substrings:
1587
+ - secret
1588
+ min_line_len: 12
1589
+ target:
1590
+ - code
1591
+
1592
+ - name: URL Credentials
1593
+ severity: high
1594
+ confidence: moderate
1595
+ type: pattern
1596
+ values:
1597
+ - (?P<value_leftquote>[\"'])?(?P<variable>[+0-9A-Za-z-]{2,80}://)([^\s\'"<>\[\]^~`{|}:/]{0,80}:){1,3}(?P<value>[^\s\'"<>\[\]^~`{|}@:/]{3,80})@[^\s\'"<>\[\]^~`{|}@:/]{1,800}\\{0,8}(?P<value_rightquote>[\"'])?
1598
+ filter_type: UrlCredentialsGroup
1599
+ use_ml: true
1600
+ required_substrings:
1601
+ - ://
1602
+ min_line_len: 10
1603
+ target:
1604
+ - code
1605
+
1574
1606
  - name: API
1575
1607
  severity: low
1576
1608
  confidence: moderate
@@ -1646,7 +1678,7 @@
1646
1678
  confidence: moderate
1647
1679
  type: keyword
1648
1680
  values:
1649
- - (?<!by)pass(?!ed|ing|ion|es|age|\s+[a-z]{3,80})|pw(d|\b)
1681
+ - (?<!by)pass(?!e[dns]|ing|ion|age|\s+[a-z]{3,80})|pw(d|\b)
1650
1682
  filter_type: PasswordKeyword
1651
1683
  use_ml: true
1652
1684
  min_line_len: 10
@@ -19,6 +19,8 @@ from credsweeper.utils.util import Util
19
19
 
20
20
  logger = logging.getLogger(__name__)
21
21
 
22
+ RULES_PATH = APP_PATH / "rules" / "config.yaml"
23
+
22
24
 
23
25
  class Scanner:
24
26
  """Advanced Credential Scanner base class.
@@ -66,11 +68,11 @@ class Scanner:
66
68
  return True
67
69
  return False
68
70
 
69
- def _set_rules_scanners(self, rule_path: Union[None, str, Path]) -> None:
71
+ def _set_rules_scanners(self, rules_path: Union[None, str, Path]) -> None:
70
72
  """Auxiliary method to fill rules, determine min_pattern_len and set scanners"""
71
- if rule_path is None:
72
- rule_path = APP_PATH / "rules" / "config.yaml"
73
- rule_templates = Util.yaml_load(rule_path)
73
+ if rules_path is None:
74
+ rules_path = RULES_PATH
75
+ rule_templates = Util.yaml_load(rules_path)
74
76
  if rule_templates and isinstance(rule_templates, list):
75
77
  rule_names = set()
76
78
  for rule_template in rule_templates:
@@ -98,7 +100,7 @@ class Scanner:
98
100
  logger.warning(f"Unknown rule type:{rule.rule_type}")
99
101
  self.rules_scanners.append((rule, self.get_scanner(rule)))
100
102
  else:
101
- raise RuntimeError(f"Wrong rules '{rule_templates}' were read from '{rule_path}'")
103
+ raise RuntimeError(f"Wrong rules '{rule_templates}' were read from '{rules_path}'")
102
104
 
103
105
  def _is_available(self, rule: Rule) -> bool:
104
106
  """separate the method to reduce complexity"""
@@ -153,8 +155,11 @@ class Scanner:
153
155
  target_line_stripped_len >= self.min_keyword_len and ( #
154
156
  '=' in target_line_stripped
155
157
  or ':' in target_line_stripped
156
- or "#define" in target_line_stripped
157
- or "%define" in target_line_stripped
158
+ or ("define" in target_line_stripped
159
+ and ('(' in target_line_stripped and ',' in target_line_stripped
160
+ or "#define" in target_line_stripped
161
+ or "%define" in target_line_stripped)
162
+ )
158
163
  or "%global" in target_line_stripped
159
164
  or "set" in target_line_stripped_lower
160
165
  or "%3d" in target_line_stripped_lower