So-leòntachd anns an kernel Linux a leigeas le faidhlichean leughaidh a-mhàin a bhith truaillidh

Chaidh so-leòntachd a chomharrachadh anns an kernel Linux (CVE-2022-0847) a leigeas le susbaint tasgadan na duilleige a bhith air ath-sgrìobhadh airson faidhlichean sam bith, a’ gabhail a-steach an fheadhainn ann am modh leughaidh a-mhàin, air am fosgladh leis a’ bhratach O_RDONLY, no air a shuidheachadh air siostaman faidhle air a chuir suas ann am modh leughaidh a-mhàin. Gu practaigeach, dh’ fhaodadh an so-leòntachd a bhith air a chleachdadh gus còd a chuir a-steach do phròiseasan neo-riaghailteach no dàta coirbte ann am faidhlichean fosgailte. Mar eisimpleir, faodaidh tu susbaint an fhaidhle ùghdarraichte_keys atharrachadh airson a’ phròiseas sshd. Tha prototype den brath ri fhaighinn airson deuchainn.

Chaidh an duilgheadas ainmeachadh mar Dirty Pipe, coltach ris an so-leòntachd èiginneach Dirty COW a chaidh a chomharrachadh ann an 2016. Thathas a’ toirt fa-near, a thaobh ìre cunnart, gu bheil Dirty Pipe aig an aon ìre ri Dirty COW, ach gu bheil e tòrr nas fhasa obrachadh. Chaidh an so-leòntachd a chomharrachadh nuair a chaidh sgrùdadh a dhèanamh air gearanan mu thruailleadh bho àm gu àm de fhaidhlichean a chaidh a luchdachadh sìos thairis air an lìonra ann an siostam a’ luchdachadh sìos tasglannan teann bho fhrithealaiche log (37 coirbeachd ann an 3 mìosan air siostam luchdaichte), agus chleachd an ullachadh an obrachadh splice () agus pìoban gun ainm.

Tha an so-leòntachd a ’nochdadh a’ tòiseachadh leis an kernel Linux 5.8, a chaidh fhoillseachadh san Lùnastal 2020, ie. an làthair ann an Debian 11, ach chan eil e a’ toirt buaidh air an kernel bunaiteach ann an Ubuntu 20.04 LTS. Tha na kernels RHEL 8.x agus openSUSE / SUSE 15 stèidhichte an toiseach air seann mheuran, ach tha e comasach gun deach an t-atharrachadh a dh’ adhbhraich an duilgheadas a thoirt air ais a-steach annta (chan eil dàta ceart ann fhathast). Faodaidh tu sùil a chumail air foillseachadh ùrachaidhean pacaid ann an sgaoilidhean air na duilleagan seo: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Chaidh fuasgladh airson so-leòntachd a mholadh ann am fiosan 5.16.11, 5.15.25 agus 5.10.102. Tha an rèiteachadh cuideachd air a thoirt a-steach don kernel a thathas a’ cleachdadh san àrd-ùrlar Android.

Tha an so-leòntachd air adhbhrachadh leis nach deach an luach “buf-> flags” a thòiseachadh ann an còd nan gnìomhan copy_page_to_iter_pipe() agus push_pipe(), a dh’ aindeoin nach eil an cuimhne air a ghlanadh nuair a thathar a’ riarachadh structar agus rè làimhseachadh sònraichte le pìoban gun ainm, luach bho obrachadh eile. A’ cleachdadh na feart seo, faodaidh neach-cleachdaidh ionadail gun bhuannachd coltas luach PIPE_BUF_FLAG_CAN_MERGE a choileanadh sa bhratach, a leigeas leat ath-sgrìobhadh dàta a chuir air dòigh ann an tasgadan na duilleige le bhith dìreach a’ sgrìobhadh dàta ùr gu pìob gun ainm a chaidh ullachadh gu sònraichte.

Airson ionnsaigh, feumaidh am faidhle targaid a bhith furasta a leughadh, agus leis nach eilear a’ sgrùdadh chòraichean-slighe nuair a thathar a’ sgrìobhadh gu pìob, faodar ath-chur ann an tasgadan na duilleige a dhèanamh cuideachd airson faidhlichean a tha suidhichte ann am pìosan leughaidh a-mhàin (mar eisimpleir, airson faidhlichean c CD- ROM). Às deidh dhut am fiosrachadh a chuir an àite tasgadan na duilleige, nuair a leughas tu dàta bho fhaidhle, chan fhaigh am pròiseas an fhìor dàta, ach an dàta a chaidh a chuir na àite.

Tha gnìomhachd an urra ri bhith a’ cruthachadh seanail gun ainm agus ga lìonadh le dàta neo-riaghailteach gus dèanamh cinnteach gu bheil a’ bhratach PIPE_BUF_FLAG_CAN_MERGE suidhichte anns a h-uile structar fàinne co-cheangailte rithe. An uairsin, tha an dàta air a leughadh bhon t-sianal, ach tha am bratach fhathast air a shuidheachadh anns a h-uile suidheachadh den structar pipe_buffer anns na structaran fàinne pipe_inode_info. Thèid gairm gu splice () a dhèanamh an uairsin gus dàta bhon fhaidhle targaid a leughadh a-steach do phìob gun ainm, a’ tòiseachadh aig an chothromachadh a tha thu ag iarraidh. Nuair a bhios tu a’ sgrìobhadh dàta dhan phìob gun ainm seo, ri linn a’ bhratach PIPE_BUF_FLAG_CAN_MERGE a bhith air a suidheachadh, thèid an dàta ann an tasgadan na duilleige ath-sgrìobhadh an àite eisimpleir ùr a chruthachadh den structar pipe_buffer.

Source: fosgailtenet.ru

Cuir beachd ann