Root ලෙස දුරස්ථ කේත ක්‍රියාත්මක කිරීමට ඉඩ දෙන OpenSMTPD හි අවදානම

OpenBSD ව්‍යාපෘතිය මගින් සංවර්ධනය කරන ලද තැපැල් සේවාදායකයේ OpenSMTPD හඳුනාගෙන ඇත විවේචනාත්මක අවදානම (CVE-2020-7247) මඟින් root පරිශීලක හිමිකම් සහිත සේවාදායකයක දුරස්ථව shell විධාන ක්‍රියාත්මක කිරීමට ඔබට ඉඩ සලසයි. Qualys Security විසින් සිදු කරන ලද නැවත විගණනයකදී (OpenSMTPD හි පෙර විගණනය) අවදානම හඳුනා ගන්නා ලදී. පවත්වන ලදී 2015 දී, සහ නව අවදානම 2018 මැයි සිට පවතී). ගැටලුව ඉවත් කළා OpenSMTPD 6.6.2 නිකුතුවේදී. යාවත්කාලීනය හදිසියේ ස්ථාපනය කරන ලෙස සියලුම පරිශීලකයින්ට උපදෙස් දෙනු ලැබේ (OpenBSD සඳහා, පැච් එක syspatch හරහා ස්ථාපනය කළ හැක).

ප්‍රහාර වර්ග දෙකක් යෝජනා කර ඇත. පළමු විකල්පය පෙරනිමි OpenSMTPD වින්‍යාසය තුළ ක්‍රියා කරයි (දේශීය සත්කාරකයෙන් පමණක් ඉල්ලීම් ලැබීම) සහ ප්‍රහාරකයාට සේවාදායකයේ (උදාහරණයක් ලෙස, සත්කාරක පද්ධති මත) දේශීය ජාල අතුරුමුහුණත (ලූප්බැක්) වෙත ප්‍රවේශ වීමට හැකි වූ විට, දේශීයව ගැටලුව ගසාකෑමට ඔබට ඉඩ සලසයි. . බාහිර ජාල ඉල්ලීම් පිළිගැනීමට OpenSMTPD වින්‍යාස කර ඇති විට දෙවන විකල්පය දිස්වේ (තෙවන පාර්ශවීය තැපැල් පිළිගන්නා තැපැල් සේවාදායකයක්). පර්යේෂකයන් විසින් OpenBSD 6.6 සිට OpenSMTPD ප්‍රභේදය සමඟ සහ අනෙකුත් මෙහෙයුම් පද්ධති සඳහා අතේ ගෙන යා හැකි අනුවාදයක් සමඟ සාර්ථකව ක්‍රියා කරන මූලාකෘති සූරාකෑමක් සකස් කර ඇත (Debian Testing හි පවත්වනු ලැබේ).

ගැටලුව ඇති වන්නේ smtp_mailaddr() ශ්‍රිතයේ දෝෂයක් නිසා ය, එය යවන්නා / ලබන්නා තීරණය කරන සහ සම්බන්ධතාවය අතරතුර සම්ප්‍රේෂණය වන "MAIL FROM" සහ "RCPT TO" යන ක්ෂේත්‍රවල අගයන් වල නිරවද්‍යතාවය පරීක්ෂා කිරීමට කැඳවනු ලැබේ. තැපැල් සේවාදායකය වෙත. "@" අක්ෂරයට පෙර එන තැපැල් ලිපිනයේ කොටස පරීක්ෂා කිරීමට smtp_mailaddr() ශ්‍රිතය smtp_mailaddr() හි කැඳවනු ලැබේ.
Valid_localpart(), RFC 5322 ට අවශ්‍ය පරිදි "!#$%&'*/?^`{|}~+-=_" අනුලකුණු අනුමත (MAILADDR_ALLOWED) ලෙස සලකයි.

