credsweeper 1.11.5__py3-none-any.whl → 1.12.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 (141) hide show
  1. credsweeper/__init__.py +21 -15
  2. credsweeper/__main__.py +141 -35
  3. credsweeper/app.py +11 -11
  4. credsweeper/common/keyword_pattern.py +13 -15
  5. credsweeper/common/morpheme_checklist.txt +2 -0
  6. credsweeper/config/__init__.py +0 -1
  7. credsweeper/config/config.py +3 -3
  8. credsweeper/credentials/__init__.py +0 -5
  9. credsweeper/credentials/augment_candidates.py +1 -1
  10. credsweeper/credentials/candidate.py +1 -1
  11. credsweeper/credentials/credential_manager.py +1 -1
  12. credsweeper/credentials/line_data.py +22 -2
  13. credsweeper/deep_scanner/__init__.py +0 -1
  14. credsweeper/deep_scanner/abstract_scanner.py +3 -3
  15. credsweeper/deep_scanner/byte_scanner.py +1 -1
  16. credsweeper/deep_scanner/bzip2_scanner.py +2 -2
  17. credsweeper/deep_scanner/deb_scanner.py +1 -1
  18. credsweeper/deep_scanner/deep_scanner.py +3 -3
  19. credsweeper/deep_scanner/docx_scanner.py +1 -1
  20. credsweeper/deep_scanner/eml_scanner.py +1 -1
  21. credsweeper/deep_scanner/encoder_scanner.py +1 -1
  22. credsweeper/deep_scanner/gzip_scanner.py +2 -2
  23. credsweeper/deep_scanner/html_scanner.py +1 -1
  24. credsweeper/deep_scanner/jclass_scanner.py +1 -1
  25. credsweeper/deep_scanner/jks_scanner.py +1 -1
  26. credsweeper/deep_scanner/lang_scanner.py +1 -1
  27. credsweeper/deep_scanner/lzma_scanner.py +2 -2
  28. credsweeper/deep_scanner/mxfile_scanner.py +1 -1
  29. credsweeper/deep_scanner/pdf_scanner.py +1 -1
  30. credsweeper/deep_scanner/pkcs_scanner.py +2 -2
  31. credsweeper/deep_scanner/pptx_scanner.py +1 -1
  32. credsweeper/deep_scanner/rpm_scanner.py +1 -1
  33. credsweeper/deep_scanner/tar_scanner.py +2 -2
  34. credsweeper/deep_scanner/tmx_scanner.py +2 -2
  35. credsweeper/deep_scanner/xlsx_scanner.py +2 -2
  36. credsweeper/deep_scanner/xml_scanner.py +1 -1
  37. credsweeper/deep_scanner/zip_scanner.py +2 -2
  38. credsweeper/file_handler/__init__.py +0 -15
  39. credsweeper/file_handler/abstract_provider.py +3 -4
  40. credsweeper/file_handler/byte_content_provider.py +1 -1
  41. credsweeper/file_handler/content_provider.py +1 -1
  42. credsweeper/file_handler/data_content_provider.py +1 -1
  43. credsweeper/file_handler/diff_content_provider.py +133 -3
  44. credsweeper/file_handler/file_path_extractor.py +2 -2
  45. credsweeper/file_handler/files_provider.py +4 -4
  46. credsweeper/file_handler/patches_provider.py +7 -8
  47. credsweeper/file_handler/text_content_provider.py +1 -1
  48. credsweeper/filters/__init__.py +2 -3
  49. credsweeper/filters/filter.py +5 -3
  50. credsweeper/filters/group/__init__.py +0 -2
  51. credsweeper/filters/group/general_keyword.py +2 -2
  52. credsweeper/filters/group/general_pattern.py +2 -2
  53. credsweeper/filters/group/group.py +38 -36
  54. credsweeper/filters/group/password_keyword.py +9 -8
  55. credsweeper/filters/group/token_pattern.py +3 -3
  56. credsweeper/filters/group/url_credentials_group.py +8 -8
  57. credsweeper/filters/group/weird_base36_token.py +3 -3
  58. credsweeper/filters/group/weird_base64_token.py +3 -3
  59. credsweeper/filters/line_git_binary_check.py +5 -4
  60. credsweeper/filters/line_specific_key_check.py +6 -5
  61. credsweeper/filters/line_uue_part_check.py +5 -4
  62. credsweeper/filters/value_allowlist_check.py +6 -5
  63. credsweeper/filters/value_array_dictionary_check.py +8 -6
  64. credsweeper/filters/value_atlassian_token_check.py +6 -5
  65. credsweeper/filters/value_azure_token_check.py +6 -5
  66. credsweeper/filters/value_base32_data_check.py +8 -5
  67. credsweeper/filters/value_base64_data_check.py +6 -5
  68. credsweeper/filters/value_base64_encoded_pem_check.py +6 -5
  69. credsweeper/filters/value_base64_key_check.py +6 -5
  70. credsweeper/filters/value_base64_part_check.py +6 -5
  71. credsweeper/filters/value_basic_auth_check.py +37 -0
  72. credsweeper/filters/value_blocklist_check.py +6 -4
  73. credsweeper/filters/value_camel_case_check.py +6 -5
  74. credsweeper/filters/value_couple_keyword_check.py +6 -4
  75. credsweeper/filters/value_dictionary_keyword_check.py +6 -4
  76. credsweeper/filters/value_discord_bot_check.py +6 -5
  77. credsweeper/filters/value_entropy_base_check.py +6 -5
  78. credsweeper/filters/value_file_path_check.py +8 -5
  79. credsweeper/filters/value_github_check.py +5 -4
  80. credsweeper/filters/value_grafana_check.py +6 -5
  81. credsweeper/filters/value_grafana_service_check.py +5 -4
  82. credsweeper/filters/value_hex_number_check.py +5 -4
  83. credsweeper/filters/value_jfrog_token_check.py +6 -5
  84. credsweeper/filters/value_json_web_key_check.py +6 -5
  85. credsweeper/filters/value_json_web_token_check.py +6 -5
  86. credsweeper/filters/value_last_word_check.py +6 -4
  87. credsweeper/filters/{value_dictionary_value_length_check.py → value_length_check.py} +12 -6
  88. credsweeper/filters/value_method_check.py +5 -4
  89. credsweeper/filters/value_not_allowed_pattern_check.py +6 -5
  90. credsweeper/filters/value_not_part_encoded_check.py +4 -4
  91. credsweeper/filters/value_number_check.py +5 -4
  92. credsweeper/filters/value_pattern_check.py +61 -41
  93. credsweeper/filters/value_similarity_check.py +6 -4
  94. credsweeper/filters/value_split_keyword_check.py +5 -4
  95. credsweeper/filters/value_string_type_check.py +9 -7
  96. credsweeper/filters/value_token_base_check.py +5 -4
  97. credsweeper/filters/value_token_check.py +6 -5
  98. credsweeper/logger/__init__.py +0 -1
  99. credsweeper/logger/logger.py +1 -1
  100. credsweeper/ml_model/__init__.py +0 -1
  101. credsweeper/ml_model/features/__init__.py +1 -0
  102. credsweeper/ml_model/features/entropy_evaluation.py +1 -1
  103. credsweeper/ml_model/features/feature.py +1 -1
  104. credsweeper/ml_model/features/file_extension.py +1 -1
  105. credsweeper/ml_model/features/has_html_tag.py +2 -2
  106. credsweeper/ml_model/features/is_secret_numeric.py +1 -1
  107. credsweeper/ml_model/features/length_of_attribute.py +1 -1
  108. credsweeper/ml_model/features/morpheme_dense.py +15 -8
  109. credsweeper/ml_model/features/rule_name.py +1 -1
  110. credsweeper/ml_model/features/rule_severity.py +21 -0
  111. credsweeper/ml_model/features/search_in_attribute.py +1 -1
  112. credsweeper/ml_model/features/word_in.py +1 -1
  113. credsweeper/ml_model/features/word_in_path.py +5 -2
  114. credsweeper/ml_model/features/word_in_postamble.py +1 -1
  115. credsweeper/ml_model/features/word_in_preamble.py +1 -1
  116. credsweeper/ml_model/features/word_in_transition.py +1 -1
  117. credsweeper/ml_model/features/word_in_value.py +1 -1
  118. credsweeper/ml_model/features/word_in_variable.py +1 -1
  119. credsweeper/ml_model/ml_config.json +130 -24
  120. credsweeper/ml_model/ml_model.onnx +0 -0
  121. credsweeper/ml_model/ml_validator.py +3 -2
  122. credsweeper/rules/__init__.py +0 -1
  123. credsweeper/rules/config.yaml +116 -42
  124. credsweeper/rules/rule.py +4 -3
  125. credsweeper/scanner/__init__.py +0 -1
  126. credsweeper/scanner/scan_type/__init__.py +0 -5
  127. credsweeper/scanner/scan_type/multi_pattern.py +4 -4
  128. credsweeper/scanner/scan_type/pem_key_pattern.py +4 -4
  129. credsweeper/scanner/scan_type/scan_type.py +4 -4
  130. credsweeper/scanner/scan_type/single_pattern.py +4 -4
  131. credsweeper/scanner/scanner.py +12 -8
  132. credsweeper/secret/config.json +2 -2
  133. credsweeper/utils/__init__.py +0 -1
  134. credsweeper/utils/pem_key_detector.py +3 -3
  135. credsweeper/utils/util.py +3 -132
  136. {credsweeper-1.11.5.dist-info → credsweeper-1.12.0.dist-info}/METADATA +1 -1
  137. credsweeper-1.12.0.dist-info/RECORD +161 -0
  138. credsweeper-1.11.5.dist-info/RECORD +0 -159
  139. {credsweeper-1.11.5.dist-info → credsweeper-1.12.0.dist-info}/WHEEL +0 -0
  140. {credsweeper-1.11.5.dist-info → credsweeper-1.12.0.dist-info}/entry_points.txt +0 -0
  141. {credsweeper-1.11.5.dist-info → credsweeper-1.12.0.dist-info}/licenses/LICENSE +0 -0
