
cve-2017-5487 wp rest api vulnerabilidad
: Vulnerabilidad en la implementación de la REST API en wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php en versiones anteriores a WordPress 4.7.1, en la que no se restringe la lista de autores, lo que permite a un atacante remoto obtener información sensible mediante una solicitud a wp-json/wp/v2/users.
( Referencia : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487 )
Como no entiendo de qué se trata, primero conozcamos los antecedentes y luego lo veremos mediante la práctica.
Si crees que no necesitas antecedentes, puedes verlo desde [3].
: En pocas palabras, una API que define "qué se hace y cómo" puede denominarse REST API.
: Explicado con más detalle, la REST API consiste en cómo se manipulan los recursos definidos mediante HTTP URI utilizando el método HTTP y el payload.
: REST es el acrónimo de REpresentational State Transter.
2.1 Recursos definidos mediante HTTP URI
: Un recurso se refiere al objeto que se procesa.
ej.) documentos JSON, XML, archivos de imagen como jpg, archivos de video como mp4, etc...
: URI es el acrónimo de Uniform Resource Identifier, es decir, un identificador uniforme de recursos. La URL que vemos habitualmente también es parte de la URI, y se refiere a la identificación de un determinado recurso.
ej.) si a través de http://rootable.tistory.com/user/test se puede obtener información sobre el usuario test, esto también es una URI.
2.2 Métodos HTTP
: Estos métodos funcionan igual sin importar el formato del recurso.
: Los métodos utilizados en la REST API incluyen POST, GET, PUT, PATCH, DELETE, entre otros. El punto a tener en cuenta es que difieren de la función que solemos pensar. Por ejemplo, en el caso de POST solemos pensar que es un método que se utiliza para solicitar datos o documentos al servidor, pero en el caso de la REST API cumple una función de creación (create).
HTTP Method
Operaciones CRUD
POST
crear
GET
leer
PUT
actualizar / reemplazar
PATCH
actualizar / modificar
DELETE
eliminar
ej.) REST API para añadir al usuario doni a users en http://rootable.tistory.com
POST http://rootable.tistroy.com/users/doni
ej.) Cuando se necesitan diversas características como ocupación, edad, sexo, etc. al crear un usuario, se registra especificando en la parte del Body diversos lenguajes de representación como XML o JSON.
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni"
"age" : "27"
}
: Hemos dicho que la REST API es una API predefinida que indica cómo se manipulan los recursos. Entonces, ¿qué REST APIs ha definido WordPress?
Consultemos la siguiente tabla.
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 Se puede ver que hay varias REST API definidas. Aquí podemos ver que se encuentra /wp/v2/users, que aparece en el CVE que vamos a analizar en esta ocasión.
4.1. Obtención de información del autor del artículo
El siguiente es el código encontrado en EXPLOIT DB. ( https://www.exploit-db.com/exploits/41497/ )
Como se puede ver en el código, solo se encarga de ordenar limpiamente el resultado del procesamiento y mostrarlo en pantalla. No es necesario llegar a la vulnerabilidad FU para que se vea limpio, ya que también se puede obtener la información accediendo directamente sin usar este código de exploit.
#!usr/bin/php
Si se guarda esto como código PHP en el sitio donde está instalado WordPress y se ejecuta, aparecerá un resultado como el siguiente.
Si se accede directamente, se ve como se muestra a continuación. (Haz clic si no se ve bien)
La información que se puede obtener a través de esto incluye el ID, el nombre, etc. del usuario que escribió el artículo.
Nota) Pensaba que se verían todos los usuarios registrados, pero tras la prueba solo se ve la cuenta del autor del artículo. En la descripción del CVE aparece la palabra author, que parece significar precisamente "autor".
4.2 Obtención de la ruta de subida de archivos
Entre las REST API de WordPress se encuentra /wp/v2/posts. Al acceder a ella, se muestra información sobre los artículos publicados como se ve a continuación, y entre ella se puede obtener la ruta de subida de archivos, como se indica. Si se descubriera una vulnerabilidad FU, parece que sería de gran ayuda.
Parece que en la versión 4.7 tampoco es posible ver la configuración ni modificar artículos.
Al intentar ver la configuración, aparece rest_forbidden y se deniega el acceso.
Al intentar modificar el primer artículo, aparece un mensaje de que no se puede leer el artículo.
Esto sería algo más grave que ver los usuarios, así que es un poco decepcionante... Según los resultados de búsqueda, parece que no existe una vulnerabilidad correspondiente a esto. Sin embargo, parece que sí existe una vulnerabilidad en versiones anteriores a 4.7.1 que permite modificar los artículos de otros usuarios. Esto lo trataremos en la próxima publicación.
Referencias)
Explicación de la REST API : http://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=220986337770
Traductor Unicode : http://koreanstudies.com/unicode-converter.html
Downgrade (como el proceso no avanzaba y lo reinstalé, recomiendo no volver a instalarlo)