Questa settimana parleremo delle vulnerabilità ad alta gravità nel kernel Linux.
Dirty Pipe - Escalation dei privilegi locali in Linux
CVE-2022-0847 consente a un utente Linux non privilegiato di sovrascrivere qualsiasi file arbitrario di sola lettura. Un utente potrebbe sfruttare questa vulnerabilità iniettando codice nei processi root e aumentando i propri privilegi fino a diventare un utente root.
Simile all'onnipresente vulnerabilità "Dirty Cow", un utente malintenzionato può eseguire l'exploit Dirty Pipe e scrivere testo in un file. Ciò che rende Dirty Pipe una falla più facile da sfruttare è che un utente può scrivere testo in qualsiasi file arbitrario e in alcuni casi può facilmente scalare i privilegi tramite i binari SUID.
Causa principale - La vulnerabilità Dirty Pipe è causata da una variabile pipe_buffer.flags non inizializzata. Le pipe sono strumenti utilizzati per la comunicazione tra processi; un'estremità spinge i dati verso di esse, mentre l'altra estremità può prelevarli. Un commit ha reso i buffer delle pipe non inizializzati una vulnerabilità di gravità elevata. Quando si inietta PIPE_BUF_FLAG_CAN_MERGE in un riferimento alla cache della pagina, è possibile sovrascrivere i dati nella cache della pagina, semplicemente scrivendo nuovi dati nella pipe preparata in modo speciale.
Questa vulnerabilità presenta alcune avvertenze:
- L'attaccante deve disporre dei permessi di lettura per il file
- L'offset non deve trovarsi su un confine di pagina.
- La scrittura non può attraversare un confine di pagina
- Il file non può essere ridimensionato
Attualmente non esistono mitigazioni per questa vulnerabilità. Se si utilizza una versione del kernel Linux superiore alla 5.8, il fornitore consiglia di applicare la patch alle seguenti versioni: 5.16.11, 5.15.25 e 5.10.102.
Aggiornamento del 14 marzo 2022: è disponibile l'ultimo kernel Linode, che corregge Dirty Pipe.
Fuga dei contenitori tramite cgroup
I gruppi di controllo, o cgroup, sono una funzione del kernel Linux che assegna e ripartisce l'uso delle risorse del computer per i processi. In alcuni casi, questi processi vengono organizzati in gruppi gerarchici in cui l'allocazione delle risorse viene assegnata in base al gruppo.
I gruppi C sono comunemente usati nei contenitori Linux perché ci sono più processi in esecuzione in un contenitore che devono essere raggruppati.
La CVE-2022-0492 è una vulnerabilità di escape del container in cui un utente può uscire dal container e passare al computer host. Questo problema riguarda solo l'architettura cgroup v1.
Causa principale - La vulnerabilità coinvolge il file release_agent, che è una caratteristica di cgroups v1. Il file release_agent consente agli amministratori di configurare un "agente di rilascio" che viene eseguito quando un processo nel cgroup è terminato. Il release_agent è visibile solo nella directory del cgroup principale e ha effetto su tutti i cgroup figli. Ogni volta che un processo muore, il kernel controlla se il suo notifiy_on_release è abilitato e, se lo è, genera il binario del release_agent configurato. L'evasione del contenitore si verifica perché Linux non ha controllato se il processo che imposta il file release_agent ha privilegi amministrativi (ad esempio, la capacità CAP_SYS_ADMIN ).
Questa vulnerabilità può essere mitigata eseguendo le seguenti operazioni:
- Abilitazione dei profili di sicurezza AppArmor, SELinux o Seccomp
- Disabilitare gli spazi dei nomi degli utenti non privilegiati se non è necessario
- Esecuzione del contenitore come utente non privilegiato
I ricercatori di Palo Alto hanno creato un test per determinare se il vostro ambiente container è vulnerabile a CVE-2022-0492:
Questa vulnerabilità è soggetta ad alcune avvertenze. Per sfruttare con successo questa vulnerabilità è necessario soddisfare le seguenti condizioni:
- Un contenitore deve essere eseguito come utente privilegiato (root o un utente con il flag no_new_privs ).
- AppArmor, SELinux o Seccomp devono essere disabilitati.
- L'host deve abilitare gli spazi dei nomi degli utenti non privilegiati
- Un contenitore deve essere in un cgroup di root v1
Escalation dei privilegi locali di Netfilter attraverso la scrittura di heap-out-of-bounds
Netfilter è un framework del kernel Linux che consente di eseguire diverse operazioni relative alla rete. Consente il filtraggio dei pacchetti, la traduzione degli indirizzi di rete (e delle porte), la registrazione dei pacchetti e l'accodamento dei pacchetti nello spazio utente. È anche possibile costruire firewall internet basati sul filtraggio stateless e stateful dei pacchetti.
CVE-2022-25636, è una vulnerabilità in cui un utente locale può eseguire una scrittura heap-out-of-bounds nella funzione nft_fwd_dup_netdev_offload (nf_dup_netdev.c) e guadagnare privilegi. Questa vulnerabilità interessa attualmente le versioni del kernel da 5.4-rc1 a 5.6.10.
Causa principale - Nella funzione nft_fwd_dup_netdev_offload, ctx->num_actions++ viene utilizzato per eseguire l'offset nell'array flow->rule->action.entries(nf_dup_netdev.c:67) quando si impostano regole di flusso dup o fwd su una catena con offload hardware abilitato. Il disallineamento si verifica tra il numero di chiamate all'incremento e il numero di voci allocate. La dimensione dell'array allocato si basa sul numero di espressioni nftables che hanno expr.offload_flags&NFT_OFFLOAD_F_ACTION(nf_tables_offload.c:97), ma solo il tipo di espressione immediata ha questa caratteristica (non dup o fwd). Questa discrepanza consente di creare una regola con espressioni dup/fwd senza una corrispondente/precedente immediata, che porta a un array di voci sottodimensionato e a un numero arbitrario di scritture di array fuori limite. Qualcuno potrebbe scrivere uno script ed eseguire una scrittura OOB che può essere trasformata in una ROP del kernel / escalation dei privilegi locali.
Si raccomanda di aggiornare il kernel alla versione più recente.
Commenti