| Title | LinuxのLinux Kernelにおける不特定の脆弱性 |
|---|---|
| Summary | Linuxカーネルにおいて、以下の脆弱性が修正されました。bpfにおける不十分な推測的ストアバイパス緩和によるポインタリークを修正しています。Spectre v4を緩和するために、2039f26f3aca(「bpf: 不十分な推測的ストアバイパス緩和によるリーケージの修正」)により、1) スタックスロットの初期化後および2) ポインタをスタックに退避する際にlfence命令が挿入されました。しかしこれは、スタックスロットが最初にポインタで初期化され(サニタイズ対象)、その後スカラーで上書きされる場合(スロットが既に初期化されているためサニタイズ対象外)をカバーしていません。この場合、2回目の書き込みは推測的ストアバイパス(SSB)の対象となり、推測的なポインタをスカラーとして扱う型混乱を引き起こします。これにより、プログラムは例えば分岐に基づくキャッシュサイドチャネルを用いて、その数値としてのポインタ値を漏洩させる可能性があります。これを修正するために、以前にポインタを含んでいたスタックスロットにスカラーを書き込む場合もサニタイズを行うようにしました。LLVMがレジスタプレッシャー時にのみポインタ退避を生成すると仮定すると、多くの実際のBPFプログラムへのパフォーマンス影響は小さいと考えられます。以下の特権なしBPFバイトコードは最小限のエクスプロイトと緩和策の草案です。[...] // r6 = 0または1(スカラー、不明なユーザー入力) // r7 = サイドチャネル用アクセス可能ポインタ // r10 = フレームポインタ(fp)、漏洩対象 // r9 = r10 #ssbを促すためのfpエイリアス *(u64 *)(r9 - 8) = r10 // fp[-8] = ポインタ、漏洩対象 // ポインタのスタックスピルのためここにlfenceが追加される。 // // 省略:alias predictorを訓練するためのダミーbpf_ringbuf_output()(r9-r10依存なし) // *(u64 *)(r10 - 8) = r6 // fp[-8] = スカラーでポインタを上書き // 2039f26f3acaにより、stack slotがSTACK_INVALIDでなかったためlfenceは追加されず、 // ストアはSSBの対象となる可能性があります。 // // 修正として、スロットにポインタが含まれていた場合にもlfenceを追加しました。 // r8 = *(u64 *)(r9 - 8) // r8はアーキテクチャ的にはスカラーですが推測的にはポインタです。 // // 分岐に基づくキャッシュサイドチャネルを用いてポインタを漏洩します。 r8 &= 1 // 漏洩するビットを選択 if r8 == 0 goto SLOW // ミス予測なし // 入力r6が0の場合はアーキテクチャ的に実行されないコードであり、 // ポインタビットが1の場合にのみ推測的に実行されます。 r8 = *(u64 *)(r7 + 0) #ビットをキャッシュにエンコード(0:遅い、1:速い) SLOW: [...]この処理の後、プログラムは*(r7 + 0)へのアクセス時間を測定し、選択されたポインタビットが0か1かを判定します。これを64回繰り返すことでamd64上のアドレス全体を復元できます。まとめると、サニタイズはスカラーが別のスカラーで上書きされる場合にのみ省略可能です。推測的ストアバイパスによるスカラー混乱は、検証中に導出されるポインタ境界が分岐なしの論理で強制されるため、不正アクセスには繋がりません。詳細については979d63d50c0c(「bpf: pointer arithmeticの範囲外推測を防止」)を参照してください。緩和策を!env-allow_{uninit_stack,ptr_leaks}に依存させてはいけません。なぜなら、これらが有効化されている場合、推測的なリークは予期しない可能性が高いためです。例えば、保護されたログファイルのアドレスリークは許容されても、緩和を無効化すると無権限プロセスがアクセス可能なマップのキャッシュ状態にアドレスが意図せず漏洩する恐れがあります。 |
| Possible impacts | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| Solution | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| Publication Date | March 27, 2025, midnight |
| Registration Date | Jan. 27, 2026, 5:39 p.m. |
| Last Update | Jan. 27, 2026, 5:39 p.m. |
| CVSS3.0 : 重要 | |
| Score | 7.1 |
|---|---|
| Vector | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H |
| Linux |
| Linux Kernel 4.19.207 以上 4.19.272 未満 |
| Linux Kernel 5.10.56 以上 5.10.166 未満 |
| Linux Kernel 5.13.8 以上 5.14 未満 |
| Linux Kernel 5.14 |
| Linux Kernel 5.14.1 以上 5.15.91 未満 |
| Linux Kernel 5.16 以上 6.1.9 未満 |
| Linux Kernel 5.4.146 以上 5.4.231 未満 |
| Linux Kernel 6.2 |
| No | Changed Details | Date of change |
|---|---|---|
| 1 | [2026年01月27日] 掲載 |
Jan. 27, 2026, 5:39 p.m. |
| Summary | In the Linux kernel, the following vulnerability has been resolved: bpf: Fix pointer-leak due to insufficient speculative store bypass mitigation To mitigate Spectre v4, 2039f26f3aca ("bpf: Fix leakage due to However, this does not cover cases where a stack slot is first To fix this, also sanitize scalars if they write a stack slot The following unprivileged BPF bytecode drafts a minimal exploit [...] After running this, the program can time the access to *(r7 + 0) to In summary, sanitization can only be skipped if one scalar is Do not make the mitigation depend on !env->allow_{uninit_stack,ptr_leaks} |
|---|---|
| Publication Date | March 28, 2025, 2:15 a.m. |
| Registration Date | March 28, 2025, 4 a.m. |
| Last Update | March 29, 2025, 3:11 a.m. |