CVE-2022-30422: ViewState deserialization in Proietti Planet Time Enterprise

Una validationKey di default nel web.config di Planet Time Enterprise consente a un attaccante non autenticato di forgiare un ViewState malevolo ed eseguire comandi da remoto sul server.

CVE
CVE-2022-30422
Prodotto
Proietti Planet Time Enterprise (fino a 4.2.0.1)
CVSS
8.1
Severità
high
Stato
patched

TL;DR

Planet Time Enterprise, il software di rilevazione presenze di Proietti Tech, viene distribuito con una validationKey di default nel file web.config. Conoscendo quella chiave — identica su tutte le installazioni — un attaccante non autenticato può forgiare un __VIEWSTATE malevolo e sfruttare la deserializzazione di ASP.NET per eseguire comandi da remoto sul server Windows.

Ricerca che ho condotto nel mio lavoro in Tinexta Cyber, pubblicata secondo responsible disclosure.

Contesto

Planet Time Enterprise è una suite per la rilevazione presenze e la gestione delle risorse umane, utilizzabile sia in ambiente Windows che web. È adottata da centinaia di clienti, il che amplifica l’impatto di una chiave crittografica condivisa tra le installazioni.

Dettaglio

Asset Vulnerabilità CVSS Severità
Planet Time Enterprise (3.3.0.0 → 4.2.0.1) ViewState deserialization 8.1 High

Versioni interessate: 4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0, 3.3.1.0, 3.3.0.0.

In ASP.NET Web Forms il campo __VIEWSTATE è protetto da un MAC calcolato con la validationKey presente nel web.config. Se quella chiave è nota, un attaccante può costruire un ViewState con MAC valido contenente un payload serializzato malevolo: al momento della deserializzazione lato server, il payload viene eseguito. Qui la chiave era quella di default installata con il prodotto, quindi uguale e nota su ogni installazione. Lo sfruttamento non richiede autenticazione.

Proof of Concept

Il payload è stato generato con ysoserial.net, usando la validationKey di default:

.\ysoserial.exe -p ViewState -g TextFormattingRunProperties `
  -c "powershell -ep bypass -windowstyle hidden -encodedCommand <BASE64>" `
  --validationalg="SHA1" --validationkey="<DEFAULT_KEY>" --generator=<GEN>

Il ViewState così generato è stato inviato in una richiesta POST come parametro __VIEWSTATE.

Richiesta POST con il payload ViewState

Il risultato è una shell interattiva sul server che ospita l’applicativo.

Reverse shell ottenuta sul server

Impatto

L’attaccante ottiene esecuzione di comandi sul server Windows, con possibilità di esfiltrare dati personali e sensibili, muoversi lateralmente nell’infrastruttura e cifrare i dati con ransomware a scopo di riscatto. Trattandosi di una chiave di default, l’attacco è riproducibile su ogni installazione non rimediata.

Fix e mitigazioni

  • Mantenere il framework .NET aggiornato all’ultima versione supportata.
  • Verificare le impostazioni IIS:
    • enableViewStateMac impostato a true;
    • aspnet:AllowInsecureDeserialization impostato a false.
  • Rigenerare o sostituire la validationKey nel web.config, oppure impostarne la generazione automatica.
  • Aggiornare il software all’ultima versione disponibile.

Timeline

Data Evento
2022-03-29 Scoperta della vulnerabilità
2022-04-07 Primo contatto con il vendor (nessuna risposta)
2022-04-21 Secondo contatto con il vendor (con risposta)
2022-04-22 Condivisione del report con il vendor
2022-05-03 Richiesta del CVE-ID al MITRE
2022-05-19 Il vendor richiede la verifica della patch
2022-05-27 Assegnazione di CVE-2022-30422
2022-05-31 Accordo sulla data di pubblicazione
2022-06-16 Pubblicazione del security advisory

Riferimenti

← tutti i post