
Эксплойт для проверки концепции CVE-2026-73313 — обход MFA в провайдере TFA на основе passkey в XenForo, позволяющий захватить учётную запись после компрометации пароля.
XenForo до версии 2.3.13 может завершить двухэтапный вход одного пользователя с помощью passkey, принадлежащего другому пользователю.
Менеджер passkey выполняет глобальный поиск по идентификатору учётных данных, указанному в подтверждении, и корректно проверяет подпись WebAuthn этих учётных данных. Затем провайдер TFA сводит результат к логическому значению, не проверяя, что владелец учётных данных совпадает с пользователем, чей вход по паролю ожидает завершения.
Злоумышленник, знающий правильный пароль цели, может ответить на вызов passkey цели с помощью собственного зарегистрированного passkey. Вход завершается от имени цели. Общий поток также затрагивал вход в ACP, если целью был администратор.
Это обход MFA после компрометации первого фактора, а не захват учётной записи без пароля. Злоумышленнику нужен собственный действительный passkey, пароль цели и учётная запись цели, настроенная на passkey TFA.
Я воспроизвёл как публичный, так и ACP-потоки на XenForo 2.3.12 (сборка 2031270). XenForo 2.3.13 содержит исправление.
Установите две зависимости, подготовьте одноразовых пользователей атакующего/цели и тестовые учётные данные, принадлежащие атакующему, затем выполните:
python -m pip install -r requirements.txt
python poc.py https://xenforo.example TARGET_USERNAME ATTACKER_CREDENTIAL_ID attacker-private-key.pem
Пароль цели считывается со скрытым запросом. Скрипт не создаёт пользователей, не изменяет строки passkey, не выводит пароль и не записывает файл доказательств. Его вывод содержит только HTTP-статус и итоговое логическое значение.
Обнаружено Марко Пачарони (BomboBombone).