Vulnerabilità in runc che consente di uscire dai container Docker e Kubernetes

Nel toolkit per l'avvio di container isolati runc, utilizzato in Docker e Kubernetes, è stata trovata una vulnerabilità CVE-2024-21626 che consente l'accesso al filesystem dell'ambiente host da un container isolato. Durante l'attacco, un malintenzionato può sovrascrivere alcuni file eseguibili nell'ambiente host e in questo modo ottenere l'esecuzione del proprio codice al di fuori del container. Nella runtime crun e youki, che utilizzano runc, così come in LXC, il problema non si manifesta. La vulnerabilità è stata corretta nella versione runc 1.1.12.

Nel caso in cui vengano utilizzati i toolkit Docker o Kubernetes, l'attacco può essere effettuato preparando un'immagine del container appositamente formattata, dopo l'installazione e l'avvio della quale è possibile accedere al filesystem esterno dal container. Con Docker, è possibile sfruttare la vulnerabilità tramite un Dockerfile appositamente elaborato. La vulnerabilità può essere sfruttata anche nel caso di avvio di processi all'interno del container con il comando 'runc exec' legando la directory di lavoro allo spazio dei nomi dell'ambiente host.

La vulnerabilità è causata dalla fuoriuscita di descrittori di file interni. Prima di eseguire il codice all'interno del container in runc, viene eseguita la chiusura di tutti i descrittori di file tramite il flag O_CLOEXEC. Tuttavia, dopo l'esecuzione successiva della funzione setcwd(), rimane aperto un descrittore di file che punta alla directory di lavoro e continua a essere accessibile dopo l'avvio del container. Sono stati proposti diversi scenari di attacco di base all'ambiente host, utilizzando il descrittore di file rimanente.

Ad esempio, un attaccante può specificare nell'immagine del container il parametro process.cwd, indicando '/proc/self/fd/7/', il che porterà a un collegamento della directory di lavoro del processo pid1 nel container, che si trova nello spazio di montaggio dell'ambiente host. In questo modo, nell'immagine del container è possibile configurare l'esecuzione di '/proc/self/fd/7/../../../../bin/bash' e, attraverso l'esecuzione di uno script shell, sovrascrivere il contenuto di '/proc/self/exe', che punta alla copia dell'host di /bin/bash.

Un'altra variante di attacco consente a un intruso, bloccato all'interno di un contenitore, di accedere alla directory dell'ambiente host, se nel contenitore specificato vengono eseguiti processi privilegiati utilizzando il comando «runc exec» con l'opzione «—cwd». L'attaccante può sostituire il percorso del processo in esecuzione con un collegamento simbolico puntato a «/proc/self/fd/7/» e ottenere l'accesso a «/proc/$exec_pid/cwd» per accedere al file system lato host. Inoltre, l'attaccante può sovrascrivere i file eseguibili nel contesto dell'ambiente host, avviando un file eseguibile dall'ambiente host («/proc/self/fd/7/../../../../bin/bash») e successivamente sovrascrivendo il file «/proc/$pid/exe», che punta al file in esecuzione.

Inoltre, sono state individuate altre cinque vulnerabilità nei componenti degli strumenti Docker:

  • CVE-2024-23651 — una condizione di gara nel pacchetto BuildKit, utilizzato in Docker per trasformare il codice sorgente in artefatti di build. La vulnerabilità è causata dall'utilizzo di un unico punto di montaggio condiviso con cache nelle fasi di build eseguite in parallelo («—mount=type=cache,source=»), il che consente, durante l'elaborazione di un Dockerfile appositamente progettato, di ottenere accesso a file nell'ambiente host dal contenitore di build. La vulnerabilità è stata corretta in BuildKit 0.12.5.
  • CVE-2024-23652 — un errore nella rimozione di file vuoti creati per il punto di montaggio utilizzando l'opzione «—mount», consente di eliminare un file al di fuori del contenitore durante l'elaborazione di un Dockerfile appositamente progettato. La vulnerabilità è stata corretta in BuildKit 0.12.5.
  • CVE-2024-23653 — un errore nell'implementazione dell'API in BuildKit consente di eseguire un contenitore con privilegi elevati, nonostante lo stato della configurazione security.insecure. La vulnerabilità è stata corretta in BuildKit 0.12.5.
  • CVE-2024-23650 — un client malevolo o un frontend di BuildKit possono causare l'arresto anomalo di un processo in background di BuildKit. La vulnerabilità è stata corretta in BuildKit 0.12.5.
  • CVE-2024-24557 — una possibilità di avvelenamento della cache in Moby, un componente per costruire sistemi di isolamento dei contenitori specializzati. Durante l'elaborazione di un'immagine del contenitore appositamente progettata, è possibile immettere nella cache dati che possono essere utilizzati nelle fasi successive della build. La vulnerabilità è stata corretta in Moby 25.0.2 e 24.0.9.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster