Same result here, tested with multiple browsers.
Additional information:
At no point is the correct token required for login; even the first attempt accepts an invalid token. SSH also does not request any verification code.
Gateways were upgraded from R81.10 to R81.20 using Gaia Fresh Install + upgrade. Open servers are running a completely fresh R81.20 installation.
I noticed that on the tested gateways, under User Management → Roles, the adminRole group has 203 features. There is another gateway that was delivered later with R81.20 pre-installed – MFA works correctly on both the web and SSH interfaces there, and its adminRole contains 214 features.
Audit log snippet with invalid token:
type=LOGIN msg=audit(1762336201.069:613): pid=9951 uid=0 subj=kernel old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=88 res=1
type=USER_START msg=audit(1762336201.069:614): pid=9951 uid=0 auid=0 ses=88 subj=kernel msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits acct=root exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
type=CRED_DISP msg=audit(1762336201.092:615): pid=9951 uid=0 auid=0 ses=88 subj=kernel msg='op=PAM:setcred grantors=pam_rootok acct=root exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
type=USER_END msg=audit(1762336201.092:616): pid=9951 uid=0 auid=0 ses=88 subj=kernel msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits acct=root exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
type=USER_AUTH msg=audit(1762336304.985:617): pid=10906 uid=0 auid=4294967295 ses=4294967295 subj=kernel msg='op=PAM:authentication grantors=pam_dof_tally,cp_pam_tally,pam_unix acct="userxxx" exe="/usr/sbin/sshd" hostname=10.10.0.100 addr=10.10.0.100 terminal=ssh res=success'