రిమోట్ మరియు లోకల్ రూట్ యాక్సెస్‌ను అనుమతించే OpenSMTPDలోని దుర్బలత్వాలు

క్వాలిస్ కంపెనీ వెల్లడించారు మెయిల్ సర్వర్‌లో మరొక రిమోట్ క్రిటికల్ వల్నరబిలిటీ (CVE-2020-8794) OpenSMTPD, OpenBSD ప్రాజెక్ట్ ద్వారా అభివృద్ధి చేయబడింది. జనవరి చివరిలో గుర్తించబడినట్లుగా దుర్బలత్వం, రూట్ యూజర్ హక్కులతో సర్వర్‌లో ఏకపక్ష షెల్ ఆదేశాలను రిమోట్‌గా అమలు చేయడాన్ని కొత్త సమస్య సాధ్యం చేస్తుంది. దుర్బలత్వం తొలగించబడింది సంచికలో OpenSMTPD 6.6.4p1.

రిమోట్ మెయిల్ సర్వర్‌కు మెయిల్‌ను అందించే కోడ్‌లోని బగ్ (ఇన్‌కమింగ్ కనెక్షన్‌లను హ్యాండిల్ చేసే కోడ్‌లో కాదు) కారణంగా సమస్య ఏర్పడింది. క్లయింట్ వైపు మరియు సర్వర్ వైపు దాడి సాధ్యమే. క్లయింట్ వైపు, OpenSMTPD యొక్క డిఫాల్ట్ కాన్ఫిగరేషన్‌లో దాడి సాధ్యమవుతుంది, దీనిలో OpenSMTPD అంతర్గత నెట్‌వర్క్ ఇంటర్‌ఫేస్ (లోకల్ హోస్ట్)లో మాత్రమే అభ్యర్థనలను అంగీకరిస్తుంది మరియు బాహ్య సర్వర్‌లకు మెయిల్ సందేశాలను పంపుతుంది. దుర్బలత్వాన్ని ఉపయోగించుకోవడానికి, లేఖను పంపే సమయంలో, OpenSMTPD దాడి చేసే వారిచే నియంత్రించబడే మెయిల్ సర్వర్‌తో సెషన్‌ను ఏర్పాటు చేస్తే సరిపోతుంది లేదా దాడి చేసే వ్యక్తి క్లయింట్ కనెక్షన్‌లోకి ప్రవేశించవచ్చు (MITM లేదా DNS లేదా BGP ద్వారా దాడుల సమయంలో దారి మళ్లింపు )

సర్వర్ వైపు దాడి కోసం, ఇతర మెయిల్ సర్వర్‌ల నుండి బాహ్య నెట్‌వర్క్ అభ్యర్థనలను స్వీకరించడానికి లేదా ఏకపక్ష ఇమెయిల్‌కి అభ్యర్థనను పంపడానికి మిమ్మల్ని అనుమతించే మూడవ పక్ష సేవలను అందించడానికి OpenSMTPD తప్పనిసరిగా కాన్ఫిగర్ చేయబడాలి (ఉదాహరణకు, వెబ్‌సైట్‌లలో చిరునామా నిర్ధారణ ఫారమ్‌లు). ఉదాహరణకు, దాడి చేసే వ్యక్తి OpenSMTPD సర్వర్‌కి కనెక్ట్ అయ్యి, తప్పు లేఖను (ఉనికిలో లేని వినియోగదారుకు) పంపవచ్చు, ఇది దాడి చేసేవారి సర్వర్‌కు ఎర్రర్ కోడ్ (బౌన్స్)తో లేఖను పంపే ప్రతిస్పందనకు దారి తీస్తుంది. దాడి చేసే వ్యక్తి యొక్క సర్వర్‌కు నోటిఫికేషన్‌ను బట్వాడా చేయడానికి OpenSMTPD కనెక్ట్ అయినప్పుడు దాడి చేసే వ్యక్తి దుర్బలత్వాన్ని ఉపయోగించుకోవచ్చు. దాడి సమయంలో ఇంజెక్ట్ చేయబడిన షెల్ కమాండ్‌లు OpenSMTPD పునఃప్రారంభించబడినప్పుడు రూట్ హక్కులతో అమలు చేయబడిన ఫైల్‌లో ఉంచబడతాయి, కాబట్టి దాడిని పూర్తి చేయడానికి OpenSMTPD పునఃప్రారంభించటానికి లేదా OpenSMTPD క్రాష్‌ని ప్రారంభించడానికి దాడి చేసే వ్యక్తి తప్పనిసరిగా వేచి ఉండాలి.

