
Strumenti di rilevamento e mitigazione per CVE-2026-31431 (Copy Fail) su kernel Linux. Include script Phalanx-CCS e Silent4Labs più un playbook Ansible per applicare una mitigazione temporanea (bloccare il modulo algif_aead o parametro di avvio) su più server.
Questo pacchetto fornisce una soluzione automatizzata per rilevare e mitigare la vulnerabilità CVE-2026-31431 (nota come Copy Fail) su sistemi Linux con kernel interessati (versioni da 4.14 a 6.12.84, da 6.13 a 6.18.21, ecc.).
La strumentazione consiste in:
mitigate_copyfail.sh) che:
CONFIG_CRYPTO_USER_API_AEAD=m|y).=m): crea /etc/modprobe.d/disable-algif-aead.conf con install algif_aead /bin/false e scarica il modulo (rmmod).=y): aggiunge il parametro di boot del kernel initcall_blacklist=algif_aead_init (richiede riavvio).mitigation.yml) che:
Nota importante: La mitigazione è temporanea. La soluzione permanente è aggiornare il kernel a una versione che includa la patch
a664bf3d603d(≥6.18.22, ≥6.19.12 o ≥7.0).
become: yes)sudo (per applicare la mitigazione)Gli script di rilevamento (Phalanx-CCS e Silent4Labs) sono sicuri e non sfruttano la vulnerabilità; verificano solo la superficie d'attacco.
cve-2026-31431-mitigation/
├── README.md
├── scripts/
│ ├── mitigate_copyfail.sh # Script unificato (rilevamento + mitigazione)
│ ├── check_copyfail.py # Phalanx-CCS (controllo raggiungibilità)
│ └── check-copyfail.sh # Silent4Labs (valutazione del rischio)
├── ansible/
│ ├── ansible.cfg # (opzionale) Configurazione Ansible
│ ├── inventory.ini # Inventario dei server
│ └── mitigation.yml # Playbook principale
└── resultados_cve/ # Cartella generata automaticamente per i log
git clone https://github.com/your-username/cve-2026-31431-mitigation.git
cd cve-2026-31431-mitigation/ansible
inventory.ini)Esempio per un server remoto:
[servers]
server1 ansible_host=192.168.1.10 ansible_user=root
[localhost]
localhost ansible_connection=local
[all:vars]
ansible_become=yes
# ansible_become_password=my_password # se si utilizza una password per sudo
In mitigation.yml, il task Copy scripts to remote utilizza src: "../scripts/{{ item }}". Assicurati che il percorso relativo sia corretto, o modificalo in base alla tua struttura.
Dalla directory ansible/:
ansible-playbook -i inventory.ini mitigation.yml -k -K
-k richiede la password SSH.-K richiede la password become (sudo).Quando si utilizza localhost con ansible_connection=local, non è necessario SSH.
Il playbook mostra un riepilogo in testo semplice simile a:
==========================================
MITIGATION RESULTS
==========================================
Host: server1
------------------------------------------
- Status: SYSTEM SECURE
- Code: (not applicable)
------------------------------------------
- Final score: 40 / 100
- Risk level: MEDIUM
==========================================
Inoltre, un file di log viene salvato in resultados_cve/<hostname>_mitigation.log contenente l'output completo dello script (data, versione del kernel, messaggi di rilevamento, ecc.).
Se i valori estratti mostrano ? o Not detected, abilita i task di debug in mitigation.yml:
when: false in when: true nei tre task DEBUG (o imposta when: true per visualizzare clean_stdout e gli output delle regex).Modifica i task Create local results directory e Save full output to local file:
path: /absolute/path/resultados_cve
dest: "/absolute/path/resultados_cve/{{ inventory_hostname }}_mitigation.log"
Commenta i task di copia e regola il percorso nel task Run mitigation script per puntare alla posizione esistente.
Cambia when: false in when: true nell'ultimo task (Clean up remote scripts).
initcall_blacklist) richiede un riavvio per avere effetto. Il playbook non riavvia automaticamente; è necessario pianificare una finestra di manutenzione.CONFIG_CRYPTO_USER_API_AEAD=y (kernel integrato), il modulo non può essere scaricato con rmmod; l'unico modo è il parametro di boot./proc/crypto e /boot/config-*; vengono eseguiti con become: yes.Questo progetto è distribuito sotto licenza MIT. Gli script di terze parti (Phalanx-CCS, Silent4Labs) mantengono le rispettive licenze.
Se trovi utile questo strumento, considera di lasciare una stella su GitHub!