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.

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

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:
enableViewStateMacimpostato atrue;aspnet:AllowInsecureDeserializationimpostato afalse.
- Rigenerare o sostituire la
validationKeynelweb.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 |