@@ -3,14 +3,14 @@
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);)){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);)){0,4})\s*,\s*(default\s*=\s*)?([brufl@]{1,2}(?=\\*['\"&]))?(?P<lq>(\\*(['\"]|&(quot|apos);)){1,4})(?P<value>(.(?!(?P=lq))){4,80}.?)
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}.?)
7
7
  filter_type:
8
8
  - ValueAllowlistCheck
9
9
  - LineGitBinaryCheck
10
10
  - LineUUEPartCheck
11
11
  - ValueFilePathCheck
12
12
  - ValuePatternCheck(5)
13
- - ValueDictionaryValueLengthCheck(4,80)
13
+ - ValueLengthCheck(4,80)
14
14
  min_line_len: 8
15
15
  required_substrings:
16
16
  - pass
@@ -34,14 +34,14 @@
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?(?!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})))
38
38
  filter_type:
39
39
  - ValueAllowlistCheck
40
40
  - LineGitBinaryCheck
41
41
  - LineUUEPartCheck
42
42
  - ValueFilePathCheck
43
43
  - ValuePatternCheck(5)
44
- - ValueDictionaryValueLengthCheck(4,80)
44
+ - ValueLengthCheck(4,80)
45
45
  min_line_len: 8
46
46
  required_substrings:
