WordPress용 DoLogin 보안 플러그인은 4.3을 포함한 모든 버전에서 불충분한 무작위성을 통한 인증 우회에 취약합니다. 이 취약점은 `dologin\s::rrand()`가 Mersenne Twister에 `mt_srand((double) microtime() * 1000000)`을 시드하기 때문에 발생합니다. 즉 `microtime()`의 정수-초 구성요소를 버리고 시드를 약 10^6 값(~20비트 엔트로피)의 범위로 제한합니다. 그 이후에는 32자 매직 링크 토큰의 모든 문자가 d가 됩니다.
WordPress용 DoLogin 보안 플러그인은 4.3을 포함한 모든 버전에서 불충분한 무작위성을 통한 인증 우회에 취약합니다. 이 취약점은 dologin\s::rrand()가 Mersenne Twister에 mt_srand((double) microtime() * 1000000)을 시드하기 때문에 발생합니다. 즉 microtime()의 정수-초 구성 요소를 버리고 시드를 약 10^6 값(~20비트 엔트로피)의 범위로 제한합니다. 그 후 32자 매직 링크 토큰의 모든 문자는 다음과 같이 순차적으로 그려집니다. mt_rand(), 전체 토큰을 해당 시드의 결정적 기능으로 만듭니다. Pswdless::try_login()이 인증되지 않은 init 후크에 등록되었기 때문에 ?dologin=<id>.<hash> 매개변수에 포함된 자동 증가 숫자 ID로 대상 계정을 확인하고, 비상수 != 연산자를 사용하여 해시 비교를 수행한 다음 wp_set_auth_cookie()를 직접 호출합니다(절대 wp_authenticate()를 통과하지 않음) 따라서 플러그인 자체의 Auth::_has_login_err() 잠금을 트리거하지 않습니다. 인증되지 않은 공격자는 ~10^6 후보 시드 공간을 무차별 공격하여 활성 비밀번호 없는 로그인 토큰을 재구성하고 비밀번호 없이 관리자를 포함한 모든 대상 사용자로 인증할 수 있습니다. 악용하려면 공격 당시 대상 계정에 대해 유효하고 만료되지 않은 비밀번호 없는 로그인 링크(최대 7일 동안 활성화)가 존재해야 하며 숫자 링크 ID가 자동 증가 기본 키에서 알려지거나 추측 가능해야 합니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 88.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 88.00 |
VPI 공식 vpi-v1 기준