credsweeper 1.11.4__py3-none-any.whl → 1.11.6__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 (138) hide show
  1. credsweeper/__init__.py +21 -15
  2. credsweeper/__main__.py +141 -35
  3. credsweeper/app.py +11 -11
  4. credsweeper/config/__init__.py +0 -1
  5. credsweeper/config/config.py +1 -1
  6. credsweeper/credentials/__init__.py +0 -5
  7. credsweeper/credentials/augment_candidates.py +1 -1
  8. credsweeper/credentials/candidate.py +1 -1
  9. credsweeper/credentials/credential_manager.py +1 -1
  10. credsweeper/credentials/line_data.py +2 -2
  11. credsweeper/deep_scanner/__init__.py +0 -1
  12. credsweeper/deep_scanner/abstract_scanner.py +272 -17
  13. credsweeper/deep_scanner/byte_scanner.py +1 -1
  14. credsweeper/deep_scanner/bzip2_scanner.py +2 -2
  15. credsweeper/deep_scanner/deb_scanner.py +34 -27
  16. credsweeper/deep_scanner/deep_scanner.py +37 -250
  17. credsweeper/deep_scanner/docx_scanner.py +1 -1
  18. credsweeper/deep_scanner/eml_scanner.py +1 -1
  19. credsweeper/deep_scanner/encoder_scanner.py +1 -1
  20. credsweeper/deep_scanner/gzip_scanner.py +2 -2
  21. credsweeper/deep_scanner/html_scanner.py +1 -1
  22. credsweeper/deep_scanner/jclass_scanner.py +74 -0
  23. credsweeper/deep_scanner/jks_scanner.py +1 -1
  24. credsweeper/deep_scanner/lang_scanner.py +1 -1
  25. credsweeper/deep_scanner/lzma_scanner.py +2 -2
  26. credsweeper/deep_scanner/mxfile_scanner.py +1 -1
  27. credsweeper/deep_scanner/patch_scanner.py +48 -0
  28. credsweeper/deep_scanner/pdf_scanner.py +1 -1
  29. credsweeper/deep_scanner/pkcs_scanner.py +41 -0
  30. credsweeper/deep_scanner/pptx_scanner.py +1 -1
  31. credsweeper/deep_scanner/rpm_scanner.py +49 -0
  32. credsweeper/deep_scanner/sqlite3_scanner.py +79 -0
  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 +2 -3
  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 +10 -8
  47. credsweeper/file_handler/text_content_provider.py +1 -1
  48. credsweeper/filters/__init__.py +2 -2
  49. credsweeper/filters/filter.py +2 -2
  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 +16 -5
  54. credsweeper/filters/group/password_keyword.py +2 -2
  55. credsweeper/filters/group/token_pattern.py +2 -2
  56. credsweeper/filters/group/url_credentials_group.py +2 -2
  57. credsweeper/filters/group/weird_base36_token.py +2 -2
  58. credsweeper/filters/group/weird_base64_token.py +2 -2
  59. credsweeper/filters/line_git_binary_check.py +3 -3
  60. credsweeper/filters/line_specific_key_check.py +4 -4
  61. credsweeper/filters/line_uue_part_check.py +3 -3
  62. credsweeper/filters/value_allowlist_check.py +4 -4
  63. credsweeper/filters/value_array_dictionary_check.py +3 -3
  64. credsweeper/filters/value_atlassian_token_check.py +4 -4
  65. credsweeper/filters/value_azure_token_check.py +4 -4
  66. credsweeper/filters/value_base32_data_check.py +4 -4
  67. credsweeper/filters/value_base64_data_check.py +4 -4
  68. credsweeper/filters/value_base64_encoded_pem_check.py +4 -4
  69. credsweeper/filters/value_base64_key_check.py +13 -18
  70. credsweeper/filters/value_base64_part_check.py +4 -4
  71. credsweeper/filters/value_basic_auth_check.py +36 -0
  72. credsweeper/filters/value_blocklist_check.py +3 -3
  73. credsweeper/filters/value_camel_case_check.py +4 -4
  74. credsweeper/filters/value_couple_keyword_check.py +3 -3
  75. credsweeper/filters/value_dictionary_keyword_check.py +3 -3
  76. credsweeper/filters/value_dictionary_value_length_check.py +3 -3
  77. credsweeper/filters/value_discord_bot_check.py +4 -4
  78. credsweeper/filters/value_entropy_base_check.py +4 -4
  79. credsweeper/filters/value_file_path_check.py +5 -4
  80. credsweeper/filters/value_github_check.py +3 -3
  81. credsweeper/filters/value_grafana_check.py +4 -4
  82. credsweeper/filters/value_grafana_service_check.py +3 -3
  83. credsweeper/filters/value_hex_number_check.py +3 -3
  84. credsweeper/filters/value_jfrog_token_check.py +4 -4
  85. credsweeper/filters/value_json_web_key_check.py +37 -0
  86. credsweeper/filters/value_json_web_token_check.py +4 -4
  87. credsweeper/filters/value_last_word_check.py +3 -3
  88. credsweeper/filters/value_method_check.py +3 -3
  89. credsweeper/filters/value_not_allowed_pattern_check.py +4 -4
  90. credsweeper/filters/value_not_part_encoded_check.py +3 -3
  91. credsweeper/filters/value_number_check.py +3 -3
  92. credsweeper/filters/value_pattern_check.py +3 -3
  93. credsweeper/filters/value_similarity_check.py +3 -3
  94. credsweeper/filters/value_split_keyword_check.py +3 -3
  95. credsweeper/filters/value_string_type_check.py +3 -3
  96. credsweeper/filters/value_token_base_check.py +3 -3
  97. credsweeper/filters/value_token_check.py +3 -3
  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/entropy_evaluation.py +1 -1
  102. credsweeper/ml_model/features/feature.py +1 -1
  103. credsweeper/ml_model/features/file_extension.py +1 -1
  104. credsweeper/ml_model/features/has_html_tag.py +2 -2
  105. credsweeper/ml_model/features/is_secret_numeric.py +1 -1
  106. credsweeper/ml_model/features/length_of_attribute.py +1 -1
  107. credsweeper/ml_model/features/morpheme_dense.py +1 -1
  108. credsweeper/ml_model/features/rule_name.py +1 -1
  109. credsweeper/ml_model/features/search_in_attribute.py +1 -1
  110. credsweeper/ml_model/features/word_in.py +1 -1
  111. credsweeper/ml_model/features/word_in_path.py +1 -1
  112. credsweeper/ml_model/features/word_in_postamble.py +1 -1
  113. credsweeper/ml_model/features/word_in_preamble.py +1 -1
  114. credsweeper/ml_model/features/word_in_transition.py +1 -1
  115. credsweeper/ml_model/features/word_in_value.py +1 -1
  116. credsweeper/ml_model/features/word_in_variable.py +1 -1
  117. credsweeper/ml_model/ml_validator.py +3 -2
  118. credsweeper/rules/__init__.py +0 -1
  119. credsweeper/rules/config.yaml +114 -25
  120. credsweeper/rules/rule.py +4 -3
  121. credsweeper/scanner/__init__.py +0 -1
  122. credsweeper/scanner/scan_type/__init__.py +0 -5
  123. credsweeper/scanner/scan_type/multi_pattern.py +5 -6
  124. credsweeper/scanner/scan_type/pem_key_pattern.py +4 -4
  125. credsweeper/scanner/scan_type/scan_type.py +4 -4
  126. credsweeper/scanner/scan_type/single_pattern.py +4 -4
  127. credsweeper/scanner/scanner.py +8 -5
  128. credsweeper/secret/config.json +6 -6
  129. credsweeper/utils/__init__.py +0 -1
  130. credsweeper/utils/pem_key_detector.py +5 -5
  131. credsweeper/utils/util.py +143 -206
  132. {credsweeper-1.11.4.dist-info → credsweeper-1.11.6.dist-info}/METADATA +3 -6
  133. credsweeper-1.11.6.dist-info/RECORD +160 -0
  134. credsweeper/deep_scanner/pkcs12_scanner.py +0 -45
  135. credsweeper-1.11.4.dist-info/RECORD +0 -154
  136. {credsweeper-1.11.4.dist-info → credsweeper-1.11.6.dist-info}/WHEEL +0 -0
  137. {credsweeper-1.11.4.dist-info → credsweeper-1.11.6.dist-info}/entry_points.txt +0 -0
  138. {credsweeper-1.11.4.dist-info → credsweeper-1.11.6.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,10 @@
1
1
  from credsweeper.common.constants import GroupType
2
- from credsweeper.config import Config
2
+ from credsweeper.config.config import Config
3
3
  from credsweeper.filters import (ValueAllowlistCheck, ValueArrayDictionaryCheck, ValueBlocklistCheck,
4
4
  ValueCamelCaseCheck, ValueDictionaryValueLengthCheck, ValueFilePathCheck,
5
5
  ValueLastWordCheck, ValueMethodCheck, ValueNotAllowedPatternCheck, ValuePatternCheck,
6
6
  ValueStringTypeCheck, ValueTokenCheck)
7
- from credsweeper.filters.group import Group
7
+ from credsweeper.filters.group.group import Group
8
8
 
9
9
 
10
10
  class UrlCredentialsGroup(Group):
@@ -1,8 +1,8 @@
1
1
  from credsweeper.common.constants import GroupType
2
- from credsweeper.config import Config
2
+ from credsweeper.config.config import Config
3
3
  from credsweeper.filters import ValueCoupleKeywordCheck, ValuePatternCheck, ValueNumberCheck, ValueEntropyBase36Check, \
4
4
  ValueTokenBase36Check
5
- from credsweeper.filters.group import Group
5
+ from credsweeper.filters.group.group import Group
6
6
 
7
7
 
8
8
  class WeirdBase36Token(Group):
@@ -1,9 +1,9 @@
1
1
  from credsweeper.common.constants import GroupType
2
- from credsweeper.config import Config
2
+ from credsweeper.config.config import Config
3
3
  from credsweeper.filters import ValueCoupleKeywordCheck, ValueNotPartEncodedCheck, \
4
4
  ValueBase64DataCheck, ValueEntropyBase64Check, ValuePatternCheck, ValueNumberCheck, ValueTokenBase64Check, \
5
5
  ValueBase64PartCheck
6
- from credsweeper.filters.group import Group
6
+ from credsweeper.filters.group.group import Group
7
7
 
8
8
 
9
9
  class WeirdBase64Token(Group):
@@ -2,10 +2,10 @@ import base64
2
2
  import contextlib
3
3
  import re
4
4
 
5
- from credsweeper.config import Config
6
- from credsweeper.credentials import LineData
5
+ from credsweeper.config.config import Config
6
+ from credsweeper.credentials.line_data import LineData
7
7
  from credsweeper.file_handler.analysis_target import AnalysisTarget
8
- from credsweeper.filters import Filter
8
+ from credsweeper.filters.filter import Filter
9
9
 
10
10
 
11
11
  class LineGitBinaryCheck(Filter):
@@ -1,11 +1,11 @@
1
1
  import re
2
2
 
3
3
  from credsweeper.common.constants import ML_HUNK
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
8
- from credsweeper.utils import Util
7
+ from credsweeper.filters.filter import Filter
8
+ from credsweeper.utils.util import Util
9
9
 
10
10
 
11
11
  class LineSpecificKeyCheck(Filter):
@@ -1,9 +1,9 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
6
+ from credsweeper.filters.filter import Filter
7
7
 
8
8
 
9
9
  class LineUUEPartCheck(Filter):
@@ -1,10 +1,10 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
7
- from credsweeper.utils import Util
6
+ from credsweeper.filters.filter import Filter
7
+ from credsweeper.utils.util import Util
8
8
 
9
9
 
10
10
  class ValueAllowlistCheck(Filter):
@@ -1,9 +1,9 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
6
+ from credsweeper.filters.filter import Filter
7
7
 
8
8
 
9
9
  class ValueArrayDictionaryCheck(Filter):
@@ -2,11 +2,11 @@ import binascii
2
2
  import contextlib
3
3
 
4
4
  from credsweeper.common.constants import LATIN_1, ASCII
5
- from credsweeper.config import Config
6
- from credsweeper.credentials import LineData
5
+ from credsweeper.config.config import Config
6
+ from credsweeper.credentials.line_data import LineData
7
7
  from credsweeper.file_handler.analysis_target import AnalysisTarget
8
- from credsweeper.filters import Filter
9
- from credsweeper.utils import Util
8
+ from credsweeper.filters.filter import Filter
9
+ from credsweeper.utils.util import Util
10
10
 
11
11
 
12
12
  class ValueAtlassianTokenCheck(Filter):
@@ -1,12 +1,12 @@
1
1
  import contextlib
2
2
  import json
3
3
 
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
7
+ from credsweeper.filters.filter import Filter
8
8
  from credsweeper.filters.value_entropy_base64_check import ValueEntropyBase64Check
9
- from credsweeper.utils import Util
9
+ from credsweeper.utils.util import Util
10
10
 
11
11
 
12
12
  class ValueAzureTokenCheck(Filter):
@@ -2,11 +2,11 @@ import base64
2
2
  import contextlib
3
3
  import string
4
4
 
5
- from credsweeper.config import Config
6
- from credsweeper.credentials import LineData
5
+ from credsweeper.config.config import Config
6
+ from credsweeper.credentials.line_data import LineData
7
7
  from credsweeper.file_handler.analysis_target import AnalysisTarget
8
- from credsweeper.filters import Filter
9
- from credsweeper.utils import Util
8
+ from credsweeper.filters.filter import Filter
9
+ from credsweeper.utils.util import Util
10
10
 
11
11
 
12
12
  class ValueBase32DataCheck(Filter):
@@ -1,11 +1,11 @@
1
1
  import contextlib
2
2
  import string
3
3
 
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
8
- from credsweeper.utils import Util
7
+ from credsweeper.filters.filter import Filter
8
+ from credsweeper.utils.util import Util
9
9
 
10
10
 
11
11
  class ValueBase64DataCheck(Filter):
@@ -1,12 +1,12 @@
1
1
  import contextlib
2
2
 
3
3
  from credsweeper.common.constants import ASCII, PEM_BEGIN_PATTERN
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
8
- from credsweeper.utils import Util
7
+ from credsweeper.filters.filter import Filter
9
8
  from credsweeper.utils.pem_key_detector import PemKeyDetector
9
+ from credsweeper.utils.util import Util
10
10
 
11
11
 
12
12
  class ValueBase64EncodedPem(Filter):
@@ -1,18 +1,17 @@
1
1
  import contextlib
2
- import string
3
2
 
4
- from cryptography.hazmat.primitives import serialization
5
-
6
- from credsweeper.config import Config
7
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
8
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
9
- from credsweeper.filters import Filter
10
- from credsweeper.utils import Util
6
+ from credsweeper.filters.filter import Filter
7
+ from credsweeper.utils.util import Util
11
8
 
12
9
 
13
10
  class ValueBase64KeyCheck(Filter):
14
11
  """Check that candidate contains base64 encoded private key"""
15
12
 
13
+ EXTRA_TRANS_TABLE = str.maketrans('', '', "\",'\\")
14
+
16
15
  def __init__(self, config: Config = None) -> None:
17
16
  self.config = config
18
17
 
@@ -29,12 +28,10 @@ class ValueBase64KeyCheck(Filter):
29
28
  """
30
29
 
31
30
  with contextlib.suppress(Exception):
32
- text = line_data.value
33
- # replace to space any escaped sequence except space from string.whitespace
34
- for x in ["\\t", "\\n", "\\r", "\\v", "\\f"]:
35
- text = text.replace(x, ' ')
36
- for x in string.whitespace:
37
- text = text.replace(x, '')
31
+ # remove backslash escaping sequences
32
+ text = Util.PEM_CLEANING_PATTERN.sub(r'', line_data.value)
33
+ # remove whitespaces
34
+ text = text.translate(Util.WHITESPACE_TRANS_TABLE)
38
35
  # clean sequence concatenation case:
39
36
  text = text.replace("'+'", '')
40
37
  text = text.replace('"+"', '')
@@ -43,12 +40,10 @@ class ValueBase64KeyCheck(Filter):
43
40
  text = text.replace('%2F', '/')
44
41
  text = text.replace('%3D', '=')
45
42
  # clean any other chars which should not appear
46
- for x in ["'", '"', '\\', ',']:
47
- text = text.replace(x, "")
43
+ text = text.translate(ValueBase64KeyCheck.EXTRA_TRANS_TABLE)
48
44
  # only PEM standard encoding supported in regex pattern to cut off ending of the key
49
45
  key = Util.decode_base64(text, padding_safe=True, urlsafe_detect=False)
50
- private_key = serialization.load_der_private_key(key, password=None)
51
- if 0 < private_key.key_size: # type: ignore
52
- # access to size field check - some types have no size
46
+ private_key = Util.load_pk(key, password=None)
47
+ if Util.check_pk(private_key):
53
48
  return False
54
49
  return True
@@ -4,12 +4,12 @@ import statistics
4
4
  from itertools import takewhile
5
5
 
6
6
  from credsweeper.common.constants import Chars
7
- from credsweeper.config import Config
8
- from credsweeper.credentials import LineData
7
+ from credsweeper.config.config import Config
8
+ from credsweeper.credentials.line_data import LineData
9
9
  from credsweeper.file_handler.analysis_target import AnalysisTarget
10
- from credsweeper.filters import Filter
10
+ from credsweeper.filters.filter import Filter
11
11
  from credsweeper.filters.value_entropy_base64_check import ValueEntropyBase64Check
12
- from credsweeper.utils import Util
12
+ from credsweeper.utils.util import Util
13
13
 
14
14
 
15
15
  class ValueBase64PartCheck(Filter):
@@ -0,0 +1,36 @@
1
+ import contextlib
2
+
3
+ from credsweeper.common.constants import DEFAULT_PATTERN_LEN, UTF_8
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
+ from credsweeper.file_handler.analysis_target import AnalysisTarget
7
+ from credsweeper.filters.filter import Filter
8
+ from credsweeper.utils.util import Util
9
+
10
+
11
+ class ValueBasicAuthCheck(Filter):
12
+ """Check that candidate have a known structure"""
13
+
14
+ def __init__(self, config: Config = None) -> None:
15
+ pass
16
+
17
+ def run(self, line_data: LineData, target: AnalysisTarget) -> bool:
18
+ """Run filter checks on received token which might be structured.
19
+
20
+ Args:
21
+ line_data: credential candidate data
22
+ target: multiline target from which line data was obtained
23
+
24
+ Return:
25
+ True, if need to filter candidate and False if left
26
+
27
+ """
28
+ value = line_data.value
29
+ with contextlib.suppress(Exception):
30
+ # Basic encoding -> login:password
31
+ decoded = Util.decode_base64(value, padding_safe=True, urlsafe_detect=True)
32
+ delimiter_pos = decoded.find(b':')
33
+ # check whether the delimiter exists and all chars are decoded
34
+ if 0 < delimiter_pos < len(decoded) - DEFAULT_PATTERN_LEN and decoded.decode(UTF_8):
35
+ return False
36
+ return True
@@ -1,7 +1,7 @@
1
- from credsweeper.config import Config
2
- from credsweeper.credentials import LineData
1
+ from credsweeper.config.config import Config
2
+ from credsweeper.credentials.line_data import LineData
3
3
  from credsweeper.file_handler.analysis_target import AnalysisTarget
4
- from credsweeper.filters import Filter
4
+ from credsweeper.filters.filter import Filter
5
5
 
6
6
 
7
7
  class ValueBlocklistCheck(Filter):
@@ -1,11 +1,11 @@
1
1
  import re
2
2
 
3
3
  from credsweeper.common import static_keyword_checklist
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
8
- from credsweeper.utils import Util
7
+ from credsweeper.filters.filter import Filter
8
+ from credsweeper.utils.util import Util
9
9
 
10
10
 
11
11
  class ValueCamelCaseCheck(Filter):
@@ -1,8 +1,8 @@
1
1
  from credsweeper.common import static_keyword_checklist
2
- from credsweeper.config import Config
3
- from credsweeper.credentials import LineData
2
+ from credsweeper.config.config import Config
3
+ from credsweeper.credentials.line_data import LineData
4
4
  from credsweeper.file_handler.analysis_target import AnalysisTarget
5
- from credsweeper.filters import Filter
5
+ from credsweeper.filters.filter import Filter
6
6
 
7
7
 
8
8
  class ValueCoupleKeywordCheck(Filter):
@@ -1,8 +1,8 @@
1
1
  from credsweeper.common import static_keyword_checklist
2
- from credsweeper.config import Config
3
- from credsweeper.credentials import LineData
2
+ from credsweeper.config.config import Config
3
+ from credsweeper.credentials.line_data import LineData
4
4
  from credsweeper.file_handler.analysis_target import AnalysisTarget
5
- from credsweeper.filters import Filter
5
+ from credsweeper.filters.filter import Filter
6
6
 
7
7
 
8
8
  class ValueDictionaryKeywordCheck(Filter):
@@ -1,7 +1,7 @@
1
- from credsweeper.config import Config
2
- from credsweeper.credentials import LineData
1
+ from credsweeper.config.config import Config
2
+ from credsweeper.credentials.line_data import LineData
3
3
  from credsweeper.file_handler.analysis_target import AnalysisTarget
4
- from credsweeper.filters import Filter
4
+ from credsweeper.filters.filter import Filter
5
5
 
6
6
 
7
7
  class ValueDictionaryValueLengthCheck(Filter):
@@ -1,11 +1,11 @@
1
1
  import contextlib
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
6
+ from credsweeper.filters.filter import Filter
7
7
  from credsweeper.filters.value_entropy_base64_check import ValueEntropyBase64Check
8
- from credsweeper.utils import Util
8
+ from credsweeper.utils.util import Util
9
9
 
10
10
 
11
11
  class ValueDiscordBotCheck(Filter):
@@ -1,10 +1,10 @@
1
1
  from abc import abstractmethod
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
7
- from credsweeper.utils import Util
6
+ from credsweeper.filters.filter import Filter
7
+ from credsweeper.utils.util import Util
8
8
 
9
9
 
10
10
  class ValueEntropyBaseCheck(Filter):
@@ -1,10 +1,11 @@
1
1
  from credsweeper.common import static_keyword_checklist
2
2
  from credsweeper.common.constants import Chars
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter, ValueEntropyBase64Check
7
- from credsweeper.utils import Util
6
+ from credsweeper.filters.filter import Filter
7
+ from credsweeper.filters.value_entropy_base64_check import ValueEntropyBase64Check
8
+ from credsweeper.utils.util import Util
8
9
 
9
10
 
10
11
  class ValueFilePathCheck(Filter):
@@ -4,10 +4,10 @@ import contextlib
4
4
  import base62
5
5
 
6
6
  from credsweeper.common.constants import ASCII
7
- from credsweeper.config import Config
8
- from credsweeper.credentials import LineData
7
+ from credsweeper.config.config import Config
8
+ from credsweeper.credentials.line_data import LineData
9
9
  from credsweeper.file_handler.analysis_target import AnalysisTarget
10
- from credsweeper.filters import Filter
10
+ from credsweeper.filters.filter import Filter
11
11
 
12
12
 
13
13
  class ValueGitHubCheck(Filter):
@@ -1,11 +1,11 @@
1
1
  import contextlib
2
2
  import json
3
3
 
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
8
- from credsweeper.utils import Util
7
+ from credsweeper.filters.filter import Filter
8
+ from credsweeper.utils.util import Util
9
9
 
10
10
 
11
11
  class ValueGrafanaCheck(Filter):
@@ -3,10 +3,10 @@ import contextlib
3
3
  import struct
4
4
 
5
5
  from credsweeper.common.constants import ASCII
6
- from credsweeper.config import Config
7
- from credsweeper.credentials import LineData
6
+ from credsweeper.config.config import Config
7
+ from credsweeper.credentials.line_data import LineData
8
8
  from credsweeper.file_handler.analysis_target import AnalysisTarget
9
- from credsweeper.filters import Filter
9
+ from credsweeper.filters.filter import Filter
10
10
 
11
11
 
12
12
  class ValueGrafanaServiceCheck(Filter):
@@ -1,9 +1,9 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
6
+ from credsweeper.filters.filter import Filter
7
7
 
8
8
 
9
9
  class ValueHexNumberCheck(Filter):
@@ -4,11 +4,11 @@ import re
4
4
  import base58
5
5
 
6
6
  from credsweeper.common.constants import ASCII
7
- from credsweeper.config import Config
8
- from credsweeper.credentials import LineData
7
+ from credsweeper.config.config import Config
8
+ from credsweeper.credentials.line_data import LineData
9
9
  from credsweeper.file_handler.analysis_target import AnalysisTarget
10
- from credsweeper.filters import Filter
11
- from credsweeper.utils import Util
10
+ from credsweeper.filters.filter import Filter
11
+ from credsweeper.utils.util import Util
12
12
 
13
13
 
14
14
  class ValueJfrogTokenCheck(Filter):
@@ -0,0 +1,37 @@
1
+ import contextlib
2
+
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
+ from credsweeper.file_handler.analysis_target import AnalysisTarget
6
+ from credsweeper.filters.filter import Filter
7
+ from credsweeper.utils.util import Util
8
+
9
+
10
+ class ValueJsonWebKeyCheck(Filter):
11
+ """
12
+ Check that candidate is JWK which starts usually from 'e'
13
+ and have private parts of the key
14
+ https://datatracker.ietf.org/doc/html/rfc7517
15
+ https://datatracker.ietf.org/doc/html/rfc7518
16
+ """
17
+
18
+ def __init__(self, config: Config = None) -> None:
19
+ pass
20
+
21
+ def run(self, line_data: LineData, target: AnalysisTarget) -> bool:
22
+ """Run filter checks on received key which might be structured.
23
+
24
+ Args:
25
+ line_data: credential candidate data
26
+ target: multiline target from which line data was obtained
27
+
28
+ Return:
29
+ True, when need to filter candidate and False if left
30
+
31
+ """
32
+ with contextlib.suppress(Exception):
33
+ if data := Util.decode_base64(line_data.value, padding_safe=True, urlsafe_detect=True):
34
+ if b'"kty":' in data and (b'"oct"' in data and b'"k":' in data or
35
+ (b'"EC"' in data or b'"RSA"' in data) and b'"d":' in data):
36
+ return False
37
+ return True
@@ -1,11 +1,11 @@
1
1
  import contextlib
2
2
  import json
3
3
 
4
- from credsweeper.config import Config
5
- from credsweeper.credentials import LineData
4
+ from credsweeper.config.config import Config
5
+ from credsweeper.credentials.line_data import LineData
6
6
  from credsweeper.file_handler.analysis_target import AnalysisTarget
7
- from credsweeper.filters import Filter
8
- from credsweeper.utils import Util
7
+ from credsweeper.filters.filter import Filter
8
+ from credsweeper.utils.util import Util
9
9
 
10
10
 
11
11
  class ValueJsonWebTokenCheck(Filter):
@@ -1,7 +1,7 @@
1
- from credsweeper.config import Config
2
- from credsweeper.credentials import LineData
1
+ from credsweeper.config.config import Config
2
+ from credsweeper.credentials.line_data import LineData
3
3
  from credsweeper.file_handler.analysis_target import AnalysisTarget
4
- from credsweeper.filters import Filter
4
+ from credsweeper.filters.filter import Filter
5
5
 
6
6
 
7
7
  class ValueLastWordCheck(Filter):
@@ -1,9 +1,9 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
6
+ from credsweeper.filters.filter import Filter
7
7
 
8
8
 
9
9
  class ValueMethodCheck(Filter):
@@ -1,10 +1,10 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
7
- from credsweeper.utils import Util
6
+ from credsweeper.filters.filter import Filter
7
+ from credsweeper.utils.util import Util
8
8
 
9
9
 
10
10
  class ValueNotAllowedPatternCheck(Filter):
@@ -2,10 +2,10 @@ import re
2
2
  from typing import Optional
3
3
 
4
4
  from credsweeper.common import static_keyword_checklist
5
- from credsweeper.config import Config
6
- from credsweeper.credentials import LineData
5
+ from credsweeper.config.config import Config
6
+ from credsweeper.credentials.line_data import LineData
7
7
  from credsweeper.file_handler.analysis_target import AnalysisTarget
8
- from credsweeper.filters import Filter
8
+ from credsweeper.filters.filter import Filter
9
9
 
10
10
 
11
11
  class ValueNotPartEncodedCheck(Filter):
@@ -1,9 +1,9 @@
1
1
  import re
2
2
 
3
- from credsweeper.config import Config
4
- from credsweeper.credentials import LineData
3
+ from credsweeper.config.config import Config
4
+ from credsweeper.credentials.line_data import LineData
5
5
  from credsweeper.file_handler.analysis_target import AnalysisTarget
6
- from credsweeper.filters import Filter
6
+ from credsweeper.filters.filter import Filter
7
7
 
8
8
 
9
9
  class ValueNumberCheck(Filter):