
Это повторение cve-2019-9787 на Wordpress и защита на основе хэшей.
Это проект, выполненный Sijia Zhang (https://github.com/sijiahi) и Bowen Zhou (https://github.com/KonjakZhou)
- Настройте и установите Wordpress5.0 по адресу http://localhost/wp-admin/;
- Войдите в Wordpress как администратор, опубликуйте хотя бы одну статью;
- откройте mal.html (настроенный в другом домене, возможно, напрямую откройте как файл в браузере), нажмите submit request.
- Если это сработает, вы будете перенаправлены на страницу статьи с комментарием «cilick me»; как только вы наведете на него курсор, появится окно с сообщением об успешной атаке.
- Замените файлы в /wp-includes, добавьте js-скрипты в /wp-includes/js.
- Переместите файл тестового поста в область WP, откройте страницу тестового поста для проверки функции PINGBACK/TRACEBACK.
- Если это сработает, вы будете перенаправлены на страницу статьи с комментарием «legal anchor»;
- Откройте mal.com в другом домене, протестируйте CSRF-атаку.
Для защиты Wordpress от CVE-2019-9787 вводится новое поле под названием doggyNonce. В случаях, когда администратор пытается использовать функцию PINGBACK и _wp_unfiltered_html не может быть предоставлен, мы просим администратора подписать атрибуты загруженных тегов с помощью своего cookie; это позволит нам защититься от CSRF-атак и обеспечить целостность загруженных атрибутов тегов.
Wordpress автоматически принимает комментарий без корректного CSRF-токена как запрос PINGBACK или TRACEBACK, фильтрует этот комментарий с помощью белого списка, извлекает поле href и реконструирует тег «a». Для защиты этой уязвимости учитываются два ключевых момента: 1. Сервер не может отличить нелегитимный CSRF-запрос от легитимного запроса PINGBACK/TRACEBACK. 2. Атакующий с помощью CSRF внедряет свой код в поле href тега «a»; атрибут тега изменяется после фильтрации. doggyNonce — это хеш-значение, которое зависит от *cookie (wp-setting-time-$uid) и *загруженного атрибута href: doggyNonce=Hash(*uploaded href attrbute,*cookie) следует отметить, что doggyNonce играет роль подписи администратора на загруженном атрибуте href.
1. 'mal.html' предназначен для имитации CSRF-атаки и, следовательно, должен быть размещен в домене, отличном от Wordpress;
2. 'post.html' предназначен для имитации функции PINGBACK/TRACEBACK и, следовательно, должен быть размещен в том же домене, что и WP;