47
47
  - pass
@@ -68,10 +68,10 @@
68
68
  confidence: moderate
69
69
  type: pattern
70
70
  values:
71
- - (?P<variable>[`'\"]?(?i:token|secret|key|키|암호화?|토큰)[`'\"]?)((\s)*[=:](\s)*)(?P<quote>[`'\"(])?(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){8,80}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)[)`'\"])
71
+ - (?P<variable>[\"'`]?(?i:token|secret|key|키|암호화?|토큰)[\"'`]?)((\s)*[=:](\s)*)(?P<quote>[\"'`(])?(?P<value>(?-i:(?P<a>[A-Z])|(?P<b>[a-z])|(?P<c>[0-9/_+=~!@#$%^&*;:?-])){8,80}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)[)\"'`])
72
72
  filter_type:
73
73
  - ValueAllowlistCheck
74
- - ValuePatternCheck
74
+ - ValuePatternCheck(4)
75
75
  - ValueEntropyBase64Check
76
76
  - ValueCoupleKeywordCheck
77
77
  min_line_len: 16
@@ -90,10 +90,10 @@
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,31}(?(a)(?(b)(?(c)(\S|$)|(?!x)x)|(?!x)x)|(?!x)x))(?(quote)[)\"'`])
94
94
  filter_type:
95
95
  - ValueAllowlistCheck
96
- - ValuePatternCheck
96
+ - ValuePatternCheck(4)
97
97
  - ValueDictionaryKeywordCheck
98
98
  - LineGitBinaryCheck
99
99
  - LineUUEPartCheck
@@ -121,7 +121,7 @@
121
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|[^/]|$)
122
122
  filter_type:
123
123
  - ValueAllowlistCheck
124
- - ValuePatternCheck
124
+ - ValuePatternCheck(4)
125
125
  - ValueDictionaryKeywordCheck
126
126
  min_line_len: 10
127
127
  required_substrings:
@@ -134,11 +134,11 @@
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,31}(?(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
141
- - ValuePatternCheck
141
+ - ValuePatternCheck(4)
142
142
  min_line_len: 10
143
143
  required_substrings:
144
144
  - pass
@@ -160,7 +160,7 @@
160
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))
161
161
  filter_type:
162
162
  - ValueAllowlistCheck
163
- - ValuePatternCheck
163
+ - ValuePatternCheck(4)
164
164
  - ValueDictionaryKeywordCheck
165
165
  min_line_len: 10
166
166
  required_substrings:
@@ -179,10 +179,10 @@
179
179
  confidence: weak
180
180
  type: pattern
181
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);)){1,4})?(?P<value>(?(value_leftquote)((?!(?P=value_leftquote))(?(esq)((?!(?P=esq)([`'\"]|&(quot|apos);)).)|((?!(?P=value_leftquote)).)))|(?!&(quot|apos);)(\\+([ tnr]|[^\s`'\"])|[^\s`'\",;\\])){3,80})(?(value_leftquote)(?P<value_rightquote>(?<!\\)(?P=value_leftquote))|(?(wrap)[)]|[\s`'\",;]))
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
183
  filter_type:
184
184
  - ValueAllowlistCheck
185
- - ValuePatternCheck(4)
185
+ - ValuePatternCheck
186
186
  min_line_len: 8
187
187
  required_substrings:
188
188
  - password
@@ -203,12 +203,26 @@
203
203
  - "-"
204
204
  required_regex: "[0-9A-Za-z_/+-]{15}"
205
205
  filter_type:
206
- - ValuePatternCheck
206
+ - ValuePatternCheck(4)
207
207
  use_ml: false
208
208
  target:
209
209
  - code
210
210
  - doc
211
211
 
212
+ - name: Akamai Credentials
213
+ severity: high
214
+ confidence: strong
215
+ type: pattern
216
+ values:
217
+ - (?P<value>akab-[0-9a-z]{16}-[0-9a-z]{16})(?!\.[0-9a-z-]{1,80}\.akamaiapis\.net)
218
+ filter_type: GeneralPattern
219
+ required_substrings:
220
+ - akab-
221
+ min_line_len: 38
222
+ target:
223
+ - code
224
+ - doc
225
+
212
226
  - name: AWS Client ID
213
227
  severity: high
214
228
  confidence: moderate
@@ -718,7 +732,7 @@
718
732
  confidence: moderate
719
733
  type: pattern
720
734
  values:
721
- - (^|\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}))
735
+ - (^|\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}))
722
736
  filter_type: GeneralKeyword
723
737
  use_ml: true
724
738
  required_substrings:
@@ -732,7 +746,7 @@
732
746
  confidence: moderate
733
747
  type: pattern
734
748
  values:
735
- - (^|\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}))
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:token))(\s|\\?[\"'],)\s*(?!-)(?P<value_leftquote>(\\?[\"']){1,3})?(?P<value>(?(value_leftquote)[^\"'\\]|[^\s\"'\\]){4,4000})(?(value_leftquote)(?P<value_rightquote>(\\?[\"']){1,3}))
736
750
  filter_type: GeneralKeyword
737
751
  use_ml: true
738
752
  required_substrings:
@@ -746,7 +760,7 @@
746
760
  confidence: moderate
747
761
  type: pattern
748
762
  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: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}))
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: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}))
750
764
  filter_type: GeneralKeyword
