
cve-2017-5487 wp rest api vulnerabilità
: Vulnerabilità nell'implementazione della REST API in wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php nelle versioni di WordPress precedenti alla 4.7.1, che non limita l'elenco degli autori, consentendo a un attaccante remoto di ottenere informazioni sensibili tramite una richiesta a wp-json/wp/v2/users.
( Riferimento : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487 )
Dato che non capisco di cosa si tratti, informiamoci prima sul contesto e poi esaminiamolo con un po' di pratica.
Se pensi di non aver bisogno del contesto, puoi partire da [3].
: In poche parole, un'API che definisce "cosa fare e come farlo" può essere definita REST API.
: Spiegandolo più in dettaglio, la REST API è un'API che, tramite i metodi HTTP e il payload, opera sulle risorse definite da URI HTTP.
: REST è l'acronimo di REpresentational State Transter
2.1 Risorse definite da URI HTTP
: Una risorsa indica l'oggetto su cui si opera
es.) documenti JSON, XML, file immagine come jpg, file video come mp4, ecc..
: URI è l'acronimo di Uniform Resource Identifier, ovvero un identificatore uniforme di risorsa. Anche gli URL che vediamo comunemente sono parte degli URI e servono a identificare una determinata risorsa.
es.) Se tramite http://rootable.tistory.com/user/test è possibile ottenere informazioni su un utente chiamato test, anche questo è un URI.
2.2 Metodi HTTP
: Questi metodi funzionano allo stesso modo indipendentemente dal formato della risorsa.
: I metodi usati nella REST API includono POST, GET, PUT, PATCH, DELETE, ecc. Attenzione: non funzionano come ci si aspetterebbe. Ad esempio, nel caso di POST, pensiamo sia un metodo per inviare dati o documenti al server, ma nella REST API svolge la funzione di creazione (create).
HTTP Method
Operazioni CRUD
POST
create
GET
read
PUT
update / replace
PATCH
update / modify
DELETE
delete
es.) Una REST API che aggiunge un utente chiamato doni agli users di http://rootable.tistory.com
POST http://rootable.tistroy.com/users/doni
es.) Se per la creazione di un utente servono varie caratteristiche come professione, età, sesso, ecc., è possibile registrarle specificando nel Body vari linguaggi di rappresentazione come XML o JSON
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni"
"age" : "27"
}
: Abbiamo detto che la REST API è un'API predefinita su come operare sulle risorse. Allora, quali REST API sono definite in WordPress?
Facciamo riferimento alla tabella seguente.
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
Si può notare che sono definite diverse REST API. Qui possiamo vedere /wp/v2/users, che compare nel CVE che stiamo esaminando.
4.1. Ottenere informazioni sull'autore degli articoli
Di seguito il codice trovato su EXPLOIT DB. ( https://www.exploit-db.com/exploits/41497/ )
Come si vede dal codice, non fa altro che organizzare in modo ordinato i risultati dell'elaborazione e mostrarli a schermo. Non è necessario usare per forza questo codice di exploit: le informazioni si possono ottenere anche accedendo direttamente, quindi per un output più pulito non ritengo sia necessario spingersi fino alla vulnerabilità FU.
#!usr/bin/php
Se si salva questo codice come file PHP nella directory in cui è installato WordPress e lo si esegue, si ottiene un risultato come quello qui sotto.
Se si accede direttamente, invece, appare come segue. (Clicca se non si vede bene)
Le informazioni che si possono ottenere in questo modo includono l'ID, il nome e altri dati dell'utente che ha scritto gli articoli.
Nota) Pensavo che comparissero tutti gli utenti registrati, ma dai test risulta che sono visibili solo gli account degli autori degli articoli. Nella descrizione del CVE compare la parola author, che sembra indicare proprio l'autore.
4.2 Ottenere il percorso di upload dei file
Tra le REST API di WordPress c'è /wp/v2/posts. Accedendovi, come mostrato nell'immagine sotto, si vedono le informazioni sugli articoli pubblicati e, come evidenziato, si può ottenere il percorso di upload dei file. Se venisse trovata una vulnerabilità FU, probabilmente sarebbe di grande aiuto.
Anche nella versione 4.7 sembra impossibile visualizzare le impostazioni o modificare gli articoli.
Se si tenta di vedere le impostazioni, appare rest_forbidden e l'accesso viene negato.
Se si tenta di modificare il primo articolo, appare un messaggio che dice che l'articolo non è leggibile.
Sarebbe stato un problema più grave che vedere gli utenti, quindi è un peccato.. Dalle ricerche non sembra esistere una vulnerabilità corrispondente. Tuttavia, per le versioni precedenti alla 4.7.1, sembra esistere una vulnerabilità che consente di modificare gli articoli di altri utenti. Affronterò questo argomento nel prossimo post.
Riferimenti)