Sårbarhet i eBPF-undersystemet som tillåter kodexekvering på Linux-kärnnivå

En sårbarhet (CVE-2021-4204) har identifierats i eBPF-undersystemet, som låter dig köra hanterare inuti Linux-kärnan i en speciell virtuell maskin med JIT, vilket gör att en lokal oprivilegierad användare kan uppnå privilegieskalering och exekvera sin kod på Linux-kärnnivå. Problemet har uppstått sedan Linux-kärnan 5.8 och förblir oförrättat (inklusive version 5.16). Statusen för uppdateringar som genereras för att åtgärda problemet i distributioner kan spåras på dessa sidor: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Det har meddelats att en fungerande exploit har skapats, som är planerad att publiceras den 18 januari (användare och utvecklare har fått en vecka på sig att fixa sårbarheten).

Sårbarheten orsakas av felaktig verifiering av eBPF-program som överförs för exekvering. eBPF-delsystemet tillhandahåller hjälpfunktioner, vars korrekta användning verifieras av en speciell verifierare. Vissa funktioner kräver att ett PTR_TO_MEM-värde skickas som ett argument, och för att förhindra eventuella buffertspill måste verifieraren känna till storleken på minnet som är associerat med argumentet. För funktionerna bpf_ringbuf_submit och bpf_ringbuf_discard rapporterades inte data om storleken på det överförda minnet till verifieraren, som kunde användas för att skriva över minnesområden bortom buffertgränsen vid exekvering av specialdesignad eBPF-kod.

För att utföra en attack måste användaren kunna ladda sitt eget BPF-program, och många senaste Linux-distributioner blockerar denna möjlighet som standard (inklusive oprivilegierad åtkomst till eBPF är nu förbjuden som standard i själva kärnan, från och med version 5.16). Till exempel kan sårbarheten utnyttjas i standardkonfigurationen i Ubuntu 20.04 LTS, men i miljöerna Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 och Fedora 33 visas den bara om administratören har ställt in parametern kernel.unprivileged_bpf_disabled till 0. Som en lösning för att blockera sårbarheten kan du förhindra exekvering av BPF-program av oprivilegierade användare med kommandot "sysctl -w kernel.unprivileged_bpf_disabled=1".

Källa: opennet.ru

Lägg en kommentar