
cve-2017-5487 wp rest api vulnerabilidade
: Em versões do WordPress anteriores a 4.7.1, a implementação da REST API em wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php não restringia a lista de autores, permitindo que um atacante remoto obtivesse informações sensíveis através de uma requisição wp-json/wp/v2/users.
(Referência: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487)
Se você não entendeu, vamos aprender sobre os conceitos básicos e depois praticar para entender melhor.
Se você acha que não precisa de conhecimento prévio, pode pular para [3].
: Simplificando, uma API que define "o que fazer e como fazer" é chamada de REST API.
: Explicando mais detalhadamente, REST API é como os recursos definidos por uma URI HTTP são manipulados usando Métodos HTTP e Payload.
: REST = REpresentational State Transfer
2.1 Recursos definidos por URI HTTP
: Recurso é o objeto que está sendo processado.
Ex) JSON, documentos XML, arquivos de imagem como jpg, arquivos de vídeo como mp4, etc.
: URI significa Uniform Resource Identifier, é um identificador uniforme de recursos. URL, que vemos com frequência, também faz parte da URI e se refere à identificação de um determinado recurso.
Ex) Se através de http://rootable.tistory.com/user/test podemos obter informações sobre um usuário chamado test, isso também é uma URI.
2.2 Método HTTP
: O método funciona da mesma forma independentemente do formato do recurso.
: Os métodos usados na REST API incluem POST, GET, PUT, PATCH, DELETE, etc. É importante notar que eles diferem da funcionalidade que normalmente pensamos. Por exemplo, enquanto no uso comum pensamos em POST como um método para solicitar dados ou documentos ao servidor, na REST API ele realiza a função de criar (create).
| Método HTTP | Operação CRUD |
|---|---|
| POST | create |
| GET | read |
| PUT | update / replace |
| PATCH | update / modify |
| DELETE | delete |
Ex) REST API para adicionar um usuário chamado doni em users de http://rootable.tistory.com
POST http://rootable.tistory.com/users/doni
Ex) Quando for necessário especificar várias características como profissão, idade, sexo ao criar um usuário, registra-se usando uma linguagem de expressão como XML ou JSON no corpo da requisição.
POST http://rootable.tistory.com/users Content-Type: application/json
{ "username" : "doni", "age" : "27" }
: Dissemos que a REST API é uma API pré-definida sobre como lidar com recursos. Então, quais são as REST APIs definidas pelo WordPress?
Consulte a tabela abaixo.
| 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 |
Podemos ver que várias REST APIs estão definidas. Entre elas, vemos que /wp/v2/users aparece no CVE que vamos explorar agora.
4.1. Obter informações sobre o autor do post
#!usr/bin/php
Salve este código como um arquivo PHP no local onde o WordPress está instalado e execute. O resultado será exibido conforme abaixo.
[A imagem não traduzível]
Se acessar diretamente, aparecerá conforme abaixo. (Clique se não estiver visível)
[A imagem não traduzível]
Através disso, podemos obter informações como ID e nome do usuário que escreveu o post.
Nota: Pensei que todos os usuários registrados seriam exibidos, mas conforme testei, apenas as contas de autores de posts são mostradas. Na descrição do CVE, há a palavra "author", que parece se referir exatamente a isso.
4.2 Obter diretório de upload de arquivos
Na REST API do WordPress, existe /wp/v2/posts. Ao acessá-lo, vemos informações sobre o post, e como destacado, podemos obter o caminho de upload de arquivos. Se houver uma vulnerabilidade FU, isso poderá ser muito útil.
[Imagem não traduzível]
Na versão 4.7, parece não ser possível visualizar as configurações ou editar posts.
[Imagem não traduzível]
[Imagem não traduzível]
Referências: