Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-34828 — Persistenza della sessione di listmonk dopo il reset della password e il cambio della password | Kitploit
Strumenti/GitHubGitHub/0xmrma/cve-2026-34828
Analisi delle VulnerabilitàExploitSicurezza WebPenetration TestingAutenticazione
GitHub0xmrma/cve-2026-34828

CVE-2026-34828

Persistenza della sessione di listmonk dopo il reset della password e il cambio della password

Vedi Repository
14 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-34828

Persistenza delle sessioni di listmonk dopo il reset e la modifica della password

Introduzione

Ho trovato questo problema mentre esaminavo listmonk, un gestore open-source di newsletter e mailing list, con una semplice domanda di sicurezza in mente:

Quando un utente modifica o resetta una password, l'applicazione termina effettivamente le sessioni già emesse?

In questo caso, la risposta è stata no.

Le sessioni autenticate emesse in precedenza sono rimaste valide dopo entrambe le azioni:

  • reset della password
  • modifica della password

Ciò significava che un cookie di sessione rubato poteva sopravvivere esattamente agli eventi di sicurezza su cui gli utenti fanno affidamento per recuperare il proprio account.

Il problema è stato accettato e gli è stata assegnata la CVE-2026-34828.

Progetto: listmonk su GitHub
CVE: CVE-2026-34828

Il problema ha interessato listmonk, un progetto ampiamente adottato con 5M+ pull Docker.

photo0

Catena di attacco

stolen authenticated session → victim resets or changes password → old session remains valid → attacker retains account access after credential recovery


Cosa fa listmonk

listmonk è un gestore self-hosted di mailing list e newsletter.

Offre:

  • autenticazione admin
  • gestione degli utenti
  • creazione di campagne
  • gestione degli iscritti
  • impostazioni SMTP e operative
  • amministrazione basata su browser

Ciò significa che il suo modello di sessione è un vero confine di sicurezza.

La domanda importante qui non era se listmonk supporta il reset della password.

La vera domanda era:

Il reset o la modifica della password revocano effettivamente la persistenza dell'attaccante se una sessione è già stata rubata?

In questo caso, non lo faceva.


Perché valeva la pena esaminare questo bug

Molte revisioni di sicurezza si concentrano in modo troppo ristretto sui bypass di login e sull'escalation dei privilegi più ovvia.

Questo fa perdere di vista un'importante classe di debolezze:

fallimenti del recupero

Se un utente modifica o resetta una password, quell'azione dovrebbe avere un significato reale.
Dovrebbe ridurre la fiducia nelle credenziali precedenti e nel vecchio stato di autenticazione.

Se un attaccante possiede già una sessione valida e quella sessione sopravvive all'evento di recupero, allora la vittima non ha realmente recuperato completamente l'account.

Questo era il problema qui.

Non era un bug di validazione del login. Non era un problema crittografico. Non era un errore nell'hash delle password.

Era un fallimento del ciclo di vita delle sessioni:

  • lo stato della password è cambiato,
  • il recupero dell'account è avvenuto,
  • ma le vecchie sessioni erano ancora considerate valide.

Questo è sufficiente a creare una vulnerabilità reale.


Il confine su cui mi sono concentrato

Non ho affrontato listmonk colpendo endpoint a caso e sperando che qualcuno cedesse.

Il percorso più solido era identificare prima il confine di fiducia di maggior valore.

Per software fortemente incentrati sull'autenticazione, uno dei migliori confini da testare è questo:

Le modifiche all'account sensibili dal punto di vista della sicurezza revocano le sessioni precedentemente considerate affidabili?

Quella domanda di solito diventa interessante in relazione a:

  • reset della password
  • modifica della password
  • modifiche al 2FA
  • flussi di recupero dell'account

In listmonk, il segnale più forte è arrivato dai primi due.

È lì che il problema è diventato evidente.


Causa principale

Il bug non era che le modifiche alla password fallivano.

Il bug era che le sessioni sopravvivevano a esse.

Dalla revisione del codice sorgente, il flusso di reset della password:

  • generava e validava un token di reset monouso,
  • aggiornava la password,
  • creava una nuova sessione,

ma non c'era alcuna revoca visibile delle sessioni precedenti.

Lo stesso schema appariva nel flusso autenticato di modifica della password:

  • la password veniva aggiornata,
  • ma le sessioni già emesse in precedenza non venivano invalidate.

Questo comportamento corrispondeva esattamente ai risultati reali.

Le aree di codice rilevanti che ho esaminato sono state:

  • cmd/auth.go per il comportamento di password dimenticata/reset
  • cmd/users.go per gli aggiornamenti autenticati del profilo
  • internal/core/users.go per la gestione dell'aggiornamento della password

Perché è sfruttabile

Perché il furto di sessione è una condizione di attacco reale.

