
Divulgazione responsabile di una vulnerabilità non corretta in FluentCRM di WPManageNinja
Aggiornamento 2023-06-12: Non hai più bisogno dello snippet. WPManageNinja ha corretto la vulnerabilità due ore dopo la divulgazione pubblica (93 giorni dopo la segnalazione).
Aggiornamento 2024-01-27: Il problema correlato con i valori hash eterni è ora completamente risolto.
tl;dr Gli aggressori possono visualizzare e modificare i dettagli dei contatti in FluentCRM. WPManageNinja non ha corretto la vulnerabilità entro la finestra di divulgazione responsabile di 90 giorni. Fornisco uno snippet di mitigazione per prevenire lo sfruttamento della vulnerabilità in attesa di una patch ufficiale.
Oggi pubblico informazioni su una vulnerabilità che ho trovato nel popolare plugin WordPress FluentCRM di WPManageNinja. La vulnerabilità, CVE-2023-1430, è causata dall'uso insufficiente di un hash dell'indirizzo email come controllo di autorizzazione da parte di FluentCRM. Ho divulgato responsabilmente la vulnerabilità secondo la politica di divulgazione delle vulnerabilità di Google Zero. WPManageNinja non ha fornito una patch entro la finestra di 90 giorni né ha richiesto una proroga.
In questo rapporto, contact si riferisce a un oggetto contatto di FluentCRM, mentre user si riferisce a un oggetto utente WordPress. Un contatto può essere collegato a un utente, ma non è un requisito. I dettagli sullo sfruttamento della vulnerabilità vengono omessi fino a quando non sarà disponibile una patch ufficiale. I professionisti della sicurezza possono contattarmi per il rapporto completo ([email protected]).
Sui siti che eseguono FluentCRM, un aggressore può visualizzare e modificare il nome, l'indirizzo email e l'impostazione dell'elenco di un contatto conoscendo l'indirizzo email del contatto. Poiché il nome del contatto è spesso incluso nelle newsletter tramite tag di unione, un aggressore può sostituire il nome del contatto con linguaggio volgare, causando l'invio di newsletter volgari da parte del proprietario del sito. Se l'amministratore del sito ha abilitato lo shortcode di FluentCRM per la gestione delle preferenze e lo ha aggiunto a una pagina web pubblica, un aggressore può visualizzare e modificare tutte le informazioni personali esposte, ovvero titolo, numero di telefono, data di nascita e indirizzo (a seconda della configurazione di FluentCRM).
FluentCRM è installato su più di 30.000 siti. Gli amministratori dei siti FluentCRM possono prevenire lo sfruttamento della vulnerabilità aggiungendo il mio snippet di mitigazione al file functions.php del loro tema figlio.
Lo snippet non corregge la vulnerabilità. Sostituisce il contenuto vulnerabile sulla pagina di FluentCRM per l'annullamento dell'iscrizione (unsubscribe.php) e sulla pagina per la gestione delle preferenze (manage_subscription.php) con un messaggio di errore che chiede al contatto di contattare via email. L'indirizzo email nel messaggio di errore è l'indirizzo email dell'amministratore del sito (può essere modificato dallo snippet). Lo snippet di mitigazione garantisce anche che i visitatori non autenticati non possano visualizzare lo shortcode vulnerabile di FluentCRM per la gestione delle preferenze (fluentcrm_pref). Un visitatore non autenticato vedrà invece un messaggio di errore che lo invita ad accedere. Tutte le stringhe sono traducibili con il file POT fornito.
Raccomando ai proprietari dei siti di implementare la mitigazione che fornisco o una mitigazione corrispondente propria. I proprietari dei siti dovrebbero anche verificare l'integrità dei loro dati di contatto FluentCRM e, se possibile, controllare i loro log per potenziali fughe di dati. Controllare i log è particolarmente importante per i seguenti siti:
Il responsabile del trattamento dei dati designato del sito gestirà le potenziali fughe di dati personali secondo le leggi e i regolamenti delle giurisdizioni interessate.
Se FluentCRM è configurato per sincronizzare le impostazioni di un contatto con il suo utente corrispondente, un aggressore può cambiare il nome dell'utente. Fortunatamente, FluentCRM non sincronizza gli indirizzi email dai contatti agli utenti. Se FluentCRM lo facesse, questa vulnerabilità consentirebbe il pieno controllo del sito. Un aggressore avrebbe potuto ottenere accesso privilegiato cambiando l'indirizzo email dell'amministratore del sito e quindi reimpostando la password dell'amministratore.
Tuttavia, altre soluzioni possono sincronizzare tutti i metadati dai contatti agli utenti, ad esempio WP Fusion e l'API di FluentCRM. WP Fusion è probabilmente il plugin di terze parti più popolare per sincronizzare i metadati dei contatti tra un CRM (ad es. FluentCRM) e WordPress. Fortunatamente, la versione corrente di WP Fusion non è collegata alle modifiche dei metadati iniziate dai moduli vulnerabili. Ho informato gli sviluppatori di WP Fusion, e non affronteranno questa limitazione fino a quando WPManageNinja non avrà corretto la vulnerabilità.
L'API di FluentCRM può anche essere utilizzata per aggiornare i dati di contatti e utenti. I proprietari di siti che utilizzano l'API di FluentCRM per aggiornare gli indirizzi email degli utenti devono disabilitare questo aggiornamento quando avviato dalla pagina o dallo shortcode di FluentCRM per la gestione delle preferenze (o aggiungere il mio snippet di mitigazione per garantire che nessuna impostazione possa essere aggiornata dai moduli vulnerabili).
FluentCRM consente ai contatti di annullare l'iscrizione e gestire le preferenze da pagine web pubbliche. I collegamenti a queste pagine sono inclusi in ogni newsletter. Le modifiche apportate su queste pagine sono autorizzate da hash MD5 degli indirizzi email dei contatti, passati come parametri URL. L'hash MD5 di un indirizzo email non è un segreto e può essere calcolato da chiunque. Un aggressore può sfruttare l'uso errato degli hash per annullare l'iscrizione di contatti specifici o annullare l'iscrizione in massa di contatti con indirizzi email noti.
Mentre la pagina di annullamento dell'iscrizione si basa esclusivamente sull'hash MD5 per l'autorizzazione, la pagina per la gestione delle preferenze richiede un parametro URL aggiuntivo chiamato ce_id. In questo caso, ce_id si riferisce all'ID del contatto nella tabella fc_subscribers. Questo ID è un intero incrementale. Il valore di ce_id è quindi facilmente trovabile testando tutti i valori possibili (lo spazio di ricerca è il numero di contatti mai registrati sul sito). Gli utenti amministratori probabilmente hanno valori bassi.