Docker EngineにおけるCVE -2026-31431 (「コピヌ倱敗」)の緩和

投皿日: 5月 27日, 2026幎

CVE-2026-31431 は最近公開されたLinuxカヌネルの脆匱性です。このCVEはDockerのむンフラを䟵害したせん。

ずはいえ、Docker Engineのv29以前のデフォルトプロファむルは4。3コンテナはAF_ALG゜ケットを䜜成でき、これぱクスプロむトが䜿甚するsyscallの衚面です。Docker Engine v29を䜿っおいれば、露出はありたせん。4。3 以降、あるいはパッチを圓おたホストカヌネル。もしそれらが欠けおいれば、そのホストで露出しおいるので、この投皿の続きを読むべきです。

執筆時点で、カヌネルパッチはDebian(CVE-2026-31431)およびRHEL 9 (RHSB-2026-002)で利甚可胜ですが、 Ubuntu䞊はただ利甚できたせん。カヌネル修正をただ提䟛しおいないディストリビュヌションのナヌザヌにずっおは、Docker Engineのアップグレヌドが今日適甚できる緩和策です。

コピヌ・フェむルに぀いお読むべき理由

この CVE は、倚くの Linux ディストリビュヌションがカヌネルパッチを入手する前に公になったため、倧きな泚目を集めたした。その結果、ほずんどのディストリビュヌションは䟝然ずしお脆匱であり、開瀺時点で即効した解決策を持っおいたせんでした。特に泚目すべきは、このバグが玄 2017幎頃たで遡るLinuxカヌネルに圱響を䞎え、圱響が異垞に広範囲に及んでいるからです。

Docker Engineチヌムでは、脆匱なホストのナヌザヌを守るために自分たち偎で䜕ができるかを調査し始めたした。しかし、その緩和策は最初に思ったよりも耇雑で、最初の詊みで 32ビットのバむナリが砎られたした。この投皿は、私たちが発売したもの、壊れたもの、孊んだこず、そしお珟圚の状況に぀いお述べおいたす。

コピヌ倱敗ずは䜕か

4月 29日、研究者たちはLinuxカヌネルのAF_ALG暗号サブシステムにおける暩限昇栌の脆匱性ずしお「コピヌフェむル」ず呌ばれるCVE-2026-31431を明らかにしたした。

欠陥は algif_aead モゞュヌルにありたす。AF_ALG゜ケットにアクセスできる非特暩ナヌザヌがペヌゞキャッシュぞの制埡された曞き蟌みを行うこずを可胜にしたす。ペヌゞキャッシュはシステム党䜓のファむル読み取りをバックバックするため、攻撃者はホスト䞊のすべおのプロセスが認識する任意の読み取り可胜なファむルの内容を䞀時的に倉曎できたす。setuidバむナリを砎損させるこずがロヌカルルヌトぞの最も盎接的な経路ですが、プリミティブ自䜓はより䞀般的です。

この脆匱性は簡単で、 2017以降リリヌスされたすべおのパッチ未修正のLinuxカヌネルで有効です。

正しい修正はカヌネルアップデヌトです。以䞋に説明する緩和策は、パッチ未凊理のカヌネル䞊で動䜜するコンテナの露出を枛らすものですが、根本的な脆匱性を修正するものではありたせん。カヌネルベンダヌがパッチをリリヌスしおいるなら、適甚しおください。

これはコンテナにずっお䜕を意味するのでしょうか?

デフォルトのセキュリティプロファむルで動䜜するコンテナ内で、コヌド実行を行う攻撃者はコピヌ倱敗を䜿っおペヌゞキャッシュ内のペヌゞを砎損させるこずができたす。䞀぀の可胜な結果は、setuidバむナリを砎損しおコンテナ内でroot化するたで゚スカレヌションするこずです。

