From e5a4ee8f21689eee6b1cbef7fe19609866fc2c85 Mon Sep 17 00:00:00 2001 From: Roman Babenko Date: Thu, 12 Dec 2024 11:38:23 +0200 Subject: [PATCH] fix \r in xlsx (#631) * fix \r in xlsx * Update credsweeper/filters/value_discord_bot_check.py --- credsweeper/deep_scanner/xlsx_scanner.py | 7 +- .../filters/value_discord_bot_check.py | 8 +- tests/__init__.py | 4 +- tests/data/depth_3.json | 432 ++++++++++------ tests/data/doc.json | 466 +++++++++++++++--- tests/samples/aws_id.ods | Bin 11132 -> 0 bytes tests/samples/aws_id.xlsx | Bin 5529 -> 0 bytes tests/samples/sample.ods | Bin 0 -> 18687 bytes tests/samples/{aws_id.pptx => sample.pptx} | Bin tests/samples/sample.xlsx | Bin 0 -> 9510 bytes 10 files changed, 667 insertions(+), 250 deletions(-) delete mode 100644 tests/samples/aws_id.ods delete mode 100644 tests/samples/aws_id.xlsx create mode 100644 tests/samples/sample.ods rename tests/samples/{aws_id.pptx => sample.pptx} (100%) create mode 100644 tests/samples/sample.xlsx diff --git a/credsweeper/deep_scanner/xlsx_scanner.py b/credsweeper/deep_scanner/xlsx_scanner.py index f14b91001..a4f40f336 100644 --- a/credsweeper/deep_scanner/xlsx_scanner.py +++ b/credsweeper/deep_scanner/xlsx_scanner.py @@ -25,11 +25,10 @@ def data_scan( candidates = [] try: book = pd.read_excel(io.BytesIO(data_provider.data), sheet_name=None, header=None) - sheet_lines = [] for sheet_name, sheet_data in book.items(): - text = sheet_data.fillna('').astype(str) - for i in text.values: - sheet_lines.append('\t'.join(i)) + # replace open xml carriage returns _x000D_ before line feed only + df = sheet_data.replace(to_replace="_x000D_\n", value='\n', regex=True).fillna('').astype(str) + sheet_lines = ['\t'.join(x) for x in df.values] string_data_provider = StringContentProvider(lines=sheet_lines, file_path=data_provider.file_path, file_type=data_provider.file_type, diff --git a/credsweeper/filters/value_discord_bot_check.py b/credsweeper/filters/value_discord_bot_check.py index 583630058..b53f5c3a5 100644 --- a/credsweeper/filters/value_discord_bot_check.py +++ b/credsweeper/filters/value_discord_bot_check.py @@ -1,9 +1,11 @@ import contextlib +from credsweeper.common.constants import Chars from credsweeper.config import Config from credsweeper.credentials import LineData from credsweeper.file_handler.analysis_target import AnalysisTarget from credsweeper.filters import Filter +from credsweeper.filters.value_entropy_base64_check import ValueEntropyBase64Check from credsweeper.utils import Util @@ -28,6 +30,10 @@ def run(self, line_data: LineData, target: AnalysisTarget) -> bool: # . must be in value according regex dot_separator_index = line_data.value.index('.') id_part = line_data.value[:dot_separator_index] - if int(Util.decode_base64(id_part, padding_safe=True, urlsafe_detect=True)): + discord_id = int(Util.decode_base64(id_part, padding_safe=True, urlsafe_detect=True)) + entropy_part = line_data.value[dot_separator_index:] + entropy = Util.get_shannon_entropy(entropy_part, Chars.BASE64STD_CHARS.value) + min_entropy = ValueEntropyBase64Check.get_min_data_entropy(len(line_data.value)) + if not 1000 > discord_id and not min_entropy < entropy: return False return True diff --git a/tests/__init__.py b/tests/__init__.py index 1f8d81222..9a87e8d7e 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -17,10 +17,10 @@ SAMPLES_POST_CRED_COUNT = SAMPLES_CRED_COUNT - ML_FILTERED # with option --doc -SAMPLES_IN_DOC = 453 +SAMPLES_IN_DOC = 463 # archived credentials that are not found without --depth -SAMPLES_IN_DEEP_1 = SAMPLES_POST_CRED_COUNT + 29 +SAMPLES_IN_DEEP_1 = SAMPLES_POST_CRED_COUNT + 33 SAMPLES_IN_DEEP_2 = SAMPLES_IN_DEEP_1 + 54 SAMPLES_IN_DEEP_3 = SAMPLES_IN_DEEP_2 + 1 diff --git a/tests/data/depth_3.json b/tests/data/depth_3.json index e2a9c9433..f2cbed01f 100644 --- a/tests/data/depth_3.json +++ b/tests/data/depth_3.json @@ -472,168 +472,6 @@ } ] }, - { - "api_validation": "NOT_AVAILABLE", - "ml_validation": "NOT_AVAILABLE", - "ml_probability": null, - "rule": "AWS Client ID", - "severity": "high", - "confidence": "moderate", - "line_data_list": [ - { - "line": "AKIAGIREOGIODT1X4BT7", - "line_num": 2, - "path": "./tests/samples/aws_id.ods", - "info": "./tests/samples/aws_id.ods|ZIP|content.xml|RAW", - "value": "AKIAGIREOGIODT1X4BT7", - "value_start": 3882, - "value_end": 3902, - "variable": null, - "variable_start": -2, - "variable_end": -2, - "entropy_validation": { - "iterator": "BASE64_CHARS", - "entropy": 3.6841837197791887, - "valid": false - } - } - ] - }, - { - "api_validation": "NOT_AVAILABLE", - "ml_validation": "NOT_AVAILABLE", - "ml_probability": null, - "rule": "UUID", - "severity": "info", - "confidence": "strong", - "line_data_list": [ - { - "line": " Click to edit the title text format<footer><number><date/time>", - "line_num": 2, - "path": "./tests/samples/aws_id.pptx", - "info": "./tests/samples/aws_id.pptx|ZIP|ppt/slideMasters/slideMaster1.xml|RAW", - "value": "1B26FE4F-8819-409F-9556-40447A77EBF2", - "value_start": 3868, - "value_end": 3904, - "variable": null, - "variable_start": -2, - "variable_end": -2, - "entropy_validation": { - "iterator": "HEX_CHARS", - "entropy": 3.342171793538618, - "valid": true - } - } - ] - }, - { - "api_validation": "NOT_AVAILABLE", - "ml_validation": "NOT_AVAILABLE", - "ml_probability": null, - "rule": "UUID", - "severity": "info", - "confidence": "strong", - "line_data_list": [ - { - "line": " Footer<#>", - "line_num": 2, - "path": "./tests/samples/aws_id.pptx", - "info": "./tests/samples/aws_id.pptx|ZIP|ppt/slideLayouts/slideLayout1.xml|RAW", - "value": "42F61B0C-09B2-455B-8854-E1D3A3979B74", - "value_start": 2610, - "value_end": 2646, - "variable": null, - "variable_start": -2, - "variable_end": -2, - "entropy_validation": { - "iterator": "HEX_CHARS", - "entropy": 3.5535506956063068, - "valid": true - } - } - ] - }, - { - "api_validation": "NOT_AVAILABLE", - "ml_validation": "NOT_AVAILABLE", - "ml_probability": null, - "rule": "AWS Client ID", - "severity": "high", - "confidence": "moderate", - "line_data_list": [ - { - "line": " Follow the white rabbitAKIAGIREOGIPPTX1Y45X", - "line_num": 2, - "path": "./tests/samples/aws_id.pptx", - "info": "./tests/samples/aws_id.pptx|ZIP|ppt/slides/slide1.xml|RAW", - "value": "AKIAGIREOGIPPTX1Y45X", - "value_start": 2403, - "value_end": 2423, - "variable": null, - "variable_start": -2, - "variable_end": -2, - "entropy_validation": { - "iterator": "BASE64_CHARS", - "entropy": 3.6841837197791887, - "valid": false - } - } - ] - }, - { - "api_validation": "NOT_AVAILABLE", - "ml_validation": "NOT_AVAILABLE", - "ml_probability": null, - "rule": "UUID", - "severity": "info", - "confidence": "strong", - "line_data_list": [ - { - "line": "", - "line_num": 2, - "path": "./tests/samples/aws_id.xlsx", - "info": "./tests/samples/aws_id.xlsx|ZIP|xl/workbook.xml|RAW", - "value": "7626C862-2A13-11E5-B345-FEFF819CDC9F", - "value_start": 714, - "value_end": 750, - "variable": null, - "variable_start": -2, - "variable_end": -2, - "entropy_validation": { - "iterator": "HEX_CHARS", - "entropy": 3.4770260427684323, - "valid": true - } - } - ] - }, - { - "api_validation": "NOT_AVAILABLE", - "ml_validation": "NOT_AVAILABLE", - "ml_probability": null, - "rule": "AWS Client ID", - "severity": "high", - "confidence": "moderate", - "line_data_list": [ - { - "line": "AKIAGIREOGIAXLSX4BT5", - "line_num": 2, - "path": "./tests/samples/aws_id.xlsx", - "info": "./tests/samples/aws_id.xlsx|ZIP|xl/sharedStrings.xml|RAW", - "value": "AKIAGIREOGIAXLSX4BT5", - "value_start": 125, - "value_end": 145, - "variable": null, - "variable_start": -2, - "variable_end": -2, - "entropy_validation": { - "iterator": "BASE64_CHARS", - "entropy": 3.6464393446710153, - "valid": false - } - } - ] - }, { "api_validation": "NOT_AVAILABLE", "ml_validation": "NOT_AVAILABLE", @@ -11186,6 +11024,60 @@ } ] }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "NOT_AVAILABLE", + "ml_probability": null, + "rule": "AWS Client ID", + "severity": "high", + "confidence": "moderate", + "line_data_list": [ + { + "line": "AKIAGIREOGIAXLSX4BT5userhostloginpassword\ud64d\uae38\ub3d9\uc804192.168.0.1adminH0NgGi1d0nGroot127.0.0.1rootiMr00TA1 password is w3Ry5tR0nGA2 ID:master,PW:dipPr10Gg!B3 192.168.0.1 master/NBd@126t!\uc8fc\uc778 FNAT-CC0TG_old10.53.51.17192.168.101.96377710.53.51.17192.168.101.9 63777 \uc8fc\uc778 FNAT-CC0TG_oldpassword:\u25a1 \ubb38\uc758 \ub0b4\uc6a9 : \u203b Error Stack Trace\ub3c4 \ud568\uaed8 \ucca8\ubd80 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4.12345F16 224.52.124.93 root/A0dM1Nka", + "line_num": 2, + "path": "./tests/samples/sample.ods", + "info": "./tests/samples/sample.ods|ZIP|content.xml|RAW", + "value": "AKIAGIREOGIAXLSX4BT5", + "value_start": 7621, + "value_end": 7641, + "variable": null, + "variable_start": -2, + "variable_end": -2, + "entropy_validation": { + "iterator": "BASE64_CHARS", + "entropy": 3.6464393446710153, + "valid": false + } + } + ] + }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "VALIDATED_KEY", + "ml_probability": 0.989, + "rule": "Password", + "severity": "medium", + "confidence": "moderate", + "line_data_list": [ + { + "line": "AKIAGIREOGIAXLSX4BT5userhostloginpassword\ud64d\uae38\ub3d9\uc804192.168.0.1adminH0NgGi1d0nGroot127.0.0.1rootiMr00TA1 password is w3Ry5tR0nGA2 ID:master,PW:dipPr10Gg!B3 192.168.0.1 master/NBd@126t!\uc8fc\uc778 FNAT-CC0TG_old10.53.51.17192.168.101.96377710.53.51.17192.168.101.9 63777 \uc8fc\uc778 FNAT-CC0TG_oldpassword:\u25a1 \ubb38\uc758 \ub0b4\uc6a9 : \u203b Error Stack Trace\ub3c4 \ud568\uaed8 \ucca8\ubd80 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4.12345F16 224.52.124.93 root/A0dM1Nka", + "line_num": 2, + "path": "./tests/samples/sample.ods", + "info": "./tests/samples/sample.ods|ZIP|content.xml|HTML", + "value": "dipPr10Gg!B3", + "value_start": 136, + "value_end": 148, + "variable": "PW", + "variable_start": 133, + "variable_end": 135, + "entropy_validation": { + "iterator": "BASE64_CHARS", + "entropy": 3.2862156256610597, + "valid": false + } + } + ] + }, { "api_validation": "NOT_AVAILABLE", "ml_validation": "NOT_AVAILABLE", @@ -11294,6 +11186,87 @@ } ] }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "NOT_AVAILABLE", + "ml_probability": null, + "rule": "UUID", + "severity": "info", + "confidence": "strong", + "line_data_list": [ + { + "line": " Click to edit the title text format<footer><number><date/time>", + "line_num": 2, + "path": "./tests/samples/sample.pptx", + "info": "./tests/samples/sample.pptx|ZIP|ppt/slideMasters/slideMaster1.xml|RAW", + "value": "1B26FE4F-8819-409F-9556-40447A77EBF2", + "value_start": 3868, + "value_end": 3904, + "variable": null, + "variable_start": -2, + "variable_end": -2, + "entropy_validation": { + "iterator": "HEX_CHARS", + "entropy": 3.342171793538618, + "valid": true + } + } + ] + }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "NOT_AVAILABLE", + "ml_probability": null, + "rule": "UUID", + "severity": "info", + "confidence": "strong", + "line_data_list": [ + { + "line": " Footer<#>", + "line_num": 2, + "path": "./tests/samples/sample.pptx", + "info": "./tests/samples/sample.pptx|ZIP|ppt/slideLayouts/slideLayout1.xml|RAW", + "value": "42F61B0C-09B2-455B-8854-E1D3A3979B74", + "value_start": 2610, + "value_end": 2646, + "variable": null, + "variable_start": -2, + "variable_end": -2, + "entropy_validation": { + "iterator": "HEX_CHARS", + "entropy": 3.5535506956063068, + "valid": true + } + } + ] + }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "NOT_AVAILABLE", + "ml_probability": null, + "rule": "AWS Client ID", + "severity": "high", + "confidence": "moderate", + "line_data_list": [ + { + "line": " Follow the white rabbitAKIAGIREOGIPPTX1Y45X", + "line_num": 2, + "path": "./tests/samples/sample.pptx", + "info": "./tests/samples/sample.pptx|ZIP|ppt/slides/slide1.xml|RAW", + "value": "AKIAGIREOGIPPTX1Y45X", + "value_start": 2403, + "value_end": 2423, + "variable": null, + "variable_start": -2, + "variable_end": -2, + "entropy_validation": { + "iterator": "BASE64_CHARS", + "entropy": 3.6841837197791887, + "valid": false + } + } + ] + }, { "api_validation": "NOT_AVAILABLE", "ml_validation": "VALIDATED_KEY", @@ -11321,6 +11294,141 @@ } ] }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "VALIDATED_KEY", + "ml_probability": 0.886, + "rule": "Password", + "severity": "medium", + "confidence": "moderate", + "line_data_list": [ + { + "line": "AKIAGIREOGIAXLSX4BT5userhostloginpassword \ud64d\uae38\ub3d9\uc804192.168.0.1adminH0NgGi1d0nGroot127.0.0.1iMr00TA1 password is w3Ry5tR0nGA2 ID:master,PW:dipPr10Gg!B3 192.168.0.1 master/NBd@126t! \uc8fc\uc778 FNAT-CC0TG_old10.53.51.17192.168.101.9 63777password: \u25a1 \ubb38\uc758 \ub0b4\uc6a9 : \u203b Error Stack Trace\ub3c4 \ud568\uaed8 \ucca8\ubd80 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4. 12345F16 224.52.124.93 root/A0dM1Nka", + "line_num": 2, + "path": "./tests/samples/sample.xlsx", + "info": "./tests/samples/sample.xlsx|ZIP|xl/sharedStrings.xml|RAW", + "value": " ", + "value_start": 1163, + "value_end": 1167, + "variable": "password", + "variable_start": 1154, + "variable_end": 1162, + "entropy_validation": { + "iterator": "BASE64_CHARS", + "entropy": 1.0, + "valid": false + } + } + ] + }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "NOT_AVAILABLE", + "ml_probability": null, + "rule": "UUID", + "severity": "info", + "confidence": "strong", + "line_data_list": [ + { + "line": "", + "line_num": 2, + "path": "./tests/samples/sample.xlsx", + "info": "./tests/samples/sample.xlsx|ZIP|xl/workbook.xml|RAW", + "value": "7626C862-2A13-11E5-B345-FEFF819CDC9F", + "value_start": 1015, + "value_end": 1051, + "variable": null, + "variable_start": -2, + "variable_end": -2, + "entropy_validation": { + "iterator": "HEX_CHARS", + "entropy": 3.4770260427684323, + "valid": true + } + } + ] + }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "NOT_AVAILABLE", + "ml_probability": null, + "rule": "AWS Client ID", + "severity": "high", + "confidence": "moderate", + "line_data_list": [ + { + "line": "AKIAGIREOGIAXLSX4BT5userhostloginpassword \ud64d\uae38\ub3d9\uc804192.168.0.1adminH0NgGi1d0nGroot127.0.0.1iMr00TA1 password is w3Ry5tR0nGA2 ID:master,PW:dipPr10Gg!B3 192.168.0.1 master/NBd@126t! \uc8fc\uc778 FNAT-CC0TG_old10.53.51.17192.168.101.9 63777password: \u25a1 \ubb38\uc758 \ub0b4\uc6a9 : \u203b Error Stack Trace\ub3c4 \ud568\uaed8 \ucca8\ubd80 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4. 12345F16 224.52.124.93 root/A0dM1Nka", + "line_num": 2, + "path": "./tests/samples/sample.xlsx", + "info": "./tests/samples/sample.xlsx|ZIP|xl/sharedStrings.xml|RAW", + "value": "AKIAGIREOGIAXLSX4BT5", + "value_start": 127, + "value_end": 147, + "variable": null, + "variable_start": -2, + "variable_end": -2, + "entropy_validation": { + "iterator": "BASE64_CHARS", + "entropy": 3.6464393446710153, + "valid": false + } + } + ] + }, + { + "api_validation": "NOT_AVAILABLE", + "ml_validation": "VALIDATED_KEY", + "ml_probability": 0.899, + "rule": "Password", + "severity": "medium", + "confidence": "moderate", + "line_data_list": [ + { + "line": "AKIAGIREOGIAXLSX4BT5userhostloginpassword \ud64d\uae38\ub3d9\uc804192.168.0.1adminH0NgGi1d0nGroot127.0.0.1iMr00TA1 password is w3Ry5tR0nGA2 ID:master,PW:dipPr10Gg!B3 192.168.0.1 master/NBd@126t! \uc8fc\uc778 FNAT-CC0TG_old10.53.51.17192.168.101.9 63777password: \u25a1 \ubb38\uc758 \ub0b4\uc6a9 : \u203b Error Stack Trace\ub3c4 \ud568\uaed8 \ucca8\ubd80 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4. 12345F16 224.52.124.93 root/A0dM1Nka", + "line_num": 2, + "path": "./tests/samples/sample.xlsx", + "info": "./tests/samples/sample.xlsx|ZIP|xl/sharedStrings.xml|RAW", + "value": "dipPr10Gg!=b?u6i);K5x6mtX-N-1~BK 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 diff --git a/tests/samples/aws_id.xlsx b/tests/samples/aws_id.xlsx deleted file mode 100644 index 2655e1a94f7a2eb345872a6699988d6954a7f48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5529 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 diff --git a/tests/samples/sample.ods b/tests/samples/sample.ods new file mode 100644 index 0000000000000000000000000000000000000000..bba6aa1f39146b338544c1e55c992b65596efc49 GIT binary patch literal 18687 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