මෙම අවස්ථාවෙහිදී, "!#$%&'*?`{|}~" (MAILADDR_ESCAPE) අක්ෂර පමණක් ප්‍රතිස්ථාපනය කරන mda_expand_token() ශ්‍රිතය තුළ තන්තුව කෙලින්ම ගැලවී යයි. තවද, 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' යන විධානය භාවිතා කරමින් බෙදාහැරීමේ නියෝජිතයා (MDA) ඇමතීමේ දී mda_expand_token() හි සකස් කරන ලද තන්තුව භාවිතා වේ. /bin/sh හරහා mbox කිරීමට, "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" රේඛාව ධාවනය වේ, එහිදී "%{mbox.from}" අගය "MAIL FROM" පරාමිතියෙන් ගැලවී ගිය දත්ත ඇතුළත් වේ.

අවදානමේ සාරය නම්, smtp_mailaddr() හි තාර්කික දෝෂයක් ඇති බැවින්, හිස් වසමක් විද්‍යුත් තැපෑලට යවන්නේ නම්, “@” ට පෙර ලිපිනයේ කොටස අවලංගු අක්ෂර අඩංගු වුවද, කාර්යය සාර්ථක සත්‍යාපන කේතයක් ලබා දෙයි. තවද, mda_expand_token() ශ්‍රිතය සමඟ තන්තුවක් සකස් කිරීමේදී, හැකි සියලුම shell විශේෂ අක්ෂර ගැලවී නොයනු ඇත, නමුත් තැපැල් ලිපිනයේ අවසර දෙනු ලබන්නේ විශේෂ අක්ෂර පමණි. මේ අනුව, ඔබේ විධානය ක්‍රියාත්මක කිරීමට, විද්‍යුත් තැපෑලෙහි දේශීය කොටසෙහි ";" සංකේතය භාවිතා කිරීම ප්‍රමාණවත් වේ. සහ MAILADDR_ESCAPE කට්ටලයේ නැති සහ ගැලවී නොයන ඉඩ. උදාහරණ වශයෙන්:

$nc 127.0.0.1 25

HELO professor.falken
තැපැල්:<;sleep 66;>
RCPT වෙත:
දත්ත
.
ක්විට්

මෙම සැසියෙන් පසුව, OpenSMTPD, mbox වෙත භාර දුන් විට, විධානය shell හරහා ක්‍රියාත්මක කරනු ඇත

/usr/libexec/mail.local -f ;sleep 66; මූල

ඒ අතරම, ලිපිනයේ ප්‍රාදේශීය කොටස අක්ෂර 64 ඉක්මවිය නොහැකි නිසාත්, විශේෂ අක්ෂර '$' සහ '|' නිසාත් ප්‍රහාරක හැකියාවන් සීමා වේ. පැන යාමේදී ":" සමඟ ආදේශ කරනු ලැබේ. මෙම සීමාව මග හැරීම සඳහා, ආදාන ප්‍රවාහය හරහා /usr/libexec/mail.local ධාවනය කිරීමෙන් පසු පණිවිඩයේ සිරුර සම්ප්‍රේෂණය වන බව, i.e. ලිපිනය සමඟ හැසිරවීම හරහා, ඔබට sh විධාන පරිවර්තකය පමණක් දියත් කළ හැකි අතර ලිපියේ කොටස උපදෙස් මාලාවක් ලෙස භාවිතා කළ හැකිය. සේවා SMTP ශීර්ෂයන් ලිපියේ ආරම්භයේ දක්වා ඇති බැවින්, ඒවා මඟ හැරීම සඳහා ලූපයක් තුළ කියවීමේ විධාන ඇමතුම භාවිතා කිරීමට යෝජනා කෙරේ. වැඩ සූරාකෑම මේ වගේ දෙයක් පෙනේ:

$nc 192.168.56.143 25

HELO professor.falken
තැපැල්:<; for i in 0 1 2 3 4 5 6 7 8 9 abcd; කියවන්න r;done;sh;exit 0;>
RCPT වෙත:[විද්‍යුත් ආරක්‍ෂිත]>
දත්ත
#0
#1
...
#d
WOPR හි i සඳහා; කරන්න
echo -n "($i) " && id || බිඳීම
කළා > /root/x."`id -u`""$$"
.
ක්විට්

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න