په OpenSMTPD کې زیان منونکي چې د ریښو امتیازاتو سره د ریموټ کوډ اجرا کولو ته اجازه ورکوي

په میل سرور کې چې د OpenBSD پروژې لخوا رامینځته شوی OpenSMTPD پیژندل شوی نازک زیانمنتیا (CVE-2020-7247)، کوم چې تاسو ته اجازه درکوي په لیرې توګه په سرور کې د شیل کمانډونه د روټ کاروونکي حقونو سره اجرا کړئ. زیانمنتیا د بیا پلټنې په جریان کې پیژندل شوې وه چې د Qualys Security (پخوانۍ OpenSMTPD پلټنې) لخوا ترسره شوې ترسره شو په 2015 کې، او نوی زیان د 2018 د می راهیسې شتون لري). ستونزه له منځه وړل په OpenSMTPD 6.6.2 ریلیز کې. ټولو کاروونکو ته سپارښتنه کیږي چې سمدستي اوسمهال نصب کړي (د OpenBSD لپاره، پیچ د سیسپچ له لارې نصب کیدی شي).

د برید دوه اختیارونه وړاندیز شوي. لومړی اختیار په ډیفالټ OpenSMTPD ترتیب کې کار کوي (یوازې د لوکل هوسټ څخه غوښتنې منل) او تاسو ته اجازه درکوي چې ستونزه په محلي ډول وکاروئ ، کله چې برید کونکی په سرور کې د محلي شبکې انٹرفیس (لوپ بیک) ته لاسرسی ومومي (د مثال په توګه ، په کوربه توب سیسټمونو کې) . دوهم اختیار هغه وخت رامینځته کیږي کله چې OpenSMTPD د بهرنۍ شبکې غوښتنې ترلاسه کولو لپاره تنظیم شوی وي (د بریښنالیک سرور چې د دریمې ډلې بریښنالیک مني). څیړونکو د کارونې یو پروټوټایپ چمتو کړی چې دواړه په بریالیتوب سره کار کوي د OpenSMTPD نسخه سره چې په OpenBSD 6.6 کې شامل دي او د نورو عملیاتي سیسټمونو لپاره د پورټ ایبل نسخې سره (د ډیبیان ټیسټینګ کې ترسره کیږي).

ستونزه د smtp_mailaddr() فنکشن کې د یوې تېروتنې له امله رامینځته شوې ، کوم چې د "میل څخه" او "RCPT TO" برخو کې د ارزښتونو سموالي چیک کولو لپاره ویل کیږي چې لیږونکی / ترلاسه کونکی تعریفوي او د پیوستون پرمهال تیریږي. د میل سرور سره. د بریښنالیک آدرس د برخې چک کولو لپاره چې د "@" سمبول څخه مخکې راځي، د smtp_mailaddr() فنکشن ویل کیږي.
valid_localpart()، کوم چې د (MAILADDR_ALLOWED) حروف مني "!#$%&'*/?^`{|}~+-=_"، لکه څنګه چې د RFC 5322 لخوا اړین دی.

په دې حالت کې، د تار مستقیم تیښته په mda_expand_token() فنکشن کې ترسره کیږي، کوم چې یوازې د "!#$%&'*?`{|}~" (MAILADDR_ESCAPE) حروف بدلوي. په تعقیب ، په mda_expand_token() کې چمتو شوې کرښه کارول کیږي کله چې د تحویلي اجنټ (MDA) ته زنګ ووهئ د 'execle("/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

د هیلو پروفیسور. فالکن
له میلمه:
RCPT ته:
د معلوماتو
.
پرېږدې.

د دې ناستې وروسته، OpenSMTPD، کله چې mbox ته وسپارل شي، د شیل له لارې به کمانډ پیل کړي

/usr/libexec/mail.local -f؛ خوب 66؛ ريښه

په ورته وخت کې، د برید امکانات د دې حقیقت له مخې محدود دي چې د پتې سیمه ایز برخه د 64 تورو څخه زیاته نشي، او ځانګړي حروف '$' او '|' د تېښتې په وخت کې د ":" سره بدلیږي. د دې محدودیت څخه د تیریدو لپاره، موږ دا حقیقت کاروو چې د لیک بدن د ان پټ جریان له لارې /usr/libexec/mail.local چلولو وروسته لیږدول کیږي، د بیلګې په توګه. د پتې په مینځلو سره، تاسو کولی شئ یوازې د sh کمانډ ژباړونکي په لاره واچوئ او د لیک بدن د لارښوونو سیټ په توګه وکاروئ. څرنګه چې د خدمت SMTP سرلیکونه د لیک په پیل کې اشاره شوي، نو وړاندیز کیږي چې د لوستلو کمانډ په لوپ کې وکاروئ ترڅو دوی پریږدي. کاري استثمار یو څه داسې ښکاري:

$nc 192.168.56.143 25

د هیلو پروفیسور. فالکن
له میل:
RCPT ته:<[ایمیل خوندي شوی]>
د معلوماتو
#0
#1
...
#d
زه په WO P R کې؛ کوي
echo -n "($i)" && id || ماتول
بشپړ شو > /root/x."`id-u`.""$$"
.
پرېږدې.

سرچینه: opennet.ru

Add a comment