From 6439ecdea5b2c4163b14708d77aff636bfeb3b48 Mon Sep 17 00:00:00 2001 From: ohyeah521 Date: Wed, 10 Jan 2024 08:28:36 +0800 Subject: [PATCH 1/6] Using multithreading to improve code efficiency (#2319) * Using multithreading to improve code efficiency * Update manifest_analysis.py * QA * Handle asterik in host names. --------- Co-authored-by: Ajin Abraham --- .../views/android/manifest_analysis.py | 70 ++++++++++++------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py index 208d6d2fb5..323c64d815 100755 --- a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py +++ b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py @@ -4,6 +4,7 @@ import logging import requests +from concurrent.futures import ThreadPoolExecutor from mobsf.MobSF.utils import ( upstream_proxy, @@ -59,33 +60,47 @@ def assetlinks_check(act_name, well_knowns): """Well known assetlink check.""" findings = [] - iden = 'sha256_cert_fingerprints' - try: - proxies, verify = upstream_proxy('https') - for host, w_url in well_knowns: + + with ThreadPoolExecutor() as executor: + futures = [] + for w_url, host in well_knowns.items(): logger.info( 'App Link Assetlinks Check - [%s] %s', act_name, host) - status = False - status_code = 0 - try: - r = requests.get(w_url, - allow_redirects=True, - proxies=proxies, - verify=verify) - status_code = r.status_code - if (str(r.status_code).startswith('2') - and iden in str(r.json())): - status = True - except Exception: - pass - findings.append({ - 'url': w_url, + futures.append( + executor.submit(_check_url, host, w_url)) + for future in futures: + findings.append(future.result()) + + return findings + +def _check_url(host, w_url): + try: + iden = 'sha256_cert_fingerprints' + proxies, verify = upstream_proxy('https') + status = False + status_code = 0 + + r = requests.get(w_url, + allow_redirects=True, + proxies=proxies, + verify=verify, + timeout=5) + + status_code = r.status_code + if (str(status_code).startswith('2') and iden in str(r.json())): + status = True + + return {'url': w_url, 'host': host, 'status_code': status_code, - 'status': status}) + 'status': status} + except Exception: - logger.exception('Well Known Assetlinks Check') - return findings + logger.exception(f'Well Known Assetlinks Check for URL: {w_url}') + return {'url': w_url, + 'host': host, + 'status_code': None, + 'status': False} def get_browsable_activities(node, ns): @@ -99,7 +114,7 @@ def get_browsable_activities(node, ns): paths = [] path_prefixs = [] path_patterns = [] - well_known = [] + well_known = {} well_known_path = '/.well-known/assetlinks.json' catg = node.getElementsByTagName('category') for cat in catg: @@ -129,12 +144,13 @@ def get_browsable_activities(node, ns): path_patterns.append(path_pattern) # Collect possible well-known paths if scheme and scheme in ('http', 'https') and host: + host = host.replace('*.', '') + shost = f'{scheme}://{host}' if port: - c_url = f'{scheme}://{host}:{port}{well_known_path}' + c_url = f'{shost}:{port}{well_known_path}' else: - c_url = f'{scheme}://{host}{well_known_path}' - if (host, c_url) not in well_known: - well_known.append((host, c_url)) + c_url = f'{shost}{well_known_path}' + well_known[c_url] = shost schemes = [scheme + '://' for scheme in schemes] browse_dic['schemes'] = schemes browse_dic['mime_types'] = mime_types From b6287be97adcdddee0bf9a6212254cd34c6ee5ce Mon Sep 17 00:00:00 2001 From: Ajin Abraham Date: Wed, 10 Jan 2024 22:07:21 -0800 Subject: [PATCH 2/6] GPT Goodness (#2318) * QA * Version Bump --- mobsf/MobSF/init.py | 2 +- .../views/android/android_manifest_desc.py | 12 +- .../views/android/manifest_analysis.py | 6 +- poetry.lock | 423 +++++++++--------- pyproject.toml | 2 +- 5 files changed, 226 insertions(+), 219 deletions(-) diff --git a/mobsf/MobSF/init.py b/mobsf/MobSF/init.py index 267162c76c..1fb16c066b 100644 --- a/mobsf/MobSF/init.py +++ b/mobsf/MobSF/init.py @@ -10,7 +10,7 @@ logger = logging.getLogger(__name__) -VERSION = '3.9.1' +VERSION = '3.9.2' BANNER = """ __ __ _ ____ _____ _____ ___ | \/ | ___ | |__/ ___|| ___|_ _|___ // _ \ diff --git a/mobsf/StaticAnalyzer/views/android/android_manifest_desc.py b/mobsf/StaticAnalyzer/views/android/android_manifest_desc.py index a9544b95bc..de314edb01 100644 --- a/mobsf/StaticAnalyzer/views/android/android_manifest_desc.py +++ b/mobsf/StaticAnalyzer/views/android/android_manifest_desc.py @@ -156,14 +156,15 @@ 'attribute set to "singleTask". It is then ' 'possible for other applications to place a ' 'malicious activity on top of the activity stack ' - 'resulting in Task Hijacking/StrandHogg 1.0' + 'resulting in Task Hijacking/StrandHogg 1.0 ' 'vulnerability. This makes the application an easy ' 'target for phishing attacks. The vulnerability can ' 'be remediated by setting the launch mode attribute ' 'to "singleInstance" or by setting an empty ' 'taskAffinity (taskAffinity="") attribute. You can ' - 'also update the target SDK version of the app to ' - '28 or higher to fix this issue at platform level.'), + 'also update the target SDK version (%s) of the ' + 'app to 28 or higher to fix this issue at ' + 'platform level.'), 'name': ('Activity (%s) is vulnerable to Android ' 'Task Hijacking/StrandHogg.'), }, @@ -180,8 +181,9 @@ 'be remediated by setting the launch mode attribute ' 'to "singleInstance" and by setting an empty ' 'taskAffinity (taskAffinity=""). You can also update ' - 'the target SDK version of the app to 29 or higher ' - 'to fix this issue at platform level.'), + 'the target SDK version (%s) of the app ' + 'to 29 or higher to fix this issue at ' + 'platform level.'), 'name': 'Activity (%s) is vulnerable to StrandHogg 2.0', }, 'improper_provider_permission': { diff --git a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py index 323c64d815..7e2c1240bd 100755 --- a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py +++ b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py @@ -54,6 +54,7 @@ '31': '12', '32': '12L', '33': '13', + '34': '14', } @@ -309,15 +310,14 @@ def manifest_analysis(mfxml, ns, man_data_dic, src_type, app_dir): target_sdk = ANDROID_8_0_LEVEL if (target_sdk < ANDROID_9_0_LEVEL and launchmode == 'singleTask'): - ret_list.append(('task_hijacking', (item,), ())) + ret_list.append(('task_hijacking', (item,), (target_sdk,))) # Android StrandHogg 2.0 exported_act = node.getAttribute(f'{ns}:exported') if (target_sdk < ANDROID_10_0_LEVEL - and itemname in ['Activity', 'Activity-Alias'] and exported_act == 'true' and (launchmode != 'singleInstance' or task_affinity != '')): - ret_list.append(('task_hijacking2', (item,), ())) + ret_list.append(('task_hijacking2', (item,), (target_sdk,))) # Exported Check item = '' diff --git a/poetry.lock b/poetry.lock index 719be62d66..1a2c9c4e67 100644 --- a/poetry.lock +++ b/poetry.lock @@ -781,17 +781,17 @@ files = [ [[package]] name = "django" -version = "5.0" +version = "5.0.1" description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." optional = false python-versions = ">=3.10" files = [ - {file = "Django-5.0-py3-none-any.whl", hash = "sha256:3a9fd52b8dbeae335ddf4a9dfa6c6a0853a1122f1fb071a8d5eca979f73a05c8"}, - {file = "Django-5.0.tar.gz", hash = "sha256:7d29e14dfbc19cb6a95a4bd669edbde11f5d4c6a71fdaa42c2d40b6846e807f7"}, + {file = "Django-5.0.1-py3-none-any.whl", hash = "sha256:f47a37a90b9bbe2c8ec360235192c7fddfdc832206fcf618bb849b39256affc1"}, + {file = "Django-5.0.1.tar.gz", hash = "sha256:8c8659665bc6e3a44fefe1ab0a291e5a3fb3979f9a8230be29de975e57e8f854"}, ] [package.dependencies] -asgiref = ">=3.7.0" +asgiref = ">=3.7.0,<4" sqlparse = ">=0.3.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} @@ -1117,13 +1117,13 @@ files = [ [[package]] name = "ipython" -version = "8.19.0" +version = "8.20.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.19.0-py3-none-any.whl", hash = "sha256:2f55d59370f59d0d2b2212109fe0e6035cfea436b1c0e6150ad2244746272ec5"}, - {file = "ipython-8.19.0.tar.gz", hash = "sha256:ac4da4ecf0042fb4e0ce57c60430c2db3c719fa8bdf92f8631d6bd8a5785d1f0"}, + {file = "ipython-8.20.0-py3-none-any.whl", hash = "sha256:bc9716aad6f29f36c449e30821c9dd0c1c1a7b59ddcc26931685b87b4c569619"}, + {file = "ipython-8.20.0.tar.gz", hash = "sha256:2f21bd3fc1d51550c89ee3944ae04bbc7bc79e129ea0937da6e6c68bfdbf117a"}, ] [package.dependencies] @@ -1405,110 +1405,92 @@ files = [ [[package]] name = "lxml" -version = "4.9.4" +version = "5.1.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, +python-versions = ">=3.6" +files = [ + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cfbac9f6149174f76df7e08c2e28b19d74aed90cad60383ad8671d3af7d0502f"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] +source = ["Cython (>=3.0.7)"] [[package]] name = "macholib" @@ -1820,47 +1802,47 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "numpy" -version = "1.26.2" +version = "1.26.3" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, - {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, - {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, - {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, - {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, - {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, - {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, - {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, - {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, - {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, - {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, + {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, + {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, + {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, + {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, + {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, + {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, + {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, + {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, + {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, ] [[package]] @@ -1979,70 +1961,88 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.1.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "plotly" @@ -2227,17 +2227,22 @@ test = ["codecov (>=2.0.5)", "hypothesis (>=3.5.3)", "mock (>=1.0.1)", "pytest ( [[package]] name = "pydot" -version = "1.4.2" +version = "2.0.0" description = "Python interface to Graphviz's Dot" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.7" files = [ - {file = "pydot-1.4.2-py2.py3-none-any.whl", hash = "sha256:66c98190c65b8d2e2382a441b4c0edfdb4f4c025ef9cb9874de478fb0793a451"}, - {file = "pydot-1.4.2.tar.gz", hash = "sha256:248081a39bcb56784deb018977e428605c1c758f10897a339fce1dd728ff007d"}, + {file = "pydot-2.0.0-py3-none-any.whl", hash = "sha256:408a47913ea7bd5d2d34b274144880c1310c4aee901f353cf21fe2e526a4ea28"}, + {file = "pydot-2.0.0.tar.gz", hash = "sha256:60246af215123fa062f21cd791be67dda23a6f280df09f68919e637a1e4f3235"}, ] [package.dependencies] -pyparsing = ">=2.1.4" +pyparsing = ">=3" + +[package.extras] +dev = ["black", "chardet"] +release = ["zest.releaser[recommended]"] +tests = ["black", "chardet", "tox"] [[package]] name = "pygments" @@ -2983,13 +2988,13 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.14.0" +version = "5.14.1" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, - {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, + {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, + {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, ] [package.extras] @@ -3009,13 +3014,13 @@ files = [ [[package]] name = "tzdata" -version = "2023.3" +version = "2023.4" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] [[package]] @@ -3155,13 +3160,13 @@ bracex = ">=2.1.1" [[package]] name = "wcwidth" -version = "0.2.12" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, - {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index ffd1a10102..8ec5ef504f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "mobsf" -version = "3.9.1" +version = "3.9.2" description = "Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis." keywords = ["mobsf", "mobile security framework", "mobile security", "security tool", "static analysis", "dynamic analysis", "malware analysis"] authors = ["Ajin Abraham "] From e67ceeba82f6128dcfe6d410f86b9f909e87be2b Mon Sep 17 00:00:00 2001 From: Ajin Abraham Date: Wed, 10 Jan 2024 22:36:51 -0800 Subject: [PATCH 3/6] Update SECURITY.md (#2323) updated security policy --- .github/SECURITY.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 0c7461860e..1c34236e4f 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -16,6 +16,9 @@ Please report all security issues [here](https://github.com/MobSF/Mobile-Securit ## Past Security Issues -* [Local file reading regression < 3.0.0](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/1197) -* [Upload a malicious zip file can overwrite arbitary files >=v0.9.3.2 && <=0.9.4.1](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/358) -* [Fix Local File Inclusion Vulnerability in ViewSource Function. Version <= v0.9.2](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/166) +| Vulnerability | Affected Versions | +| ------- | ------------------ | +| [Remote Code Execution via arbitrary file overwrite vulnerability in apktool <2.9.2](https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/19c1b55c2c59596f2d43439926c9dc976cbeaec4), [[CVE-2024-21633]](https://github.com/0x33c0unt/CVE-2024-21633) | `<=3.9.1` | +| [Arbitrary Local file read regression](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/1197) | `<3.0.0` | +| [Upload a malicious zip file can overwrite arbitary files](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/358) | `>=0.9.3.2` && `<=0.9.4.1` | +| [Arbitrary Local file read](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/166) | `<=0.9.2` | From da7d1eec09a4d4b730a0133dd36e7b262847b531 Mon Sep 17 00:00:00 2001 From: Ajin Abraham Date: Sat, 13 Jan 2024 20:00:46 -0800 Subject: [PATCH 4/6] [HOTFIX][SECURITY] Fix an LFI, DSA Pub Key parsing bug and dependencies (#2326) * [SECURITY] Fixes an LFI reported by @0x33c0unt - A crafted APK resource with icon name containing arbitrary path will get copied by MobSF as the icon file to the download directory which is available under `/download/` route. Fixed by https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/a58f8a8c0aa49e1581d97e19e8e2255ca96cd838 * Fixes #2324 , Bug in parsing DSA Public Key parameters for fingerprint calculation. * Update dependencies --- .github/SECURITY.md | 3 +- mobsf/MobSF/init.py | 2 +- .../views/android/cert_analysis.py | 6 +- .../views/android/icon_analysis.py | 6 + .../views/android/manifest_analysis.py | 2 +- poetry.lock | 136 +++++++++--------- pyproject.toml | 2 +- 7 files changed, 82 insertions(+), 75 deletions(-) diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 1c34236e4f..952a7a165d 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -18,7 +18,8 @@ Please report all security issues [here](https://github.com/MobSF/Mobile-Securit | Vulnerability | Affected Versions | | ------- | ------------------ | +| [Arbitrary Local file read in APK icon resource](https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/a58f8a8c0aa49e1581d97e19e8e2255ca96cd838) | `>=1.0.4, <=3.9.2` | | [Remote Code Execution via arbitrary file overwrite vulnerability in apktool <2.9.2](https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/19c1b55c2c59596f2d43439926c9dc976cbeaec4), [[CVE-2024-21633]](https://github.com/0x33c0unt/CVE-2024-21633) | `<=3.9.1` | | [Arbitrary Local file read regression](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/1197) | `<3.0.0` | -| [Upload a malicious zip file can overwrite arbitary files](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/358) | `>=0.9.3.2` && `<=0.9.4.1` | +| [Upload a malicious zip file can overwrite arbitary files](https://github.com/MobSF/Mobile-Security-Framework-MobSF/issues/358) | `>=0.9.3.2, <=0.9.4.1` | | [Arbitrary Local file read](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/166) | `<=0.9.2` | diff --git a/mobsf/MobSF/init.py b/mobsf/MobSF/init.py index 1fb16c066b..2165017bf3 100644 --- a/mobsf/MobSF/init.py +++ b/mobsf/MobSF/init.py @@ -10,7 +10,7 @@ logger = logging.getLogger(__name__) -VERSION = '3.9.2' +VERSION = '3.9.3' BANNER = """ __ __ _ ____ _____ _____ ___ | \/ | ___ | |__/ ___|| ___|_ _|___ // _ \ diff --git a/mobsf/StaticAnalyzer/views/android/cert_analysis.py b/mobsf/StaticAnalyzer/views/android/cert_analysis.py index dbdc6d694a..aa0944b7d1 100755 --- a/mobsf/StaticAnalyzer/views/android/cert_analysis.py +++ b/mobsf/StaticAnalyzer/views/android/cert_analysis.py @@ -104,9 +104,9 @@ def get_pub_key_details(data): elif isinstance(x509_public_key, dsa.DSAPublicKey): alg = 'dsa' dsa_parameters = x509_public_key.parameters() - p = dsa_parameters.p - q = dsa_parameters.q - g = dsa_parameters.g + p = dsa_parameters.parameter_numbers().p + q = dsa_parameters.parameter_numbers().q + g = dsa_parameters.parameter_numbers().g y = x509_public_key.public_numbers().y to_hash = f'{p}:{q}:{g}:{y}' elif isinstance(x509_public_key, ec.EllipticCurvePublicKey): diff --git a/mobsf/StaticAnalyzer/views/android/icon_analysis.py b/mobsf/StaticAnalyzer/views/android/icon_analysis.py index 949e0806f8..073a50b158 100755 --- a/mobsf/StaticAnalyzer/views/android/icon_analysis.py +++ b/mobsf/StaticAnalyzer/views/android/icon_analysis.py @@ -20,6 +20,7 @@ from mobsf.MobSF.utils import ( find_java_binary, is_file_exists, + is_path_traversal, ) @@ -156,6 +157,8 @@ def get_icon_src(a, app_dic, res_dir): icon_name = None if a: icon_name = a.get_app_icon(max_dpi=icon_resolution) + if is_path_traversal(icon_name): + icon_name = None if not icon_name: # androguard cannot find icon file. icon_name = '' @@ -196,6 +199,9 @@ def get_icon_src(a, app_dic, res_dir): if icon_src.endswith('.xml'): logger.warning('Cannot find icon file from xml') icon_src = '' + elif not icon_src.endswith(('.png', '.svg', '.webp')): + logger.warning('Cannot find a valid icon file') + icon_src = '' if not icon_name: logger.warning('Cannot find icon file') icon_src = '' diff --git a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py index 7e2c1240bd..8b3b6caa0b 100755 --- a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py +++ b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py @@ -97,7 +97,7 @@ def _check_url(host, w_url): 'status': status} except Exception: - logger.exception(f'Well Known Assetlinks Check for URL: {w_url}') + logger.error(f'Well Known Assetlinks Check for URL: {w_url}') return {'url': w_url, 'host': host, 'status_code': None, diff --git a/poetry.lock b/poetry.lock index 1a2c9c4e67..90440ab83a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -881,53 +881,53 @@ dotenv = ["python-dotenv"] [[package]] name = "fonttools" -version = "4.47.0" +version = "4.47.2" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d2404107626f97a221dc1a65b05396d2bb2ce38e435f64f26ed2369f68675d9"}, - {file = "fonttools-4.47.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c01f409be619a9a0f5590389e37ccb58b47264939f0e8d58bfa1f3ba07d22671"}, - {file = "fonttools-4.47.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d986b66ff722ef675b7ee22fbe5947a41f60a61a4da15579d5e276d897fbc7fa"}, - {file = "fonttools-4.47.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8acf6dd0434b211b3bd30d572d9e019831aae17a54016629fa8224783b22df8"}, - {file = "fonttools-4.47.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:495369c660e0c27233e3c572269cbe520f7f4978be675f990f4005937337d391"}, - {file = "fonttools-4.47.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c59227d7ba5b232281c26ae04fac2c73a79ad0e236bca5c44aae904a18f14faf"}, - {file = "fonttools-4.47.0-cp310-cp310-win32.whl", hash = "sha256:59a6c8b71a245800e923cb684a2dc0eac19c56493e2f896218fcf2571ed28984"}, - {file = "fonttools-4.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:52c82df66201f3a90db438d9d7b337c7c98139de598d0728fb99dab9fd0495ca"}, - {file = "fonttools-4.47.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:854421e328d47d70aa5abceacbe8eef231961b162c71cbe7ff3f47e235e2e5c5"}, - {file = "fonttools-4.47.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:511482df31cfea9f697930f61520f6541185fa5eeba2fa760fe72e8eee5af88b"}, - {file = "fonttools-4.47.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0e2c88c8c985b7b9a7efcd06511fb0a1fe3ddd9a6cd2895ef1dbf9059719d7"}, - {file = "fonttools-4.47.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7a0a8848726956e9d9fb18c977a279013daadf0cbb6725d2015a6dd57527992"}, - {file = "fonttools-4.47.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e869da810ae35afb3019baa0d0306cdbab4760a54909c89ad8904fa629991812"}, - {file = "fonttools-4.47.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dd23848f877c3754f53a4903fb7a593ed100924f9b4bff7d5a4e2e8a7001ae11"}, - {file = "fonttools-4.47.0-cp311-cp311-win32.whl", hash = "sha256:bf1810635c00f7c45d93085611c995fc130009cec5abdc35b327156aa191f982"}, - {file = "fonttools-4.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:61df4dee5d38ab65b26da8efd62d859a1eef7a34dcbc331299a28e24d04c59a7"}, - {file = "fonttools-4.47.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e3f4d61f3a8195eac784f1d0c16c0a3105382c1b9a74d99ac4ba421da39a8826"}, - {file = "fonttools-4.47.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:174995f7b057e799355b393e97f4f93ef1f2197cbfa945e988d49b2a09ecbce8"}, - {file = "fonttools-4.47.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea592e6a09b71cb7a7661dd93ac0b877a6228e2d677ebacbad0a4d118494c86d"}, - {file = "fonttools-4.47.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40bdbe90b33897d9cc4a39f8e415b0fcdeae4c40a99374b8a4982f127ff5c767"}, - {file = "fonttools-4.47.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:843509ae9b93db5aaf1a6302085e30bddc1111d31e11d724584818f5b698f500"}, - {file = "fonttools-4.47.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9acfa1cdc479e0dde528b61423855913d949a7f7fe09e276228298fef4589540"}, - {file = "fonttools-4.47.0-cp312-cp312-win32.whl", hash = "sha256:66c92ec7f95fd9732550ebedefcd190a8d81beaa97e89d523a0d17198a8bda4d"}, - {file = "fonttools-4.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:e8fa20748de55d0021f83754b371432dca0439e02847962fc4c42a0e444c2d78"}, - {file = "fonttools-4.47.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c75e19971209fbbce891ebfd1b10c37320a5a28e8d438861c21d35305aedb81c"}, - {file = "fonttools-4.47.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e79f1a3970d25f692bbb8c8c2637e621a66c0d60c109ab48d4a160f50856deff"}, - {file = "fonttools-4.47.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:562681188c62c024fe2c611b32e08b8de2afa00c0c4e72bed47c47c318e16d5c"}, - {file = "fonttools-4.47.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a77a60315c33393b2bd29d538d1ef026060a63d3a49a9233b779261bad9c3f71"}, - {file = "fonttools-4.47.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4fabb8cc9422efae1a925160083fdcbab8fdc96a8483441eb7457235df625bd"}, - {file = "fonttools-4.47.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a78dba8c2a1e9d53a0fb5382979f024200dc86adc46a56cbb668a2249862fda"}, - {file = "fonttools-4.47.0-cp38-cp38-win32.whl", hash = "sha256:e6b968543fde4119231c12c2a953dcf83349590ca631ba8216a8edf9cd4d36a9"}, - {file = "fonttools-4.47.0-cp38-cp38-win_amd64.whl", hash = "sha256:4a9a51745c0439516d947480d4d884fa18bd1458e05b829e482b9269afa655bc"}, - {file = "fonttools-4.47.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:62d8ddb058b8e87018e5dc26f3258e2c30daad4c87262dfeb0e2617dd84750e6"}, - {file = "fonttools-4.47.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5dde0eab40faaa5476133123f6a622a1cc3ac9b7af45d65690870620323308b4"}, - {file = "fonttools-4.47.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4da089f6dfdb822293bde576916492cd708c37c2501c3651adde39804630538"}, - {file = "fonttools-4.47.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:253bb46bab970e8aae254cebf2ae3db98a4ef6bd034707aa68a239027d2b198d"}, - {file = "fonttools-4.47.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1193fb090061efa2f9e2d8d743ae9850c77b66746a3b32792324cdce65784154"}, - {file = "fonttools-4.47.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:084511482dd265bce6dca24c509894062f0117e4e6869384d853f46c0e6d43be"}, - {file = "fonttools-4.47.0-cp39-cp39-win32.whl", hash = "sha256:97620c4af36e4c849e52661492e31dc36916df12571cb900d16960ab8e92a980"}, - {file = "fonttools-4.47.0-cp39-cp39-win_amd64.whl", hash = "sha256:e77bdf52185bdaf63d39f3e1ac3212e6cfa3ab07d509b94557a8902ce9c13c82"}, - {file = "fonttools-4.47.0-py3-none-any.whl", hash = "sha256:d6477ba902dd2d7adda7f0fd3bfaeb92885d45993c9e1928c9f28fc3961415f7"}, - {file = "fonttools-4.47.0.tar.gz", hash = "sha256:ec13a10715eef0e031858c1c23bfaee6cba02b97558e4a7bfa089dba4a8c2ebf"}, + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, + {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, + {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, + {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, + {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, + {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, + {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, + {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, + {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, + {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, + {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, + {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, + {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, ] [package.extras] @@ -946,20 +946,20 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "frida" -version = "16.1.10" +version = "16.1.11" description = "Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers" optional = false python-versions = ">=3.7" files = [ - {file = "frida-16.1.10-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bb9f4ac84b7e454a0de8ad044ba447f3691c4957886b96af03e72de552c1fa7e"}, - {file = "frida-16.1.10-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:314d5f9e8724a8cf780411aa91307419c7c328dc90e5c15109a9f27479269242"}, - {file = "frida-16.1.10-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd9fdd9cb8ce9f7f525482cdb65aaaeea571650307a606172dfcec2d328dc8f8"}, - {file = "frida-16.1.10-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:281ac1af6c9e0b24e9ed31afe7cee84f76007c1a6c788f3545548068870a6de5"}, - {file = "frida-16.1.10-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9673f02b74670273443513e4453ed29bfbd979b1a8cb83423730e38d61857b45"}, - {file = "frida-16.1.10-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b5931bd46236575d7d6e9e3f2c44fa3a839a3be6be69bb3d27b2ae03606fa48c"}, - {file = "frida-16.1.10-cp37-abi3-win32.whl", hash = "sha256:fd6887e7327abaf9a7c4afbfd5c793d429001c2307b6d9179bea7f7414ff6859"}, - {file = "frida-16.1.10-cp37-abi3-win_amd64.whl", hash = "sha256:dd674178d15037af013265cddaed665d1011d0dbb1d5ec2a8b3eebcc796ce6ec"}, - {file = "frida-16.1.10.tar.gz", hash = "sha256:d9715d262791803df4091838b661e0a7c8b63466462eb055ce4f3b2b04df5807"}, + {file = "frida-16.1.11-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1a0738d752d8a0489e2e69ac35c68d8e31d4221bfdacef5135f0d672a35c7797"}, + {file = "frida-16.1.11-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e909164967150e881c16fa565685ca07bdae29984d4d0fb93e4d14dffb1540c5"}, + {file = "frida-16.1.11-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3c54afe7e707ee82d7e6eb1086e5925242a0999e6353e8c6fe6cde68930675"}, + {file = "frida-16.1.11-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa57d96dd1ae4dfbb8006e5c5c5f4669c26246d308def5f658be2e79bbe7029f"}, + {file = "frida-16.1.11-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00432829b5dd1d6a053e7ee6298c1af1fba971fb2aa6157b57fe65bdbc5fc86e"}, + {file = "frida-16.1.11-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:36ff1998358139a28c3c315e874128405d2cde7bfb8e3dfab6ac52baef3e7c3b"}, + {file = "frida-16.1.11-cp37-abi3-win32.whl", hash = "sha256:8042fbc6bf485bc7930c3cfaaeb243009c982d0c0228a93a60eccbb4fc748a46"}, + {file = "frida-16.1.11-cp37-abi3-win_amd64.whl", hash = "sha256:40145098472ecc972e82977e7749b2dae965ead119db4e854b743ebe4673752a"}, + {file = "frida-16.1.11.tar.gz", hash = "sha256:7cc715d634c13375fbf316259dc36fb179a9724841ab42d55c3212e99d175c92"}, ] [package.dependencies] @@ -1183,13 +1183,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -2092,22 +2092,22 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.25.1" +version = "4.25.2" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.1-cp310-abi3-win32.whl", hash = "sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7"}, - {file = "protobuf-4.25.1-cp310-abi3-win_amd64.whl", hash = "sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b"}, - {file = "protobuf-4.25.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd"}, - {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb"}, - {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7"}, - {file = "protobuf-4.25.1-cp38-cp38-win32.whl", hash = "sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd"}, - {file = "protobuf-4.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0"}, - {file = "protobuf-4.25.1-cp39-cp39-win32.whl", hash = "sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510"}, - {file = "protobuf-4.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10"}, - {file = "protobuf-4.25.1-py3-none-any.whl", hash = "sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6"}, - {file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"}, + {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, + {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, + {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, + {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, + {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, + {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, + {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, + {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, + {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 8ec5ef504f..f9eb3585b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "mobsf" -version = "3.9.2" +version = "3.9.3" description = "Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis." keywords = ["mobsf", "mobile security framework", "mobile security", "security tool", "static analysis", "dynamic analysis", "malware analysis"] authors = ["Ajin Abraham "] From 36d6880030b272e887220c69057c895ec8d49245 Mon Sep 17 00:00:00 2001 From: ohyeah521 Date: Sun, 14 Jan 2024 12:11:15 +0800 Subject: [PATCH 5/6] Filter out invalid links (#2322) * Filter out invalid links [ERROR] 2024-01-10 10:28:29 - Well Known Assetlinks Check for URL: http://*/.well-known/assetlinks.json Traceback (most recent call last): requests.exceptions.InvalidURL: URL has an invalid label. * Update manifest_analysis.py --------- Co-authored-by: Ajin Abraham --- mobsf/StaticAnalyzer/views/android/manifest_analysis.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py index 8b3b6caa0b..a76fd7cf66 100755 --- a/mobsf/StaticAnalyzer/views/android/manifest_analysis.py +++ b/mobsf/StaticAnalyzer/views/android/manifest_analysis.py @@ -144,7 +144,10 @@ def get_browsable_activities(node, ns): if path_pattern and path_pattern not in path_patterns: path_patterns.append(path_pattern) # Collect possible well-known paths - if scheme and scheme in ('http', 'https') and host: + if (scheme + and scheme in ('http', 'https') + and host + and host != '*'): host = host.replace('*.', '') shost = f'{scheme}://{host}' if port: From 0a69464576e5be4eea0482367896825f65a15103 Mon Sep 17 00:00:00 2001 From: superpoussin22 Date: Wed, 24 Jan 2024 18:00:04 +0100 Subject: [PATCH 6/6] Fix Arbitrary file writes on Windows (#2328) --- .../{apktool_2.9.2.jar => apktool_2.9.3.jar} | Bin 23255008 -> 23254968 bytes .../views/android/manifest_utils.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename mobsf/StaticAnalyzer/tools/{apktool_2.9.2.jar => apktool_2.9.3.jar} (99%) diff --git a/mobsf/StaticAnalyzer/tools/apktool_2.9.2.jar b/mobsf/StaticAnalyzer/tools/apktool_2.9.3.jar similarity index 99% rename from mobsf/StaticAnalyzer/tools/apktool_2.9.2.jar rename to mobsf/StaticAnalyzer/tools/apktool_2.9.3.jar index 9d755e8ed5c62eeee50f770c143161a00be035f9..62466a09eb9953fb068712088b21d776e49a5996 100644 GIT binary patch delta 82777 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 iv*L!Ajq9<%A2 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 z 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 GCjSq222h;< diff --git a/mobsf/StaticAnalyzer/views/android/manifest_utils.py b/mobsf/StaticAnalyzer/views/android/manifest_utils.py index b9f2d23fa2..475d22a036 100644 --- a/mobsf/StaticAnalyzer/views/android/manifest_utils.py +++ b/mobsf/StaticAnalyzer/views/android/manifest_utils.py @@ -64,7 +64,7 @@ def get_manifest_apk(app_path, app_dir, tools_dir): and is_file_exists(settings.APKTOOL_BINARY)): apktool_path = settings.APKTOOL_BINARY else: - apktool_path = os.path.join(tools_dir, 'apktool_2.9.2.jar') + apktool_path = os.path.join(tools_dir, 'apktool_2.9.3.jar') output_dir = os.path.join(app_dir, 'apktool_out') args = [find_java_binary(), '-jar',