
CVE-2020-8835 の概念実証エクスプロイト、Linux カーネルの BPF 検証器の脆弱性で、境界外メモリアクセスと権限昇格を可能にします。コンパイル手順と sysctl ベースの緩和策を含みます。
Linuxカーネル5.5.0以降では、bpf検証器(kernel/bpf/verifier.c)が32ビット演算のレジスタ境界を適切に制限しないため、カーネルメモリ内での範囲外読み取りおよび書き込みが発生します。
この脆弱性は、導入コミットがそのブランチにバックポートされたため、v5.4.7以降のLinux 5.4安定シリーズにも影響します。
この脆弱性は、5.6.1、5.5.14、5.4.29で修正されました。
この脆弱性の緩和策は、「kernel.unprivileged_bpf_disabled」sysctlを「1」に設定することで利用可能です。
これにより、bpf()システムコールへの非特権アクセスが完全に無効になります。
この問題は、セキュアブートを使用するシステムでも緩和されます。カーネルロックダウン機能によりBPFプログラムのロードがブロックされるためです。
gcc -o exploit ./exploit.c
$ sudo sysctl kernel.unprivileged_bpf_disabled=1
$ echo kernel.unprivileged_bpf_disabled=1 | \
sudo tee /etc/sysctl.d/90-CVE-2020-8835.conf
$ sysctl -w kernel.unprivileged_bpf_disabled=1