<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tuxedo on Ma plage perso</title>
        <link>https://www.hleroy.com/tags/tuxedo/</link>
        <description>Recent content in Tuxedo on Ma plage perso</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>fr</language>
        <copyright>This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.</copyright>
        <lastBuildDate>Thu, 30 Apr 2026 19:41:57 +0200</lastBuildDate><atom:link href="https://www.hleroy.com/tags/tuxedo/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>CVE-2026-31431 « Copy Fail » : quand la mitigation officielle ne suffit pas</title>
        <link>https://www.hleroy.com/2026/04/cve-2026-31431-copy-fail-quand-la-mitigation-officielle-ne-suffit-pas/</link>
        <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://www.hleroy.com/2026/04/cve-2026-31431-copy-fail-quand-la-mitigation-officielle-ne-suffit-pas/</guid>
        <description>&lt;img src="https://www.hleroy.com/2026/04/cve-2026-31431-copy-fail-quand-la-mitigation-officielle-ne-suffit-pas/images/copyfail.png" alt="Featured image of post CVE-2026-31431 « Copy Fail » : quand la mitigation officielle ne suffit pas" /&gt;&lt;p&gt;Depuis quelques jours, &lt;a class=&#34;link&#34; href=&#34;https://copy.fail/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Copy Fail&lt;/a&gt; fait parler d&amp;rsquo;elle dans la communauté Linux. Il s&amp;rsquo;agit d&amp;rsquo;une vulnérabilité du noyau Linux — la &lt;a class=&#34;link&#34; href=&#34;https://ubuntu.com/security/CVE-2026-31431&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CVE-2026-31431&lt;/a&gt; — qui, contrairement à la plupart des CVEs, dispose d&amp;rsquo;un proof-of-concept public redoutablement simple. J&amp;rsquo;ai voulu la corriger sur mon laptop Tuxedo OS. La mitigation officielle n&amp;rsquo;a pas fonctionné. Voici pourquoi, et comment s&amp;rsquo;en sortir.&lt;/p&gt;
