> For the complete documentation index, see [llms.txt](https://sharpforce.gitbook.io/cybersecurity/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sharpforce.gitbook.io/cybersecurity/cve/2022/cve-2022-32444.md).

# CVE-2022-32444

> 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')](https://cwe.mitre.org/data/definitions/601.html))

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`.

![](/files/DLlt0YbHxrvyAmeNdfaA)

## Analyse de la vulnérabilité

La page `loginsave.php` est appelée suite à la soumission du formulaire d'authentification disponible à l'URL `/u5admin/` :&#x20;

![](/files/3gsmMAgLn7EH9dTELQeW)

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

![](/files/JCDYEtpjR0VgrpxwgNRU)

La requête est la suivante :&#x20;

```http
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
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/` :

![](/files/uYCO3V9AinkaY7pdfvnN)

En général, une faille de type OpenRedirect sur une mire de connexion peut s'exploiter de la façon suivante :&#x20;

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 :&#x20;

```http
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
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 :&#x20;

* 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]`

{% code title="loginsave.php" %}

```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]);
```

{% endcode %}

## Ressources

* <https://github.com/u5cms/u5cms/issues/50>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sharpforce.gitbook.io/cybersecurity/cve/2022/cve-2022-32444.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
