డైనమిక్ లోడర్
సమస్య యొక్క సారాంశం: ఆపరేషన్ సమయంలో, ld.so మొదట పర్యావరణం నుండి LD_LIBRARY_PATH వేరియబుల్ యొక్క విలువను సంగ్రహిస్తుంది మరియు _dl_split_path() ఫంక్షన్ని ఉపయోగించి, దానిని స్ట్రింగ్ల శ్రేణిగా మారుస్తుంది - డైరెక్టరీలకు మార్గాలు. ప్రస్తుత ప్రక్రియ SUID/SGID అప్లికేషన్ ద్వారా ప్రారంభించబడిందని తర్వాత తేలితే, సృష్టించబడిన శ్రేణి మరియు వాస్తవానికి, LD_LIBRARY_PATH వేరియబుల్ క్లియర్ చేయబడతాయి. అదే సమయంలో, _dl_split_path() మెమరీ అయిపోతే (ఇది ఎన్విరాన్మెంట్ వేరియబుల్స్ పరిమాణంపై స్పష్టమైన 256 kB పరిమితి కారణంగా కష్టం, కానీ సిద్ధాంతపరంగా సాధ్యమవుతుంది), అప్పుడు _dl_libpath వేరియబుల్ NULL విలువను అందుకుంటుంది మరియు తదుపరి తనిఖీలు ఈ వేరియబుల్ విలువ _dl_unsetenv("LD_LIBRARY_PATH")కి కాల్ను దాటవేయడానికి బలవంతం చేస్తుంది.
నిపుణులు కనుగొన్న దుర్బలత్వం
అదనంగా: సమస్యకు ఒక సంఖ్య కేటాయించబడింది
amd64 మరియు i386 (దోపిడీని ఇతర నిర్మాణాలకు అనుగుణంగా మార్చవచ్చు).
సమస్య డిఫాల్ట్ ఇన్స్టాలేషన్లో ఉపయోగించుకోదగినది మరియు chpass లేదా passwd suid యుటిలిటీలను అమలు చేస్తున్నప్పుడు లైబ్రరీ ప్రత్యామ్నాయం ద్వారా రూట్గా కోడ్ని అమలు చేయడానికి ఒక ప్రత్యేకించబడని స్థానిక వినియోగదారుని అనుమతిస్తుంది. ఆపరేషన్ కోసం అవసరమైన తక్కువ-మెమరీ పరిస్థితులను సృష్టించడానికి, setrlimit ద్వారా RLIMIT_DATA పరిమితిని సెట్ చేయండి.
మూలం: opennet.ru