751
765
  use_ml: true
752
766
  required_substrings:
@@ -1058,7 +1072,7 @@
1058
1072
  confidence: moderate
1059
1073
  type: pattern
1060
1074
  values:
1061
- - (?:^|[^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>sl.[0-9A-Za-z_-]{135})(?![0-9A-Za-z_-])
1075
+ - (?:^|[^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>sl\.(u\.)?[0-9A-Za-z_-]{135})(?![0-9A-Za-z_-])
1062
1076
  filter_type: TokenPattern
1063
1077
  min_line_len: 138
1064
1078
  required_substrings:
@@ -1240,6 +1254,32 @@
1240
1254
  - code
1241
1255
  - doc
1242
1256
 
1257
+ - name: NKEY Seed
1258
+ severity: high
1259
+ confidence: weak
1260
+ type: pattern
1261
+ values:
1262
+ - (?:^|[^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_+-])
1263
+ min_line_len: 42
1264
+ filter_type:
1265
+ - ValueCoupleKeywordCheck
1266
+ - ValuePatternCheck
1267
+ - ValueEntropyBase32Check
1268
+ - ValueBase32DataCheck
1269
+ - ValueTokenBase32Check
1270
+ required_substrings:
1271
+ - SA
1272
+ - SC
1273
+ - SN
1274
+ - SO
1275
+ - SP
1276
+ - SU
1277
+ - SX
1278
+ required_regex: "[0-9A-Za-z_/+-]{15}"
1279
+ target:
1280
+ - code
1281
+ - doc
1282
+
1243
1283
  - name: Jira 2FA
1244
1284
  severity: info
1245
1285
  confidence: weak
@@ -1276,6 +1316,23 @@
1276
1316
  - code
1277
1317
  - doc
1278
1318
 
1319
+ - name: Docker Access Token
1320
+ severity: high
1321
+ confidence: strong
1322
+ type: pattern
1323
+ values:
1324
+ - (?P<value>dckr_[op]at_[0-9A-Za-z_-]{27,32})
1325
+ min_line_len: 36
1326
+ filter_type:
1327
+ - ValuePatternCheck
1328
+ - ValueEntropyBase64Check
1329
+ required_substrings:
1330
+ - dckr_pat_
1331
+ - dckr_oat_
1332
+ target:
1333
+ - code
1334
+ - doc
1335
+
1279
1336
  - name: Docker Swarm Token
1280
1337
  severity: high
1281
1338
  confidence: strong
@@ -1331,7 +1388,7 @@
1331
1388
  - (?P<value>tvly-[0-9A-Za-z_-]{32,40})(?![0-9A-Za-z_-])
1332
1389
  min_line_len: 37
1333
1390
  filter_type:
1334
- - ValuePatternCheck(5)
1391
+ - ValuePatternCheck
1335
1392
  - ValueEntropyBase64Check
1336
1393
  required_substrings:
1337
1394
  - tvly-
@@ -1347,7 +1404,7 @@
1347
1404
  - (?P<value>sntrys_eyJ[0-9A-Za-z_-]{80,8000}=*([0-9A-Za-z_-]{32,256})?)(?![0-9A-Za-z_-])
1348
1405
  min_line_len: 37
1349
1406
  filter_type:
1350
- - ValuePatternCheck(5)
1407
+ - ValuePatternCheck
1351
1408
  required_substrings:
1352
1409
  - sntrys_eyJ
1353
1410
  target:
@@ -1362,7 +1419,7 @@
1362
1419
  - (?P<value>sntryu_[0-9a-f]{64})(?![0-9A-Za-z_-])
1363
1420
  min_line_len: 37
1364
1421
  filter_type:
1365
- - ValuePatternCheck(5)
1422
+ - ValuePatternCheck
1366
1423
  required_substrings:
1367
1424
  - sntryu_
1368
1425
  target:
@@ -1422,7 +1479,7 @@
1422
1479
  confidence: weak
1423
1480
  type: pattern
1424
1481
  values:
1425
- - (?:^|[^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>00D[0-9A-Za-z]{9,15}(![.0-9A-Za-z_-]{24,200})?)(?![0-9A-Za-z_-])
1482
+ - (?:^|[^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>(3MVG[0-9A-Za-z_.]{24,200}|00D[0-9A-Za-z]{9,15}(![0-9A-Za-z_.]{24,200})?))(?![0-9A-Za-z_.])
1426
1483
  min_line_len: 12
1427
1484
  filter_type:
1428
1485
  - ValuePatternCheck(9)
@@ -1430,49 +1487,66 @@
1430
1487
  - ValueBase64PartCheck
1431
1488
  required_substrings:
1432
1489
  - 00D
1490
+ - 3MVG
1433
1491
  target:
1434
1492
  - code
1435
1493
  - doc
1436
1494
 
1437
- - name: API
1495
+ - name: Basic Authorization
1496
+ severity: medium
1497
+ confidence: strong
1498
+ type: pattern
1499
+ values:
1500
+ - (?P<variable>(?i:basic))(?P<separator>\s+)(?P<value>[=0-9A-Za-z_/+-]{8,8000})(?![0-9A-Za-z_/+-])
1501
+ min_line_len: 18
1502
+ filter_type:
1503
+ - ValueBasicAuthCheck
1504
+ required_substrings:
1505
+ - basic
1506
+ target:
1507
+ - code
1508
+ - doc
1509
+
1510
+ - name: Bearer Authorization
1438
1511
  severity: medium
1439
1512
  confidence: moderate
1440
- type: keyword
1513
+ type: pattern
1441
1514
  values:
1442
- - api(?!tal)
1515
+ - (?P<variable>(?i:bearer|ntlm))(?P<separator>\s+)(?P<value>[.0-9A-Za-z_/+-]{32,8000}=*)(?![0-9A-Za-z_/+-])
1516
+ min_line_len: 37
1443
1517
  filter_type: GeneralKeyword
1444
- use_ml: true
1445
- min_line_len: 11
1446
1518
  required_substrings:
1447
- - api
1519
+ - bearer
1520
+ - ntlm
1448
1521
  target:
1449
1522
  - code
1523
+ - doc
1450
1524
 
1451
- - name: Auth
1452
- severity: medium
1525
+ - name: API
1526
+ severity: low
1453
1527
  confidence: moderate
1454
1528
  type: keyword
1455
1529
  values:
1456
- - auth(?!ors?(?!i[tz]))
1530
+ - api(?!tal)
1457
1531
  filter_type: GeneralKeyword
1458
1532
  use_ml: true
1459
- min_line_len: 12
1533
+ min_line_len: 11
1460
1534
  required_substrings:
1461
- - auth
1535
+ - api
1462
1536
  target:
1463
1537
  - code
1464
1538
 
1465
- - name: Certificate
1539
+ - name: Auth
1466
1540
  severity: medium
1467
1541
  confidence: moderate
1468
1542
  type: keyword
1469
1543
  values:
1470
- - cert
1544
+ - auth(?!ors?(?!i[tz]))
1471
1545
  filter_type: GeneralKeyword
1472
1546
  use_ml: true
1473
1547
  min_line_len: 12
1474
1548
  required_substrings:
1475
- - cert
1549
+ - auth
1476
1550
  target:
1477
1551
  - code
1478
1552
 
@@ -1491,7 +1565,7 @@
1491
1565
  - code
1492
1566
 
1493
1567
  - name: Key
1494
- severity: medium
1568
+ severity: high
1495
1569
  confidence: moderate
1496
1570
  type: keyword
1497
1571
  values:
@@ -1505,7 +1579,7 @@
1505
1579
  - code
1506
1580
 
1507
1581
  - name: Nonce
1508
- severity: medium
1582
+ severity: low
1509
1583
  confidence: moderate
1510
1584
  type: keyword
1511
1585
  values:
@@ -1519,7 +1593,7 @@
1519
1593
  - code
1520
1594
 
1521
1595
  - name: Password
1522
- severity: medium
1596
+ severity: high
1523
1597
  confidence: moderate
1524
1598
  type: keyword
1525
1599
  values:
@@ -1534,7 +1608,7 @@
1534
1608
  - code
1535
1609
 
1536
1610
  - name: Salt
1537
- severity: medium
1611
+ severity: low
1538
1612
  confidence: moderate
1539
1613
  type: keyword
1540
1614
  values:
@@ -1562,7 +1636,7 @@
1562
1636
  - code
1563
1637
 
1564
1638
  - name: Token
1565
- severity: medium
1639
+ severity: high
1566
1640
  confidence: moderate
1567
1641
  type: keyword
1568
1642
  values:
credsweeper/rules/rule.py CHANGED
@@ -7,9 +7,10 @@ from typing import Dict, List, Optional, Union, Set
7
7
  from credsweeper import filters
8
8
  from credsweeper.common.constants import RuleType, Severity, MAX_LINE_LENGTH, Confidence
9
9
  from credsweeper.common.keyword_pattern import KeywordPattern
10
- from credsweeper.config import Config
11
- from credsweeper.filters import Filter, group
12
- from credsweeper.filters.group import Group
10
+ from credsweeper.config.config import Config
11
+ from credsweeper.filters import group
12
+ from credsweeper.filters.filter import Filter
13
+ from credsweeper.filters.group.group import Group
13
14
 
14
15
  logger = logging.getLogger(__name__)
15
16
 
@@ -1 +0,0 @@
1
- from credsweeper.scanner.scanner import Scanner
@@ -1,5 +0,0 @@
1
- from credsweeper.scanner.scan_type.scan_type import ScanType # isort:skip
2
-
3
- from credsweeper.scanner.scan_type.multi_pattern import MultiPattern
4
- from credsweeper.scanner.scan_type.pem_key_pattern import PemKeyPattern
5
- from credsweeper.scanner.scan_type.single_pattern import SinglePattern
@@ -1,11 +1,11 @@
1
1
  from typing import List
2
2
 
3
3
  from credsweeper.common.constants import RuleType
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import Candidate
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.candidate import Candidate
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.rules import Rule
8
- from credsweeper.scanner.scan_type import ScanType
7
+ from credsweeper.rules.rule import Rule
8
+ from credsweeper.scanner.scan_type.scan_type import ScanType
9
9
 
10
10
 
11
11
  class MultiPattern(ScanType):
@@ -2,11 +2,11 @@ import logging
2
2
  from typing import List
3
3
 
4
4
  from credsweeper.common.constants import RuleType
5
- from credsweeper.config import Config
6
- from credsweeper.credentials import Candidate
5
+ from credsweeper.config.config import Config
6
+ from credsweeper.credentials.candidate import Candidate
7
7
  from credsweeper.file_handler.analysis_target import AnalysisTarget
8
- from credsweeper.rules import Rule
9
- from credsweeper.scanner.scan_type import ScanType
8
+ from credsweeper.rules.rule import Rule
9
+ from credsweeper.scanner.scan_type.scan_type import ScanType
10
10
  from credsweeper.utils.pem_key_detector import PemKeyDetector
11
11
 
12
12
  logger = logging.getLogger(__name__)
@@ -4,11 +4,11 @@ from abc import ABC, abstractmethod
4
4
  from typing import List
5
5
 
6
6
  from credsweeper.common.constants import RuleType, MIN_DATA_LEN
7
- from credsweeper.config import Config
8
- from credsweeper.credentials import Candidate, LineData
7
+ from credsweeper.config.config import Config
8
+ from credsweeper.credentials.candidate import Candidate, LineData
9
9
  from credsweeper.file_handler.analysis_target import AnalysisTarget
10
- from credsweeper.filters import Filter
11
- from credsweeper.rules import Rule
10
+ from credsweeper.filters.filter import Filter
11
+ from credsweeper.rules.rule import Rule
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -1,10 +1,10 @@
1
1
  from typing import List
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import Candidate
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.candidate import Candidate
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.rules import Rule
7
- from credsweeper.scanner.scan_type import ScanType
6
+ from credsweeper.rules.rule import Rule
7
+ from credsweeper.scanner.scan_type.scan_type import ScanType
8
8
 
9
9
 
10
10
  class SinglePattern(ScanType):
@@ -6,13 +6,16 @@ from typing import List, Type, Tuple, Union, Dict, Generator, Set
6
6
  from credsweeper.app import APP_PATH
7
7
  from credsweeper.common.constants import RuleType, MIN_VARIABLE_LENGTH, MIN_SEPARATOR_LENGTH, MIN_VALUE_LENGTH, \
8
8
  MAX_LINE_LENGTH, PEM_BEGIN_PATTERN
9
- from credsweeper.config import Config
10
- from credsweeper.credentials import Candidate
9
+ from credsweeper.config.config import Config
10
+ from credsweeper.credentials.candidate import Candidate
11
11
  from credsweeper.file_handler.analysis_target import AnalysisTarget
12
12
  from credsweeper.file_handler.content_provider import ContentProvider
13
- from credsweeper.rules import Rule
14
- from credsweeper.scanner.scan_type import PemKeyPattern, ScanType, SinglePattern, MultiPattern
15
- from credsweeper.utils import Util
13
+ from credsweeper.rules.rule import Rule
14
+ from credsweeper.scanner.scan_type.multi_pattern import MultiPattern
15
+ from credsweeper.scanner.scan_type.pem_key_pattern import PemKeyPattern
16
+ from credsweeper.scanner.scan_type.scan_type import ScanType
17
+ from credsweeper.scanner.scan_type.single_pattern import SinglePattern
18
+ from credsweeper.utils.util import Util
16
19
 
17
20
  logger = logging.getLogger(__name__)
18
21
 
@@ -142,16 +145,19 @@ class Scanner:
142
145
  # Trim string from outer spaces to make future `x in str` checks faster
143
146
  target_line_stripped = target.line_strip
144
147
  target_line_stripped_len = target.line_strip_len
148
+ # use lower case for required substring
149
+ target_line_stripped_lower = target.line_lower_strip
145
150
 
146
151
  # "cache" - YAPF and pycharm formatters ...
147
152
  matched_keyword = \
148
153
  target_line_stripped_len >= self.min_keyword_len and ( #
149
154
  '=' in target_line_stripped
150
155
  or ':' in target_line_stripped
151
- or "set" in target_line_stripped
152
156
  or "#define" in target_line_stripped
153
157
  or "%define" in target_line_stripped
154
158
  or "%global" in target_line_stripped
159
+ or "set" in target_line_stripped_lower
160
+ or "%3d" in target_line_stripped_lower
155
161
  ) #
156
162
  matched_pem_key = \
157
163
  target_line_stripped_len >= self.min_pem_key_len \
@@ -165,8 +171,6 @@ class Scanner:
165
171
  target.line_num)
166
172
  continue
167
173
 
168
- # use lower case for required substring
169
- target_line_stripped_lower = target.line_lower_strip
170
174
  # cached value to skip the same regex verifying
171
175
  matched_regex: Dict[re.Pattern, bool] = {}
172
176
 
@@ -164,8 +164,8 @@
164
164
  "tizen"
165
165
  ],
166
166
  "check_for_literals": true,
167
- "min_pattern_value_length": 12,
168
- "min_keyword_value_length": 4,
167
+ "max_password_value_length": 31,
168
+ "max_url_cred_value_length": 80,
169
169
  "line_data_output": [
170
170
  "line",
171
171
  "line_num",
@@ -1 +0,0 @@
1
- from credsweeper.utils.util import DiffRowData, Util, DiffDict
@@ -5,10 +5,10 @@ import string
5
5
  from typing import List
6
6
 
7
7
  from credsweeper.common.constants import PEM_BEGIN_PATTERN, PEM_END_PATTERN, Chars
8
- from credsweeper.config import Config
9
- from credsweeper.credentials import LineData
8
+ from credsweeper.config.config import Config
9
+ from credsweeper.credentials.line_data import LineData
10
10
  from credsweeper.file_handler.analysis_target import AnalysisTarget
11
- from credsweeper.utils import Util
11
+ from credsweeper.utils.util import Util
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14