Vulnerabilità nel tool needrestart, che consentono l'accesso root su Ubuntu Server.

L'azienda Qualys ha identificato tre vulnerabilità nell'utilità needrestart, progettata per riavviare i processi in background dopo l'aggiornamento delle librerie utilizzate dai processi. A partire da Ubuntu 21.04, l'utility needrestart è inclusa nell'ambiente di base di Ubuntu Server, dove viene eseguita con privilegi di root al termine di ogni transazione del gestore pacchetti APT, scansiona i processi in esecuzione e riavvia quelli collegati ai file che sono stati modificati dopo l'aggiornamento dei pacchetti. Le vulnerabilità identificate consentono a un utente locale non privilegiato di ottenere diritti di root su Ubuntu Server nella configurazione predefinita.

Le vulnerabilità sono presenti in needrestart a partire dalla versione 0.8 (2014) e sono state risolte nella versione 3.8 di needrestart. I problemi sono già stati corretti anche nelle distribuzioni Debian e Ubuntu. Come soluzione per bloccare l'exploitation delle vulnerabilità, è possibile disabilitare la scansione degli interpreti, specificando nel file di configurazione /etc/needrestart/needrestart.conf il parametro "$nrconf{interpscan} = 0".

Le vulnerabilità sono presenti nel codice che implementa la modalità di rilevamento degli aggiornamenti degli script eseguiti utilizzando gli interpreti. I problemi identificati:

  • CVE-2024-48990 — un utente locale può ottenere l'esecuzione di codice con privilegi root creando condizioni per l'avvio dell'interprete Python con una variabile d'ambiente PYTHONPATH impostata dall'attaccante. Oltre all'uso di Python, l'attacco può essere condotto anche (CVE-2024-48992) avviando l'interprete Ruby con la variabile d'ambiente RUBYLIB.

    Le vulnerabilità sono causate dal fatto che, durante il riavvio di uno script modificato, l'utilità needrestart imposta la variabile d'ambiente PYTHONPATH basandosi sul contenuto del file /proc/pid/environ, che utilizza anche per avviare il proprio codice Python. Di conseguenza, l'attaccante può attendere un'attività legata al gestore di pacchetti APT, simulare una modifica del proprio script e impostare per esso una variabile d'ambiente PYTHONPATH, che sarà anch'essa applicata durante l'esecuzione del codice Python integrato in needrestart ("import sys\n print(sys.path)") eseguito con privilegi root.

    Ad esempio, per sfruttare la vulnerabilità, è possibile avviare un processo Python che rimane in memoria, impostando la variabile d'ambiente "PYTHONPATH=/home/test" e posizionando la libreria condivisa "/home/test/importlib/__init__.so", che verrà eseguita durante l'esecuzione del codice Python con privilegi elevati in needrestart.

  • CVE-2024-48991 — un utente locale può ottenere l'esecuzione di codice con diritti di root avviando una condizione di gara (race condition), il che causa l'avvio da parte di needrestart di un interprete Python fittizio fornito dall'attaccante al posto dell'interprete Python di sistema. La sostanza della vulnerabilità è simile al problema menzionato in precedenza, l'unica differenza è che needrestart determina il nome del processo Python (ad esempio, /usr/bin/python3) leggendo "/proc/pid/exe".

    Per sfruttare la vulnerabilità, è possibile creare un processo /home/test/race, che utilizza il meccanismo inotify per attendere il momento in cui needrestart inizia a leggere il contenuto di /proc/pid/exe, e subito dopo avviare tramite la funzione execve l'interprete Python di sistema. Poiché needrestart non verifica se questo è realmente Python, considererà che /home/test/race sia l'interprete Python e lo eseguirà per il suo codice.

  • CVE-2024-11003 — un utente locale può ottenere l'esecuzione di comandi shell arbitrari con privilegi di root creando condizioni di elaborazione in needrestart usando nomi di file nel formato «comando|», il cui passaggio alla funzione Perl open() comporterà l'esecuzione del comando. In effetti, la vulnerabilità si manifesta nel modulo Perl ScanDeps (CVE-2024-10224), ma è causata dal passaggio a questo modulo di parametri esterni senza adeguato controllo.

    L'attacco può essere effettuato eseguendo uno script Perl con il simbolo «|» nel nome, ad esempio «/home/test/perl|». Durante l'esecuzione della funzione scan_deps() in needrestart, questo file verrà aperto tramite la funzione open(), che tratterà il simbolo «|» come un flag per avviare il programma «/home/test/perl» e utilizzare il suo flusso di output.

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