
Ricercatori di Varonis Threat Labs hanno dimostrato una complessa catena di attacco che permette di ottenere l'esecuzione di comandi a livello di sistema operativo su server Snowflake PostgreSQL, sfruttando una combinazione di privilegi apparentemente limitati e funzionalità interne di PostgreSQL.
Ricercatori di Varonis Threat Labs hanno identificato e dimostrato una serie di passaggi che consentono a un utente con privilegi limitati su un database Snowflake PostgreSQL di ottenere l'esecuzione di comandi a livello di sistema operativo sul server sottostante. Questo è stato possibile nonostante Snowflake avesse implementato misure di sicurezza per bloccare i metodi più comuni di esecuzione di comandi e accesso ai file tramite SQL.
La catena di attacco è iniziata con un ruolo chiamato snowflake_admin, che non possedeva privilegi elevati. La chiave per l'escalation è stata la funzionalità CREATEROLE, che permette di creare e gestire altri ruoli. Sebbene di per sé non conferisca il controllo completo, in questo scenario ha aperto la strada allo sfruttamento di altre funzionalità fidate di PostgreSQL.
Utilizzando CREATEROLE, i ricercatori hanno assegnato al ruolo iniziale altri due ruoli integrati: pg_read_all_data e pg_write_all_data. Questi ruoli concedono ampi permessi di lettura e scrittura su tabelle del database e cataloghi di sistema. Con questo accesso esteso, è stato possibile modificare le voci in pg_cron, un'estensione di PostgreSQL utilizzata per eseguire lavori pianificati.
I ricercatori hanno manipolato un lavoro pianificato in modo che venisse eseguito con le credenziali dell'account postgres, un utente di sistema altamente privilegiato. Quando il lavoro è stato eseguito, ha creato una funzione SECURITY DEFINER. Questo tipo di funzione viene eseguita con i permessi del suo proprietario (in questo caso, l'utente postgres) anziché con quelli dell'utente che la invoca. Ciò ha permesso ai ricercatori di ottenere l'accesso di superutente a livello di database, aggirando le restrizioni imposte da Snowflake sui cambi diretti di ruolo.
L'accesso di superutente al database non equivaleva ancora al controllo del server. Snowflake aveva bloccato i percorsi noti per l'esecuzione di comandi, come quelli che leggono file del server, modificano impostazioni di sistema o eseguono programmi tramite SQL. Tuttavia, i ricercatori hanno scoperto che il linguaggio interno di PostgreSQL permetteva di associare una nuova funzione di database a una funzione C già presente nel software del server. Questo ha consentito di ripristinare l'accesso a funzionalità di lettura e scrittura di file precedentemente bloccate, ma sotto nomi diversi.
Una volta ottenuto l'accesso ai file, i ricercatori hanno sfruttato la funzionalità large-object di PostgreSQL per scrivere in un file di configurazione. Hanno modificato l'impostazione archive_command, che viene eseguita come comando shell ogni volta che PostgreSQL archivia un segmento di log di scrittura anticipata (WAL). I log WAL registrano le modifiche al database prima che vengano scritte nei file di dati. Quando il comando modificato è stato eseguito, i ricercatori hanno ottenuto l'esecuzione di comandi a livello di sistema operativo, operando come l'account di sistema postgres.
Questa scoperta evidenzia come la combinazione di permessi apparentemente innocui possa portare a rischi significativi nei servizi cloud gestiti. Il fatto che Snowflake avesse bloccato le vie più ovvie per l'escalation di privilegi non è stato sufficiente, poiché altre funzionalità interne di PostgreSQL hanno permesso di aggirare tali protezioni.
Le implicazioni di un attacco riuscito sono serie: un attore malevolo potrebbe potenzialmente alterare o distruggere file del database, interferire con le procedure di ripristino o modificare i log locali. Inoltre, poiché l'attività a livello di sistema operativo potrebbe non passare attraverso le normali query SQL, i registri di audit del database potrebbero non fornire un quadro completo dell'incidente.
È importante notare che l'attività dimostrata dai ricercatori è avvenuta all'interno del loro ambiente di test isolato e non ci sono indicazioni che dati di clienti Snowflake siano stati compromessi. Snowflake ha confermato di aver risolto la vulnerabilità lato server prima della pubblicazione della ricerca.
Per le organizzazioni che gestiscono i propri server PostgreSQL (o utilizzano servizi simili), i ricercatori raccomandano di trattare il permesso CREATEROLE con estrema cautela, rimuovendolo dagli account delle applicazioni a meno che non sia strettamente necessario. È fondamentale che gli amministratori rivedano regolarmente le concessioni dei ruoli, i lavori pianificati (pg_cron) e le funzioni SECURITY DEFINER per individuare eventuali modifiche non autorizzate.
Altre misure di sicurezza includono la restrizione di chi può creare funzioni interne o in linguaggio C, la protezione dei file di configurazione del database e l'isolamento dei servizi di database da accessi di rete non necessari. La scoperta sottolinea l'importanza di una gestione granulare dei permessi e di una continua vigilanza, anche in ambienti cloud gestiti.
Contenuto generato automaticamente da intelligenza artificiale a partire da fonti pubbliche. Non garantiamo l'accuratezza assoluta delle informazioni: consulta sempre la fonte originale. I diritti sui contenuti originali appartengono ai rispettivi editori.