Linux కెర్నల్‌లోని దుర్బలత్వం రీడ్-ఓన్లీ ఫైల్‌లు పాడవడానికి అనుమతిస్తుంది

Linux కెర్నల్ (CVE-2022-0847)లో ఒక దుర్బలత్వం గుర్తించబడింది, ఇది O_RDONLY ఫ్లాగ్‌తో తెరవబడిన లేదా ఫైల్ సిస్టమ్‌లలో ఉన్న రీడ్-ఓన్లీ మోడ్‌తో సహా ఏదైనా ఫైల్‌ల కోసం పేజీ కాష్‌లోని కంటెంట్‌లను భర్తీ చేయడానికి అనుమతిస్తుంది. చదవడానికి మాత్రమే మోడ్‌లో మౌంట్ చేయబడింది. ఆచరణాత్మక పరంగా, దుర్బలత్వం కోడ్‌ను ఏకపక్ష ప్రక్రియలలోకి ఇంజెక్ట్ చేయడానికి లేదా తెరిచిన ఫైల్‌లలోని పాడైన డేటాకు ఉపయోగించబడుతుంది. ఉదాహరణకు, మీరు sshd ప్రాసెస్ కోసం authorized_keys ఫైల్ యొక్క కంటెంట్‌లను మార్చవచ్చు. పరీక్ష కోసం ఎక్స్‌ప్లోయిట్ ప్రోటోటైప్ అందుబాటులో ఉంది.

2016లో గుర్తించబడిన క్రిటికల్ వల్నరబిలిటీ డర్టీ COW మాదిరిగానే ఈ సమస్యకు డర్టీ పైప్ అనే కోడ్ పేరు పెట్టారు. ప్రమాద స్థాయి పరంగా, డర్టీ పైప్ డర్టీ COW వలె అదే స్థాయిలో ఉంది, కానీ ఆపరేట్ చేయడం చాలా సులభం. లాగ్ సర్వర్ నుండి కంప్రెస్డ్ ఆర్కైవ్‌లను డౌన్‌లోడ్ చేసే సిస్టమ్‌లో నెట్‌వర్క్‌లో డౌన్‌లోడ్ చేయబడిన ఫైల్‌ల యొక్క కాలానుగుణ అవినీతికి సంబంధించిన ఫిర్యాదుల విశ్లేషణలో దుర్బలత్వం గుర్తించబడింది (లోడ్ చేయబడిన సిస్టమ్‌లో 37 నెలల్లో 3 అవినీతి), దీని తయారీలో స్ప్లైస్() ఆపరేషన్ ఉపయోగించబడింది. మరియు పేరులేని పైపులు.

ఆగస్ట్ 5.8లో విడుదలైన Linux కెర్నల్ 2020 నుండి దుర్బలత్వం కనిపిస్తుంది, అనగా. డెబియన్ 11లో ఉంది, కానీ ఉబుంటు 20.04 LTSలో బేస్ కెర్నల్‌ను ప్రభావితం చేయదు. RHEL 8.x మరియు openSUSE/SUSE 15 కెర్నలు మొదట్లో పాత శాఖలపై ఆధారపడి ఉంటాయి, అయితే సమస్యకు కారణమైన మార్పు వాటిలోకి బ్యాక్‌పోర్ట్ చేయబడే అవకాశం ఉంది (ఇంకా ఖచ్చితమైన డేటా లేదు). మీరు ఈ పేజీలలో పంపిణీలలో ప్యాకేజీ నవీకరణల ప్రచురణను అనుసరించవచ్చు: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. 5.16.11, 5.15.25 మరియు 5.10.102 విడుదలలలో దుర్బలత్వానికి పరిష్కారం అందించబడింది. Android ప్లాట్‌ఫారమ్‌లో ఉపయోగించిన కెర్నల్‌లో కూడా పరిష్కారం చేర్చబడింది.

నిర్మాణాన్ని కేటాయించేటప్పుడు మరియు నిర్దిష్ట అవకతవకల సమయంలో మెమరీ క్లియర్ చేయబడనప్పటికీ, copy_page_to_iter_pipe() మరియు push_pipe() ఫంక్షన్‌ల కోడ్‌లో “buf->ఫ్లాగ్స్” విలువను ప్రారంభించకపోవడం వల్ల దుర్బలత్వం ఏర్పడుతుంది. పేరులేని పైపులు, మరొక ఆపరేషన్ నుండి ఒక విలువ. ఈ లక్షణాన్ని ఉపయోగించి, ప్రత్యేకించబడని స్థానిక వినియోగదారు ఫ్లాగ్‌లో PIPE_BUF_FLAG_CAN_MERGE విలువ యొక్క రూపాన్ని సాధించవచ్చు, ఇది ప్రత్యేకంగా తయారు చేయబడిన పేరులేని పైప్‌కు కొత్త డేటాను వ్రాయడం ద్వారా పేజీ కాష్‌లో డేటా ఓవర్‌రైటింగ్‌ని నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది.

దాడి కోసం, లక్ష్య ఫైల్ తప్పనిసరిగా చదవదగినదిగా ఉండాలి మరియు పైప్‌కు వ్రాసేటప్పుడు యాక్సెస్ హక్కులు తనిఖీ చేయబడనందున, పేజీ కాష్‌లో రీప్లేస్‌మెంట్ రీడ్-ఓన్లీ మౌంట్ చేయబడిన విభజనలలో ఉన్న ఫైల్‌ల కోసం కూడా చేయవచ్చు (ఉదాహరణకు, ఫైల్‌ల కోసం c CD- రొమ్). పేజీ కాష్‌లోని సమాచారాన్ని భర్తీ చేసిన తర్వాత, ఫైల్ నుండి డేటాను చదివేటప్పుడు, ప్రక్రియ అసలు డేటాను పొందదు, కానీ భర్తీ చేయబడిన డేటా.

PIPE_BUF_FLAG_CAN_MERGE ఫ్లాగ్ దానితో అనుబంధించబడిన అన్ని రింగ్ స్ట్రక్చర్‌లలో సెట్ చేయబడిందని నిర్ధారించుకోవడానికి పేరులేని ఛానెల్‌ని సృష్టించడం మరియు దానిని ఏకపక్ష డేటాతో నింపడం వరకు ఆపరేషన్ వస్తుంది. తర్వాత, డేటా ఛానెల్ నుండి చదవబడుతుంది, అయితే పైపు_ఇనోడ్_ఇన్ఫో రింగ్ స్ట్రక్చర్‌లలోని పైప్_బఫర్ స్ట్రక్చర్ యొక్క అన్ని సందర్భాల్లో ఫ్లాగ్ సెట్ చేయబడి ఉంటుంది. స్ప్లైస్()కి కాల్ చేయడం వలన లక్ష్య ఫైల్ నుండి డేటాను పేరులేని పైప్‌లోకి చదవడానికి, కావలసిన ఆఫ్‌సెట్ నుండి ప్రారంభమవుతుంది. ఈ పేరులేని పైపుకు డేటాను వ్రాసేటప్పుడు, PIPE_BUF_FLAG_CAN_MERGE ఫ్లాగ్ సెట్ చేయబడినందున, పైప్_బఫర్ నిర్మాణం యొక్క కొత్త ఉదాహరణను సృష్టించడానికి బదులుగా పేజీ కాష్‌లోని డేటా భర్తీ చేయబడుతుంది.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి