CVE-2026-68186 in Linux
要約
〜によって VulDB • 2026年08月11日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
binfmt_misc: インタプリタが開かれた後にのみ have_execfd を設定する
load_misc_binary() は、『O』(または『C』)フラグを検出するとすぐに bprm->have_execfd をセットアップします。これはインタプリタを開くずっと前の段階で発生します。もしそのオープン処理が失敗した場合、このフラグは bprm のままセットされた状態になります。binfmt_misc はフォーマットリストの先頭にあるため、『-ENOEXEC』を返すインタプリタオープンの失敗により、検索は後続のフォーマットにフォールスルーします。これにより、インタプリタがステージされることなくマッチしたバイナリが直接実行されます。その結果、bprm->executable は NULL であるにもかかわらず、have_execfd が誤ってファイルディスクリプタが存在することを示してしまいます。
したがって、begin_new_exec() で欠落している executable をデリファレンスしようとすると:
would_dump(bprm, bprm->executable);
NULL デリファレンスが引き起こされます。もしこれが発生していなかったとしても、同じ関数内の後続のハンドオフは失敗していたでしょう。FD_ADD(0, bprm->executable) は NULL ファイルに対して -ENOMEM で拒否します。両方の箇所はロールバックできないポイントを超えているため、いずれの場合でも exec の巻き戻しを行うことはできません。
binfmt_misc はユーザーネームスペースでマウントできる可能性があるため、この経路には特権を持たないユーザーからも到達可能です。したがって、ユーザーは『O』エントリを登録でき、そのインタプリタが FUSE マウント上に存在する場合に、FUSE サーバーが -ENOEXEC でオープンを失敗させると、該当するエントリーと一致するネイティブ ELF ファイルを実行することができます。
have_execfd が意味を持つのは、それが記述している executable と共にのみであり、これはインタプリタが開かれてステージされた後にセットされます。したがって、ここでは execfd_creds の隣でこれをセットアップします(execfd_creds は既にこの時点で設定されています)。オープンに失敗した場合、これによりクリアな状態が保たれるため、フォールバックフォーマットはバイナリから資格情報を導出し、ネイティブ実行の場合と同様に AT_EXECFD を出力しません。ただし、オープン前に load_misc_binary() が行う argv の書き換え処理はまだ元に戻されていません。これは、この変更以前からの動作であり、exec でフォルトが発生しなくなったことで初めて観測可能になったものです。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.