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.

Files changed (164) hide show
  1. {credsweeper-1.13.0 → credsweeper-1.13.2}/PKG-INFO +1 -1
  2. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/__init__.py +1 -1
  3. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/morpheme_checklist.txt +14 -6
  4. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/line_data.py +5 -6
  5. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/abstract_scanner.py +1 -0
  6. credsweeper-1.13.2/credsweeper/deep_scanner/csv_scanner.py +71 -0
  7. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/deep_scanner.py +6 -2
  8. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/jks_scanner.py +11 -2
  9. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/pkcs_scanner.py +4 -0
  10. {credsweeper-1.13.0 → credsweeper-1.13.2}/.gitignore +0 -0
  11. {credsweeper-1.13.0 → credsweeper-1.13.2}/LICENSE +0 -0
  12. {credsweeper-1.13.0 → credsweeper-1.13.2}/README.md +0 -0
  13. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/__main__.py +0 -0
  14. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/app.py +0 -0
  15. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/__init__.py +0 -0
  16. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/constants.py +0 -0
  17. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/keyword_checklist.py +0 -0
  18. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/keyword_checklist.txt +0 -0
  19. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/common/keyword_pattern.py +0 -0
  20. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/config/__init__.py +0 -0
  21. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/config/config.py +0 -0
  22. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/__init__.py +0 -0
  23. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/augment_candidates.py +0 -0
  24. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/candidate.py +0 -0
  25. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/candidate_group_generator.py +0 -0
  26. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/candidate_key.py +0 -0
  27. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/credentials/credential_manager.py +0 -0
  28. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/__init__.py +0 -0
  29. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/byte_scanner.py +0 -0
  30. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/bzip2_scanner.py +0 -0
  31. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/deb_scanner.py +0 -0
  32. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/docx_scanner.py +0 -0
  33. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/eml_scanner.py +0 -0
  34. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/encoder_scanner.py +0 -0
  35. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/gzip_scanner.py +0 -0
  36. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/html_scanner.py +0 -0
  37. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/jclass_scanner.py +0 -0
  38. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/lang_scanner.py +0 -0
  39. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/lzma_scanner.py +0 -0
  40. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/mxfile_scanner.py +0 -0
  41. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/patch_scanner.py +0 -0
  42. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/pdf_scanner.py +0 -0
  43. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/pptx_scanner.py +0 -0
  44. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/rpm_scanner.py +0 -0
  45. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/rtf_scanner.py +0 -0
  46. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/sqlite3_scanner.py +0 -0
  47. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/strings_scanner.py +0 -0
  48. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/tar_scanner.py +0 -0
  49. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/tmx_scanner.py +0 -0
  50. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/xlsx_scanner.py +0 -0
  51. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/xml_scanner.py +0 -0
  52. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/deep_scanner/zip_scanner.py +0 -0
  53. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/__init__.py +0 -0
  54. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/abstract_provider.py +0 -0
  55. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/analysis_target.py +0 -0
  56. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/byte_content_provider.py +0 -0
  57. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/content_provider.py +0 -0
  58. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/data_content_provider.py +0 -0
  59. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/descriptor.py +0 -0
  60. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/diff_content_provider.py +0 -0
  61. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/file_path_extractor.py +0 -0
  62. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/files_provider.py +0 -0
  63. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/patches_provider.py +0 -0
  64. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/string_content_provider.py +0 -0
  65. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/struct_content_provider.py +0 -0
  66. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/file_handler/text_content_provider.py +0 -0
  67. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/__init__.py +0 -0
  68. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/filter.py +0 -0
  69. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/__init__.py +0 -0
  70. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/general_keyword.py +0 -0
  71. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/general_pattern.py +0 -0
  72. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/group.py +0 -0
  73. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/password_keyword.py +0 -0
  74. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/token_pattern.py +0 -0
  75. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/url_credentials_group.py +0 -0
  76. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/weird_base36_token.py +0 -0
  77. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/group/weird_base64_token.py +0 -0
  78. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/line_git_binary_check.py +0 -0
  79. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/line_specific_key_check.py +0 -0
  80. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/line_uue_part_check.py +0 -0
  81. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_allowlist_check.py +0 -0
  82. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_array_dictionary_check.py +0 -0
  83. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_atlassian_token_check.py +0 -0
  84. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_azure_token_check.py +0 -0
  85. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base32_data_check.py +0 -0
  86. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_data_check.py +0 -0
  87. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_encoded_pem_check.py +0 -0
  88. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_key_check.py +0 -0
  89. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_base64_part_check.py +0 -0
  90. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_basic_auth_check.py +0 -0
  91. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_blocklist_check.py +0 -0
  92. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_camel_case_check.py +0 -0
  93. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_dictionary_keyword_check.py +0 -0
  94. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_discord_bot_check.py +0 -0
  95. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base32_check.py +0 -0
  96. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base36_check.py +0 -0
  97. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base64_check.py +0 -0
  98. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_entropy_base_check.py +0 -0
  99. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_file_path_check.py +0 -0
  100. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_github_check.py +0 -0
  101. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_grafana_check.py +0 -0
  102. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_grafana_service_check.py +0 -0
  103. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_hex_number_check.py +0 -0
  104. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_jfrog_token_check.py +0 -0
  105. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_json_web_key_check.py +0 -0
  106. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_json_web_token_check.py +0 -0
  107. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_last_word_check.py +0 -0
  108. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_length_check.py +0 -0
  109. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_method_check.py +0 -0
  110. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_morphemes_check.py +0 -0
  111. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_not_allowed_pattern_check.py +0 -0
  112. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_not_part_encoded_check.py +0 -0
  113. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_number_check.py +0 -0
  114. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_pattern_check.py +0 -0
  115. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_similarity_check.py +0 -0
  116. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_split_keyword_check.py +0 -0
  117. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_string_type_check.py +0 -0
  118. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base32_check.py +0 -0
  119. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base36_check.py +0 -0
  120. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base64_check.py +0 -0
  121. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_base_check.py +0 -0
  122. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/filters/value_token_check.py +0 -0
  123. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/logger/__init__.py +0 -0
  124. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/logger/logger.py +0 -0
  125. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/__init__.py +0 -0
  126. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/__init__.py +0 -0
  127. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/entropy_evaluation.py +0 -0
  128. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/feature.py +0 -0
  129. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/file_extension.py +0 -0
  130. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/has_html_tag.py +0 -0
  131. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/is_secret_numeric.py +0 -0
  132. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/length_of_attribute.py +0 -0
  133. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/morpheme_dense.py +0 -0
  134. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/rule_name.py +0 -0
  135. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/rule_severity.py +0 -0
  136. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/search_in_attribute.py +0 -0
  137. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in.py +0 -0
  138. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_path.py +0 -0
  139. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_postamble.py +0 -0
  140. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_preamble.py +0 -0
  141. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_transition.py +0 -0
  142. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_value.py +0 -0
  143. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/features/word_in_variable.py +0 -0
  144. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/ml_config.json +0 -0
  145. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/ml_model.onnx +0 -0
  146. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/ml_model/ml_validator.py +0 -0
  147. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/py.typed +0 -0
  148. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/rules/__init__.py +0 -0
  149. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/rules/config.yaml +0 -0
  150. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/rules/rule.py +0 -0
  151. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/__init__.py +0 -0
  152. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/__init__.py +0 -0
  153. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/multi_pattern.py +0 -0
  154. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/pem_key_pattern.py +0 -0
  155. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/scan_type.py +0 -0
  156. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scan_type/single_pattern.py +0 -0
  157. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/scanner/scanner.py +0 -0
  158. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/secret/config.json +0 -0
  159. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/secret/log.yaml +0 -0
  160. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/__init__.py +0 -0
  161. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/hop_stat.py +0 -0
  162. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/pem_key_detector.py +0 -0
  163. {credsweeper-1.13.0 → credsweeper-1.13.2}/credsweeper/utils/util.py +0 -0
  164. {credsweeper-1.13.0 → credsweeper-1.13.2}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: credsweeper
3
- Version: 1.13.0
3
+ Version: 1.13.2
4
4
  Summary: Credential Sweeper
5
5
  Project-URL: Homepage, https://github.com/Samsung/CredSweeper
6
6
  Project-URL: Bug Tracker, https://github.com/Samsung/CredSweeper/issues
@@ -24,4 +24,4 @@ __all__ = [
24
24
  "__version__"
25
25
  ]
26
26
 
27
- __version__ = "1.13.0"
27
+ __version__ = "1.13.2"
@@ -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
- bound
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
- found
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
- lookup
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
- round
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
- sound
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
- if self.check_url_part():
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
- if not self.variable.endswith("://"):
205
- # skip sanitize in case of URL credential rule
206
- self.value = self.url_unicode_split.split(self.value)[0]
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
- deep_scanners.append(ByteScanner)
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
- info = (f"{data_provider.info}|JKS:"
28
- f"{'sensitive data' if keystore.private_keys or keystore.secret_keys else 'default password'}")
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