
cve-2017-5487 wp rest api 취약점
: В версиях WordPress до 4.7.1 реализация REST API в wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php не ограничивает список авторов, что позволяет удаленному атакующему получить важную информацию через запрос wp-json/wp/v2/users.
(Источник: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487)
Если непонятно, давайте сначала разберемся с базовыми знаниями, а затем изучим на практике.
Если вы считаете, что базовые знания не нужны, можете перейти сразу к [3].
: Простыми словами, REST API — это API, который определяет «что делать и как».
: Если объяснять подробнее, REST API — это способ выполнения действий над ресурсами, определенными через HTTP URI, с помощью HTTP-методов и полезной нагрузки (Payload).
: REST = REpresentational State Transfer
2.1 Ресурсы, определенные через HTTP URI
: Ресурс — это объект, который обрабатывается.
Примеры: JSON, XML-документы, файлы изображений (jpg и т.д.), видеофайлы (mp4 и т.д.) и другие.
: URI (Uniform Resource Identifier) — это унифицированный идентификатор ресурса. URL, который мы часто видим, также является частью URI и обозначает идентификацию некоторого ресурса.
Пример: если через http://rootable.tistory.com/user/test можно получить информацию о пользователе test, это тоже URI.
2.2 HTTP-методы
: Эти методы работают одинаково независимо от формата ресурса.
: Методы, используемые в REST API: POST, GET, PUT, PATCH, DELETE и другие. Важно отметить, что они отличаются от привычных нам функций. Например, POST в классическом понимании используется для запроса данных или документов к серверу, но в REST API он выполняет функцию создания (create).
HTTP-метод
CRUD-операция
POST
create
GET
read
PUT
update / replace
PATCH
update / modify
DELETE
delete
Пример: REST API для добавления пользователя doni в users на http://rootable.tistory.com
POST http://rootable.tistory.com/users/doni
Пример: если при создании пользователя требуются различные характеристики, такие как профессия, возраст, пол и т.д., они указываются в теле запроса с использованием различных языков представления, например XML или JSON.
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni"
"age" : "27"
}
: Мы сказали, что REST API — это заранее определенный набор правил о том, как работать с ресурсами. Тогда какие REST API определены в WordPress?
Обратимся к таблице ниже.
Resource Base Route Posts /wp/v2/posts Post Revisions /wp/v2/revisions Categories /wp/v2/categories Tags /wp/v2/tags Pages /wp/v2/pages Comments /wp/v2/comments Taxonomies /wp/v2/taxonomies Media /wp/v2/media Users /wp/v2/users Post Types /wp/v2/types Post Statuses /wp/v2/statuses Settings /wp/v2/settings Видно, что определено множество REST API. Среди них есть /wp/v2/users, который упоминается в рассматриваемом нами CVE.
4.1. Получение информации об авторах записей
Ниже приведен код, найденный на EXPLOIT DB (https://www.exploit-db.com/exploits/41497/).
Как видно из кода, он просто аккуратно форматирует результат и выводит его на экран. Нет необходимости использовать этот эксплойт, можно получить информацию и при прямом обращении, так что для наглядности можно обойтись без FU-уязвимости.
#!usr/bin/php
Если сохранить этот код в виде PHP-файла и запустить его в месте, где установлен WordPress, результат будет как показано ниже.
При прямом доступе результат выглядит так, как показано ниже (если не видно, нажмите).
Из этого можно получить информацию об ID, имени и т.д. пользователей, написавших записи.
Примечание) Я думал, что отображаются все зарегистрированные пользователи, но, как показали тесты, отображаются только учетные записи авторов записей. В описании CVE есть слово «author», которое, похоже, и означает «автор».
4.2 Получение пути загрузки файлов
Среди REST API в WordPress есть /wp/v2/posts. При доступе к нему отображается информация о опубликованных записях, как показано ниже. Среди прочего можно получить путь загрузки файлов, как отмечено на рисунке. Если будет обнаружена FU-уязвимость, это может оказаться очень полезным.
В версии 4.7, похоже, невозможно просмотреть настройки или редактировать записи.
При попытке просмотреть настройки появляется сообщение rest_forbidden, и доступ запрещен.
При попытке отредактировать первую запись появляется сообщение о невозможности прочитать запись.
Возможно, просмотр пользователей — не самое главное, это немного разочаровывает... Согласно результатам поиска, соответствующих уязвимостей не обнаружено. Однако для версий до 4.7.1, похоже, существует уязвимость, позволяющая редактировать записи других пользователей. Об этом мы расскажем в следующей публикации.
Ссылки:
Описание REST API: http://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=220986337770
Конвертер Unicode: http://koreanstudies.com/unicode-converter.html
Понижение версии (рекомендую не переустанавливать, так как у меня не получилось, и я установил заново)