
Corrija o seu dispositivo D-Link afetado pelo CVE-2024-3272
Você é uma das mais de 92.000 pessoas1 presas a um NAS D-Link vulnerável ao CVE-2024-3272, e sem patch à vista?
Esta ferramenta usa o próprio exploit para corrigir um dispositivo vulnerável.
1: Veja a divulgação original nas referências
Dinkleberry executará um comando para substituir o arquivo vulnerável nas_sharing.cgi por uma versão corrigida - sobrescrevendo a chamada system() com NOPs.
A pasta /usr/local/modules (onde o arquivo reside) é somente leitura, então, em vez disso, uma cópia é criada em /usr/local/config, e o link simbólico em /var/www/cgi-bin é atualizado para apontar para a versão mais segura.
Escolhi apenas aplicar NOP na chamada system() para que o comando ainda responda normalmente, apenas sem realmente executar nada.
[!NOTE] O sistema de arquivos é recarregado da flash na inicialização. Aplicar este patch funcionará apenas até você reiniciar o dispositivo. Se você quiser uma correção mais permanente, terá que regravar o firmware - talvez com Debian
aliask:~/git/dinkleberry$ python3 ./src/main.py -h 10:01:02
usage: dinkleberry [-h] [--telnet] [--kill-telnet] [--test] [--verbose] target
positional arguments:
target Target NAS to patch
options:
-h, --help show this help message and exit
--telnet Start telnet server
--kill-telnet Stop telnet server
--test Test if device is vulnerable
--verbose, -v Set this to print debug messages
Se nenhuma flag opcional for aplicada, o script realiza a correção.
Se você quiser apenas bisbilhotar o dispositivo, use o comando --telnet, que inicia uma sessão telnet na porta 23.
Isso é hilariamente inseguro, mas seu dispositivo já é hilariamente inseguro, então pode aproveitar o shell conveniente.
[!CAUTION] Use esta ferramenta por sua conta e risco. Ela está modificando o software real do dispositivo.
Não sou responsável por:
- Seu dispositivo parar de funcionar
- Perda de dados armazenados no NAS
- Iniciar um incêndio
- O TA que estava feliz explorando seu dispositivo ficar chateado
Durante a análise dos binários nas_sharing.cgi e libsmbif.so, rapidamente ficou claro que o software neste dispositivo é extremamente vulnerável. Vulnerável a ponto de ser impossível manter, precisando ser reescrito do zero.
Existem cerca de 80 chamadas para system() apenas em nas_sharing.cgi - muitas delas têm um caminho para entrada do usuário. Não me preocupei em analisar todas para encontrar mais falhas para corrigir, mas aqui está um exemplo de nível S:
/* Why use system() instead of libc fopen/fwrite?
What if you want to write a long string or your filename is long?
Painfully obvious command injection playground 🤦 */
void append_to_file(const char* string, const char* file) {
char s_cmd[1024];
sprintf(s_cmd, "echo %s >> %s", string, file);
system(s_cmd);
return;
}
Além de todas essas chamadas insanas de system, há mais estouros de buffer do que você pode imaginar - e eu consigo imaginar muitos.
Este CVE está na lista KEV da CISA - Se você tem um desses dispositivos na internet, tire-o da rede. Agora.
Talvez até siga o conselho da D-Link e substitua o dispositivo em fim de vida. Mas eu não compraria um produto D-Link, isso é certo.