
Une vulnérabilité de type Cross-Site Request Forgery (CSRF) existe dans issabel-pbx v4.0.0-6 au sein de la fonctionnalité de gestion Virtual Fax.
Identifiant CVE : CVE-2023-37598
Type de vulnérabilité : Contrefaçon de requête intersite (CSRF)
Produit concerné : issabel-pbx v4.0.0-6
Sévérité : Moyenne
Découverte par : Sahil Ojha
Date de divulgation : 10/07/2023
Page d'accueil du fournisseur : https://www.issabel.org/
Dépôt logiciel : https://github.com/IssabelFoundation/issabelPBX
Testé sur : Windows
Une vulnérabilité de Contrefaçon de requête intersite (CSRF) existe dans issabel-pbx v4.0.0-6 au sein de la fonctionnalité de gestion de fax virtuels. L'application n'implémente pas de protection CSRF (par exemple, jetons anti-CSRF ou attributs de cookie SameSite) sur l'action de suppression des entrées de fax virtuels.
Cela permet à un attaquant distant non authentifié de créer une page HTML malveillante qui — lorsqu'elle est visitée par un administrateur ou un utilisateur authentifié — soumet silencieusement une requête HTTP falsifiée à l'application pour le compte de la victime. La requête falsifiée provoque la suppression des enregistrements de fax virtuels sans que la victime en ait connaissance ou y consente, entraînant une perte de données et une perturbation des services de fax.
La Contrefaçon de requête intersite (CSRF) est une attaque qui incite le navigateur d'une victime à envoyer une requête authentifiée à une application web sans l'intention de l'utilisateur. Étant donné que le navigateur inclut automatiquement les cookies de session avec chaque requête, le serveur ne peut pas distinguer une requête légitime d'une requête falsifiée lorsqu'aucun jeton CSRF n'est présent.
| Paramètre | Valeur |
|---|---|
| Application | issabel-pbx |
| Version | 4.0.0-6 |
| URL vulnérable | /index.php?menu=faxnew&action=view&id=<ID> |
| Action vulnérable | delete (paramètre POST) |
| Protection manquante | Jeton CSRF / attribut de cookie SameSite |
Le fichier HTML suivant, lorsqu'il est ouvert par un utilisateur authentifié d'issabel-pbx, soumettra automatiquement une requête POST falsifiée qui supprime le fax virtuel avec id_fax=1.
Fichier : CSRF exploit.html
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://{Issabel IP}/index.php?menu=faxnew&action=view&id=1" method="POST">
<input type="hidden" name="delete" value="Delete" />
<input type="hidden" name="id_fax" value="1" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
Remarque : Remplacez
{Issabel IP}par l'adresse IP ou le nom d'hôte du serveur cible. La valeurid_faxpeut être modifiée pour cibler n'importe quel enregistrement de fax virtuel par son ID.
Connectez-vous au panneau d'administration Issabel PBX et naviguez vers la page des fax virtuels :
https://{Issabel IP}/index.php?menu=faxnew&action=view&id=1

Capturez la requête de suppression à l'aide du proxy Burp Suite. Tentez de supprimer une entrée de fax virtuel, interceptez la requête, faites un clic droit dessus et naviguez vers Engagement Tools → Generate CSRF PoC.

Enregistrez l'exploit CSRF généré sous forme de fichier HTML (voir le PoC ci-dessus).
Distribuez l'exploit à un utilisateur déjà connecté à l'application Issabel (par exemple, via un e-mail de phishing ou un lien malveillant). Lorsque la victime ouvre la page et clique sur "Submit request", l'entrée de fax virtuel est supprimée sans autre interaction.


Un attaquant héberge le fichier HTML malveillant sur un serveur externe ou l'intègre dans un e-mail. Lorsqu'un administrateur Issabel PBX authentifié ouvre cette page dans la même session de navigateur, le navigateur envoie automatiquement la requête POST falsifiée — incluant le cookie de session valide — au serveur Issabel. Le serveur traite la requête comme légitime, supprimant l'enregistrement de fax virtuel ciblé. La victime ne reçoit aucun avertissement et pourrait ne pas remarquer la suppression avant d'inspecter manuellement la liste des fax.
Pour corriger cette vulnérabilité, le fournisseur devrait mettre en œuvre une ou plusieurs des mesures d'atténuation suivantes :
SameSite=Strict ou SameSite=Lax pour empêcher le navigateur de l'envoyer avec des requêtes cross-origin.X-Requested-With: XMLHttpRequest) pour toutes les opérations sensibles et le vérifier côté serveur.