Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
mailman.24378
CVE-2021-44227-csfr-admin-ui-access.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File CVE-2021-44227-csfr-admin-ui-access.patch of Package mailman.24378
=== modified file 'Mailman/CSRFcheck.py' --- Mailman/CSRFcheck.py | 17 +++++++++++++++-- Mailman/Cgi/admin.py | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) --- a/Mailman/CSRFcheck.py +++ b/Mailman/CSRFcheck.py @@ -55,7 +55,7 @@ def csrf_token(mlist, contexts, user=Non 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 @@ def csrf_check(mlist, token, options_use 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.', --- a/Mailman/Cgi/admin.py +++ b/Mailman/Cgi/admin.py @@ -92,7 +92,8 @@ def main(): 'legend'] params = cgidata.keys() if set(params) - set(safe_params): - csrf_checked = csrf_check(mlist, cgidata.getvalue('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.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor