<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Algif Aead on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/algif-aead/</link><description>Recent content in Algif Aead on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 04 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/algif-aead/index.xml" rel="self" type="application/rss+xml"/><item><title>EKS AMI CVE-2026-31431 Copy-Fail — Patch Delay and the algif_aead Mitigation</title><link>https://ice-ice-bear.github.io/posts/2026-05-04-eks-ami-cve-2026-31431-mitigation/</link><pubDate>Mon, 04 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-05-04-eks-ami-cve-2026-31431-mitigation/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post EKS AMI CVE-2026-31431 Copy-Fail — Patch Delay and the algif_aead Mitigation" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;On 2026-04-30, &lt;a class="link" href="https://github.com/awslabs/amazon-eks-ami/issues/2699" target="_blank" rel="noopener"
 &gt;awslabs/amazon-eks-ami issue #2699&lt;/a&gt; opened with a simple title — &amp;ldquo;🚨 Patch for: CVE-2026-31431.&amp;rdquo; AWS support&amp;rsquo;s answer was &amp;ldquo;no patch yet, no ETA,&amp;rdquo; and meanwhile &lt;a class="link" href="https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC" target="_blank" rel="noopener"
 &gt;a container-escape PoC went public&lt;/a&gt;. It took six days for &lt;a class="link" href="https://github.com/awslabs/amazon-eks-ami/releases/tag/v20260505" target="_blank" rel="noopener"
 &gt;EKS AMI v20260505&lt;/a&gt; to ship — and during those six days, &lt;strong&gt;the community&amp;rsquo;s mitigation moved faster than the official patch.&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD
 A["2026-04-30 &amp;lt;br/&amp;gt; Issue #2699 opens"] --&gt; B["05-01 &amp;lt;br/&amp;gt; v20260423 AMI confirmed vulnerable"]
 B --&gt; C["05-01 &amp;lt;br/&amp;gt; AWS: no patch, no ETA"]
 C --&gt; D["05-01 &amp;lt;br/&amp;gt; algif_aead module-load mitigation"]
 D --&gt; E["05-01 &amp;lt;br/&amp;gt; kernel.org 6.12 mainline commit 8b88d99 merged"]
 E --&gt; F["05-02 &amp;lt;br/&amp;gt; SSM Run Command rollout to clusters"]
 F --&gt; G["05-04 &amp;lt;br/&amp;gt; Chat thread: Docker seccomp option"]
 G --&gt; H["05-05 &amp;lt;br/&amp;gt; Amazon Linux kernel fix released"]
 H --&gt; I["05-06 &amp;lt;br/&amp;gt; EKS AMI v20260505 release"]&lt;/pre&gt;&lt;h2 id="cve-2026-31431--copy-fail-in-a-nutshell"&gt;CVE-2026-31431 — Copy-Fail in a Nutshell
&lt;/h2&gt;&lt;p&gt;The vulnerability lives in the Linux kernel&amp;rsquo;s &lt;a class="link" href="https://www.kernel.org/doc/html/latest/crypto/userspace-if.html" target="_blank" rel="noopener"
 &gt;algif_aead&lt;/a&gt; — the AEAD interface of the AF_ALG socket family. The community calls it &amp;ldquo;Copy-Fail.&amp;rdquo; Three things matter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Locally authenticated users&lt;/strong&gt; can trigger it. No remote unauthenticated path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container escape is feasible&lt;/strong&gt; in container workloads — direct impact on multi-tenant K8s clusters, CI runners, and sandbox environments.&lt;/li&gt;
&lt;li&gt;Public PoC: &lt;a class="link" href="https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC" target="_blank" rel="noopener"
 &gt;Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub advisory: &lt;a class="link" href="https://github.com/advisories/GHSA-2274-3hgr-wxv6" target="_blank" rel="noopener"
 &gt;GHSA-2274-3hgr-wxv6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;ldquo;Local&amp;rdquo; is the weakest assumption you have in K8s. It means an unprivileged process inside an apparently fine container can reach into the host kernel.&lt;/p&gt;
&lt;h2 id="timeline--issue-2699"&gt;Timeline — Issue #2699
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Date&lt;/th&gt;
 &lt;th&gt;Event&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-30&lt;/td&gt;
 &lt;td&gt;Issue #2699 opens. Title: &amp;ldquo;🚨 Patch for: CVE-2026-31431&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-01&lt;/td&gt;
 &lt;td&gt;Community check: even the latest v20260423 AMI (kernel 6.12.79-101.147.amzn2023) is &lt;strong&gt;still vulnerable&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-01&lt;/td&gt;
 &lt;td&gt;AWS support reply: &lt;strong&gt;&amp;ldquo;no patch, no ETA available&amp;rdquo;&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-01&lt;/td&gt;
 &lt;td&gt;AWS official mitigation guide — block loading of the &lt;code&gt;algif_aead&lt;/code&gt; module&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-01&lt;/td&gt;
 &lt;td&gt;The 6.12 mainline kernel had merged &lt;a class="link" href="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=8b88d99341f139e23bdeb1027a2a3ae10d341d82" target="_blank" rel="noopener"
 &gt;commit 8b88d99&lt;/a&gt; about 10 hours earlier&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-02&lt;/td&gt;
 &lt;td&gt;A user rolls out the mitigation cluster-wide via &lt;a class="link" href="https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html" target="_blank" rel="noopener"
 &gt;AWS SSM Run Command&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-04&lt;/td&gt;
 &lt;td&gt;Community discussion: &amp;ldquo;for Docker users, you can also block this in seccomp&amp;rdquo; — proposes an additional mitigation surface&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-05&lt;/td&gt;
 &lt;td&gt;Amazon Linux kernel fix — see the &lt;a class="link" href="https://alas.aws.amazon.com/AL2023/" target="_blank" rel="noopener"
 &gt;ALAS-2026 page&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;05-06&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;&lt;a class="link" href="https://github.com/awslabs/amazon-eks-ami/releases/tag/v20260505" target="_blank" rel="noopener"
 &gt;EKS AMI v20260505 release&lt;/a&gt;&lt;/strong&gt; — kernel 6.12.80-106.156 / 6.1.168-203.330. Issue scheduled to be locked.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="awss-pre-patch-mitigation"&gt;AWS&amp;rsquo;s Pre-Patch Mitigation
&lt;/h2&gt;&lt;p&gt;The idea is simple — block the vulnerable kernel module from loading at all.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;install algif_aead /bin/false&amp;#34;&lt;/span&gt; &amp;gt; /etc/modprobe.d/disable-algif.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rmmod algif_aead 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;install algif_aead /bin/false&lt;/code&gt; tells modprobe to run &lt;code&gt;/bin/false&lt;/code&gt; instead of loading the module — meaning it never loads. &lt;code&gt;rmmod&lt;/code&gt; removes the module if it is already loaded.&lt;/p&gt;
&lt;h2 id="cluster-wide-rollout--ssm-run-command"&gt;Cluster-Wide Rollout — SSM Run Command
&lt;/h2&gt;&lt;p&gt;A pattern shared in the issue comments.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ssm send-command &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --region eu-west-3 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --document-name &lt;span class="s2"&gt;&amp;#34;AWS-RunShellScript&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --targets &lt;span class="s2"&gt;&amp;#34;Key=tag:eks:cluster-name,Values={{CLUSTER_NAME}}&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --parameters &lt;span class="s1"&gt;&amp;#39;commands=[
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;echo \&amp;#34;install algif_aead /bin/false\&amp;#34; &amp;gt; /etc/modprobe.d/disable-algif.conf&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;rmmod algif_aead 2&amp;gt;/dev/null || true&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;lsmod | grep algif &amp;amp;&amp;amp; echo STILL_LOADED || echo MITIGATED&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ]&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --comment &lt;span class="s2"&gt;&amp;#34;CVE-2026-31431 mitigation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The last line is a verification check — if &lt;code&gt;lsmod | grep algif&lt;/code&gt; is empty, the module is gone. Even with dozens of nodes per cluster, this is one command.&lt;/p&gt;
&lt;h2 id="bake-into-managed-node-group--karpenter-userdata"&gt;Bake into Managed Node Group / Karpenter UserData
&lt;/h2&gt;&lt;p&gt;One user&amp;rsquo;s playbook: bake the mitigation into the &lt;a class="link" href="https://karpenter.sh/" target="_blank" rel="noopener"
 &gt;Karpenter&lt;/a&gt; NodePool UserData so &lt;strong&gt;every newly provisioned node boots already protected.&lt;/strong&gt; Existing nodes get a one-shot SSM application, new nodes are auto-handled by UserData — low impact, low effort.&lt;/p&gt;
&lt;p&gt;The standard rollout discipline applies: verify the PoC is blocked, confirm sidecar and DaemonSet compatibility, then stage the rollout.&lt;/p&gt;
&lt;h2 id="bottlerocket-is-a-separate-track"&gt;Bottlerocket Is a Separate Track
&lt;/h2&gt;&lt;p&gt;A commenter reported: &amp;ldquo;&lt;a class="link" href="https://bottlerocket.dev/" target="_blank" rel="noopener"
 &gt;Bottlerocket&lt;/a&gt; AMI clusters can&amp;rsquo;t apply this mitigation. This probably belongs in the other repo.&amp;rdquo; Bottlerocket has a read-only filesystem and a different module-loading policy, so it has to be tracked over at &lt;a class="link" href="https://github.com/bottlerocket-os/bottlerocket" target="_blank" rel="noopener"
 &gt;bottlerocket-os&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-aws-communication-critique"&gt;The AWS Communication Critique
&lt;/h2&gt;&lt;p&gt;The single thread that runs through the whole issue: &lt;strong&gt;&amp;ldquo;AWS communicated poorly.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Other managed-K8s vendors sent advance warning emails. AWS sent nothing.&lt;/li&gt;
&lt;li&gt;A specific ETA — &amp;ldquo;AMI within X days of upstream patch&amp;rdquo; — would have helped operators plan.&lt;/li&gt;
&lt;li&gt;While the community was tracking the PoC and the mainline commit themselves, AWS support&amp;rsquo;s answer was still &amp;ldquo;no ETA.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That tension is exactly why the issue was set to be locked once v20260505 shipped.&lt;/p&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;The real signal in this issue isn&amp;rsquo;t the patch — it&amp;rsquo;s the &lt;strong&gt;shape of the timeline&lt;/strong&gt;. About six days passed between the mainline kernel merge and the EKS AMI release, and during those six days the PoC was already public, meaning container escape was demonstrably reachable in multi-tenant K8s, CI runners, and sandbox setups. So what operators actually needed wasn&amp;rsquo;t &amp;ldquo;a patch is coming,&amp;rdquo; but &lt;strong&gt;&amp;ldquo;how do we survive six days before the patch.&amp;rdquo;&lt;/strong&gt; The answer fits in two lines — apply the &lt;code&gt;algif_aead&lt;/code&gt; module block to every node immediately via SSM, and bake it into Karpenter and Managed Node Group UserData so new nodes come up already protected. AWS&amp;rsquo;s &amp;ldquo;no ETA&amp;rdquo; reply is a separate problem; while other managed hosting providers were sending advance warning emails, AWS stayed silent, which means operations teams need to monitor &lt;strong&gt;information sources beyond official channels — issue trackers, community chat rooms, kernel.org&lt;/strong&gt; — as a baseline practice. The fact that a 2026-05-04 chat thread was already debating &amp;ldquo;block it via Docker seccomp instead&amp;rdquo; is the proof: the community recognized the threat faster than the official announcement. The same pattern will repeat with the next CVE, and &lt;strong&gt;repo subscriptions + community channels + the ALAS feed&lt;/strong&gt; should be the standard ops posture.&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Issue and AMI release&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/awslabs/amazon-eks-ami/issues/2699" target="_blank" rel="noopener"
 &gt;awslabs/amazon-eks-ami issue #2699&lt;/a&gt; — 🚨 Patch for: CVE-2026-31431&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/awslabs/amazon-eks-ami/releases/tag/v20260505" target="_blank" rel="noopener"
 &gt;EKS AMI v20260505 release&lt;/a&gt; — kernel 6.12.80-106.156 / 6.1.168-203.330 (published 2026-05-06)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CVE / advisories&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/advisories/GHSA-2274-3hgr-wxv6" target="_blank" rel="noopener"
 &gt;GHSA-2274-3hgr-wxv6&lt;/a&gt; — GitHub advisory&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=8b88d99341f139e23bdeb1027a2a3ae10d341d82" target="_blank" rel="noopener"
 &gt;Linux kernel commit 8b88d99&lt;/a&gt; — mainline fix&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC" target="_blank" rel="noopener"
 &gt;Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC&lt;/a&gt; — container-escape PoC&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.kernel.org/doc/html/latest/crypto/userspace-if.html" target="_blank" rel="noopener"
 &gt;Linux algif_aead userspace API docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://alas.aws.amazon.com/AL2023/" target="_blank" rel="noopener"
 &gt;Amazon Linux Security Center (ALAS)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mitigation references&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html" target="_blank" rel="noopener"
 &gt;AWS SSM Run Command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://karpenter.sh/" target="_blank" rel="noopener"
 &gt;Karpenter&lt;/a&gt; — for UserData baking&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://bottlerocket.dev/" target="_blank" rel="noopener"
 &gt;Bottlerocket&lt;/a&gt; · &lt;a class="link" href="https://github.com/bottlerocket-os/bottlerocket" target="_blank" rel="noopener"
 &gt;bottlerocket-os GitHub&lt;/a&gt; — separate track&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>