Onderzoekers van het Google Project Zero-team hebben een exploitatiemethode gepubliceerd voor de kwetsbaarheid (CVE-2020-29661) in de implementatie van de ioctl-handler TIOCSPGRP uit de tty-subsystemen van de Linux-kernel, en hebben gedetailleerd de beveiligingsmechanismen besproken die dergelijke kwetsbaarheden zouden kunnen blokkeren.
De probleemveroorzakende fout werd al op 3 december vorig jaar in de Linux-kernel verholpen. Het probleem manifesteert zich in kernels tot versie 5.9.13, maar de meeste distributies hebben het probleem in updates van kernels, die al vorig jaar werden aangeboden, opgelost (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Een soortgelijke kwetsbaarheid (CVE-2020-29660) werd tegelijkertijd gevonden in de implementatie van de ioctl-aanroep TIOCGSID, maar is ook al wijdverspreid opgelost.
Het probleem wordt veroorzaakt door een fout bij het instellen van locks, wat leidt tot een raceconditie in de code drivers/tty/tty_jobctrl.c, die kon worden misbruikt voor het creƫren van omstandigheden voor toegang tot vrijgegeven geheugen (use-after-free), uitgebuit vanuit de gebruikersruimte via manipulatie van de ioctl-aanroep TIOCSPGRP. Een werkende exploit is gedemonstreerd voor privilege-escalatie in Debian 10 met kernel 4.19.0-13-amd64.
In het gepubliceerde artikel ligt de focus niet zozeer op de techniek voor het creƫren van een werkende exploit, maar op welke tools in de kernel bestaan om dergelijke kwetsbaarheden te beschermen. De conclusie is niet bemoedigend; methoden zoals geheugensegmentatie en controle over toegang tot vrijgegeven geheugen worden in de praktijk niet toegepast, omdat ze leiden tot prestatievermindering, en de bescherming op basis van CFI (Control Flow Integrity), die exploits op latere stadia van een aanval blokkeert, vereist verdere ontwikkeling.
Bij het overwegen wat de situatie op de lange termijn zou kunnen veranderen, worden geavanceerde statische analysetools of het gebruik van talen die veilige geheugenoptimalisatie bieden, zoals Rust en dialecten van de C-taal met uitgebreide annotaties (bijvoorbeeld Checked C), benadrukt, tijdens de bouw om de staat van locks, objecten en pointers te controleren. Onder de beschermingsmethoden wordt ook de activatie van de panic_on_oops-modus genoemd, het omzetten van kernelstructuren naar alleen-lezen modus en het beperken van toegang tot systeemaanroepen via mechanismen zoals seccomp.
Bron: opennet.ru
