------------------------------------------------------------
revno: 1882
fixes bug: https://launchpad.net/bugs/1952384
committer: Mark Sapiro <[email protected]>
branch nick: 2.1
timestamp: Tue 2021-11-30 09:50:49 -0800
message:
Block CSRF attack against admin or admindb pages.
modified:
Mailman/CSRFcheck.py
Mailman/Cgi/admin.py
Mailman/Cgi/admindb.py
Mailman/Cgi/edithtml.py
NEWS
--
lp:mailman/2.1
https://code.launchpad.net/~mailman-coders/mailman/2.1
Your team Mailman Checkins is subscribed to branch lp:mailman/2.1.
To unsubscribe from this branch go to
https://code.launchpad.net/~mailman-coders/mailman/2.1/+edit-subscription
=== modified file 'Mailman/CSRFcheck.py'
--- Mailman/CSRFcheck.py 2021-11-12 23:23:52 +0000
+++ Mailman/CSRFcheck.py 2021-11-30 17:50:49 +0000
@@ -55,7 +55,7 @@
token = binascii.hexlify(marshal.dumps((issued, keymac)))
return token
-def csrf_check(mlist, token, options_user=None):
+def csrf_check(mlist, token, cgi_user=None):
""" check token by mailman cookie validation algorithm """
try:
issued, keymac = marshal.loads(binascii.unhexlify(token))
@@ -67,12 +67,25 @@
key, user = key.split('+', 1)
else:
user = None
+ # Don't allow unprivileged tokens for admin or admindb.
+ if cgi_user == 'admin':
+ if key not in ('admin', 'site'):
+ syslog('mischief',
+ 'admin form submitted with CSRF token issued for %s.',
+ key + '+' + user if user else key)
+ return False
+ elif cgi_user == 'admindb':
+ if key not in ('moderator', 'admin', 'site'):
+ syslog('mischief',
+ 'admindb form submitted with CSRF token issued for %s.',
+ key + '+' + user if user else key)
+ return False
if user:
# This is for CVE-2021-42097. The token is a user token because
# of the fix for CVE-2021-42096 but it must match the user for
# whom the options page is requested.
raw_user = UnobscureEmail(urllib.unquote(user))
- if options_user and options_user != raw_user:
+ if cgi_user and cgi_user != raw_user:
syslog('mischief',
'Form for user %s submitted with CSRF token '
'issued for %s.',
=== modified file 'Mailman/Cgi/admin.py'
--- Mailman/Cgi/admin.py 2019-10-05 21:32:22 +0000
+++ Mailman/Cgi/admin.py 2021-11-30 17:50:49 +0000
@@ -107,7 +107,8 @@
'legend']
params = cgidata.keys()
if set(params) - set(safe_params):
- csrf_checked = csrf_check(mlist, cgidata.getfirst('csrf_token'))
+ csrf_checked = csrf_check(mlist, cgidata.getfirst('csrf_token'),
+ 'admin')
else:
csrf_checked = True
# if password is present, void cookie to force password authentication.
=== modified file 'Mailman/Cgi/admindb.py'
--- Mailman/Cgi/admindb.py 2021-11-12 23:23:52 +0000
+++ Mailman/Cgi/admindb.py 2021-11-30 17:50:49 +0000
@@ -144,7 +144,8 @@
safe_params = ['adminpw', 'admlogin', 'msgid', 'sender', 'details']
params = cgidata.keys()
if set(params) - set(safe_params):
- csrf_checked = csrf_check(mlist, cgidata.getfirst('csrf_token'))
+ csrf_checked = csrf_check(mlist, cgidata.getfirst('csrf_token'),
+ 'admindb')
else:
csrf_checked = True
# if password is present, void cookie to force password authentication.
=== modified file 'Mailman/Cgi/edithtml.py'
--- Mailman/Cgi/edithtml.py 2018-07-11 06:52:22 +0000
+++ Mailman/Cgi/edithtml.py 2021-11-30 17:50:49 +0000
@@ -111,7 +111,8 @@
safe_params = ['VARHELP', 'adminpw', 'admlogin']
params = cgidata.keys()
if set(params) - set(safe_params):
- csrf_checked = csrf_check(mlist, cgidata.getfirst('csrf_token'))
+ csrf_checked = csrf_check(mlist, cgidata.getfirst('csrf_token'),
+ 'admin')
else:
csrf_checked = True
# if password is present, void cookie to force password authentication.
=== modified file 'NEWS'
--- NEWS 2021-11-22 04:31:11 +0000
+++ NEWS 2021-11-30 17:50:49 +0000
@@ -5,7 +5,12 @@
Here is a history of user visible changes to Mailman.
-2.1.38 (xx-xxx-xxxx)
+2.1.38 (30-Nov-2021)
+
+ Security
+
+ - A potential CSRF attack against a list admin from a list member or
+ moderator has been blocked. CVE-2021-44227 (LP: #1952384)
Bug Fixes and other patches
_______________________________________________
Mailman-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]