మైక్రోసాఫ్ట్ నుండి భద్రతా పరిశోధకులు నెట్వర్క్డ్-డిస్పాచర్ సేవలో రెండు దుర్బలత్వాలను (CVE-2022-29799, CVE-2022-29800) గుర్తించారు, ఇది Nimbuspwn అనే సంకేతనామం, ఇది ఒక ప్రత్యేక హక్కు లేని వినియోగదారుని రూట్ అధికారాలతో ఏకపక్ష ఆదేశాలను అమలు చేయడానికి అనుమతిస్తుంది. నెట్వర్క్డ్-డిస్పాచర్ 2.2 విడుదలలో సమస్య పరిష్కరించబడింది. పంపిణీల ద్వారా నవీకరణల ప్రచురణ గురించి ఇంకా సమాచారం లేదు (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).
Networkd-dispatcher అనేది Ubuntuతో సహా అనేక Linux పంపిణీలలో ఉపయోగించబడుతుంది, ఇది నెట్వర్క్ పారామితులను కాన్ఫిగర్ చేయడానికి systemd-networkd నేపథ్య ప్రక్రియను ఉపయోగిస్తుంది మరియు NetworkManager-dispatcher వలె విధులను నిర్వహిస్తుంది, అనగా. నెట్వర్క్ కనెక్షన్ స్థితి మారినప్పుడు స్క్రిప్ట్లను ప్రారంభించడంలో నిమగ్నమై ఉంది, ఉదాహరణకు, ఇది ప్రధాన నెట్వర్క్ కనెక్షన్ని స్థాపించిన తర్వాత VPNని ప్రారంభించేందుకు ఉపయోగించబడుతుంది.
నెట్వర్క్డ్-డిస్పాచర్తో అనుబంధించబడిన నేపథ్య ప్రక్రియ రూట్గా నడుస్తుంది మరియు D-బస్ ద్వారా ఈవెంట్ సిగ్నల్లను అందుకుంటుంది. నెట్వర్క్ కనెక్షన్ల స్థితిలో మార్పులకు సంబంధించిన ఈవెంట్ల గురించి సమాచారం systemd-networkd సేవ ద్వారా పంపబడుతుంది. సమస్య ఏమిటంటే, ప్రత్యేకించబడని వినియోగదారులు ఉనికిలో లేని రాష్ట్ర ఈవెంట్ను రూపొందించవచ్చు మరియు వారి స్క్రిప్ట్ను రూట్గా అమలు చేయడానికి ట్రిగ్గర్ చేయవచ్చు.
Systemd-networkd అనేది /etc/networkd-dispatcher డైరెక్టరీలో ఉన్న సిస్టమ్ హ్యాండ్లర్ స్క్రిప్ట్లను మాత్రమే అమలు చేయడానికి రూపొందించబడింది మరియు వినియోగదారు రీప్లేస్మెంట్ కోసం యాక్సెస్ చేయబడదు, కానీ ఫైల్ పాత్ ప్రాసెసింగ్ కోడ్లో ఒక దుర్బలత్వం (CVE-2022-29799) కారణంగా, ఒక సరిహద్దుల వెలుపల బేస్ డైరెక్టరీ మరియు ఏకపక్ష స్క్రిప్ట్లను ప్రారంభించే అవకాశం. ప్రత్యేకించి, స్క్రిప్ట్కు ఫైల్ పాత్ను రూపొందించేటప్పుడు, D-బస్ ద్వారా ప్రసారం చేయబడిన ఆపరేషనల్ స్టేట్ మరియు అడ్మినిస్ట్రేటివ్ స్టేట్ విలువలు ఉపయోగించబడ్డాయి, దీనిలో ప్రత్యేక అక్షరాలు క్లియర్ చేయబడవు. దాడి చేసే వ్యక్తి తన స్వంత స్థితిని సృష్టించగలడు, దాని పేరులో “../” అక్షరాలు ఉంటాయి మరియు నెట్వర్క్డ్-డిస్పాచర్ కాల్ను మరొక డైరెక్టరీకి మళ్లించవచ్చు.
రెండవ దుర్బలత్వం (CVE-2022-29800) రేస్ స్థితికి సంబంధించినది - స్క్రిప్ట్ పారామితులను (రూట్కు చెందినది) తనిఖీ చేయడం మరియు దానిని అమలు చేయడం మధ్య, ఫైల్ను భర్తీ చేయడానికి మరియు చెక్ని దాటవేయడానికి తక్కువ సమయం ఉంది. స్క్రిప్ట్ రూట్ వినియోగదారుకు చెందినది. అదనంగా, subprocess.Popen కాల్ ద్వారా స్క్రిప్ట్లను అమలు చేస్తున్నప్పుడు సహా సింబాలిక్ లింక్ల కోసం నెట్వర్క్డ్-డిస్పాచర్ తనిఖీ చేయలేదు, ఇది దాడి యొక్క సంస్థను గణనీయంగా సులభతరం చేసింది.
ఆపరేటింగ్ టెక్నిక్:
- డైరెక్టరీ “/tmp/nimbuspwn” మరియు సింబాలిక్ లింక్ “/tmp/nimbuspwn/poc.d” డైరెక్టరీ “/sbin”ని సూచిస్తూ సృష్టించబడ్డాయి, ఇది రూట్ యాజమాన్యంలోని ఎక్జిక్యూటబుల్ ఫైల్లను తనిఖీ చేయడానికి ఉపయోగించబడుతుంది.
- “/sbin” నుండి ఎక్జిక్యూటబుల్ ఫైల్ల కోసం, అదే పేరుతో ఫైల్లు “/tmp/nimbuspwn” డైరెక్టరీలో సృష్టించబడతాయి, ఉదాహరణకు, “/sbin/vgs” ఫైల్ కోసం “/tmp/nimbuspwn/vgs” ఎక్జిక్యూటబుల్ ఫైల్ క్రియేట్ చేయబడింది, ఒక ప్రత్యేక హక్కు లేని వినియోగదారు యాజమాన్యంలో ఉంది, దాడి చేసే వ్యక్తి అమలు చేయాలనుకుంటున్న కోడ్ దీనిలో ఉంచబడుతుంది.
- ఆపరేషనల్ స్టేట్లో “../../../tmp/nimbuspwn/poc” విలువను సూచించే నెట్వర్క్డ్-డిస్పాచర్ ప్రాసెస్కు D-బస్ ద్వారా సిగ్నల్ పంపబడుతుంది. “org.freedesktop.network1” నేమ్స్పేస్లో సిగ్నల్ను పంపడానికి, దాని హ్యాండ్లర్లను systemd-networkdకి కనెక్ట్ చేసే సామర్థ్యం ఉపయోగించబడింది, ఉదాహరణకు, gpgv లేదా epmdతో మానిప్యులేషన్ల ద్వారా లేదా మీరు systemd-networkd అనే వాస్తవాన్ని సద్వినియోగం చేసుకోవచ్చు. డిఫాల్ట్గా అమలు చేయబడదు (ఉదాహరణకు, Linux Mintలో).
- సిగ్నల్ అందుకున్న తర్వాత, నెట్వర్క్డ్-డిస్పాచర్ రూట్ యూజర్ యాజమాన్యంలోని ఎక్జిక్యూటబుల్ ఫైల్ల జాబితాను రూపొందిస్తుంది మరియు “/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d” డైరెక్టరీలో అందుబాటులో ఉంటుంది, ఇది వాస్తవానికి "/sbin"కి లింక్ చేస్తుంది.
- ఫైల్ల జాబితా స్వీకరించబడినప్పుడు, కానీ స్క్రిప్ట్ ఇంకా ప్రారంభించబడనప్పుడు, సింబాలిక్ లింక్ “/tmp/nimbuspwn/poc.d” నుండి “/tmp/nimbuspwn”కి మళ్లించబడుతుంది మరియు నెట్వర్క్డ్-డిస్పాచర్ లాంచ్ చేస్తుంది రూట్ హక్కులతో దాడి చేసే వ్యక్తి హోస్ట్ చేసిన స్క్రిప్ట్.
మూలం: opennet.ru