Ang kahimtang sa lumba sa Linux kernel garbage collector nga mahimong mosangpot sa pag-usbaw sa pribilehiyo

Si Jann Horn gikan sa Google Project Zero team, nga sa makausa nakaila sa Spectre ug Meltdown vulnerabilities, nagpatik sa usa ka teknik sa pagpahimulos sa usa ka kahuyang (CVE-2021-4083) sa Linux kernel garbage collector. Ang pagkahuyang tungod sa usa ka kondisyon sa lumba kung ang paglimpyo sa mga deskriptor sa file sa mga unix socket ug mahimo’g gitugotan ang usa ka lokal nga dili pribilihiyo nga tiggamit nga ipatuman ang ilang code sa lebel sa kernel.

Makapainteres ang problema tungod kay ang window sa oras kung diin mahitabo ang kahimtang sa lumba gibanabana nga gamay ra kaayo aron makamugna og tinuod nga mga pagpahimulos, apan gipakita sa tagsulat sa pagtuon nga bisan ang ingon nga una nga nagduhaduha nga mga kahuyangan mahimo’g mahimong gigikanan sa tinuod nga mga pag-atake kung ang tiglalang sa pagpahimulos adunay ang gikinahanglan nga mga kahanas ug panahon. Gipakita ni Yann Horn kung giunsa, sa tabang sa mga manipulasyon sa filigree, mahimo nimong makunhuran ang kahimtang sa lumba nga mahitabo kung dungan nga tawagan ang close () ug fget () nga mga function sa usa ka hingpit nga mapahimuslan nga pagkahuyang nga wala’y magamit nga wala’y bayad ug makab-ot ang pag-access sa usa ka gipagawas na nga datos. istruktura sa sulod sa kernel.

Ang kahimtang sa lumba mahitabo sa panahon sa proseso sa pagsira sa usa ka file descriptor samtang nagtawag sa close() ug fget() sa samang higayon. Ang tawag sa pagsira () mahimong mahitabo sa dili pa ang fget() ipatuman, nga makapalibog sa tigkolekta sa basura tungod kay, sumala sa refcount, ang istruktura sa file walay mga eksternal nga mga pakisayran, apan magpabilin nga gilakip sa file descriptor, i.e. Ang tigkolekta sa basura maghunahuna nga kini adunay eksklusibo nga pag-access sa istruktura, apan sa tinuud, sa mubo nga panahon, ang nahabilin nga entry sa file descriptor table magpunting gihapon sa istruktura nga gipagawas.

Aron madugangan ang posibilidad nga makasulod sa usa ka kahimtang sa lumba, daghang mga limbong ang gigamit, nga nagpaposible nga madugangan ang posibilidad sa kalampusan sa pagpahimulos sa 30% kung gipaila ang mga pag-optimize nga piho sa sistema. Pananglitan, aron madugangan ang oras sa pag-access sa usa ka istruktura nga adunay mga deskriptor sa file sa daghang gatusan ka mga nanosecond, ang data gipalagpot gikan sa cache sa processor pinaagi sa paglabay sa cache nga adunay kalihokan sa laing CPU core, nga nagpaposible nga makuha ang istruktura gikan sa memorya kaysa gikan sa. ang paspas nga cache sa CPU.

Ang ikaduha nga hinungdanon nga bahin mao ang paggamit sa mga interrupts nga gihimo sa usa ka timer sa hardware aron madugangan ang oras sa kahimtang sa lumba. Ang higayon gipili aron ang interrupt handler mobuto kung adunay usa ka kahimtang sa lumba nga nahitabo ug makabalda sa pagpatuman sa code sa pipila ka panahon. Aron malangan pa ang pagbalik sa kontrol, mga 50 ka libo ka mga entry sa waitqueue ang namugna gamit ang epoll, nga nagkinahanglan sa pagpangita pinaagi sa interrupt handler.

Ang teknik sa pagpahimulos sa pagkahuyang gibutyag human sa 90 ka adlaw nga wala pagbutyag nga panahon. Ang problema makita sukad sa kernel 2.6.32 ug naayo sa sayong bahin sa Disyembre. Ang pag-ayo gilakip sa kernel 5.16 ug gibalhin usab sa mga sanga sa LTS sa kernel ug mga pakete sa kernel nga gihatag sa mga distribusyon. Mamatikdan nga ang pagkahuyang giila sa panahon sa pag-analisar sa usa ka susama nga problema CVE-2021-0920, nga nagpakita sa kaugalingon sa tigkolekta sa basura kung giproseso ang bandila sa MSG_PEEK.

Source: opennet.ru

Idugang sa usa ka comment