Quando un attaccante ottiene un cookie di sessione autenticata valido con qualsiasi mezzo, ad esempio:

  • compromissione del browser
  • malware
  • accesso a una workstation condivisa
  • XSS in un altro componente
  • perdita tramite proxy o debug
  • esposizione accidentale del cookie

la vittima dovrebbe essere in grado di terminare quella persistenza dell'attaccante modificando o resettando la password.

Qui, non poteva.

La catena di attacco era semplice:

  • l'attaccante ha un cookie di sessione valido
  • la vittima esegue il reset o la modifica della password
  • la vecchia password diventa non valida
  • la nuova password funziona
  • la vecchia sessione dell'attaccante continua ad autenticarsi con successo

Questa è l'intera vulnerabilità.


Cosa rende questo un problema di sicurezza e non solo un comportamento dell'applicazione

La distinzione importante è la persistenza dopo il recupero.

Molte applicazioni trattano la modifica della password come un evento puramente a livello di credenziali. Non è sufficiente.

La vera domanda non è:

“Il valore della password è cambiato nell'archivio?”

La vera domanda è:

“La relazione di fiducia associata alle sessioni precedenti è stata revocata?”

In listmonk, non lo è stata.

Questo trasforma quella che sarebbe potuta essere una normale manutenzione dell'account in un recupero di sicurezza incompleto.

Questa è la differenza tra:

  • continuità ordinaria della sessione
  • e una vera debolezza di sicurezza

PoC

Ho validato il problema in due flussi separati.

Caso 1: Il reset della password non revoca le sessioni esistenti

Innanzitutto, ho creato un normale utente di test e ho effettuato l'accesso, salvando il cookie di sessione autenticata.

Poi ho attivato il flusso di password dimenticata, catturato il link di reset e resettato la password.

Dopo il reset:

  • la vecchia password non funzionava più
  • la nuova password funzionava
  • ma il vecchio cookie di sessione precedente al reset continuava ad autenticarsi con successo

Una richiesta di validazione rappresentativa appariva così:

root@kitploit:~
GET /api/profile HTTP/1.1
Host: 127.0.0.1:9000
Cookie: session=<old_pre_reset_session>

E il server restituiva ancora:

root@kitploit:~
HTTP/1.1 200 OK
Content-Type: application/json

con il profilo autenticato.

Questo ha confermato l'affermazione principale:

  • il recupero è stato completato,
  • le credenziali sono cambiate,
  • ma la fiducia nella sessione esistente è rimasta intatta.

Caso 2: La modifica della password non revoca le sessioni attive parallele

Ho poi validato la stessa classe di bug nel flusso autenticato di modifica della password.

Ho effettuato l'accesso due volte come lo stesso utente e ho salvato due sessioni autenticate valide:

  • sessione A
  • sessione B

Usando la sessione A, ho modificato la password tramite l'endpoint di aggiornamento del profilo.

Richiesta di esempio:

root@kitploit:~
PUT /api/profile HTTP/1.1
Host: 127.0.0.1:9000
Cookie: session=<session_A>
Content-Type: application/json

{
  "name":"victim1",
  "email":"[email protected]",
  "password":"VictimChanged123"
}

Dopo di che:

  • la vecchia password non funzionava più
  • la nuova password funzionava
  • ma la sessione B rimaneva valida

Una richiesta successiva utilizzando la sessione B restituiva ancora dati autenticati da /api/profile.

Questo ha dimostrato che il problema non era limitato al percorso di password dimenticata/reset.
Riguardava anche le normali modifiche autenticate della password.


Perché le due riproduzioni sono importanti

Una sola riproduzione sarebbe già stata sufficiente a mostrare un problema.

Ma validare entrambi i flussi era importante per due motivi.

Primo

Ha mostrato che il bug non era isolato a un singolo percorso di recupero marginale.

La stessa proprietà di sicurezza falliva in:

  • reset della password non autenticato guidato dal recupero
  • modifica autenticata della password durante la sessione

Secondo

Ha reso il problema più difficile da liquidare come logica di business accidentale.

Era chiaramente una debolezza più ampia nella gestione delle sessioni:

  • lo stato della password è cambiato,
  • ma le sessioni esistenti sono rimaste considerate valide.

Questo ha dato al problema un peso di sicurezza molto maggiore.


Validazione TOTP

Ho anche testato il flusso di reset su un account con TOTP abilitato, perché volevo sapere se il reset della password avrebbe silenziosamente indebolito o bypassato le aspettative del 2FA.

Quello che ho confermato è stato:

  • il reset della password è comunque riuscito
  • il TOTP è rimasto abilitato
  • un nuovo accesso con la nuova password reindirizzava ancora al passaggio 2FA
  • quindi non era un bypass diretto del 2FA

È stato un utile controllo del confine.

Ha circoscritto correttamente il problema.

