Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-31431-Report-Copy-fail-Vulnerability- — Analisi dettagliata della vulnerabilità Copy Fail (CVE-2026-31431) nel kernel Linux, inclusi il meccanismo di corruzione della memoria, il flusso di escalation dei privilegi e l'impatto sulla sicurezza. | Kitploit
Strumenti/GitHubGitHub/krish-foren6/cve-2026-31431-report-copy-fail-vulnerability-
Escalation di PrivilegiMemory ForensicsAnalisi delle VulnerabilitàExploitApprendimento e FormazioneRisposta agli IncidentiEscape dal Container
GitHub

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
krish-foren6/cve-2026-31431-report-copy-fail-vulnerability-

CVE-2026-31431-Report-Copy-fail-Vulnerability-

Analisi dettagliata della vulnerabilità Copy Fail (CVE-2026-31431) nel kernel Linux, inclusi il meccanismo di corruzione della memoria, il flusso di escalation dei privilegi e l'impatto sulla sicurezza.

Vedi Repository
1275 mesi faNon ancora revisionato

CVE-2026-31431 — Copy Fail: Escalatione dei Privilegi nel Kernel Linux

CVE CVSS Kernel Type Purpose

Analisi educativa della vulnerabilità Copy Fail nel kernel Linux.
Copre il meccanismo di corruzione della memoria, il flusso di escalation dei privilegi, l'escape dai container e le contromisure difensive.


⚠️ Disclaimer

Questo repository è esclusivamente per scopi educativi e di ricerca.
Non utilizzare queste informazioni su sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta a testare.
Tutti i frammenti di codice e i comandi sono forniti esclusivamente per favorire la comprensione delle componenti interne del kernel Linux.


Indice

  • Panoramica
  • Carta d'Identità della Vulnerabilità
  • Concetti di Base
  • Come Funziona il Bug
  • Flusso di Attacco Completo
  • Perché È Così Pericoloso
  • Osservazione Pratica Sicura
  • Difesa e Rilevamento
  • Confronto con CVE Simili
  • Glossario
  • Riferimento Rapido

Panoramica

CVE-2026-31431, nota anche come Copy Fail, è una vulnerabilità del kernel Linux in cui un utente locale non privilegiato può ottenere i privilegi di root senza alcuna autorizzazione speciale.

L'attacco opera interamente in RAM. Il file su disco non viene mai toccato — ciò significa che gli hash dei file restano puliti, i timestamp sono invariati e i log di audit non registrano nulla. Quando il sistema si riavvia, ogni traccia scompare.

Utente normale  →  exploit del bug algif_aead  →  sovrascrittura della page cache  →  root

Proprietà chiave:

  • ✅ Nessuna race condition — funziona in modo affidabile ogni volta
  • ✅ Disco intatto — la forensics non trova nulla
  • ✅ Richiede solo un account utente locale standard
  • ✅ Consente l'escape dai container tramite la page cache condivisa

Carta d'Identità della Vulnerabilità

CampoValore
ID CVECVE-2026-31431
Nome ComuneCopy Fail / Corruzione della Page Cache in algif_aead
Punteggio CVSS v3.17.8 — CRITICO
Tipo di AttaccoEscalation Locale dei Privilegi (LPE)
Versioni del Kernel AffetteLinux 5.10 fino a 6.8 (circa)
Componente Vulnerabilecrypto/algif_aead.c — interfaccia socket AF_ALG
Affidabilità dello SfruttamentoALTA — Nessuna race condition richiesta
Prove su DiscoNESSUNA — modifica solo in RAM
Impatto sui ContainerSÌ — escape dall'host tramite page cache condivisa
Stato della PatchDisponibile (patch upstream del kernel rilasciata)

Concetti di Base

/usr/bin/su — Il Binario Target

su (Switch User) consente a un utente di passare a un altro account — tipicamente root. È un binario SetUID:

ls -l /usr/bin/su
# -rwsr-xr-x 1 root root 68208 Jan 1 2026 /usr/bin/su
#   ^-- 's' = flag SetUID

Il flag s significa: quando qualsiasi utente esegue questo binario, esso viene eseguito con i permessi di root. Questo lo rende un obiettivo di alto valore.

La sua logica interna (semplificata):

if (password_correct()) {
    give_root_access();
} else {
    deny_access();
}

