Vulnerabilità in VNC – Kaspersky Report

25/11/2019

LibVNC TightVNC TurboVNC UltraVNC vnc Vulnerabilità

I ricercatori di Kaspersky, hanno portato avanti un progetto dedicato allo studio di diverse vulnerabilità in UltraVnc. Il sistema VNC è un’applicazione progettata per consentire l’accesso remoto tra dispositivi. Si tratta di un software ampiamente diffuso, stando alla base dati di shodan.io sono disponibili online oltre 600.000 server con attivo il servizio VNC. Il prodotto utilizza il protocollo RFB (remote frame buffer) e di regola, ogni implementazione del sistema include un componente server e un componente client.

Il report di Kaspersky, curato da Pavel Cheremushkin ed ora disponibile online, riporta l’esistenza di diverse vulnerabilità, la maggior parte delle quali riguarda lo sfruttamento di un overflow dello stack. Nel progetto, inoltre, i ricercatori hanno esaminato i principali vettori di attacco e scenari di seguito indicati:

1. Un utente malintenzionato all’interno della stessa rete su cui risiede il server VNC può eseguire il codice sul server con i privilegi del server.
2. Un utente si connette al “server” di un utente malintenzionato utilizzando il client VNC, l’attaccante può sfruttare le vulnerabilità nel client ed eseguire il codice sulla macchina dell’utente.

LibVNC

Esistono anche varianti di alcune di queste vulnerabilità nel codice presente nell’estensione che fornisce funzionalità di trasferimento file. L’estensione è disabilitata di default motivo per cui queste vulnerabilità non erano state identificate prima.

Tra le vulnerabilità identificate, quelle basate sul protocollo RFB il quale è presente in progetti VNC dal 1999. Un esempio eccellente per dimostrare la prima classe di vulnerabilità è il rfbClientCutTextMsg, che viene utilizzata per inviare informazioni sulle modifiche del buffer sul file client al server.

Dopo aver stabilito una connessione, il server accetta di utilizzare specifiche impostazioni dello schermo e tutti i messaggi trasferiti hanno lo stesso formato. Ogni messaggio inizia con un byte, che rappresenta il tipo di messaggio. In base al tipo di messaggio, vengono selezionati un gestore messaggi e una struttura corrispondenti al tipo.

Il secondo tipo di vulnerabilità è presente sulla stessa struttura. Alcune strutture portano ad un errore di inizializzazione della memoria inviata al server, che potrebbe essere sfruttata da un utente malintenzionato, come nell’esempio sotto riportato.

 

TightVNC

Si tratta di un’implementazione di un client VNC abbastanza popolare per GNU / Linux.

Le vulnerabilità presenti sono abbastanza simili a quelle evidenziate in LibVNC. I ricercatori hanno messo a confronto due porzioni di codice evidenziando lo stesso problema di “buffer overflow” 

Si può osservare che, ad eccezione di alcune variazioni minori, il codice sia su LibVNC che TightVNC è identico. La vulnerabilità risiede nella funzione HandleCoRREBPP che identifica l’intensità del colore concordata dal client e dal server nella fase di inizializzazione della connessione.

Il progetto è stato di fatto abbandonato alla versione 1.x, anche se esiste la versione commerciale (TightVNC 2.x per Unix).

TurboVNC

Questo progetto VNC è affetto da un’unica vulnerabilità.

I ricercatori sono riusciti ad isolarla con poche righe di codice:

Questo frammento di codice legge un messaggio nel formato rfbFenceType. Il messaggio fornisce al server informazioni sulla lunghezza dei dati utente, senza alcun controllo di eventuali buffer overflow.

A causa dell’assenza di questo controllo, questa vulnerabilità consente di controllare gli indirizzi di ritorno e, di conseguenza, di poter eseguire codice remoto sul server.

Tuttavia, un utente malintenzionato dovrebbe prima ottenere le credenziali per connettersi al server VNC o ottenere il controllo del client.

ULTRA VNC

In UltraVNC sono state identificate 22 vulnerabilità, sia nel server che nei componenti client. Tra le 22, due meritano attenzione:

  • CVE-2018-15361: Questa vulnerabilità di underflow del buffer nel codice client VNC, può potenzialmente comportare l’esecuzione di codice. Questo attacco sembra essere sfruttabile tramite la connettività di rete.
  • CVE-2019-8262 : La vulnerabilità dell’ overflow del buffer heap nel codice client VNC si traduce in un’esecuzione del codice. Questo attacco sembra essere sfruttabile tramite la connettività di rete.

CONCLUSIONI

Sulla base di questa ricerca sono stati registrati i seguenti CVE:

LibVNC UltraVNC
CVE-2018-6307
CVE-2018-15126
CVE-2018-15127
CVE-2018-20019
CVE-2018-20020
CVE-2018-20021
CVE-2018-20022
CVE-2018-20023
CVE-2018-20024
CVE-2019-15681
CVE-2018-15361
CVE-2019-8258
CVE-2019-8259
CVE-2019-8260
CVE-2019-8261
CVE-2019-8262
CVE-2019-8263
CVE-2019-8264
CVE-2019-8265
CVE-2019-8266
CVE-2019-8267
CVE-2019-8268
CVE-2019-8269
CVE-2019-8270
CVE-2019-8271
CVE-2019-8272
CVE-2019-8273
CVE-2019-8274
CVE-2019-8275
CVE-2019-8276
CVE-2019-8277
CVE-2019-8280
TightVNC
CVE-2019-8287
CVE-2019-15678
CVE-2019-15679
CVE-2019-15680
TurboVNC
CVE-2019-15683