Kahinaan sa Linux Netfilter kernel subsystem

Ang isang kahinaan (CVE-2021-22555) ay natukoy sa Netfilter, isang subsystem ng Linux kernel na ginagamit upang i-filter at baguhin ang mga network packet, na nagbibigay-daan sa isang lokal na user na makakuha ng mga pribilehiyo ng ugat sa system, kabilang ang habang nasa isang nakahiwalay na lalagyan. Isang gumaganang prototype ng pagsasamantala na lumalampas sa KASLR, SMAP at SMEP na mekanismo ng proteksyon ay inihanda para sa pagsubok. Ang researcher na nakatuklas ng kahinaan ay nakatanggap ng $20 na reward mula sa Google para sa pagtukoy ng isang paraan upang laktawan ang paghihiwalay ng mga container ng Kubernetes sa isang kCTF cluster.

Ang problema ay umiikot mula noong kernel 2.6.19, na inilabas 15 taon na ang nakakaraan, at sanhi ng isang bug sa mga handler ng IPT_SO_SET_REPLACE at IP6T_SO_SET_REPLACE na nagdudulot ng buffer overflow kapag nagpapadala ng mga espesyal na naka-format na parameter sa pamamagitan ng isang setsockopt na tawag sa compat mode. Sa ilalim ng normal na mga pangyayari, ang tawag sa compat_setsockopt() ay maaari lamang gawin ng root user, ngunit ang mga pribilehiyong kailangan upang maisagawa ang pag-atake ay maaari ding makuha ng isang walang pribilehiyong user sa mga system na may suporta para sa mga namespace ng user na pinagana.

Ang isang user ay maaaring lumikha ng isang lalagyan na may hiwalay na root user at pagsamantalahan ang kahinaan mula doon. Halimbawa, ang "mga namespace ng user" ay pinagana bilang default sa Ubuntu at Fedora, ngunit hindi pinagana sa Debian at RHEL. Ang patch na nag-aayos ng kahinaan ay pinagtibay sa Linux kernel noong Abril 13. Ang mga pag-update ng package ay nabuo na ng mga proyekto ng Debian, Arch Linux at Fedora. Sa Ubuntu, RHEL at SUSE, ang mga update ay nasa paghahanda.

Ang problema ay nangyayari sa xt_compat_target_from_user() function dahil sa maling pagkalkula ng laki ng memory kapag nagse-save ng mga istruktura ng kernel pagkatapos ng conversion mula sa 32-bit hanggang 64-bit na representasyon. Binibigyang-daan ng bug ang apat na null byte na maisulat sa anumang posisyon na lampas sa inilalaang buffer na nililimitahan ng offset na 0x4C. Ang tampok na ito ay naging sapat na upang lumikha ng isang pagsasamantala na nagpapahintulot sa isa na makakuha ng mga karapatan sa ugat - sa pamamagitan ng pag-clear sa m_list->susunod na pointer sa istraktura ng msg_msg, ang mga kundisyon ay nilikha para sa pag-access ng data pagkatapos magbakante ng memorya (gamitin pagkatapos-libre), na ginamit noon upang makakuha ng impormasyon tungkol sa mga address at pagbabago sa ibang mga istruktura sa pamamagitan ng pagmamanipula ng msgsnd() system call.

Pinagmulan: opennet.ru

Magdagdag ng komento