የርቀት ኮድን ከስር መብቶች ጋር ማስፈጸሚያ የሚፈቅድ በOpenSMTPD ውስጥ ተጋላጭነት

በOpenBSD ፕሮጀክት በተዘጋጀው የፖስታ አገልጋይ ውስጥ SMTPD ክፈት ተለይቷል ወሳኝ ተጋላጭነት (CVE-2020-7247)፣ ይህም ከስር ተጠቃሚ መብቶች ጋር በአገልጋዩ ላይ የሼል ትዕዛዞችን በርቀት እንዲፈጽሙ ያስችልዎታል። ተጋላጭነቱ በQualys Security (የቀድሞው የOpenSMTPD ኦዲት) በተደረገ ድጋሚ ኦዲት ወቅት ተለይቷል። ተደረገ በ 2015, እና አዲሱ ተጋላጭነት ከግንቦት 2018 ጀምሮ ይገኛል). ችግር ተወግዷል በOpenSMTPD 6.6.2 መለቀቅ። ሁሉም ተጠቃሚዎች ዝመናውን ወዲያውኑ እንዲጭኑ ይመከራሉ (ለOpenBSD ፣ patch በ syspatch በኩል ሊጫን ይችላል)።

ሁለት የጥቃት አማራጮች ቀርበዋል። የመጀመሪያው አማራጭ በነባሪ የ OpenSMTPD ውቅር ውስጥ ይሰራል (ከ localhost ብቻ የሚቀርብን ጥያቄ በመቀበል) እና አጥቂው የአካባቢያዊ አውታረ መረብ በይነገጽ (loopback) በአገልጋዩ ላይ (ለምሳሌ በማስተናገጃ ስርዓቶች ላይ) መድረስ ሲችል ችግሩን በአገር ውስጥ ለመጠቀም ያስችላል። . ሁለተኛው አማራጭ OpenSMTPD የውጭ አውታረ መረብ ጥያቄዎችን ለመቀበል ሲዋቀር ነው (የሶስተኛ ወገን ደብዳቤ የሚቀበል የፖስታ አገልጋይ)። ተመራማሪዎች በOpenBSD 6.6 ውስጥ ከተካተቱት የOpenSMTPD ሥሪት እና ለሌሎች ኦፕሬቲንግ ሲስተሞች (በዴቢያን ሙከራ ከተካሄደ) ተንቀሳቃሽ ሥሪት ጋር በተሳካ ሁኔታ የሚሰራ የብዝበዛ ምሳሌ አዘጋጅተዋል።

ችግሩ የተፈጠረው በ smtp_mailaddr () ተግባር ውስጥ ባለ ስህተት ሲሆን ይህም በ "MAIL FROM" እና "RCPT TO" መስኮች ውስጥ ላኪውን/ተቀባዩን የሚገልጹ እና በግንኙነቱ ወቅት የሚተላለፉትን እሴቶች ትክክለኛነት ለማረጋገጥ ነው። ከደብዳቤ አገልጋይ ጋር. ከ “@” ምልክት በፊት የሚመጣውን የኢሜል አድራሻ ክፍል ለመፈተሽ የsmtp_mailaddr() ተግባር ይባላል።
ትክክለኛ_localpart()፣ (MAILADDR_ALLOWED) ቁምፊዎችን "!#$%&'*/?^`{|}~+-=_" የሚቀበል፣ በRFC 5322 እንደፈለገ።

በዚህ አጋጣሚ የሕብረቁምፊውን ቀጥታ ማምለጥ በ mda_expand_token() ተግባር ውስጥ ይከናወናል፣ይህም "!#$%&'*?`{|}~"(MAILADDR_ESCAPE) ቁምፊዎችን ብቻ ይተካል። በመቀጠል፣ በ mda_expand_token() የተዘጋጀው መስመር ወደ መላኪያ ወኪል (ኤምዲኤ) ሲደውል ጥቅም ላይ የሚውለው 'execle("/bin/sh"፣"/bin/sh")፣ "/bin/sh"፣ "-c", mda_command,...' በመጠቀም ነው። በ /bin/sh በኩል ፊደላትን ወደ mbox ቢያስቀምጥ፣ "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" የሚለው መስመር ተጀምሯል፣ እሴቱ "% {mbox.from}" ከ"MAIL FROM" ግቤት ያመለጠ ውሂብን ያካትታል።

