
Аутентифицированный сохранённый межсайтовый скриптинг (XSS) в плагине Contact List
Отказ от ответственности: Этот репозиторий создан только в образовательных целях и для этичного раскрытия информации. Уязвимость была ответственно сообщена поставщику и исправлена. Не используйте эту информацию для взлома систем без соответствующего разрешения.
В плагине Contact List — Online Staff Directory & Address Book для WordPress (версии <= 3.0.17) была обнаружена хранимая межсайтовая XSS-уязвимость (Stored Cross-Site Scripting). Эта уязвимость позволяет авторизованным пользователям с правами автора (Author) или выше внедрять вредоносный JavaScript в контактные карточки через скрытое пользовательское поле.
Когда контактная карточка отображается на публичном каталоге, внедрённая нагрузка выполняется в браузере любого посетителя. Если страницу просматривает администратор, этот недостаток может привести к полному захвату учётной записи (ATO) и компрометации сайта.
<= 3.0.17Уязвимость вызвана некорректной санитизацией и небезопасной обработкой выходных данных пользовательского поля _cl_map_iframe, предназначенного для встраивания карт через iframe.
1. Небезопасное хранение данных:
В файле includes/class-contact-list-custom-fields.php (внутри saveCustomFields()) плагин обрабатывает входное значение _cl_map_iframe с помощью регулярного выражения для извлечения блока ```
6. Передайте запрос дальше. Сервер сохранит вредоносный iframe.
7. Триггер: Перейдите на публичную страницу каталога, где встроен [contact_list]. Окно с предупреждением сработает немедленно, подтверждая выполнение кода.
POST /wp-admin/post.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
post_title=Hacked+Contact&post_type=contact&action=editpost&_cl_map_iframe=
Для исправления этой уязвимости разработчикам плагина необходимо:
wp_kses() со строгим массивом разрешённых HTML-тегов и атрибутов при сохранении _cl_map_iframe. Запретите такие атрибуты, как onload, onerror или URI javascript:.