Kerentanan dalam subsistem eBPF yang membenarkan pelaksanaan kod pada peringkat kernel Linux

Kerentanan (CVE-2021-4204) telah dikenal pasti dalam subsistem eBPF, yang membolehkan anda menjalankan pengendali di dalam kernel Linux dalam mesin maya khas dengan JIT, membenarkan pengguna tempatan yang tidak mempunyai hak untuk mencapai peningkatan keistimewaan dan melaksanakan kod mereka di Tahap kernel Linux. Masalahnya telah muncul sejak kernel Linux 5.8 dan kekal tidak dibetulkan (termasuk keluaran 5.16). Status kemas kini yang dijana untuk menyelesaikan masalah dalam pengedaran boleh dijejaki pada halaman ini: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Telah diumumkan bahawa eksploitasi kerja telah dibuat, yang dirancang untuk diterbitkan pada 18 Januari (pengguna dan pembangun telah diberi masa seminggu untuk membetulkan kelemahan).

Kerentanan ini disebabkan oleh pengesahan salah program eBPF yang dihantar untuk pelaksanaan. Subsistem eBPF menyediakan fungsi tambahan, penggunaan yang betul yang disahkan oleh pengesah khas. Sesetengah fungsi memerlukan menghantar nilai PTR_TO_MEM sebagai hujah dan untuk mengelakkan kemungkinan limpahan penimbal, pengesah mesti mengetahui saiz memori yang dikaitkan dengan hujah. Untuk fungsi bpf_ringbuf_submit dan bpf_ringbuf_discard, data pada saiz memori yang dipindahkan tidak dilaporkan kepada pengesah, yang boleh digunakan untuk menulis ganti kawasan memori di luar sempadan penimbal apabila melaksanakan kod eBPF yang direka khas.

Untuk menjalankan serangan, pengguna mesti boleh memuatkan program BPFnya sendiri, dan banyak pengedaran Linux baru-baru ini menyekat keupayaan ini secara lalai (termasuk akses tanpa hak kepada eBPF kini dilarang secara lalai dalam kernel itu sendiri, bermula dengan keluaran 5.16). Sebagai contoh, kelemahan boleh dieksploitasi dalam konfigurasi lalai dalam Ubuntu 20.04 LTS, tetapi dalam persekitaran Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 dan Fedora 33 ia muncul hanya jika pentadbir telah menetapkan parameter kernel.unprivileged_bpf_disabled kepada 0. Sebagai penyelesaian untuk menyekat kelemahan, anda boleh menghalang pelaksanaan program BPF oleh pengguna yang tidak mempunyai hak dengan arahan "sysctl -w kernel.unprivileged_bpf_disabled=1".

Sumber: opennet.ru

Tambah komen