CVE 2026 31431, comunemente nota come "Copy Fail", è una vulnerabilità locale di elevata gravità per l'escalation dei privilegi che interessa il kernel Linux. Il problema riguarda i kernel distribuiti da tutte le principali distribuzioni Linux dal 2017 e consente a un utente locale non privilegiato di ottenere l'esecuzione a livello di root sul sistema host.

La vulnerabilità deriva da una falla logica all'interno del sottosistema crittografico del kernel Linux, in particolare l' interfaccia algif_aead esposta tramite i socketAF_ALG. In determinate condizioni, questa falla consente la modifica controllata dellacache di paginain memoria del kernelper ifile disolalettura, compresi i binari rootsetuid. Quando un binario modificato viene eseguito, l'aggressore può ottenere privilegi elevati.

Impatto

Un utente malintenzionato in grado di eseguire codice locale (ad esempio, un account utente standard, un account di servizio compromesso, un punto d'appoggio per il breakout del container o un lavoro CI dannoso) può:

  • Scalare i privilegi a root
  • Modificare ilpercorso di esecuzioneinmemoriadei file binari affidabili senza alterare i file su disco.
  • eludere i meccanismi di rilevamento che si basano esclusivamente sul monitoraggio dell'integrità dei file
  • Sfuggire potenzialmente ai container supiattaformeakernelcondiviso, grazie alla natura globale della cache di pagina di Linux.

A differenza delle precedentifalle diprivilege-escalationdi Linux, Copy Fail:

  • non richiede condizioni di gara
  • non dipende daoffset di memoriaspecificidel kernel
  • È deterministico e trasportabile tra le varie distribuzioni

Sistemi interessati

  • kernel Linux 4.14 e successivi che includono l'ottimizzazione AEAD in-placedel 2017in algif_aead
  • Tutte le principali distribuzioni che distribuiscono kernel costruiti a partire dal 2017 fino all'applicazione delle patch del fornitore.

Raccomandazioni

  • Applicare una patch al kernel su tutti i sistemi interessati come soluzione primaria. Questo comportamento è lato kernel; i controlli dello spazio utente da soli non sono sufficienti.
  • Limitare l'uso di AF_ALG per i carichi di lavoro non attendibili utilizzando seccomp, SELinux, AppArmor, policy per container o profili di hardening se tali carichi di lavoro non richiedono i crypto socket del kernel.

Convalidadellaprovadi concettoe test di Integrity360

Integrity360 ha condotto un'analisi dinamica controllata deipayloadproof-of-conceptdi Copy Fail, disponibili pubblicamente, per convalidare la sfruttabilità e valutare il rischio operativo.

L'analisi dinamica attraverso l'esecuzione dei payload ha rivelato che l'exploit si rivolge al percorso del bug "Copy Fail" di Linux corrompendo la cache di pagina di un eseguibile protetto, in particolare "su", senza aprire il file per la scrittura. Il payload apre l'obiettivo in sola lettura, pilota ripetutamente un'interfaccia crittografica del kernel tramite "AF_ALG", sposta i dati supportati dall'obiettivo tramite splice e quindi segnala che la cache della pagina è stata mutata prima di eseguire l'obiettivo.

Non si tratta di una normale sovrascrittura di file. L'exploit abusa di un percorso di copia sul lato kernel in modo che l'immagine in memoria memorizzata nella cache dell'eseguibile venga alterata anche se il descrittore di file è di sola lettura. La traccia dell'analisi dinamica mostra un'esecuzione che passa attraverso "sh -c su", seguita dall'esecuzione di "su", che non si comporta più come l'helper"setuid"originalee passa invece a "sh". Durante l'esecuzione abbiamo osservato che "setgid(0)" e "setuid(0)" falliscono con "EPERM", il che è coerente con l'elevazione dei privilegi che viene soppressa sotto tracciamento; il comportamento dell'exploit è ancora visibile perché l'esecuzione viene reindirizzata in una shell.

Spiegazione tecnica

L'exploit inizia aprendo "su" con "O_RDONLY" e annunciando un payload di 1704 byte (426 iterazioni). Questo numero è importante: il ciclo sembra applicare la patch all'obiettivo in pezzi da 4 byte, con 426 x 4 = 1704. Ogni iterazione crea un nuovo socket "AF_ALG", lo lega a un percorso crittografico "AEAD", imposta i parametri dell'algoritmo con "setsockopt" e invia un piccolo blocco di controllo artigianale con "sendmsg".

Il passaggio critico è la coppia di chiamate di splice. In primo luogo, i byte vengono uniti dal descrittore del file di destinazione di sola lettura in una pipe. Poi vengono giuntati dalla pipe alsocket"AF_ALG" accettato. In questo modo si mantiene il trasferimento all'interno dello spazio kernel e si evita una normale scrittura in spazio utente. Dopo ogni tentativo, "recvfrom" restituisce "EBADMSG", che indica che l'operazione di crittografia è fallita dal punto di vista dello spazio utente, ma la traccia mostra chiaramente che l'exploit si basa su un effetto collaterale del kernel che sopravvive al fallimento.

Verso la fine della traccia, l'exploit esegue il trasferimento completo di 1704 byte, chiude i descrittori, stampa la pagina della cache mutata; esegue l'obiettivo ed esegue immediatamente "sh -c su". Questo porta a "execve("/usr/bin/su", ...)", quindi a "setgid(0)" e "setuid(0)"falliti e infine a "execve("/bin/sh", ["sh"], [])". Questa sequenza indica che l'immagine di "su" nella cacheè stata modificata e che l'esecuzione non segue più la logica del programma originale.

 

Chiamate di sistema più critiche

  • openat:
    • Apre su in sola lettura. Questo è importante perché indica che l'exploit non richiede l'accesso in scrittura al file di destinazione.
  • socket(AF_ALG, SOCK_SEQPACKET, 0) seguito da bind
    • Selezionano l'interfaccia crittografica del kernel e il percorso di elaborazione vulnerabile.
  • setsockopt:
    • Configura l'operazione AF_ALG in modo che la richiesta artigianale possa essere accettata ed elaborata.
  • sendmsg:
    • Fornisce i dati di controllo e il materiale della patch per ogni iterazione.
  • pipe2:
    • Crea il percorso del buffer all'interno del kernel usato per collegare le pagine supportate da file al crypto socket.
  • splice:
    • Questa è la primitiva di sfruttamento principale della traccia. L'exploit effettua prima lo splicing dal file di destinazione alla pipe, poi dalla pipe al socket AF_ALG. Questa è la coppia di syscall più direttamente legata alla corruzione della cache.
  • recvfrom:
    • Restituisce ripetutamente EBADMSG. Questo è importante perché mostra che l'exploit riesce nonostante un apparente fallimento dell'operazione, il che implica che la corruzione avviene prima che l'errore venga visualizzato.
  • execve:
    • Conferma l'esito dell'exploit eseguendo immediatamente il percorso di destinazione manomesso e poi cadendo in sh.

Versioni del kernel utilizzate nei test di Integrity360

 

Sfruttamento riuscito

  • Linux 5.4.0-122-generico (x86_64)

Sfruttamento non riuscito

  • Linux 7.0.0-15-generic (x86_64, kernel patchato)

Riferimento al payload

https:// github.com/tgies/copy-fail-c

 

Se siete preoccupati per una qualsiasi delle minacce descritte in questo bollettino o avete bisogno di aiuto per determinare le misure da adottare per proteggervi dalle minacce più importanti per la vostra organizzazione, contattate il vostro account manager o, in alternativa, contattateciper scoprire come potete proteggere la vostra organizzazione.