CouchDB é um de banco de dados orientado a documentos, uma implementação de NoSQL que pode ser acessado através de sua API JavaScript Object Notation (JSON) RESTful. Vamos falar sobre como explorá-lo para reunir informações para um penetration test ou análise de vulnerabilidades.
Para diminuir os riscos, recomendamos aplicar as seguintes medidas para sua proteção:
Utilizando o futon[6], você pode acessar a URL http://IP_DO_COUCHDB:5984/_utils, que acessará o gerenciador web do CouchDB.
1. Criar um usuário administrador no servidor clicando no botão "Fix this!", localizado no canto inferior direito.
2. Criar um usuário no-admin e atribuí-lo (por nome ou papel) para ser um usuário administrador do banco de dados em específico. Isso pode ser feito através do ícone "Segurança" no topo do gerenciador Futon, quando você está em um banco de dados específico. Ou então criar este non-admin através do HTTP API.
3. Criar um usuário non-admin no CouchDB e atribuí-los (por nome ou papel) para ser apenas leitor (read) no banco de dados em algum banco de dados específico. Isso pode ser feito através do ícone "Segurança" no topo do gerenciador Futon quando você está em um banco de dados específico. Ou então criar este non-admin através do HTTP API.
4. Criar um usuário non-admin no CouchDB e criar um documento de design de banco de dados que inclui uma função de validação, especificamente em uma propriedade "validate_doc_update" no documento de design. O valor dessa propriedade é uma função (que você escreve) para verificar um nome de usuário ou regra no argumento userCtx que é passado para a função específica, assim poderia alertar um erro na função se o usuário ou a regra não é quem pode escrever no banco de dados.
5. Como medida adicional de proteção, o CouchDB disponibiliza a autenticação via cookie, bastando enviar uma requisição para a API com o usuário e senha já presentes no mesmo. Por padrão, cada token tem sua a duração de 10 minutos.
Estas e outras dicas importantes podem ser visualizadas no CouchDB Security[7], disponível no próprio site do desenvolvedor.