Sécurité
Pages enfant
  • ESUP-2026-AVI-001 - Vulnérabilité dans esup-otp-api

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Les avis de sécurité du consortium ESUP-Portail portent sur des vulnérabilités des logiciels diffusés par le consortium. Il est de la responsabilité de chacun des destinataires de ce document de ne pas le rediffuser en dehors du cadre pour lequel il a été écrit, pour des raisons évidentes de sécurité des Systèmes d'Information de tous les établissements du consortium ESUP-Portail.

13 13 , développeur à l'Université Paris 1 Panthéon-Sorbonne.

Objet

Vulnérabilité dans esup-otp-api

Référence

ESUP-2026-AVI-001

Date de la première version

19 mars 2026

Date de la dernière version

20 mars 2026

Source

Université Paris 1 Panthéon-Sorbonne

Diffusion de cette version

Publique

Historique

  • 18 mars 2026 : faille détectée par Florian Nari
  • 19 mars 2026 : correction d'esup-otp-api en 2.2.2 (Florian Nari)
  • 19 mars 2026 : amélioration de la correction d'esup-otp-api en 2.2.3 (Florian Nari)
  • 19 mars 2026 : validation de la correction (Aymar Anli, Pascal Rigaux, Florian Nari)
  • 20 mars 2026 : validation de la correction (Vincent Bonamy) 
  • 20 mars 2026 : envoi de l'avis de sécurité à esup-otp-tech@esup-portail.org 
  • 20 mars 2026 : envoi de l'avis de sécurité à securite@esup-portail.org
  • 25 mars 2026 : envoi de l'avis de sécurité à esup-utilisateurs@esup-portail.org et référencement de l'avis dans la page publique Avis de sécurité

Planning prévisionnel

-

Pièces jointes

-

Risque

  • Possibilité de valider la demande de MFA (Multi Factor Authentication) à la place de l'utilisateur légitime

...

  • Cette vulnérabilité affecte l'ensemble des versions esup-otp-api et donc des solutions de MFA utilisant la solution esupotp.

Description

Une vulnérabilité élevée a été découverte dans l’application esup-otp-api, un logiciel utilisé pour l’authentification double facteur.

Cette vulnérabilité pourrait permettre permet à un attaquant d'accepter , disposant des identifiants de la victime, de valider la demande de MFA à la place de l'utilisateur légitimesans possession du téléphone avec Esup Auth configuré (second facteur).

Complexité d'exploitation

Relativement Sous réserve de compréhension du fonctionnement des WS et d'inspection des requêtes HTTP, la complexité d'exploitation est relativement faible, une commande curl permet de récupérer un code otp permettant d'accepter la demande de MFA.

Conditions préalables 

Être authentifié avec identifiant et mot de passe dde l'un utilisateur (cible) ayant activé lla notifications push comme 2ème facteur d'authentification via notifications push.

Solutions

Mise à jour d'esup-otp-api

Les administrateurs système sont encouragés à doivent mettre à jour esup-otp-api vers la version 2.2.3 ou ultérieure qui corrige ce problème.

Cf https://github.com/EsupPortail/esup-otp-api/#updating

Applications concernées

esup-otp-api jusqu'à 2.2.3.2

Analyse des logs

Une analyse des logs d'accès peut permettre de déterminer si la faille a été exploitée : tout POST GET avec réponse en 200 sur une url finissant en /izlypaycallback et dont l'IP ne correspond pas à un serveur izly (crous) sur /users/:uid/methods/push/:lt/:hash est à considérer comme illégitime .si :lt contient moins de 10 caractères .

Ainsi, dans vos logs HTTP (apache ou nginx par exemple) Si vous n'avez pas mis en place izlypay dans votre esup-papercut, les logs en base de données peuvent rapidement vous permettre d'identifier un paiement illégitime, d'autant que, même si vous les avez anonymisés via la procédure interne d'esup-papercut, le mode de paiement est conservé.
Ainsi la requête SQL suivante ne doit vous renvoyer aucun résultat (à condition que vous n'utilisiez pas vous-même IzlyPay, mais uniquement le paiement par Paybox)  :

Bloc de code
languagesqlshell
grep -E '"GET /users/[^/]+/methods/push/[^/]{1,9}/[^/]+ HTTP/[0-9.]+"' esup-otp-api-access.logselect * from public.pay_papercut_transaction_log where pay_mode='IZLYPAY';

Liens