L'obiettivo dell'attacco: saltare completamente il controllo password_correct().


RAM e Page Cache

Quando Linux legge un file dal disco, ne conserva una copia in RAM chiamata page cache.

ComponenteDescrizione
DiscoFile originale su disco (lo scaffale della libreria)
Page CacheCopia in RAM del file (la fotocopia sulla tua scrivania)
CPULegge ed esegue dalla page cache — veloce
AttaccanteModifica la copia in RAM; il disco rimane intatto
cat /proc/meminfo | grep Cached
# Cached: 1234567 kB  ← questa è la page cache

Buffer e Buffer Sicuro

TipoSicurezza
Buffer Sicuro — allocato dal kernel, dimensioni e limiti controllati✅ OK
Page Cache — copia in RAM con supporto file, condivisa, eseguibile⚠️ PERICOLOSA se scritta
Puntatore Errato — indirizzo causato dal bug che punta ovunque🔴 CRITICO

AF_ALG e algif_aead

AF_ALG (Algorithm Family) è un'interfaccia socket di Linux che consente ai programmi in spazio utente di usare le funzioni crittografiche del kernel (AES, SHA, AEAD).

socket(AF_ALG, SOCK_SEQPACKET, 0);  // apre un socket crittografico

algif_aead è il modulo del kernel che gestisce la crittografia AEAD (es. AES-GCM) tramite AF_ALG. La vulnerabilità risiede nel suo passaggio di copia dei dati.

AF_ALG  →  algif_aead  →  motore AES-GCM  →  buffer di output
                                ↑
                           QUI C'È IL BUG

Come Funziona il Bug

Il bug non è nella logica di crittografia. È nella gestione della memoria — la regione di memoria sbagliata viene selezionata durante una copia di dati.

Flusso normale (senza bug):

destination = safe_output_buffer;       // posizione corretta
memcpy(destination, user_data, size);   // dati scritti in modo sicuro

Flusso vulnerabile (con bug):

destination = buffer + WRONG_OFFSET;    // BUG: puntatore errato!
memcpy(destination, user_data, size);   // i dati finiscono nella page cache

Il kernel avrebbe dovuto scrivere nel buffer di output sicuro. A causa di un offset calcolato male, scrive nella page cache — che contiene la copia in RAM di /usr/bin/su.

Cosa cambia l'attaccante in memoria

Il binario contiene codice macchina x86-64. L'attaccante prende di mira il salto condizionale che attiva il fallimento dell'autenticazione:

Prima dell'attacco:

cmp  eax, 0     ; controlla il valore di ritorno
jne  0x1234     ; se fallisce → salta a deny
call give_root  ; concede root

Dopo l'attacco (2 byte modificati in RAM):

cmp  eax, 0     ; uguale
90 90           ; NOP NOP ← salto sostituito, controllo saltato!
call give_root  ; la CPU arriva qui direttamente

NOP = No Operation. La CPU non fa nulla e prosegue — saltando completamente il controllo di autenticazione.


Flusso di Attacco Completo

Mentalità Pre-Attacco

"Mi serve solo un account utente normale. Sarà il kernel a commettere l'errore da solo.
Il disco resta pulito. Nessun log. Funziona ogni volta."

Passo 0 — Ricognizione

whoami && id
# uid=1000(user) gid=1000(user) ← utente normale

uname -r
# 6.1.0-generic ← nella fascia vulnerabile

ls -la /usr/bin/su
# -rwsr-xr-x root root ← SetUID confermato

python3 -c "import socket; s = socket.socket(socket.AF_ALG); print('AF_ALG disponibile')"

Passo 1 — Caricare il File nella Page Cache

cat /usr/bin/su > /dev/null
# /usr/bin/su è ora caricato nella page cache ✓

Passo 2 — Reverse Engineering del Binario

xxd /usr/bin/su | head -50
objdump -d /usr/bin/su | grep -A 20 'check\|auth\|pass'
readelf -h /usr/bin/su

Cercando: l'indirizzo della funzione di autenticazione, il salto condizionale jne/jnz e il suo offset esatto in byte.

Passo 3 — Aprire un Socket AF_ALG

import socket, struct

sock = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)
sock.bind(('aead', 'gcm(aes)', 0, 16))
sock.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, b'A' * 16)

Passo 4 — Inviare il Payload Costruito

Scarica lo strumento