mailman/CVE-2021-34337.patch
liyuxiang 858e7ede1e CVE-2021-34337
(cherry picked from commit 2eecd407d6c521bcd82a546a98dc2e819c390a0a)
2022-10-18 09:20:15 +08:00

45 lines
1.5 KiB
Diff

From e4a39488c4510fcad8851217f10e7337a196bb51 Mon Sep 17 00:00:00 2001
From: Kunal Mehta <legoktm@debian.org>
Date: Tue, 8 Jun 2021 00:54:14 -0400
Subject: [PATCH] Check the REST API password in a way that is resistant to
timing attacks (CVE-2021-34337)
Using basic string equality is vulnerable to timing attacks as it will
short circuit at the first wrong character. Using hmac.compare_digest
avoids that issue and will take the same time, regardless of whether
the value is correct or not.
This is only exploitable if an attacker can talk directly to the
REST API, which by default is bound to localhost.
Fixes #911.
---
src/mailman/rest/wsgiapp.py | 4 +++-
1 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/mailman/rest/wsgiapp.py b/src/mailman/rest/wsgiapp.py
index 14d9a4e03..ab5be448d 100644
--- a/src/mailman/rest/wsgiapp.py
+++ b/src/mailman/rest/wsgiapp.py
@@ -18,6 +18,7 @@
"""Basic WSGI Application object for REST server."""
import re
+import hmac
import logging
from base64 import b64decode
@@ -55,7 +56,8 @@ class Middleware:
credentials = b64decode(request.auth[6:]).decode('utf-8')
username, password = credentials.split(':', 1)
if (username == config.webservice.admin_user and
- password == config.webservice.admin_pass):
+ hmac.compare_digest(
+ password, config.webservice.admin_pass)):
authorized = True
if not authorized:
# Not authorized.
--
GitLab