የተጋላጭነቱ ዋና ነገር smtp_mailaddr() አመክንዮአዊ ስህተት አለው፣ በዚህ ምክንያት ባዶ ጎራ ወደ ኢሜል ከተላከ ተግባሩ የተሳካ የማረጋገጫ ኮድ ይመልሳል፣ ምንም እንኳን ከ "@" በፊት ያለው የአድራሻው ክፍል ልክ ያልሆኑ ቁምፊዎችን ቢይዝም . በተጨማሪም፣ ሕብረቁምፊ በሚዘጋጅበት ጊዜ፣ mda_expand_token() ተግባር ሁሉንም ሊሆኑ ከሚችሉ የሼል ልዩ ቁምፊዎች አያመልጥም፣ ነገር ግን በኢሜይል አድራሻው ውስጥ የሚፈቀዱ ልዩ ቁምፊዎች ብቻ ናቸው። ስለዚህ, ትዕዛዝዎን ለማስኬድ, በኢሜል አካባቢያዊ ክፍል ውስጥ ያለውን ";" ምልክት መጠቀም በቂ ነው. እና ቦታ፣ በMAILADDR_ESCAPE ስብስብ ውስጥ ያልተካተቱ እና ያላመለጡ። ለምሳሌ:

$nc 127.0.0.1 25

ሄሎ ፕሮፌሰር.falken
ደብዳቤ ከ፡
RCPT ወደ፡
የውሂብ
.
ማጨሱን

ከዚህ ክፍለ ጊዜ በኋላ፣ OpenSMTPD፣ ወደ mbox ሲደርስ ትዕዛዙን በሼል በኩል ይጀምራል

/usr/libexec/mail.local -f; እንቅልፍ 66; ሥር

በተመሳሳይ ጊዜ የአድራሻው አካባቢያዊ ክፍል ከ 64 ቁምፊዎች መብለጥ ስለማይችል የጥቃት ዕድሎች የተገደቡ ናቸው, እና ልዩ ቁምፊዎች «$» እና «|» በሚሸሹበት ጊዜ በ «:» ይተካሉ. ይህንን ገደብ ለማለፍ የደብዳቤው አካል /usr/libexec/mail.local ን ከገባ በኋላ የሚተላለፈውን በመግቢያው ዥረት ማለትም በመግቢያው ዥረት ውስጥ የመሆኑን እውነታ እንጠቀማለን። አድራሻውን በማስተካከል የ sh ትዕዛዝ አስተርጓሚውን ብቻ ማስጀመር እና የደብዳቤውን አካል እንደ መመሪያ ስብስብ መጠቀም ይችላሉ. የአገልግሎት SMTP ራስጌዎች በደብዳቤው መጀመሪያ ላይ ስለሚገለጹ እነሱን ለመዝለል የንባብ ትዕዛዙን በ loop ውስጥ እንዲጠቀሙ ይመከራል። የሚሰራ ብዝበዛ ይህን ይመስላል።

$nc 192.168.56.143 25

ሄሎ ፕሮፌሰር.falken
MAIL FROM፡
RCPT ለ፡<[ኢሜል የተጠበቀ]>
የውሂብ
#0
#1
...
#d
ለ i በ W O P R; መ ስ ራ ት
echo -n "($i)" && id || መስበር
ተከናውኗል > / root/x."`id -u`.""$$"
.
ማጨሱን

ምንጭ: opennet.ru

አስተያየት ያክሉ