credsweeper 1.11.0__tar.gz → 1.11.2__tar.gz
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.
- {credsweeper-1.11.0 → credsweeper-1.11.2}/PKG-INFO +1 -1
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/__init__.py +1 -1
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/common/keyword_pattern.py +17 -9
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/deep_scanner.py +5 -0
- credsweeper-1.11.2/credsweeper/deep_scanner/tmx_scanner.py +45 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/__init__.py +0 -1
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/group.py +3 -4
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/url_credentials_group.py +2 -3
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_allowlist_check.py +6 -7
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/rules/config.yaml +2 -2
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/utils/util.py +16 -4
- credsweeper-1.11.0/credsweeper/filters/value_first_word_check.py +0 -38
- {credsweeper-1.11.0 → credsweeper-1.11.2}/.gitignore +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/LICENSE +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/README.md +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/__main__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/app.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/common/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/common/constants.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/common/keyword_checklist.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/common/keyword_checklist.txt +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/common/morpheme_checklist.txt +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/config/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/config/config.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/augment_candidates.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/candidate.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/candidate_group_generator.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/candidate_key.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/credential_manager.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/line_data.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/abstract_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/byte_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/bzip2_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/docx_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/eml_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/encoder_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/gzip_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/html_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/jks_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/lang_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/mxfile_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/pdf_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/pkcs12_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/pptx_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/tar_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/xlsx_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/xml_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/deep_scanner/zip_scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/abstract_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/analysis_target.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/byte_content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/data_content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/descriptor.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/diff_content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/file_path_extractor.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/files_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/patches_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/string_content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/struct_content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/text_content_provider.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/filter.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/general_keyword.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/general_pattern.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/password_keyword.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/token_pattern.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/weird_base36_token.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/weird_base64_token.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/line_git_binary_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/line_specific_key_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/line_uue_part_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_array_dictionary_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_atlassian_token_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_azure_token_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_base32_data_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_base64_data_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_base64_encoded_pem_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_base64_key_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_base64_part_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_blocklist_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_camel_case_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_couple_keyword_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_dictionary_keyword_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_dictionary_value_length_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_discord_bot_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_entropy_base32_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_entropy_base36_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_entropy_base64_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_file_path_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_github_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_grafana_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_grafana_service_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_hex_number_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_jfrog_token_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_json_web_token_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_last_word_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_method_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_not_allowed_pattern_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_not_part_encoded_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_number_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_pattern_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_similarity_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_split_keyword_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_string_type_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_token_base32_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_token_base36_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_token_base64_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_token_base_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_token_check.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/logger/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/logger/logger.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/entropy_evaluation.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/feature.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/file_extension.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/has_html_tag.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/is_secret_numeric.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/length_of_attribute.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/morpheme_dense.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/rule_name.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/search_in_attribute.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_path.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_postamble.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_preamble.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_transition.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_value.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_variable.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/ml_config.json +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/ml_model.onnx +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/ml_validator.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/py.typed +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/rules/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/rules/rule.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/scan_type/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/scan_type/multi_pattern.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/scan_type/pem_key_pattern.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/scan_type/scan_type.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/scan_type/single_pattern.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/scanner/scanner.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/secret/config.json +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/secret/log.yaml +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/utils/__init__.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/utils/entropy_validator.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/utils/hop_stat.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/utils/pem_key_detector.py +0 -0
- {credsweeper-1.11.0 → credsweeper-1.11.2}/pyproject.toml +0 -0
|
@@ -8,20 +8,20 @@ class KeywordPattern:
|
|
|
8
8
|
r"(?P<keyword>"
|
|
9
9
|
# there will be inserted a keyword
|
|
10
10
|
key_right = r")" \
|
|
11
|
-
r"[^%:='\"`<>{
|
|
11
|
+
r"[^%:='\"`<>{?!&;\n]*" \
|
|
12
12
|
r")" \
|
|
13
13
|
r"(&(quot|apos);|%[0-9a-f]{2}|[`'\"])*" \
|
|
14
14
|
r")" # <variable>
|
|
15
15
|
separator = r"(\s|\\{1,8}[tnr])*\]?(\s|\\{1,8}[tnr])*" \
|
|
16
|
-
r"(?P<separator>:(\s[a-z]{3,9}[?]?\s)
|
|
16
|
+
r"(?P<separator>:(\s[a-z]{3,9}[?]?\s)?=|:(?!:)|=(>|>|(\\\\*u00|%)26gt;)|!==|!=|===|==|=|%3d)" \
|
|
17
17
|
r"(\s|\\{1,8}[tnr])*"
|
|
18
18
|
# might be curly, square or parenthesis with words before
|
|
19
19
|
wrap = r"(?P<wrap>(" \
|
|
20
|
-
r"(new(\s|\\{1,8}[tnr]){1,8})?" \
|
|
21
|
-
r"([0-9a-z_.]
|
|
20
|
+
r"(new(\s|\\{1,8}[tnr]|byte|char|string|\[\]){1,8})?" \
|
|
21
|
+
r"([0-9a-z_.]|::|-(>|>))*" \
|
|
22
22
|
r"[\[\(\{]" \
|
|
23
23
|
r"(\s|\\{1,8}[tnr])*" \
|
|
24
|
-
r"([0-9a-z_]{1,32}
|
|
24
|
+
r"([0-9a-z_]{1,32}[:=]\s*)?" \
|
|
25
25
|
r"){1,8})?"
|
|
26
26
|
string_prefix = r"(((b|r|br|rb|u|f|rf|fr|l|@)(?=(\\*[`'\"])))?"
|
|
27
27
|
left_quote = r"(?P<value_leftquote>((?P<esq>\\{1,8})?([`'\"]|&(quot|apos);)){1,4}))?"
|
|
@@ -39,14 +39,22 @@ class KeywordPattern:
|
|
|
39
39
|
r"(?P<url_esc>%[0-9a-f]{2})" \
|
|
40
40
|
r"|" \
|
|
41
41
|
r"(?(url_esc)[^\s`'\",;\\&]|[^\s`'\",;\\])" \
|
|
42
|
-
r")
|
|
43
|
-
r"
|
|
44
|
-
r"|
|
|
42
|
+
r")"\
|
|
43
|
+
r"){4,8000}" \
|
|
44
|
+
r"|" \
|
|
45
|
+
r"(<[^>]{4,8000}>)" \
|
|
46
|
+
r"|" \
|
|
47
|
+
r"(\$?\({1,3}[^)]{4,8000}\){1,3})" \
|
|
48
|
+
r"|" \
|
|
49
|
+
r"(\$?\{{1,3}[^}]{4,8000}\}{1,3})" \
|
|
50
|
+
r"|" \
|
|
51
|
+
r"(?(wrap)(?(value_leftquote)(?!\\(?P=value_leftquote))|[^\]\)\}]){16,8000})"\
|
|
45
52
|
r")" # <value>
|
|
46
53
|
right_quote = r"(?(value_leftquote)" \
|
|
47
54
|
r"(?P<value_rightquote>(?<!\\)(?P=value_leftquote)|\\$|(?<=[0-9a-z+_/-])$)" \
|
|
48
55
|
r"|" \
|
|
49
|
-
r"(?(wrap)
|
|
56
|
+
r"(?(wrap)(\]|\)|\}|,|;|\\|$))" \
|
|
57
|
+
r")"
|
|
50
58
|
|
|
51
59
|
@classmethod
|
|
52
60
|
def get_keyword_pattern(cls, keyword: str) -> re.Pattern:
|
|
@@ -28,6 +28,7 @@ from .pdf_scanner import PdfScanner
|
|
|
28
28
|
from .pkcs12_scanner import Pkcs12Scanner
|
|
29
29
|
from .pptx_scanner import PptxScanner
|
|
30
30
|
from .tar_scanner import TarScanner
|
|
31
|
+
from .tmx_scanner import TmxScanner
|
|
31
32
|
from .xlsx_scanner import XlsxScanner
|
|
32
33
|
from .xml_scanner import XmlScanner
|
|
33
34
|
from .zip_scanner import ZipScanner
|
|
@@ -126,6 +127,10 @@ class DeepScanner(
|
|
|
126
127
|
deep_scanners.append(MxfileScanner)
|
|
127
128
|
deep_scanners.append(XmlScanner)
|
|
128
129
|
fallback_scanners.append(ByteScanner)
|
|
130
|
+
elif Util.is_tmx(data):
|
|
131
|
+
deep_scanners.append(TmxScanner)
|
|
132
|
+
fallback_scanners.append(XmlScanner)
|
|
133
|
+
fallback_scanners.append(ByteScanner)
|
|
129
134
|
else:
|
|
130
135
|
deep_scanners.append(XmlScanner)
|
|
131
136
|
fallback_scanners.append(ByteScanner)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from abc import ABC
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
from lxml import etree
|
|
6
|
+
|
|
7
|
+
from credsweeper.common.constants import MIN_DATA_LEN
|
|
8
|
+
from credsweeper.credentials import Candidate
|
|
9
|
+
from credsweeper.deep_scanner.abstract_scanner import AbstractScanner
|
|
10
|
+
from credsweeper.file_handler.data_content_provider import DataContentProvider
|
|
11
|
+
from credsweeper.file_handler.string_content_provider import StringContentProvider
|
|
12
|
+
from credsweeper.utils import Util
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TmxScanner(AbstractScanner, ABC):
|
|
18
|
+
"""Realises tmX files scanning for values only. Image tags are skipped."""
|
|
19
|
+
|
|
20
|
+
def data_scan(
|
|
21
|
+
self, #
|
|
22
|
+
data_provider: DataContentProvider, #
|
|
23
|
+
depth: int, #
|
|
24
|
+
recursive_limit_size: int) -> Optional[List[Candidate]]:
|
|
25
|
+
"""Tries to represent data as xml text and scan as text lines"""
|
|
26
|
+
try:
|
|
27
|
+
lines = []
|
|
28
|
+
# the format is always in single line xlm, so line numbers are not actual
|
|
29
|
+
tree = etree.fromstring(data_provider.data)
|
|
30
|
+
for element in tree.iter():
|
|
31
|
+
tag = Util.extract_element_data(element, "tag")
|
|
32
|
+
if "Image" in tag:
|
|
33
|
+
continue
|
|
34
|
+
text = Util.extract_element_data(element, "text")
|
|
35
|
+
if MIN_DATA_LEN > len(text):
|
|
36
|
+
continue
|
|
37
|
+
lines.append(text)
|
|
38
|
+
tmx_data_provider = StringContentProvider(lines=lines,
|
|
39
|
+
file_path=data_provider.file_path,
|
|
40
|
+
file_type=data_provider.file_type,
|
|
41
|
+
info=f"{data_provider.info}|TMX")
|
|
42
|
+
return self.scanner.scan(tmx_data_provider)
|
|
43
|
+
except Exception as exc:
|
|
44
|
+
logger.warning("Cannot processed tmX file %s %s", str(data_provider.file_path), str(exc))
|
|
45
|
+
return None
|
|
@@ -22,7 +22,6 @@ from credsweeper.filters.value_entropy_base32_check import ValueEntropyBase32Che
|
|
|
22
22
|
from credsweeper.filters.value_entropy_base36_check import ValueEntropyBase36Check
|
|
23
23
|
from credsweeper.filters.value_entropy_base64_check import ValueEntropyBase64Check
|
|
24
24
|
from credsweeper.filters.value_file_path_check import ValueFilePathCheck
|
|
25
|
-
from credsweeper.filters.value_first_word_check import ValueFirstWordCheck
|
|
26
25
|
from credsweeper.filters.value_github_check import ValueGitHubCheck
|
|
27
26
|
from credsweeper.filters.value_grafana_check import ValueGrafanaCheck
|
|
28
27
|
from credsweeper.filters.value_grafana_service_check import ValueGrafanaServiceCheck
|
|
@@ -4,9 +4,9 @@ from typing import List
|
|
|
4
4
|
from credsweeper.common.constants import GroupType
|
|
5
5
|
from credsweeper.config import Config
|
|
6
6
|
from credsweeper.filters import (Filter, LineSpecificKeyCheck, ValueAllowlistCheck, ValueArrayDictionaryCheck,
|
|
7
|
-
ValueBlocklistCheck, ValueCamelCaseCheck, ValueFilePathCheck,
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
ValueBlocklistCheck, ValueCamelCaseCheck, ValueFilePathCheck, ValueLastWordCheck,
|
|
8
|
+
ValueMethodCheck, ValueNotAllowedPatternCheck, ValuePatternCheck, ValueSimilarityCheck,
|
|
9
|
+
ValueStringTypeCheck, ValueTokenCheck, ValueHexNumberCheck)
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class Group(ABC):
|
|
@@ -39,7 +39,6 @@ class Group(ABC):
|
|
|
39
39
|
ValueBlocklistCheck(),
|
|
40
40
|
ValueCamelCaseCheck(),
|
|
41
41
|
ValueFilePathCheck(),
|
|
42
|
-
ValueFirstWordCheck(),
|
|
43
42
|
ValueHexNumberCheck(),
|
|
44
43
|
ValueLastWordCheck(),
|
|
45
44
|
ValueMethodCheck(),
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/group/url_credentials_group.py
RENAMED
|
@@ -2,8 +2,8 @@ from credsweeper.common.constants import GroupType
|
|
|
2
2
|
from credsweeper.config import Config
|
|
3
3
|
from credsweeper.filters import (ValueAllowlistCheck, ValueArrayDictionaryCheck, ValueBlocklistCheck,
|
|
4
4
|
ValueCamelCaseCheck, ValueDictionaryValueLengthCheck, ValueFilePathCheck,
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
ValueLastWordCheck, ValueMethodCheck, ValueNotAllowedPatternCheck, ValuePatternCheck,
|
|
6
|
+
ValueStringTypeCheck, ValueTokenCheck)
|
|
7
7
|
from credsweeper.filters.group import Group
|
|
8
8
|
|
|
9
9
|
|
|
@@ -23,7 +23,6 @@ class UrlCredentialsGroup(Group):
|
|
|
23
23
|
ValueBlocklistCheck(),
|
|
24
24
|
ValueCamelCaseCheck(),
|
|
25
25
|
ValueFilePathCheck(),
|
|
26
|
-
ValueFirstWordCheck(),
|
|
27
26
|
ValueLastWordCheck(),
|
|
28
27
|
ValueMethodCheck(),
|
|
29
28
|
ValueStringTypeCheck(config),
|
|
@@ -25,6 +25,7 @@ class ValueAllowlistCheck(Filter):
|
|
|
25
25
|
|
|
26
26
|
ALLOWED_QUOTED = [
|
|
27
27
|
r"\$[a-z_]+[0-9a-z_]*([$\s]|$)", #
|
|
28
|
+
r"\$\([^)]+\)", #
|
|
28
29
|
r".*\*\*\*", #
|
|
29
30
|
]
|
|
30
31
|
|
|
@@ -33,6 +34,7 @@ class ValueAllowlistCheck(Filter):
|
|
|
33
34
|
ALLOWED_UNQUOTED = [
|
|
34
35
|
r"[~a-z0-9_]+((\.|->)[a-z0-9_]+)+\(.*$", #
|
|
35
36
|
r"\$[a-z_]+[0-9a-z_]*\b", #
|
|
37
|
+
r"\$\([.0-9a-z_-]+", #
|
|
36
38
|
r".*\*\*\*\*\*", #
|
|
37
39
|
]
|
|
38
40
|
|
|
@@ -52,14 +54,11 @@ class ValueAllowlistCheck(Filter):
|
|
|
52
54
|
True, if need to filter candidate and False if left
|
|
53
55
|
|
|
54
56
|
"""
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return True
|
|
58
|
-
elif line_data.is_well_quoted_value:
|
|
59
|
-
if self.ALLOWED_QUOTED_PATTERN.match(line_data.value):
|
|
57
|
+
if line_data.is_well_quoted_value:
|
|
58
|
+
if self.ALLOWED_PATTERN.match(line_data.value) or self.ALLOWED_QUOTED_PATTERN.match(line_data.value):
|
|
60
59
|
return True
|
|
61
60
|
else:
|
|
62
|
-
|
|
61
|
+
value = line_data.wrap + line_data.value if line_data.wrap else line_data.value
|
|
62
|
+
if self.ALLOWED_PATTERN.match(value) or self.ALLOWED_UNQUOTED_PATTERN.match(value):
|
|
63
63
|
return True
|
|
64
|
-
|
|
65
64
|
return False
|
|
@@ -448,7 +448,7 @@
|
|
|
448
448
|
confidence: moderate
|
|
449
449
|
type: keyword
|
|
450
450
|
values:
|
|
451
|
-
- (?<!by)pass(?!ed|ing|es|\s+[a-z]{3,80})|pw(d|\b)
|
|
451
|
+
- (?<!by)pass(?!ed|ing|es|age|\s+[a-z]{3,80})|pw(d|\b)
|
|
452
452
|
filter_type: PasswordKeyword
|
|
453
453
|
use_ml: true
|
|
454
454
|
min_line_len: 10
|
|
@@ -890,7 +890,7 @@
|
|
|
890
890
|
confidence: moderate
|
|
891
891
|
type: keyword
|
|
892
892
|
values:
|
|
893
|
-
- nonce
|
|
893
|
+
- (?<!\\)nonce
|
|
894
894
|
filter_type: GeneralKeyword
|
|
895
895
|
use_ml: true
|
|
896
896
|
min_line_len: 13
|
|
@@ -517,6 +517,18 @@ class Util:
|
|
|
517
517
|
return True
|
|
518
518
|
return False
|
|
519
519
|
|
|
520
|
+
@staticmethod
|
|
521
|
+
def is_tmx(data: Union[bytes, bytearray]) -> bool:
|
|
522
|
+
"""Used to detect tm7,tm6,etc. (ThreadModeling) format."""
|
|
523
|
+
if isinstance(data, (bytes, bytearray)):
|
|
524
|
+
for opening_tag, closing_tag in [(b"<ThreatModel", b"</ThreatModel>"),
|
|
525
|
+
(b"<KnowledgeBase", b"</KnowledgeBase>")]:
|
|
526
|
+
opening_pos = data.find(opening_tag, 0, MAX_LINE_LENGTH)
|
|
527
|
+
if 0 <= opening_pos < data.find(closing_tag, opening_pos):
|
|
528
|
+
# opening and closing tags were found - suppose it is an HTML
|
|
529
|
+
return True
|
|
530
|
+
return False
|
|
531
|
+
|
|
520
532
|
# A well-formed XML must start from < or a whitespace character
|
|
521
533
|
XML_FIRST_BRACKET_PATTERN = re.compile(rb"^\s*<")
|
|
522
534
|
XML_OPENING_TAG_PATTERN = re.compile(rb"<([0-9A-Za-z_]{1,256})")
|
|
@@ -583,14 +595,14 @@ class Util:
|
|
|
583
595
|
line_nums = []
|
|
584
596
|
tree = etree.fromstringlist(xml_lines)
|
|
585
597
|
for element in tree.iter():
|
|
586
|
-
tag = Util.
|
|
587
|
-
text = Util.
|
|
598
|
+
tag = Util.extract_element_data(element, "tag")
|
|
599
|
+
text = Util.extract_element_data(element, "text")
|
|
588
600
|
lines.append(f"{tag} : {text}")
|
|
589
601
|
line_nums.append(element.sourceline)
|
|
590
602
|
return lines, line_nums
|
|
591
603
|
|
|
592
604
|
@staticmethod
|
|
593
|
-
def
|
|
605
|
+
def extract_element_data(element: Any, attr: str) -> str:
|
|
594
606
|
"""Extract xml element data to string.
|
|
595
607
|
|
|
596
608
|
Try to extract the xml data and strip() the string.
|
|
@@ -605,7 +617,7 @@ class Util:
|
|
|
605
617
|
"""
|
|
606
618
|
element_attr: Any = getattr(element, attr)
|
|
607
619
|
if element_attr is None or not isinstance(element_attr, str):
|
|
608
|
-
return
|
|
620
|
+
return ''
|
|
609
621
|
return str(element_attr).strip()
|
|
610
622
|
|
|
611
623
|
@staticmethod
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
|
|
3
|
-
from credsweeper.config import Config
|
|
4
|
-
from credsweeper.credentials import LineData
|
|
5
|
-
from credsweeper.file_handler.analysis_target import AnalysisTarget
|
|
6
|
-
from credsweeper.filters import Filter
|
|
7
|
-
from credsweeper.utils import Util
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ValueFirstWordCheck(Filter):
|
|
11
|
-
"""Check that secret doesn't starts with special character."""
|
|
12
|
-
|
|
13
|
-
NOT_ALLOWED = [
|
|
14
|
-
r"\=", r"\{", r"\)", r"\<", r"\>", r"\#", r"\:", r"\\\\", r"\\/\\/", r"\_", r"\/\*", r"\%[deflspuvxz]"
|
|
15
|
-
]
|
|
16
|
-
NOT_ALLOWED_PATTERN = re.compile( #
|
|
17
|
-
f"^{Util.get_regex_combine_or(NOT_ALLOWED)}", #
|
|
18
|
-
flags=re.IGNORECASE)
|
|
19
|
-
|
|
20
|
-
def __init__(self, config: Config = None) -> None:
|
|
21
|
-
pass
|
|
22
|
-
|
|
23
|
-
def run(self, line_data: LineData, target: AnalysisTarget) -> bool:
|
|
24
|
-
"""Run filter checks on received credential candidate data 'line_data'.
|
|
25
|
-
|
|
26
|
-
Args:
|
|
27
|
-
line_data: credential candidate data
|
|
28
|
-
target: multiline target from which line data was obtained
|
|
29
|
-
|
|
30
|
-
Return:
|
|
31
|
-
True, if need to filter candidate and False if left
|
|
32
|
-
|
|
33
|
-
"""
|
|
34
|
-
if line_data.is_well_quoted_value:
|
|
35
|
-
return False
|
|
36
|
-
if self.NOT_ALLOWED_PATTERN.match(line_data.value):
|
|
37
|
-
return True
|
|
38
|
-
return False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/credentials/candidate_group_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/string_content_provider.py
RENAMED
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/file_handler/struct_content_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_array_dictionary_check.py
RENAMED
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_atlassian_token_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_base64_encoded_pem_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_dictionary_keyword_check.py
RENAMED
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_dictionary_value_length_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_grafana_service_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_not_allowed_pattern_check.py
RENAMED
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/filters/value_not_part_encoded_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/entropy_evaluation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/is_secret_numeric.py
RENAMED
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/length_of_attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/search_in_attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_postamble.py
RENAMED
|
File without changes
|
|
File without changes
|
{credsweeper-1.11.0 → credsweeper-1.11.2}/credsweeper/ml_model/features/word_in_transition.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|