Description
The documentation, in the Installation section, has a warning at the end about the admin site, and then some sample code.
The sample code has an error which can result in TFA being bypassed for the admin site. The scenario is a site where some users do not have/need TFA, but all admin users do. Using the code provided, an attacker can login with a non-admin account without TFA. Then browse directly to the admin site, and are allowed to re-login there without TFA. The redirect provided in the documentation code:
admin.site.login = login_required(admin.site.login)
does not trigger the login_required wrapper because the user logged in already. They are instead taken directly to the admin site, which provides a login view that bypassess TFA.
FIX:
Instead of wrapping with login_required, wrap with staff_member_required:
`from django.contrib.admin.views.decorators import staff_member_required
admin.site.login = staff_member_required(admin.site.login, login_url='/accounts/login')`
This will the disallow showing the admin site to anyone not logged in as an admin, preventing the attack described.