credsweeper 1.13.0__tar.gz → 1.13.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.13.0 → credsweeper-1.13.2}/PKG-INFO +1 -1
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/__init__.py +1 -1
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/morpheme_checklist.txt +14 -6
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/line_data.py +5 -6
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/abstract_scanner.py +1 -0
- credsweeper-1.13.2/credsweeper/deep_scanner/csv_scanner.py +71 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/deep_scanner.py +6 -2
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/jks_scanner.py +11 -2
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/pkcs_scanner.py +4 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/.gitignore +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/LICENSE +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/README.md +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/__main__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/app.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/constants.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/keyword_checklist.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/keyword_checklist.txt +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/keyword_pattern.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/config/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/config/config.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/augment_candidates.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/candidate.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/candidate_group_generator.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/candidate_key.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/credential_manager.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/byte_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/bzip2_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/deb_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/docx_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/eml_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/encoder_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/gzip_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/html_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/jclass_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/lang_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/lzma_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/mxfile_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/patch_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/pdf_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/pptx_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/rpm_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/rtf_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/sqlite3_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/strings_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/tar_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/tmx_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/xlsx_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/xml_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/zip_scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/abstract_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/analysis_target.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/byte_content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/data_content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/descriptor.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/diff_content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/file_path_extractor.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/files_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/patches_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/string_content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/struct_content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/text_content_provider.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/filter.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/general_keyword.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/general_pattern.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/group.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/password_keyword.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/token_pattern.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/url_credentials_group.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/weird_base36_token.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/weird_base64_token.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/line_git_binary_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/line_specific_key_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/line_uue_part_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_allowlist_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_array_dictionary_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_atlassian_token_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_azure_token_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base32_data_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_data_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_encoded_pem_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_key_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_part_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_basic_auth_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_blocklist_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_camel_case_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_dictionary_keyword_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_discord_bot_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base32_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base36_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base64_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_file_path_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_github_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_grafana_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_grafana_service_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_hex_number_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_jfrog_token_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_json_web_key_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_json_web_token_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_last_word_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_length_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_method_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_morphemes_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_not_allowed_pattern_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_not_part_encoded_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_number_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_pattern_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_similarity_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_split_keyword_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_string_type_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base32_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base36_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base64_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_check.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/logger/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/logger/logger.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/entropy_evaluation.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/feature.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/file_extension.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/has_html_tag.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/is_secret_numeric.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/length_of_attribute.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/morpheme_dense.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/rule_name.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/rule_severity.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/search_in_attribute.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_path.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_postamble.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_preamble.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_transition.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_value.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_variable.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/ml_config.json +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/ml_model.onnx +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/ml_validator.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/py.typed +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/rules/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/rules/config.yaml +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/rules/rule.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/multi_pattern.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/pem_key_pattern.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/scan_type.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/single_pattern.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scanner.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/secret/config.json +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/secret/log.yaml +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/__init__.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/hop_stat.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/pem_key_detector.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/util.py +0 -0
- {credsweeper-1.13.0 → credsweeper-1.13.2}/pyproject.toml +0 -0
|
@@ -238,6 +238,7 @@ bless
|
|
|
238
238
|
blic
|
|
239
239
|
blish
|
|
240
240
|
blob
|
|
241
|
+
blood
|
|
241
242
|
blue
|
|
242
243
|
board
|
|
243
244
|
bob
|
|
@@ -248,7 +249,7 @@ boost
|
|
|
248
249
|
boot
|
|
249
250
|
boss
|
|
250
251
|
bot
|
|
251
|
-
|
|
252
|
+
boun
|
|
252
253
|
box
|
|
253
254
|
branch
|
|
254
255
|
break
|
|
@@ -613,6 +614,7 @@ fleet
|
|
|
613
614
|
flick
|
|
614
615
|
flix
|
|
615
616
|
float
|
|
617
|
+
flood
|
|
616
618
|
floor
|
|
617
619
|
fluent
|
|
618
620
|
fluid
|
|
@@ -621,7 +623,7 @@ focus
|
|
|
621
623
|
foo
|
|
622
624
|
for
|
|
623
625
|
fossil
|
|
624
|
-
|
|
626
|
+
foun
|
|
625
627
|
fpga
|
|
626
628
|
frame
|
|
627
629
|
free
|
|
@@ -654,6 +656,7 @@ git
|
|
|
654
656
|
given
|
|
655
657
|
global
|
|
656
658
|
gobble
|
|
659
|
+
good
|
|
657
660
|
google
|
|
658
661
|
grab
|
|
659
662
|
grace
|
|
@@ -709,6 +712,7 @@ home
|
|
|
709
712
|
hook
|
|
710
713
|
horizon
|
|
711
714
|
host
|
|
715
|
+
houn
|
|
712
716
|
hours
|
|
713
717
|
html
|
|
714
718
|
http
|
|
@@ -862,7 +866,7 @@ local
|
|
|
862
866
|
lock
|
|
863
867
|
log
|
|
864
868
|
long
|
|
865
|
-
|
|
869
|
+
look
|
|
866
870
|
loop
|
|
867
871
|
loose
|
|
868
872
|
lost
|
|
@@ -955,6 +959,7 @@ ndow
|
|
|
955
959
|
ned
|
|
956
960
|
need
|
|
957
961
|
neigh
|
|
962
|
+
neo4j
|
|
958
963
|
ner
|
|
959
964
|
net
|
|
960
965
|
neutr
|
|
@@ -999,6 +1004,7 @@ oncat
|
|
|
999
1004
|
one
|
|
1000
1005
|
onfig
|
|
1001
1006
|
only
|
|
1007
|
+
ookup
|
|
1002
1008
|
open
|
|
1003
1009
|
opt/
|
|
1004
1010
|
opted
|
|
@@ -1016,6 +1022,7 @@ ormat
|
|
|
1016
1022
|
orph
|
|
1017
1023
|
otorola
|
|
1018
1024
|
ottle
|
|
1025
|
+
ound
|
|
1019
1026
|
ously
|
|
1020
1027
|
out
|
|
1021
1028
|
over
|
|
@@ -1075,6 +1082,7 @@ pose
|
|
|
1075
1082
|
posit
|
|
1076
1083
|
possib
|
|
1077
1084
|
post
|
|
1085
|
+
poun
|
|
1078
1086
|
power
|
|
1079
1087
|
pre_
|
|
1080
1088
|
pred
|
|
@@ -1219,7 +1227,7 @@ rotat
|
|
|
1219
1227
|
rotocol
|
|
1220
1228
|
rottl
|
|
1221
1229
|
rough
|
|
1222
|
-
|
|
1230
|
+
roun
|
|
1223
1231
|
roup
|
|
1224
1232
|
row
|
|
1225
1233
|
rroga
|
|
@@ -1328,7 +1336,7 @@ solve
|
|
|
1328
1336
|
some
|
|
1329
1337
|
sony
|
|
1330
1338
|
sort
|
|
1331
|
-
|
|
1339
|
+
soun
|
|
1332
1340
|
source
|
|
1333
1341
|
space
|
|
1334
1342
|
spacing
|
|
@@ -1584,7 +1592,7 @@ yield
|
|
|
1584
1592
|
you
|
|
1585
1593
|
zeppelin
|
|
1586
1594
|
zero
|
|
1587
|
-
zing
|
|
1588
1595
|
zigbee
|
|
1596
|
+
zing
|
|
1589
1597
|
zona
|
|
1590
1598
|
zorro
|
|
@@ -197,15 +197,14 @@ class LineData:
|
|
|
197
197
|
If line seem to be a URL - split by & character.
|
|
198
198
|
Variable should be right most value after & or ? ([-1]). And value should be left most before & ([0])
|
|
199
199
|
"""
|
|
200
|
-
|
|
200
|
+
# skip sanitize in case of URL credential rule - the regex is mature enough
|
|
201
|
+
if self.check_url_part() and not self.variable.endswith("://"):
|
|
201
202
|
# all checks have passed - line before the value may be a URL
|
|
202
203
|
self.variable = self.variable.rsplit('&')[-1].rsplit('?')[-1].rsplit(';')[-1]
|
|
203
204
|
self.value = self.value.split('&', maxsplit=1)[0].split(';', maxsplit=1)[0].split('#', maxsplit=1)[0]
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
self.value = self.
|
|
207
|
-
if self._3d_escaped_separator:
|
|
208
|
-
self.value = self.url_percent_split.split(self.value)[0]
|
|
205
|
+
self.value = self.url_unicode_split.split(self.value)[0]
|
|
206
|
+
if self._3d_escaped_separator:
|
|
207
|
+
self.value = self.url_percent_split.split(self.value)[0]
|
|
209
208
|
|
|
210
209
|
def clean_bash_parameters(self) -> None:
|
|
211
210
|
"""Split variable and value by bash special characters, if line assumed to be CLI command."""
|
|
@@ -51,6 +51,7 @@ class AbstractScanner(ABC):
|
|
|
51
51
|
@abstractmethod
|
|
52
52
|
def get_deep_scanners(data: bytes, descriptor: Descriptor, depth: int) -> Tuple[List[Any], List[Any]]:
|
|
53
53
|
"""Returns possibly scan methods for the data depends on content and fallback scanners"""
|
|
54
|
+
raise NotImplementedError(__name__)
|
|
54
55
|
|
|
55
56
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
56
57
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import csv
|
|
2
|
+
import io
|
|
3
|
+
import logging
|
|
4
|
+
from abc import ABC
|
|
5
|
+
from typing import List, Optional, Dict, Any
|
|
6
|
+
|
|
7
|
+
from credsweeper.common.constants import MAX_LINE_LENGTH
|
|
8
|
+
from credsweeper.credentials.candidate 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.struct_content_provider import StructContentProvider
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CsvScanner(AbstractScanner, ABC):
|
|
17
|
+
"""Implements CSV scanning"""
|
|
18
|
+
|
|
19
|
+
sniffer = csv.Sniffer()
|
|
20
|
+
# do not use space as separator to avoid hallucinations
|
|
21
|
+
delimiters = ",;\t|\x1F"
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def get_structure(cls, text: str) -> List[Dict[str, Any]]:
|
|
25
|
+
"""Reads a text as CSV standard with guessed dialect"""
|
|
26
|
+
# windows style \r\n
|
|
27
|
+
first_line_end = text.find('\r', 0, MAX_LINE_LENGTH)
|
|
28
|
+
line_terminator = "\r\n"
|
|
29
|
+
if 0 > first_line_end:
|
|
30
|
+
# unix style \n
|
|
31
|
+
first_line_end = text.find('\n', 0, MAX_LINE_LENGTH)
|
|
32
|
+
line_terminator = "\n"
|
|
33
|
+
if 0 > first_line_end:
|
|
34
|
+
raise ValueError(f"No suitable line end found in {MAX_LINE_LENGTH} symbols")
|
|
35
|
+
|
|
36
|
+
first_line = text[:first_line_end]
|
|
37
|
+
dialect = cls.sniffer.sniff(first_line, delimiters=cls.delimiters)
|
|
38
|
+
rows = []
|
|
39
|
+
reader = csv.DictReader(io.StringIO(text),
|
|
40
|
+
delimiter=dialect.delimiter,
|
|
41
|
+
lineterminator=line_terminator,
|
|
42
|
+
strict=True)
|
|
43
|
+
# check the constant columns number for all rows
|
|
44
|
+
fields_number = sum(1 for x in reader.fieldnames if x is not None)
|
|
45
|
+
for row in reader:
|
|
46
|
+
if not isinstance(row, dict):
|
|
47
|
+
raise ValueError(f"ERROR: wrong row '{row}'")
|
|
48
|
+
if len(row) != fields_number or any(x is None for x in row.values()):
|
|
49
|
+
# None means no separator used
|
|
50
|
+
raise ValueError(f"Different columns number in row '{row}' - mismatch {fields_number}")
|
|
51
|
+
rows.append(row)
|
|
52
|
+
return rows
|
|
53
|
+
|
|
54
|
+
def data_scan(
|
|
55
|
+
self, #
|
|
56
|
+
data_provider: DataContentProvider, #
|
|
57
|
+
depth: int, #
|
|
58
|
+
recursive_limit_size: int) -> Optional[List[Candidate]]:
|
|
59
|
+
"""Tries to scan each row as structure with column name in key"""
|
|
60
|
+
try:
|
|
61
|
+
if rows := self.get_structure(data_provider.text):
|
|
62
|
+
struct_content_provider = StructContentProvider(struct=rows,
|
|
63
|
+
file_path=data_provider.file_path,
|
|
64
|
+
file_type=data_provider.file_type,
|
|
65
|
+
info=f"{data_provider.info}|CSV")
|
|
66
|
+
new_limit = recursive_limit_size - sum(len(x) for x in rows)
|
|
67
|
+
struct_candidates = self.structure_scan(struct_content_provider, depth, new_limit)
|
|
68
|
+
return struct_candidates
|
|
69
|
+
except Exception as csv_exc:
|
|
70
|
+
logger.debug(f"{data_provider.file_path}:{csv_exc}")
|
|
71
|
+
return None
|
|
@@ -6,6 +6,7 @@ from credsweeper.scanner.scanner import Scanner
|
|
|
6
6
|
from credsweeper.utils.util import Util
|
|
7
7
|
from .byte_scanner import ByteScanner
|
|
8
8
|
from .bzip2_scanner import Bzip2Scanner
|
|
9
|
+
from .csv_scanner import CsvScanner
|
|
9
10
|
from .deb_scanner import DebScanner
|
|
10
11
|
from .docx_scanner import DocxScanner
|
|
11
12
|
from .eml_scanner import EmlScanner
|
|
@@ -39,6 +40,7 @@ class DeepScanner(
|
|
|
39
40
|
ByteScanner, #
|
|
40
41
|
Bzip2Scanner, #
|
|
41
42
|
DocxScanner, #
|
|
43
|
+
CsvScanner, #
|
|
42
44
|
EncoderScanner, #
|
|
43
45
|
GzipScanner, #
|
|
44
46
|
HtmlScanner, #
|
|
@@ -160,16 +162,18 @@ class DeepScanner(
|
|
|
160
162
|
deep_scanners.append(EmlScanner)
|
|
161
163
|
else:
|
|
162
164
|
if 0 < depth:
|
|
163
|
-
# formal patch looks like an eml
|
|
165
|
+
# a formal patch looks like an eml
|
|
164
166
|
deep_scanners.append(PatchScanner)
|
|
165
167
|
fallback_scanners.append(EmlScanner)
|
|
166
168
|
fallback_scanners.append(ByteScanner)
|
|
167
169
|
elif not Util.is_binary(data):
|
|
170
|
+
# keep ByteScanner first to apply real value position if possible
|
|
171
|
+
deep_scanners.append(ByteScanner)
|
|
168
172
|
if 0 < depth:
|
|
169
173
|
deep_scanners.append(PatchScanner)
|
|
170
174
|
deep_scanners.append(EncoderScanner)
|
|
171
175
|
deep_scanners.append(LangScanner)
|
|
172
|
-
|
|
176
|
+
deep_scanners.append(CsvScanner)
|
|
173
177
|
else:
|
|
174
178
|
if 0 < depth:
|
|
175
179
|
deep_scanners.append(StringsScanner)
|
|
@@ -4,6 +4,7 @@ from typing import List, Optional
|
|
|
4
4
|
|
|
5
5
|
import jks
|
|
6
6
|
|
|
7
|
+
from credsweeper.common.constants import Severity, Confidence
|
|
7
8
|
from credsweeper.credentials.candidate import Candidate
|
|
8
9
|
from credsweeper.deep_scanner.abstract_scanner import AbstractScanner
|
|
9
10
|
from credsweeper.file_handler.data_content_provider import DataContentProvider
|
|
@@ -24,14 +25,22 @@ class JksScanner(AbstractScanner, ABC):
|
|
|
24
25
|
try:
|
|
25
26
|
keystore = jks.KeyStore.loads(data_provider.data, pw_probe, try_decrypt_keys=True)
|
|
26
27
|
# the password probe has passed, it will be the value
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
if keystore.private_keys or keystore.secret_keys:
|
|
29
|
+
severity = Severity.HIGH
|
|
30
|
+
confidence = Confidence.STRONG
|
|
31
|
+
info = f"{data_provider.info}|JKS:default password"
|
|
32
|
+
else:
|
|
33
|
+
severity = Severity.LOW
|
|
34
|
+
confidence = Confidence.WEAK
|
|
35
|
+
info = f"{data_provider.info}|JKS:sensitive data"
|
|
29
36
|
candidate = Candidate.get_dummy_candidate(
|
|
30
37
|
self.config, #
|
|
31
38
|
data_provider.file_path, #
|
|
32
39
|
data_provider.file_type, #
|
|
33
40
|
info, #
|
|
34
41
|
"Java Key Storage")
|
|
42
|
+
candidate.severity = severity
|
|
43
|
+
candidate.confidence = confidence
|
|
35
44
|
value = pw_probe or "<EMPTY PASSWORD>"
|
|
36
45
|
candidate.line_data_list[0].line = f"'{value}' is the password"
|
|
37
46
|
candidate.line_data_list[0].value = pw_probe or "<EMPTY PASSWORD>"
|
|
@@ -3,6 +3,7 @@ import logging
|
|
|
3
3
|
from abc import ABC
|
|
4
4
|
from typing import List, Optional
|
|
5
5
|
|
|
6
|
+
from credsweeper.common.constants import Severity, Confidence
|
|
6
7
|
from credsweeper.credentials.candidate import Candidate
|
|
7
8
|
from credsweeper.deep_scanner.abstract_scanner import AbstractScanner
|
|
8
9
|
from credsweeper.file_handler.data_content_provider import DataContentProvider
|
|
@@ -35,6 +36,9 @@ class PkcsScanner(AbstractScanner, ABC):
|
|
|
35
36
|
"PKCS")
|
|
36
37
|
candidate.line_data_list[0].line = base64.b64encode(data_provider.data).decode()
|
|
37
38
|
candidate.line_data_list[0].value = repr(password)
|
|
39
|
+
# high severity is assigned to private key rules
|
|
40
|
+
candidate.severity = Severity.HIGH
|
|
41
|
+
candidate.confidence = Confidence.STRONG
|
|
38
42
|
return [candidate]
|
|
39
43
|
except Exception as pkcs_exc:
|
|
40
44
|
logger.debug(f"{data_provider.file_path}:{pw_probe}:{pkcs_exc}")
|
|
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.13.0 → credsweeper-1.13.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/string_content_provider.py
RENAMED
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.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
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/url_credentials_group.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_array_dictionary_check.py
RENAMED
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_atlassian_token_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.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.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_dictionary_keyword_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
|
{credsweeper-1.13.0 → credsweeper-1.13.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_not_allowed_pattern_check.py
RENAMED
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.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.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/entropy_evaluation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/is_secret_numeric.py
RENAMED
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/length_of_attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/search_in_attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_postamble.py
RENAMED
|
File without changes
|
|
File without changes
|
{credsweeper-1.13.0 → credsweeper-1.13.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
|
|
File without changes
|