So-leòntachd freumhach anns an kernel Linux agus diùltadh seirbheis ann an systemd

Tha luchd-rannsachaidh tèarainteachd bho Qualys air mion-fhiosrachadh fhoillseachadh mu dhà so-leòntachd a tha a’ toirt buaidh air kernel Linux agus am manaidsear siostam systemd. Tha so-leòntachd anns an kernel (CVE-2021-33909) a’ leigeil le neach-cleachdaidh ionadail coileanadh còd a choileanadh le còraichean freumha tro bhith a’ làimhseachadh chlàran làn neadachaidh.

Tha cunnart an so-leòntachd air a dhèanamh nas miosa leis gu robh an luchd-rannsachaidh comasach air cleachdaidhean obrach ullachadh a bhios ag obair air Ubuntu 20.04 / 20.10 / 21.04, Debian 11 agus Fedora 34 anns an rèiteachadh bunaiteach. Thathas a’ toirt fa-near nach deach sgaoilidhean eile a dhearbhadh, ach gu teòiridheach tha iad cuideachd buailteach don duilgheadas agus faodar ionnsaigh a thoirt orra. Thathas a’ gealltainn gun tèid còd slàn nan cleasan fhoillseachadh às deidh don duilgheadas a bhith air a chuir às anns a h-uile àite, ach airson a-nis chan eil ach prototype de ghnìomhachd cuibhrichte ri fhaighinn, ag adhbhrachadh gun tuit an siostam. Tha an duilgheadas air a bhith an làthair bhon Iuchar 2014 agus a’ toirt buaidh air sgaoilidhean kernel a ’tòiseachadh bho 3.16. Chaidh an suidheachadh so-leòntachd a cho-òrdanachadh leis a’ choimhearsnachd agus chaidh gabhail ris a-steach don kernel air 19 Iuchar. Tha na prìomh sgaoilidhean air ùrachaidhean a chruthachadh mu thràth air na pasganan kernel aca (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Tha an so-leòntachd air adhbhrachadh le fàiligeadh sgrùdadh a dhèanamh air toradh tionndadh size_t gu int mus dèan thu gnìomhachd anns a’ chòd seq_file, a chruthaicheas faidhlichean bho shreath chlàran. Mura dèanar sgrùdadh dh’ fhaodadh sin sgrìobhadh taobh a-muigh crìochan chun a’ bhufair nuair a bhios tu a’ cruthachadh, a’ cur suas agus a’ cuir às do structar eòlaire làn neadachaidh (meud slighe nas motha na 1 GB). Mar thoradh air an sin, faodaidh neach-ionnsaigh sreang 10-byte "//sguab às" a choileanadh sgrìobhte aig co-chothromachadh de “-2 GB - 10 bytes” a’ comharrachadh na sgìre dìreach ron bhufair ainmichte.

Feumaidh an cleachdadh ullaichte 5 GB de chuimhne agus 1 millean inodes an-asgaidh airson obrachadh. Bidh an brath ag obair le bhith a’ gairm mkdir () gus rangachd de timcheall air millean fo-eòlaire a chruthachadh gus meud slighe faidhle nas àirde na 1 GB a choileanadh. Tha an eòlaire seo air a chuir suas tro bind-mount ann an àite ainm neach-cleachdaidh air leth, às deidh sin tha an gnìomh rmdir () air a ruith gus a thoirt air falbh. Aig an aon àm, thèid snàithlean a chruthachadh a bhios a 'luchdachadh prògram beag eBPF, a tha air a bhacadh aig an ìre às deidh sgrùdadh a dhèanamh air pseudocode eBPF, ach mus tèid a chruinneachadh JIT.

Anns an ainm-cleachdaiche neo-leasaichte, tha am faidhle / proc/self/mountinfo air fhosgladh agus tha ainm-slighe fada an eòlaire ceangailte air a leughadh, agus mar thoradh air an sin thèid an sreang "// a sguabadh às" a sgrìobhadh chun sgìre mus tòisich am bufair. Tha an suidheachadh airson an loidhne a sgrìobhadh air a thaghadh gus am bi e a’ sgrìobhadh thairis air an stiùireadh anns a’ phrògram eBPF a chaidh a dhearbhadh mar-thà ach nach deach a chur ri chèile fhathast.

An ath rud, aig ìre prògram eBPF, tha sgrìobhadh neo-riaghlaichte taobh a-muigh bufair air atharrachadh gu comas fo smachd airson leughadh agus sgrìobhadh gu structaran kernel eile tro bhith a’ làimhseachadh structaran btf agus map_push_elem. Mar thoradh air an sin, bidh an brath a’ dearbhadh far a bheil am bufair modprobe_path [] ann an cuimhne kernel agus a’ sgrìobhadh thairis air an t-slighe “/ sbin / modprobe” ann, a leigeas leat faidhle gnìomh sam bith a chuir air bhog le còraichean freumha a chuir air bhog ma thachras a request_module() gairm, a thèid a chuir gu bàs, mar eisimpleir, nuair a chruthaicheas tu socaid netlink.

Bidh luchd-rannsachaidh a’ toirt seachad grunn dhòighean-obrach a tha èifeachdach a-mhàin airson brath sònraichte, ach nach cuir às don duilgheadas fhèin. Thathas a’ moladh “/ proc/sys/kernel/unprivileged_userns_clone” a shuidheachadh gu 0 gus clàran sreapachaidh a chur à comas ann an ainm-cleachdaiche fa-leth, agus “/ proc/sys/kernel/unprivileged_bpf_disabled” gu 1 gus luchdachadh prògraman eBPF dhan kernel a chur à comas.

Bu chòir a thoirt fa-near, fhad ‘s a bha iad a’ dèanamh anailis air ionnsaigh eile a bha a ’toirt a-steach cleachdadh inneal FUSE an àite a bhith a’ ceangal ceangal gus eòlaire mòr a chuir suas, thàinig an luchd-rannsachaidh tarsainn air so-leòntachd eile (CVE-2021-33910) a ’toirt buaidh air manaidsear siostam systemd. Thionndaidh e a-mach nuair a thathar a’ feuchainn ri eòlaire a chuir suas le meud slighe nas àirde na 8 MB tro FUSE, tha am pròiseas tòiseachaidh smachd (PID1) a’ ruith a-mach à cuimhne stac agus tubaistean, a chuireas an siostam ann an staid “clisgeadh”.

Is e an duilgheadas a th ’ann gu bheil systemd a’ tracadh agus a ’parsadh susbaint / proc/self/mountinfo, agus a’ pròiseasadh gach puing sreap anns a ’ghnìomh unit_name_path_escape(), a bhios a’ coileanadh gnìomhachd strdupa () a chuireas an dàta air a ’chruach seach ann an cuimhne a chaidh a riarachadh gu dinamach. . Leis gu bheil am meud stac as àirde cuingealaichte tro RLIMIT_STACK, bidh làimhseachadh slighe ro mhòr chun àite sreap ag adhbhrachadh gun tuit am pròiseas PID1 agus stadaidh e an siostam. Airson ionnsaigh, faodaidh tu am modal FUSE as sìmplidh a chleachdadh còmhla ri bhith a’ cleachdadh eòlaire làn neadachaidh mar àite sreap, le meud na slighe nas àirde na 8 MB.

Tha an duilgheadas air a bhith a’ nochdadh leis gu bheil systemd 220 (Giblean 2015), air a shuidheachadh mar-thà anns a’ phrìomh stòr siostamd agus air a shuidheachadh ann an sgaoilidhean (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Gu sònraichte, ann an sgaoileadh systemd 248 chan eil an brath ag obair mar thoradh air bug sa chòd systemd a dh’ adhbhraicheas giullachd / proc/self/mountinfo. Tha e inntinneach cuideachd, ann an 2018, gun do dh ’èirich suidheachadh coltach ris agus nuair a bha iad a’ feuchainn ri brath a sgrìobhadh airson so-leòntachd CVE-2018-14634 ann an kernel Linux, thàinig luchd-rannsachaidh Qualys thairis air trì so-leòntachd èiginneach ann an systemd.

Source: fosgailtenet.ru

Cuir beachd ann