ʻO ka Vulnerability i OpenSMTPD e hiki ai ke hoʻokō i nā code mamao e like me ke kumu

Ma ka leka uila i hoʻomohala ʻia e ka papahana OpenBSD OpenSMTPD ʻike ʻia pilikia koʻikoʻi (CVE-2020-7247) hiki iā ʻoe ke hoʻokō mamao i nā kauoha shell ma kahi kikowaena me nā kuleana mea hoʻohana kumu. Ua ʻike ʻia ka nāwaliwali i ka wā o kahi loiloi hou i mālama ʻia e Qualys Security (ka loiloi mua o OpenSMTPD ua paa i 2015, a ua loaʻa ka nāwaliwali hou mai Mei 2018). Pilikia hoʻopau ʻia i ka hoʻokuʻu ʻia ʻana o OpenSMTPD 6.6.2. Manaʻo ʻia nā mea hoʻohana a pau e hoʻokomo koke i ka mea hou (no OpenBSD, hiki ke hoʻokomo ʻia ka patch ma o syspatch).

ʻElua ʻano o ka hoʻouka ʻana i manaʻo ʻia. Hana ka koho mua i ka hoʻonohonoho OpenSMTPD paʻamau (loaʻa i nā noi mai localhost wale nō) a hiki iā ʻoe ke hoʻohana i ka pilikia ma ka ʻāina, i ka wā e hiki ai i ka mea hoʻouka ke komo i ke kikowaena pūnaewele kūloko (loopback) ma ke kikowaena (no ka laʻana, ma nā ʻōnaehana hoʻokipa). . ʻIke ʻia ka lua o ka koho i ka wā i hoʻonohonoho ʻia ai ʻo OpenSMTPD e ʻae i nā noi pūnaewele waho (kahi kikowaena leka uila e ʻae i ka leka uila ʻekolu). Ua hoʻomākaukau ka poʻe noiʻi i kahi prototype exploit e hana maikaʻi ana me ka OpenSMTPD variant mai OpenBSD 6.6 a me kahi mana portable no nā ʻōnaehana hana ʻē aʻe (i hana ʻia ma Debian Testing).

Hoʻokumu ʻia ka pilikia ma muli o kahi hewa i ka hana smtp_mailaddr (), i kapa ʻia e nānā i ka pololei o nā waiwai i loko o nā kahua "MAIL FROM" a me "RCPT TO" e hoʻoholo ai i ka mea hoʻouna / loaʻa a hoʻouna ʻia i ka wā o ka pilina. i ke kikowaena leka. Kāhea ʻia ka hana smtp_mailaddr() ma smtp_mailaddr() e nānā i ka ʻāpana o ka leka uila e hele mai ana ma mua o ke ʻano "@".
valid_localpart(), e noʻonoʻo ana i nā huaʻōlelo "!#$%&'*/?^`{|}~+-=_" i ʻae ʻia (MAILADDR_ALLOWED), e like me ke koi ʻia e RFC 5322.

I kēia hihia, pakele pololei ke kaula i ka hana mda_expand_token(), kahi e pani ai i nā huaʻōlelo "!#$%&'*?`{|}~" (MAILADDR_ESCAPE). Eia kekahi, hoʻohana ʻia ke kaula i hoʻomākaukau ʻia ma mda_expand_token() i ke kāhea ʻana i ka mea lawe lawe (MDA) me ka hoʻohana ʻana i ke kauoha 'execle("/bin/sh", "/bin/sh", "-c", mda_command,…'. i mbox ma o /bin/sh, e holo ana ka laina "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}", kahi o ka waiwai "%{mbox.from}" loaʻa nā ʻikepili i pakele mai ka ʻāpana "MAIL FROM".

ʻO ke kumu o ka vulnerability ʻo ka smtp_mailaddr() he hewa kūpono no ka mea, inā i hāʻawi ʻia kahi kikowaena hakahaka i ka leka uila, e hoʻihoʻi ka hana i kahi code hōʻoia kūleʻa, ʻoiai inā ʻo ka hapa o ka helu ma mua o "@" aia nā huaʻōlelo kūpono ʻole. Eia kekahi, i ka wā e hoʻomākaukau ai i kahi kaula me ka hana mda_expand_token(), ʻaʻole i pakele nā ​​huaʻōlelo kūikawā shell āpau, akā ʻae ʻia nā huaʻōlelo kūikawā ma ka leka uila. No laila, e holo i kāu kauoha, ua lawa ia e hoʻohana i ka hōʻailona ";" ma ka ʻāpana kūloko o ka leka uila. a me ka hakahaka, ʻaʻole i loko o ka hoʻonohonoho MAILADDR_ESCAPE a ʻaʻole i pakele. ʻo kahi laʻana:

$nc 127.0.0.1 25

HELO professor.falken
LEKA MAI:<;moe 66;>
RCPT I:
ʻIkepili
.
PAHU

Ma hope o kēia kau, OpenSMTPD, ke hāʻawi ʻia i mbox, e holo i ke kauoha ma o ka shell

/usr/libexec/mail.local -f ;moe 66; moʻa

I ka manawa like, ua kaupalena ʻia nā mea hiki ke hoʻouka ʻia ma ka ʻoiaʻiʻo ʻaʻole hiki i ka ʻāpana kūloko o ka helu wahi ke ʻoi aku ma mua o 64 mau huaʻōlelo, a me nā huaʻōlelo kūikawā '$' a me '|' ua pani ʻia me ":" i ka wā e pakele ai. No ka pale ʻana i kēia palena, ua hoʻouna ʻia ke kino o ka memo ma hope o ka holo ʻana /usr/libexec/mail.local ma o ke kahawai komo, ʻo ia. ma o ka manipulation me ka helu wahi, hiki iā ʻoe ke hoʻomaka wale i ka sh command interpreter a hoʻohana i ke kino o ka leka ma ke ʻano he ʻōlelo kuhikuhi. No ka mea, ua kuhikuhi ʻia nā poʻomanaʻo SMTP lawelawe ma ka hoʻomaka ʻana o ka leka, ua manaʻo ʻia e hoʻohana i ke kelepona kauoha heluhelu i loko o kahi loop e lele ai iā lākou. ʻO ke ʻano o ka hana ʻana e like me kēia:

$nc 192.168.56.143 25

HELO professor.falken
MAIL MAI:<;no ka mea, i ka 0 1 2 3 4 5 6 7 8 9 abcd;e heluhelu r;doe;sh;exit 0;>
RCPT I:[pale ʻia ka leka uila]>
ʻIkepili
#0
#1
...
#d
no ka mea i ma WOPR; hana
echo -n "($i) " && id || hakihaki
pau > /root/x."`id -u`"."$$"
.
PAHU

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka