Nel toolbox per il lancio di container isolati runc, utilizzato in Docker e Kubernetes, è stata trovata una vulnerabilità CVE-2024-21626 che consente l'accesso al file system dell'ambiente host da un container isolato. Durante un attacco, un aggressore può sovrascrivere alcuni file eseguibili nell'ambiente host, riuscendo così a eseguire il proprio codice al di fuori del container. Nel runtime crun e youki, che utilizzano runc, così come in LXC, il problema non si manifesta. La vulnerabilità è stata risolta nella versione runc 1.1.12.
Nel caso di utilizzo di strumenti come Docker o Kubernetes, un attacco può essere condotto tramite la preparazione di un'immagine del contenitore appositamente progettata, dopo l'installazione e l'avvio della quale è possibile accedere al file system esterno dal contenitore. Con Docker esiste la possibilità di sfruttare tramite un Dockerfile appositamente progettato. La vulnerabilità può essere sfruttata anche nel caso venga avviato un processo nel contenitore utilizzando il comando "runc exec" legando la directory di lavoro allo spazio dei nomi dell'ambiente host.
La vulnerabilità è causata da una perdita di file descriptor interni. Prima di eseguire il codice all'interno del container, runc chiude tutti i file descriptor utilizzando il flag O_CLOEXEC. Tuttavia, dopo l'esecuzione della funzione setcwd(), rimane un file descriptor aperto che punta alla directory di lavoro e continua a essere accessibile dopo l'avvio del container. Sono stati proposti diversi scenari base di attacco all'ambiente host utilizzando il file descriptor residuo.
Ad esempio, l'attaccante può specificare nell'immagine del contenitore il parametro process.cwd, che punta a "/proc/self/fd/7/", portando così alla legatura della directory di lavoro al processo pid1 nel contenitore, situato nello spazio di montaggio dell'ambiente host. In questo modo, nell'immagine del contenitore è possibile configurare l'avvio di "/proc/self/fd/7/../../../bin/bash" e, eseguendo uno script shell, sovrascrivere il contenuto di "/proc/self/exe", che punta alla copia host di /bin/bash.
Un'altra opzione di attacco consente a un malintenzionato, confinato all'interno del contenitore, di accedere alla directory dell'ambiente host se nel contenitore vengono avviati processi con privilegi tramite il comando "runc exec" con l'opzione "—cwd". L'attaccante può sostituire il percorso del processo in esecuzione con un collegamento simbolico che punta a "/proc/self/fd/7/" e ottenere l'apertura di "/proc/$exec_pid/cwd" per accedere al file system nell'host. L'attaccante può anche sovrascrivere file eseguibili nell'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 identificate altre cinque vulnerabilità nei componenti della toolbox Docker:
- CVE-2024-23651 — una condizione di race nel pacchetto BuildKit, utilizzato in Docker per convertire il codice sorgente in artefatti di build. La vulnerabilità è causata dall'utilizzo di un punto di montaggio comune condiviso con cache («—mount=type=cache,source=») durante le fasi di build parallele, il che consente di ottenere accesso ai file nell'ambiente host da un contenitore di build trattando un Dockerfile appositamente progettato. La vulnerabilità è stata risolta in BuildKit 0.12.5.
- CVE-2024-23652 — un errore nella rimozione di file vuoti creati per il punto di montaggio quando si utilizza l'opzione «—mount», consente di eliminare un file al di fuori del contenitore durante la lavorazione di un Dockerfile appositamente progettato. La vulnerabilità è stata risolta in BuildKit 0.12.5.
- CVE-2024-23653 — un errore nell'implementazione dell'API in BuildKit consente di eseguire un contenitore con privilegi elevati, indipendentemente dallo stato della configurazione security.insecure. La vulnerabilità è stata risolta in BuildKit 0.12.5.
- CVE-2024-23650 — un client o frontend malintenzionato di BuildKit può causare l'arresto anomalo di un processo in background di BuildKit. La vulnerabilità è stata risolta in BuildKit 0.12.5.
- CVE-2024-24557 — una possibilità di avvelenamento della cache in Moby, un componente per la costruzione di sistemi specializzati di isolamento dei contenitori. Durante l'elaborazione di un'immagine del contenitore appositamente progettata, è possibile inserire nella cache dati che possono essere utilizzati nelle fasi successive della build. La vulnerabilità è stata risolta in Moby 25.0.2 e 24.0.9.
Fonte: opennet.ru
