DEFCON 20: "SQL Injection in SOHO Routers"

Algumas marcas/modelos de roteadores WiFi mais recentes vêm com portas USB para se espetar discos rígidos e atuarem como servidores de arquivos. Muitos incluem um programa chamado minidlna que exporta os arquivos para a rede através dos protocolos DLNA/UPnP, de forma que possam ser detectados e exibidos nas "Smart TVs" e alguns modelos de celulares/tables mais recentes que têm esse recurso.

Acontece que o minidlna usa o SQLite para gerenciar e fazer consultas nas listas de títulos de filmes e nomes dos artistas e associá-las aos arquivos de música, vídeo e fotos correspondentes. Como o leitor já pode imaginar, ao analisar o código do minidlna, o palestrante achou um ponto de injeção SQL bem trivial que permite obter acesso a qualquer arquivo no sistema – inclusive o /etc/passwd. E, nos modelos que ele testou, não apenas o minidlna roda com privilégios de root, mas a senha de administrador é armazenada às claras, sem cifragem – duas clássicas idéias de jerico que, por alguma razão que não consigo entender, os desenvolvedores de firmware ainda insistem em fazer em pleno século XXI.

Ao meu ver, o autor já poderia ter parado por aí, pois isso já lhe dá acesso administrativo total, completo e irrestrito ao dispositivo. Mas ele quis ir além e passou o resto da palestra demonstrando um exploit baseado em buffer overflow que cria um shell reverso remoto. Ele gastou o tempo explicando os detalhes de engenharia envolvidos, tais como colocar o binário dentro de um campo SQL, ter de montá-lo gradualmente usando várias queries SQL (pois o buffer a ser estourado era muito maior do que o buffer de entrada que lhe permitia acesso ao banco de dados.)

O autor também deixou muito claro que a patetada foi do autor do minidlna; ele ressaltou que a API do SQLite tem várias funções para se construir as consultas SQL de forma a não dar margem a injeção de SQL, mas o autor do minidlna simplesmente não as usou, fazendo tudo com sprintf ao invés (isso, nem a versão "n" – o snprintf – o cara usou). Como alguém programa em C no século XXI e ainda faz uma besteira dessas é algo que não cansa de me horrorizar.

Uma coisa interessante de se testar é que algumas versões de firmwares de código aberto, como o TomatoUSB e o DD-WRT, também usam o minidlna e também seguem a filosofia suicida de rodar tudo como root, o que significa que também devem estar vulneráveis.

Portanto, se você tem ativado o minidlna no seu roteador, desative-o, até que esses bugs sejam consertados. Ou, se você souber fazer isso, coloque-o dentro de uma jaula chroot.

Partes anteriores

Próximas partes

Comentários
Aceita-se formatação à la TWiki. HTML e scripts são filtrados. Máximo 15KiB.

 
Enviando... por favor aguarde...
Comentário enviado com suceso -- obrigado.
Ele aparecerá quando os moderadores o aprovarem.
Houve uma falha no envio do formulário!
Deixei uma nota para os admins verificarem o problema.
Perdoe-nos o transtorno. Por favor tente novamente mais tarde.