కనెక్షన్‌ని స్థాపించిన తర్వాత రిమోట్ సర్వర్ ద్వారా అందించబడిన బహుళ లైన్ ప్రతిస్పందనను అన్వయించడం కోసం కోడ్‌లోని mta_io() ఫంక్షన్‌లో సమస్య ఉంది (ఉదాహరణకు, "250-మెరుగైన STATUSCODES" మరియు "250 సహాయం"). OpenSMTPD మొదటి పంక్తిలో మూడు-అంకెల సంఖ్య మరియు వచనం "-" అక్షరంతో వేరు చేయబడిందని మరియు రెండవ పంక్తిలో ఖాళీతో వేరు చేయబడిన మూడు-అంకెల సంఖ్య మరియు వచనం ఉన్నాయని గణిస్తుంది. మూడు-అంకెల సంఖ్యను రెండవ పంక్తిలో ఖాళీ మరియు వచనం అనుసరించకపోతే, వచనాన్ని నిర్వచించడానికి ఉపయోగించే పాయింటర్ '\0' అక్షరాన్ని అనుసరించి బైట్‌కు సెట్ చేయబడుతుంది మరియు ముగింపు తర్వాత డేటాను కాపీ చేయడానికి ప్రయత్నం చేయబడుతుంది. బఫర్‌లోకి పంక్తి.

OpenBSD ప్రాజెక్ట్ యొక్క అభ్యర్థన మేరకు, వినియోగదారులు తమ సిస్టమ్‌లను అప్‌డేట్ చేయడానికి అనుమతించడానికి దుర్బలత్వం యొక్క దోపిడీకి సంబంధించిన వివరాలను ప్రచురించడం ఫిబ్రవరి 26 వరకు ఆలస్యం చేయబడింది. డిసెంబర్ 2015 నుండి కోడ్‌బేస్‌లో సమస్య ఉంది, అయితే రూట్ అధికారాలతో కోడ్ అమలుకు ముందు దోపిడీ మే 2018 నుండి సాధ్యమవుతుంది. పరిశోధకులు ఎక్స్‌ప్లోయిట్ యొక్క వర్కింగ్ ప్రోటోటైప్‌ను సిద్ధం చేశారు, ఇది OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (టెస్టింగ్) మరియు Fedora 31 కోసం OpenSMTPD బిల్డ్‌లలో విజయవంతంగా పరీక్షించబడింది.

OpenSMTPDలో కూడా గుర్తించారు మరొక దుర్బలత్వం (CVE-2020-8793) సిస్టమ్‌లోని ఏదైనా ఫైల్ యొక్క మొదటి పంక్తిని చదవడానికి స్థానిక వినియోగదారుని అనుమతిస్తుంది. ఉదాహరణకు, మీరు /etc/master.passwd యొక్క మొదటి పంక్తిని చదవవచ్చు, ఇందులో రూట్ యూజర్ పాస్‌వర్డ్ హాష్ ఉంటుంది. ఈ ఫైల్ /var/spool/smtpd/ డైరెక్టరీ వలె అదే ఫైల్ సిస్టమ్‌లో ఉన్నట్లయితే మరొక వినియోగదారు యాజమాన్యంలో ఉన్న ఫైల్ యొక్క మొత్తం కంటెంట్‌లను చదవడానికి కూడా దుర్బలత్వం మిమ్మల్ని అనుమతిస్తుంది. /proc/sys/fs/protected_hardlinks విలువ 1కి సెట్ చేయబడిన అనేక Linux పంపిణీలలో సమస్య ఉపయోగించబడదు.

సమస్య అసంపూర్ణ తొలగింపు యొక్క పరిణామం సమస్యలు, క్వాలిస్ 2015లో నిర్వహించిన ఆడిట్ సమయంలో గాత్రదానం చేసింది. దాడి చేసే వ్యక్తి “PATH=.” వేరియబుల్‌ని సెట్ చేయడం ద్వారా “_smtpq” సమూహం యొక్క హక్కులతో తన కోడ్‌ను అమలు చేయగలడు. మరియు ప్రస్తుత డైరెక్టరీలో makemap అనే స్క్రిప్ట్‌ను ఉంచడం (smtpctl యుటిలిటీ పాత్‌ను స్పష్టంగా పేర్కొనకుండా makemapని నడుపుతుంది). "_smtpq" సమూహానికి ప్రాప్యతను పొందడం ద్వారా, దాడి చేసే వ్యక్తి రేస్ పరిస్థితిని (ఆఫ్‌లైన్ డైరెక్టరీలో పెద్ద ఫైల్‌ను సృష్టించి, SIGSTOP సిగ్నల్‌ని పంపవచ్చు) మరియు ప్రాసెస్ చేయడం పూర్తయ్యే ముందు, ఆఫ్‌లైన్ డైరెక్టరీలోని ఫైల్‌ను హార్డ్‌తో భర్తీ చేయవచ్చు symlink లక్ష్యం ఫైల్‌ను సూచించడం, దీని కంటెంట్‌లను చదవాలి.

smtpctl ప్రక్రియ setgid smtpq ఫ్లాగ్‌కు బదులుగా setgid రూట్ ఫ్లాగ్‌తో అమర్చబడినందున, Fedora 31లో దుర్బలత్వం రూట్ సమూహం యొక్క అధికారాలను వెంటనే పొందేందుకు మిమ్మల్ని అనుమతిస్తుంది. రూట్ సమూహానికి ప్రాప్యతను పొందడం ద్వారా, మీరు /var/lib/sss/mc/passwd యొక్క కంటెంట్‌లను ఓవర్‌రైట్ చేయవచ్చు మరియు సిస్టమ్‌కు పూర్తి రూట్ యాక్సెస్‌ను పొందవచ్చు.

మూలం: opennet.ru

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