しかし、ペヌゞキャッシュはホスト党䜓で共有されるため、圱響は攻撃者のコンテナに限定されたせん。修正されたペヌゞはホストだけでなく、同じファむルをマッピングする他のすべおのコンテナ(共有画像レむダヌも含む)に芋えたす。同じノヌド䞊の他のワヌクロヌドも圱響を受けるこずがありたす。

この攻撃は、デフォルトのコンテナが提䟛する以䞊の特別な胜力や暩限を必芁ずしたせん。唯䞀の芁件は AF_ALG ゜ケットの䜜成胜力であり、これは以前Dockerのデフォルトのセキュリティプロファむルで蚱可されおいたした。

初回挑戊:seccomp(294.2)

Docker Engineのデフォルトの seccompプロファむル を曎新し、 AF_ALG ゜ケットをブロックしたした。seccompフィルタヌは最初の匕数を怜査しお socket(2) し、すでにブロックされおいたアドレスファミリヌ AF_ALG ず AF_VSOCK を拒吊したす。

socket(2)をブロックするだけでは十分ではありたせん。Linux64 x86_で゜ケットを䜜成するもう䞀぀の方法がありたす。それはsocketcall(2)ずいう叀い倚重化システムコヌルで、socket、bind、connectなどの゜ケット操䜜を単䞀のSyscall番号にラップしおいたす。

Linux䞊で゜ケットを䜜成するもう䞀぀の方法がありたす。 socketcall(2)ずいう叀い倚重化システムコヌルで、 socket、 bind、 connectなどの゜ケット操䜜を単䞀のシスコヌル番号でラップしたす。

seccompの問題は、 socketcall が実際の匕数(アドレスファミリヌを含む)をナヌザヌスペヌス配列にパックし、BPFがそのポむンタをリリレオンしお怜査できないこずです。seccompではsocketcallを通じたAF_ALGを遞択的にブロックする方法はありたせん。

Linux 4。3 すでにi386 ずS390に盎接゜ケットのシステムコヌルを远加しおいるので、ほずんどの珟代のバむナリはすでに新しい socket シスコヌルを䜿っおおり、 socketcall は叀いバむナリにのみ圱響するず想定しおいたした。そこで完党にブロックし、Docker Engine v29を出荷したした。4。2(リリヌスノヌト)

䜕が壊れたのか

socketcallの吊定はあたりにも広範であるこずが刀明したした。

叀いバヌゞョンのglibcはsocketcall386すべおの゜ケット操䜜をルヌティングし、GoランタむムではGOARCH=386に無条件䜿甚(glibcずは独立)。倚くのレガシヌやゲヌムワヌクロヌド(SteamCMD、Wine)はそれに䟝存しおいたす。

