From 0f369b682da712a6e73bce2bc94d966a17a525bb Mon Sep 17 00:00:00 2001 From: Salad Dais Date: Mon, 20 Jun 2022 15:15:57 +0000 Subject: [PATCH] Upgrade to mitmproxy 8.0 Not 8.1 since that drops Python 3.8 support. Closes #26 --- hippolyzer/apps/proxy.py | 11 +++++++---- hippolyzer/lib/proxy/http_proxy.py | 6 +----- hippolyzer/lib/proxy/webapp_cap_addon.py | 7 ------- requirements.txt | 6 +++--- setup.py | 2 +- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/hippolyzer/apps/proxy.py b/hippolyzer/apps/proxy.py index 61689ff..3a1872f 100644 --- a/hippolyzer/apps/proxy.py +++ b/hippolyzer/apps/proxy.py @@ -87,10 +87,13 @@ class REPLAddon(BaseAddon): def run_http_proxy_process(proxy_host, http_proxy_port, flow_context: HTTPFlowContext): mitm_loop = asyncio.new_event_loop() asyncio.set_event_loop(mitm_loop) - mitmproxy_master = create_http_proxy(proxy_host, http_proxy_port, flow_context) - mitmproxy_master.start_server() - gc.freeze() - mitm_loop.run_forever() + + async def mitmproxy_loop(): + mitmproxy_master = create_http_proxy(proxy_host, http_proxy_port, flow_context) + gc.freeze() + await mitmproxy_master.run() + + asyncio.run(mitmproxy_loop()) def start_proxy(session_manager: SessionManager, extra_addons: Optional[list] = None, diff --git a/hippolyzer/lib/proxy/http_proxy.py b/hippolyzer/lib/proxy/http_proxy.py index f0ae6a9..cad59cb 100644 --- a/hippolyzer/lib/proxy/http_proxy.py +++ b/hippolyzer/lib/proxy/http_proxy.py @@ -70,7 +70,7 @@ class SLTlsConfig(mitmproxy.addons.tlsconfig.TlsConfig): ) self.certstore.certs = old_cert_store.certs - def tls_start_server(self, tls_start: tls.TlsStartData): + def tls_start_server(self, tls_start: tls.TlsData): super().tls_start_server(tls_start) # Since 2000 the recommendation per RFCs has been to only check SANs and not the CN field. # Most browsers do this, as does mitmproxy. The viewer does not, and the sim certs have no SAN @@ -229,10 +229,6 @@ class SLMITMMaster(mitmproxy.master.Master): SLMITMAddon(flow_context), ) - def start_server(self): - self.start() - asyncio.ensure_future(self.running()) - def create_proxy_master(host, port, flow_context: HTTPFlowContext): # pragma: no cover opts = mitmproxy.options.Options() diff --git a/hippolyzer/lib/proxy/webapp_cap_addon.py b/hippolyzer/lib/proxy/webapp_cap_addon.py index 91e9190..e5947e3 100644 --- a/hippolyzer/lib/proxy/webapp_cap_addon.py +++ b/hippolyzer/lib/proxy/webapp_cap_addon.py @@ -1,7 +1,6 @@ import abc from mitmproxy.addons import asgiapp -from mitmproxy.controller import DummyReply from hippolyzer.lib.proxy.addon_utils import BaseAddon from hippolyzer.lib.proxy.http_flow import HippoHTTPFlow @@ -11,13 +10,7 @@ from hippolyzer.lib.proxy.sessions import Session, SessionManager async def serve(app, flow: HippoHTTPFlow): """Serve a request based on a Hippolyzer HTTP flow using a provided app""" - # Shove this on mitmproxy's flow object so asgiapp doesn't explode when it tries - # to commit the flow reply. Our take / commit semantics are different than mitmproxy - # proper, so we ignore what mitmproxy sets here anyhow. - flow.flow.reply = DummyReply() - flow.flow.reply.take() await asgiapp.serve(app, flow.flow) - flow.flow.reply = None # Send the modified flow object back to mitmproxy flow.resume() diff --git a/requirements.txt b/requirements.txt index ff755d1..27bbcb4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,7 @@ certifi==2021.10.8 cffi==1.15.0 charset-normalizer==2.0.9 click==8.0.3 -cryptography==3.4.8 +cryptography==36.0.2 defusedxml==0.7.1 Flask==2.0.2 frozenlist==1.2.0 @@ -30,7 +30,7 @@ ldap3==2.9.1 llbase==1.2.11 lxml==4.6.4 MarkupSafe==2.0.1 -mitmproxy==7.0.4 +mitmproxy==8.0.0 msgpack==1.0.3 multidict==5.2.0 numpy==1.21.4 @@ -43,7 +43,7 @@ publicsuffix2==2.20191221 pyasn1==0.4.8 pycparser==2.21 Pygments==2.10.0 -pyOpenSSL==20.0.1 +pyOpenSSL==22.0.0 pyparsing==2.4.7 pyperclip==1.8.2 PySide6==6.2.2 diff --git a/setup.py b/setup.py index 69d7230..3209f0d 100644 --- a/setup.py +++ b/setup.py @@ -89,7 +89,7 @@ setup( # requests breaks with newer idna 'idna<3,>=2.5', # 7.x will be a major change. - 'mitmproxy>=7.0.2,<8.0', + 'mitmproxy>=8.0.0,<8.1', # For REPLs 'ptpython<4.0', # JP2 codec