Leochaileacht fréimhe san eithne Linux agus séanadh seirbhíse i systemd

Nocht taighdeoirí slándála ó Qualys sonraí faoi dhá leochaileacht a théann i bhfeidhm ar an eithne Linux agus ar an mbainisteoir córais systemd. Ligeann leochaileacht san eithne (CVE-2021-33909) d'úsáideoir áitiúil forghníomhú cód a bhaint amach le cearta fréamhacha trí ionramháil a dhéanamh ar eolairí an-neadaithe.

Tá baol na leochaileachta níos measa ag an bhfíric go raibh na taighdeoirí in ann saothrú oibre a ullmhú a oibríonn ar Ubuntu 20.04/20.10/21.04, Debian 11 agus Fedora 34 sa chumraíocht réamhshocraithe. Tugtar faoi deara nach ndearnadh tástáil ar dháiltí eile, ach go teoiriciúil go bhfuil siad so-ghabhálach don fhadhb agus is féidir iad a ionsaí. Tá sé geallta go bhfoilseofar cód iomlán na n-easpórtálacha tar éis deireadh a chur leis an bhfadhb i ngach áit, ach faoi láthair níl ach fréamhshamhail feidhmiúlacht theoranta ar fáil, rud a fhágann go dtiteann an córas amach. Tá an fhadhb i láthair ó mhí Iúil 2014 agus bíonn tionchar aige ar eisiúintí eithne ag tosú ó 3.16. Comhordaíodh an socrú leochaileachta leis an bpobal agus glacadh leis san eithne ar 19 Iúil. Tá nuashonruithe ginte cheana féin ag na príomh-dáiltí ar a bpacáistí eithne (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Is í an leochaileacht is cúis leis an teip toradh comhshó size_t go int a sheiceáil sula ndéantar oibríochtaí sa chód seq_file, rud a chruthaíonn comhaid ó sheicheamh taifead. Mura ndéantar seiceáil, d’fhéadfadh go n-eascródh scríbhinní neamhtheoranta chuig an maolán agus struchtúr eolaire an-neadaithe á chruthú, á fheistiú agus á scriosadh (méid an chosáin níos mó ná 1 GB). Mar thoradh air sin, is féidir le hionsaitheoir teaghrán 10-beart "//scriosta" a bhaint amach scríofa ag fritháireamh "-2 GB - 10 bytes" ag díriú ar an limistéar díreach roimh an maolán leithdháilte.

Éilíonn an saothrú ullmhaithe 5 GB de chuimhne agus 1 milliún inodes in aisce chun oibriú. Oibríonn an leas trí ghlaoch a chur ar mkdir() chun ordlathas de thart ar mhilliún fochomhadlann a chruthú chun cosán comhaid níos mó ná 1 GB a bhaint amach. Tá an t-eolaire seo suite trí bind-mount i spás ainm úsáideora ar leith, agus ina dhiaidh sin reáchtáiltear an fheidhm rmdir() chun é a bhaint. Ag an am céanna, cruthaítear snáithe a luchtaíonn clár eBPF beag, a chuirtear bac ar an gcéim tar éis pseudocode eBPF a sheiceáil, ach roimh a thiomsú JIT.

San ainmspás úsáideora gan phribhléid, osclaítear an comhad / proc/self/mountinfo agus léitear cosainm fada an eolaire ceangailteach, rud a fhágann go scríobhtar an teaghrán "//scriosta" chuig an limistéar roimh thús an mhaoláin. Roghnaítear an suíomh chun an líne a scríobh sa chaoi is go ndéanann sé an treoir a fhorscríobh sa chlár eBPF atá tástáilte cheana féin ach nach bhfuil curtha le chéile go fóill.

Ansin, ag leibhéal an chláir eBPF, aistrítear scríbhneoireacht neamhrialaithe as maolán ina chumas rialaithe léamh agus scríobh chuig struchtúir eithne eile trí struchtúir btf agus map_push_elem a ionramháil. Mar thoradh air sin, cinneann an leas a bhaint as suíomh an maoláin modprobe_path[] sa chuimhne eithne agus forscríobhann sé an cosán “/ sbin/modprobe” ann, a cheadaíonn duit seoladh aon chomhaid inrite a bhfuil cearta fréimhe aige a thionscnamh i gcás ina request_module() glaoch, a dhéantar, mar shampla, nuair a bhíonn soicéad netlink á chruthú.

Soláthraíonn taighdeoirí roinnt réitigh oibre nach bhfuil éifeachtach ach le haghaidh shaothrú sonrach, ach nach gcuireann deireadh leis an bhfadhb féin. Moltar "/proc/sys/kernel/unprivileged_userns_clone" a shocrú go 0 chun eolairí gléasta a dhíchumasú in ainmspás aitheantais úsáideora ar leith, agus "/ proc/sys/kernel/unprivileged_bpf_disabled" go 1 chun luchtú ríomhchláir eBPF isteach san eithne a dhíchumasú.

Is fiú a thabhairt faoi deara, agus anailís á déanamh ar ionsaí eile a bhain le húsáid mheicníocht FUSE in ionad ceangal-dumha chun eolaire mór a shuiteáil, tháinig na taighdeoirí trasna ar leochaileacht eile (CVE-2021-33910) a raibh tionchar aici ar an mbainisteoir córais córasach. Tharla sé nuair a dhéantar iarracht eolaire a shuiteáil le cosán níos mó ná 8 MB trí FUSE, go n-imíonn an próiseas tosaigh rialaithe (PID1) as cuimhne cruachta agus tuairteanna, rud a chuireann an córas i stát "scaoll".

Is í an fhadhb atá ann go rianaíonn agus go ndéanann sistéamaí inneachar /proc/self/mountinfo a phróiseáil, agus go bpróiseálann sé gach pointe gléasta san fheidhm unit_name_path_escape(), a dhéanann oibríocht strdupa() a chuireann na sonraí ar an gcruach seachas sa chuimhne a leithdháiltear go dinimiciúil . Ós rud é go bhfuil teorainn leis an méid cruachta uasta trí RLIMIT_STACK, cuireann próiseáil cosán ró-mhór go dtí an pointe gléasta ar an bpróiseas PID1 tuairteála agus stopann an córas. Le haghaidh ionsaí, is féidir leat an modúl FUSE is simplí a úsáid in éineacht le húsáid eolaire an-neadaithe mar phointe gléasta, a bhfuil méid an chosáin níos mó ná 8 MB.

Tá an fhadhb le feiceáil ós rud é go bhfuil systemd 220 (Aibreán 2015), socraithe cheana féin sa phríomh-stór systemd agus socraithe i dáiltí (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Go háirithe, i scaoileadh sistéamach 248 ní oibríonn an leas mar gheall ar fhabht sa chód systemd a fhágann go dteipeann ar phróiseáil /proc/self/mountinfo. Tá sé suimiúil freisin gur tháinig cás den chineál céanna chun cinn in 2018 agus nuair a bhí siad ag iarraidh dúshaothrú a scríobh don leochaileacht CVE-2018-14634 san eithne Linux, tháinig taighdeoirí Qualys ar thrí leochaileacht ríthábhachtacha i systemd.

Foinse: oscailtenet.ru

Add a comment