La vulnerabilità non era:

  • “il reset della password disabilita il TOTP”
  • o “il reset della password bypassa il TOTP”

Il vero problema rimaneva:

  • le sessioni già emesse sopravvivevano ancora a modifiche sensibili della sicurezza dell'account

È un risultato più pulito e più difendibile.


Gravità e classificazione

Il problema è stato ragionevolmente classificato come Alto.

L'impatto chiave qui è l'accesso non autorizzato persistente dopo le azioni di recupero della sicurezza dell'account.

La classificazione dell'advisory era:

  • CWE-613: Scadenza della sessione insufficiente
  • CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N

Ha senso.

L'affermazione non è che un attaccante possa accedere senza credenziali dal nulla.

L'affermazione è che, una volta che un attaccante ha ottenuto una sessione autenticata valida, la vittima non può terminare completamente quell'accesso eseguendo esattamente le azioni di sicurezza che dovrebbero recuperare l'account, cioè il reset e la modifica della password.

È una vulnerabilità reale e difendibile nella gestione delle sessioni.


Perché valeva comunque la pena segnalarlo

Alcune persone sottovalutano i bug di persistenza delle sessioni perché presumono che il furto di sessione sia già “game over.”

È troppo semplicistico.

La vera domanda è cosa succede dopo che la vittima nota che qualcosa non va e agisce.

Se:

  • la vittima resetta la password,
  • o la modifica manualmente,
  • e l'attaccante mantiene ancora la sessione rubata,

allora il recupero dell'account è incompleto.

Non è solo un comportamento scomodo. È un errore di sicurezza nel modello di recupero.

Soprattutto in una piattaforma orientata agli amministratori, è un problema significativo con un forte impatto sulla riservatezza.


Analisi della correzione

Il maintainer ha corretto il problema nel commit:

root@kitploit:~
db82035

La direzione principale della correzione è esattamente ciò di cui questo bug aveva bisogno:

  • invalidare le sessioni precedenti dopo il reset della password
  • invalidare le sessioni precedenti dopo la modifica della password

È la remediation corretta perché colpisce la proprietà di sicurezza reale che è venuta meno:

la fiducia precedente dovrebbe cessare quando le credenziali cambiano

Una buona correzione per questa classe di bug non riguarda la modifica della validazione della password. Riguarda la revoca dello stato di sessione precedentemente attivo associato all'account.

È quella la parte che ripristina il recupero effettivo.


Divulgazione

Questo problema è stato segnalato privatamente tramite il flusso di segnalazione di sicurezza di GitHub.

Il maintainer:

  • ha esaminato la segnalazione
  • l'ha accettata come problema di sicurezza
  • ha corretto il comportamento
  • e al problema è stata assegnata:

CVE-2026-34828

Una cosa emersa durante la gestione dell'advisory è stato l'ambito.

La segnalazione originale includeva entrambi i casi:

  • la persistenza della sessione dopo il reset della password
  • la persistenza della sessione dopo la modifica della password

GitHub inizialmente le ha trattate come problemi correggibili in modo indipendente ai fini dell'assegnazione della CVE. È un utile promemoria del fatto che l'ambito dell'advisory conta anche quando la debolezza sottostante è concettualmente simile.

Il risultato finale è stato CVE-2026-34828.


Cosa insegna realmente questo bug

La lezione chiave qui è semplice:

cambiare le credenziali non è sufficiente se la vecchia fiducia autenticata è ancora viva.

Molti sviluppatori ragionano in termini di:

  • correttezza della password
  • correttezza del token
  • successo del login
  • validità del token di reset

Queste cose contano.

Ma il vero confine di sicurezza è più ampio:

quando si verifica un evento ad alto rischio sull'account, quale stato precedentemente considerato affidabile deve cessare di esserlo?

In questo caso, la risposta avrebbe dovuto essere:

  • le sessioni precedenti

E listmonk non lo faceva.

Questo è il vero insegnamento.


Punti chiave

  • la revoca delle sessioni fa parte della sicurezza del recupero dell'account
  • il reset della password non dovrebbe lasciare vive le sessioni emesse in precedenza
  • la modifica della password non dovrebbe lasciare vive le sessioni attive parallele
  • il furto di sessione rimane significativo se gli eventi di recupero non revocano la fiducia
  • testare più flussi correlati rende una segnalazione più solida
  • restringere il campo escludendo false piste come il bypass del 2FA aiuta a mantenere pulito il risultato

Considerazioni finali

Questa vulnerabilità non riguardava payload elaborati o astuti trucchi di parsing.

Riguardava il porsi la giusta domanda sul confine di fiducia.

In listmonk, la password è cambiata.
L'azione di recupero è stata completata.
Ma la vecchia sessione dell'attaccante era ancora viva.

È per questo che è diventata CVE-2026-34828.

photo0
Scarica lo strumento