Il caricamento di file senza restrizioni nella funzionalità di recensione degli hotel in QloApps versioni 1.7.0 e precedenti consente a un utente malintenzionato remoto non autenticato di ottenere esecuzione di codice in remoto.
🎯 Endpoint interessato
/module/qlohotelreview/default
⚠️ Causa principale
La vulnerabilità esiste a causa di:
Mancata validazione dell'estensione del file.
I file caricati vengono eseguiti direttamente dal server.
Nessun controllo di autenticazione o autorizzazione applicato sull'endpoint.
Un exploit riuscito consente a un utente malintenzionato di:
Eseguire comandi arbitrari del sistema operativo.
Leggere/scrivere/eliminare file sensibili del server.
Accedere alle credenziali del database.
Muoversi verso servizi di rete interni.
Compromettere completamente il server di hosting.
Questa vulnerabilità porta a una perdita completa di Riservatezza, Integrità e Disponibilità (Triade CIA).
🛠️ Proof of Concept (PoC) su QloApps versione 1.7.0
Servono un id_order valido e un token Ajax per effettuare una richiesta all'endpoint vulnerabile. Per id_order possiamo forzarlo manualmente partendo da 1 oppure creare un account ospite e prenotare una stanza per ottenere questo id_order. Per il token Ajax possiamo ottenerlo da qualsiasi pagina di camera d'hotel.
1. Ottenere il token Ajax
2. Recensire un hotel e caricare la nostra immagine + web shell php ingegnerizzata.