
Outils de détection et d'atténuation pour CVE-2026-31431 (Copy Fail) sur les noyaux Linux. Comprend les scripts Phalanx-CCS et Silent4Labs ainsi qu'un playbook Ansible pour appliquer une atténuation temporaire (blocage du module algif_aead ou paramètre de démarrage) sur l'ensemble des serveurs.
Ce paquet fournit une solution automatisée pour détecter et atténuer la vulnérabilité CVE-2026-31431 (également appelée Copy Fail) sur les systèmes Linux exécutant des noyaux affectés (versions 4.14 à 6.12.84, 6.13 à 6.18.21, etc.).
L'outillage se compose de :
mitigate_copyfail.sh) qui :
CONFIG_CRYPTO_USER_API_AEAD=m|y).=m) : crée /etc/modprobe.d/disable-algif-aead.conf avec install algif_aead /bin/false et décharge le module ().rmmod=y) : ajoute le paramètre de démarrage du noyau initcall_blacklist=algif_aead_init (nécessite un redémarrage).mitigation.yml) qui :
Remarque importante : La mitigation est temporaire. Le correctif permanent consiste à mettre à niveau le noyau vers une version incluant le patch
a664bf3d603d(≥6.18.22, ≥6.19.12 ou ≥7.0).
become: yes)sudo (pour appliquer la mitigation)Les scripts de détection (Phalanx-CCS et Silent4Labs) sont sûrs et n'exploitent pas la vulnérabilité ; ils vérifient uniquement la surface d'attaque.
cve-2026-31431-mitigation/
├── README.md
├── scripts/
│ ├── mitigate_copyfail.sh # Unified script (detection + mitigation)
│ ├── check_copyfail.py # Phalanx-CCS (reachability checker)
│ └── check-copyfail.sh # Silent4Labs (risk assessment)
├── ansible/
│ ├── ansible.cfg # (optional) Ansible configuration
│ ├── inventory.ini # Server inventory
│ └── mitigation.yml # Main playbook
└── resultados_cve/ # Auto‑generated folder for logs
git clone https://github.com/your-username/cve-2026-31431-mitigation.git
cd cve-2026-31431-mitigation/ansible
inventory.ini)Exemple pour un serveur distant :
[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 # if using password for sudo
Dans mitigation.yml, la tâche Copy scripts to remote utilise src: "../scripts/{{ item }}". Assurez-vous que le chemin relatif est correct, ou modifiez-le selon votre structure.
Depuis le répertoire ansible/ :
ansible-playbook -i inventory.ini mitigation.yml -k -K
-k demande le mot de passe SSH.-K demande le mot de passe become (sudo).En utilisant localhost avec ansible_connection=local, aucun SSH n'est nécessaire.
Le playbook affiche un résumé en texte brut similaire à :
==========================================
MITIGATION RESULTS
==========================================
Host: server1
------------------------------------------
- Status: SYSTEM SECURE
- Code: (not applicable)
------------------------------------------
- Final score: 40 / 100
- Risk level: MEDIUM
==========================================
De plus, un fichier journal est enregistré dans resultados_cve/<hostname>_mitigation.log contenant la sortie complète du script (date, version du noyau, messages de détection, etc.).
Si les valeurs extraites affichent ? ou Not detected, activez les tâches de débogage dans mitigation.yml :
when: false par when: true dans les trois tâches DEBUG (ou définissez when: true pour voir clean_stdout et les sorties des expressions régulières).Modifiez les tâches Create local results directory et Save full output to local file :
path: /absolute/path/resultados_cve
dest: "/absolute/path/resultados_cve/{{ inventory_hostname }}_mitigation.log"
Commentez les tâches de copie et ajustez le chemin dans la tâche Run mitigation script pour pointer vers l'emplacement existant.
Remplacez when: false par when: true dans la dernière tâche (Clean up remote scripts).
initcall_blacklist) nécessite un redémarrage pour prendre effet. Le playbook ne redémarre pas automatiquement ; une fenêtre de maintenance doit être planifiée.CONFIG_CRYPTO_USER_API_AEAD=y (noyau intégré), le module ne peut pas être déchargé avec rmmod ; la seule solution est le paramètre de démarrage./proc/crypto et /boot/config-* ; ils s'exécutent avec become: yes.Ce projet est distribué sous la licence MIT. Les scripts tiers (Phalanx-CCS, Silent4Labs) conservent leurs licences respectives.
Si vous trouvez cet outil utile, pensez à lui attribuer une étoile sur GitHub !