socketcallブロックはコンテナ内で動䜜する倚くの32ビットバむナリ(moby/moby#52506)のネットワヌクを壊したした。

これは単なる私386 の問題ではありたせん。AMD64では、任意のプロセスがint $0x80ずのIA32互換モヌドに切り替え、盎接socketcallを呌び出しるこずができ、socket(2)ARGフィルタヌを完党に回避できたす。その経路に到達するのに 32ビットコンテナや 32ビットのバむナリは必芁ありたせん。

圱響を受けたコンテナは、カスタムのseccompプロファむルを䜿っおsocketcallを再有効化し぀぀、盎接socket(2)パスでブロックAF_ALG保持するこずでこれを回避できたす。

しかし、それはコンテナの硬化に穎を開けるだけです。なぜなら、その䞭の攻撃者がsocketcallを通しおAF_ALGに届く可胜性があるからです。

2回目の詊み:LSMベヌスの執行(v29.4.3)

根本的な問題は、seccompがシスコヌル境界で動䜜し、 socketcall ポむンタ匕数付きで単䞀のシスコヌル番号の背埌で倚くの操䜜を倚重化しおいるこずです。Seccompだけで゜ケットコヌルを通じた AF_ALG を遞択的にブロックするこずはできたせん。

AppArmorずSELinuxは異なるレベルで機胜しおいたす。Linuxセキュリティモゞュヌルはカヌネルの security_socket_create() コヌルバックに盎接フックし、どのsyscall゚ントリヌポむントが䜿われおいおも、カヌネルが実際に゜ケットオブゞェクトを䜜成するずコヌルバックが発動したす。LSMは AF_ALG を特定の条件で拒吊し぀぀、他の゜ケットコヌルの䜿甚はそのたたにするこずができたす。

v29においお。4。3(リリヌスノヌト)、私たちは:

  1. socketcallseccomp denyを元に戻し、32ビット互換性を回埩したした。
  2. デフォルトのAppArmorプロファむル( moby/profiles#)に22 deny network alg, を远加したした。
    AppArmorが有効になっおいるシステム(䟋:Ubuntu、Debian)、これによりsocket(2)ずsocketcall(2)の䞡方でAF_ALGをブロックしたす。
  3. SELinuxを動䜜させるシステム(Fedora、RHEL、CentOS)向けにSELinux CILポリシヌモゞュヌルを統合したした。
    このモゞュヌルはすべおのcontainer_domainタむプに察しおalg_socket䜜成を拒吊し、semoduleで読み蟌むこずができたす。
    SELinuxの匷制には、デヌモンが --selinux-enabledず共に動䜜しおいるこずが必芁です。
  4. seccomp socket(AF_ALG) argフィルタヌは 、盎接 socket(2) シスコヌルパスの防埡深局ずしお保持したした。

あなたがすべきこずは

  1. カヌネルにパッチを圓おおください。
    これが本圓の解決策です。
    あなたのディストリビュヌションで、CVE-2026-31431に察応するカヌネルアップデヌトがあるか確認しおください。
  2. Docker Engineをv29にアップグレヌドしおください。4。3 かそれ以降。曎新されたseccomp + AppArmor + SELinuxのデフォルトが出たす。systemctlの再起動docker(たたは同等のもの)で十分です。ホストの再起動は䞍芁です。
  3. カヌネルや゚ンゞンをすぐにアップグレヌドできない堎合:
  • カヌネルモゞュヌルをブラックリストに入り、 blacklist af_alg ず blacklist algif_aead を远加 /etc/modprobe.d/。
    これはモゞュヌルがカヌネルにコンパむルされおいない堎合に限り、ロヌド可胜なモゞュヌル(CONFIG_CRYPTO_USER_API=m)ずしお構築されおいる堎合のみ機胜したす。
  • カスタムのseccompプロファむルを適甚しお、--security-opt seccomp=/path/to/profile.jsonやdaemon.jsonのseccomp-profileオプションの䜿甚をAF_ALG拒吊したす。

締めの思い぀き

セキュリティは局状に重なり、時には䞀局だけでは十分ではありたせん。Seccompはすべおのシステムで socket(AF_ALG) をブロックしたすが、 socketcallには気づきたせん。AppArmorずSELinuxは䞡方の経路をブロックしたすが、ホストの蚭定に䟝存したす。二人は共に、どちら䞀人でもカバヌできないこずをカバヌしおいる。

LSMを持たないシステムでは、Docker偎からの socketcall 経路はブロックされおいたせん。最終的に修正すべきはカヌネルのバグです。

カヌネルの脆匱性は今埌も発生し続けるでしょう。そうなるず、コンテナランタむムが緩和策を展開するのに最も速い堎所ずなるこずが倚いです。なぜなら゚ンゞンの曎新はホスト䞊のすべおのコンテナを保護する䞀぀の倉曎だからです。コピヌ倱敗のタむムラむンはそれを特に明確に瀺しおいたした。゚ンバヌゎはディストリビュヌションが修正を敎える前に解陀され、数日間はカヌネルの再構築を埅たずに゚ンゞンだけが問題を軜枛できる堎所でした。

Docker Engineを最新の状態に保぀こずは、単なる新機胜の話ではありたせん。これは、カヌネルCVEが公開されるたでの期間を瞮小する最も効果的な方法の䞀぀です。

関連蚘事