&lt;h2 id=&#34;cest-quoi-copy-fail-&#34;&gt;C&amp;rsquo;est quoi Copy Fail ?
&lt;/h2&gt;&lt;p&gt;Copy Fail est un bug logique dans le template cryptographique &lt;code&gt;authencesn&lt;/code&gt; du noyau Linux : un utilisateur local non-privilégié peut écrire 4 octets de façon contrôlée dans le &lt;strong&gt;page cache&lt;/strong&gt; de n&amp;rsquo;importe quel fichier lisible. Comme le noyau passe par ce cache pour charger les binaires, c&amp;rsquo;est une modification effective sans toucher le disque — et sans déclencher &lt;code&gt;inotify&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est une faille logique pure, déterministe, sans race condition, exploitable avec un simple script Python standard. CVSS 7.8, PoC public. Ça mérite d&amp;rsquo;être corrigé.&lt;/p&gt;
&lt;h2 id=&#34;la-mitigation-officielle&#34;&gt;La mitigation officielle
&lt;/h2&gt;&lt;p&gt;Au 30 avril 2026, aucune distribution n&amp;rsquo;a encore publié un noyau patché. Le correctif upstream (commit &lt;code&gt;a664bf3d603d&lt;/code&gt; de Herbert Xu) existe depuis le 1er avril, mais les backports sont en attente chez Ubuntu, Red Hat et les autres.&lt;/p&gt;
&lt;p&gt;En attendant, la mitigation recommandée est de désactiver le module &lt;code&gt;algif_aead&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Rendre le blocage permanent (survit au reboot)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install algif_aead /bin/false&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/modprobe.d/disable-algif.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Décharger le module immédiatement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rmmod algif_aead 2&amp;gt;/dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;J&amp;rsquo;ai appliqué ça. Le PoC a continué de fonctionner.&lt;/p&gt;
&lt;h2 id=&#34;pourquoi-la-mitigation-officielle-échoue&#34;&gt;Pourquoi la mitigation officielle échoue
&lt;/h2&gt;&lt;p&gt;Trois problèmes combinés. D&amp;rsquo;abord, le &lt;code&gt;rmmod&lt;/code&gt; masqué par &lt;code&gt;|| true&lt;/code&gt; a silencieusement raté — &lt;code&gt;algif_aead&lt;/code&gt; est resté chargé en mémoire. Ensuite, la mitigation ne bloque qu&amp;rsquo;&lt;code&gt;algif_aead&lt;/code&gt;, alors que le PoC peut basculer sur &lt;code&gt;algif_skcipher&lt;/code&gt; ou &lt;code&gt;algif_hash&lt;/code&gt;. Enfin et surtout, ces trois modules partagent la même socket de base &lt;code&gt;af_alg&lt;/code&gt; : c&amp;rsquo;est elle qu&amp;rsquo;il faut bloquer, pas ses dépendants un par un.&lt;/p&gt;
&lt;h2 id=&#34;la-solution-complète&#34;&gt;La solution complète
&lt;/h2&gt;&lt;h3 id=&#34;étape-1--décharger-tous-les-modules-dans-le-bon-ordre&#34;&gt;Étape 1 — Décharger tous les modules dans le bon ordre
&lt;/h3&gt;&lt;p&gt;Les dépendants d&amp;rsquo;abord, sinon &lt;code&gt;rmmod&lt;/code&gt; refusera :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rmmod algif_aead algif_skcipher algif_hash af_alg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si l&amp;rsquo;un refuse (module en cours d&amp;rsquo;utilisation), identifier le processus fautif :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo lsof &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;algif|af_alg&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;étape-2--bloquer-tous-les-modules--af_alg-de-façon-permanente&#34;&gt;Étape 2 — Bloquer tous les modules + &lt;code&gt;af_alg&lt;/code&gt; de façon permanente
&lt;/h3&gt;&lt;p&gt;Créer &lt;code&gt;/etc/modprobe.d/disable-algif.conf&lt;/code&gt; avec le contenu suivant :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tee /etc/modprobe.d/disable-algif.conf &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;install algif_aead /bin/false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;install algif_skcipher /bin/false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;install algif_hash /bin/false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;install algif_rng /bin/false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;install algif_akcipher /bin/false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;install af_alg /bin/false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bloquer &lt;code&gt;af_alg&lt;/code&gt; est le plus robuste : même si un nouveau module &lt;code&gt;algif_*&lt;/code&gt; apparaissait, il ne pourrait pas se charger sans sa dépendance racine.&lt;/p&gt;
&lt;h3 id=&#34;vérification&#34;&gt;Vérification
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsmod &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep algif   &lt;span class=&#34;c1&#34;&gt;# doit retourner vide&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis relancer le PoC. La bonne réponse est :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OSError: [Errno 97] Address family not supported by protocol
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;erreur 97 (&lt;code&gt;EAFNOSUPPORT&lt;/code&gt;) signifie que la socket &lt;code&gt;AF_ALG&lt;/code&gt; est inaccessible au niveau kernel — le PoC plante dès la première ligne, avant même d&amp;rsquo;atteindre &lt;code&gt;algif_aead&lt;/code&gt;. La mitigation est complète.&lt;/p&gt;
&lt;h2 id=&#34;ce-que-ça-ne-casse-pas&#34;&gt;Ce que ça ne casse pas
&lt;/h2&gt;&lt;p&gt;Ce blocage n&amp;rsquo;affecte &lt;strong&gt;pas&lt;/strong&gt; : dm-crypt/LUKS, kTLS, IPsec/XFRM, OpenSSL, GnuTLS, NSS, SSH. Il peut théoriquement gêner une application configurée explicitement pour utiliser le moteur OpenSSL &lt;code&gt;afalg&lt;/code&gt; ou qui ouvre directement des sockets &lt;code&gt;aead&lt;/code&gt;/&lt;code&gt;skcipher&lt;/code&gt;/&lt;code&gt;hash&lt;/code&gt; — ce qui est rarissime sur un laptop grand public.&lt;/p&gt;
&lt;h2 id=&#34;la-suite--le-patch-kernel&#34;&gt;La suite : le patch kernel
&lt;/h2&gt;&lt;p&gt;Dès qu&amp;rsquo;Ubuntu publiera un noyau incorporant le commit &lt;code&gt;a664bf3d603d&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo reboot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Vérifier que le nouveau noyau est actif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -r
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Vérifier que le patch est bien inclus&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt changelog linux-image-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -r&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; 2&amp;gt;/dev/null &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;a664bf3d\|CVE-2026-31431&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Une fois confirmé, retirer la mitigation modprobe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm /etc/modprobe.d/disable-algif.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le suivi de disponibilité : &lt;a class=&#34;link&#34; href=&#34;https://ubuntu.com/security/CVE-2026-31431&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ubuntu.com/security/CVE-2026-31431&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
