Yn y gweinydd post a ddatblygwyd gan y prosiect OpenBSD
Cynigir dau opsiwn ymosodiad. Mae'r opsiwn cyntaf yn gweithio yn y ffurfweddiad OpenSMTPD rhagosodedig (derbyn ceisiadau gan localhost yn unig) ac yn caniatáu ichi ecsbloetio'r broblem yn lleol, pan fydd yr ymosodwr yn gallu cyrchu'r rhyngwyneb rhwydwaith lleol (loopback) ar y gweinydd (er enghraifft, ar systemau cynnal) . Mae'r ail opsiwn yn digwydd pan fydd OpenSMTPD wedi'i ffurfweddu i dderbyn ceisiadau rhwydwaith allanol (gweinydd post sy'n derbyn post trydydd parti). Mae ymchwilwyr wedi paratoi prototeip o gamfanteisio sy'n gweithio'n llwyddiannus gyda'r fersiwn OpenSMTPD sydd wedi'i chynnwys yn OpenBSD 6.6 a gyda fersiwn gludadwy ar gyfer systemau gweithredu eraill (a gynhaliwyd yn Debian Testing).
Achosir y broblem gan wall yn y swyddogaeth smtp_mailaddr(), a elwir i wirio cywirdeb y gwerthoedd yn y meysydd “POST Oddi” a “RCPT TO” sy'n diffinio'r anfonwr/derbynnydd ac sy'n cael eu pasio yn ystod y cysylltiad gyda'r gweinydd post. I wirio'r rhan o'r cyfeiriad e-bost sy'n dod cyn y symbol “@”, gelwir y swyddogaeth smtp_mailaddr()
valid_localpart(), sy'n derbyn (MAILADDR_ALLOWED) y nodau "!#$%&'*/?^`{|}~+-=_", fel sy'n ofynnol gan RFC 5322.
Yn yr achos hwn, mae dianc uniongyrchol o'r llinyn yn cael ei berfformio yn y swyddogaeth mda_expand_token(), sy'n disodli'r nodau “!#$%&'* yn unig?`{|}~” (MAILADDR_ESCAPE). Yn dilyn hynny, defnyddir y llinell a baratowyd yn mda_expand_token () wrth alw'r asiant dosbarthu (MDA) gan ddefnyddio'r gorchymyn 'execle ("/ bin/sh", "/ bin/sh", "-c", mda_command,...' . Mewn achos o osod llythyrau i mbox trwy /bin/sh, mae'r llinell “/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}” yn cael ei lansio, lle mae'r gwerth “% Mae {mbox.from}" yn cynnwys data sydd wedi'i ddianc o'r paramedr "MAIL FROM".
Hanfod y bregusrwydd yw bod gan smtp_mailaddr() wall rhesymegol, ac oherwydd hynny, os anfonir parth gwag i e-bost, mae'r swyddogaeth yn dychwelyd cod dilysu llwyddiannus, hyd yn oed os yw'r rhan o'r cyfeiriad cyn “@” yn cynnwys nodau annilys . Ymhellach, wrth baratoi llinyn, nid yw'r swyddogaeth mda_expand_token() yn dianc rhag pob nod arbennig cragen posib, ond dim ond nodau arbennig a ganiateir yn y cyfeiriad e-bost. Felly, i redeg eich gorchymyn, mae'n ddigon defnyddio'r symbol “;” yn rhan leol yr e-bost. a gofod, nad ydynt wedi'u cynnwys yn y set MAILADDR_ESCAPE ac nad ydynt yn dianc. Er enghraifft:
$nc 127.0.0.1 25
HELO athro.falken
POST GAN:
RCPT AT:
DATA
.
QUIT
Ar ôl y sesiwn hon, bydd OpenSMTPD, pan gaiff ei gyflwyno i mbox, yn lansio'r gorchymyn trwy'r gragen
/usr/libexec/mail.local -f; cysgu 66; gwraidd
Ar yr un pryd, mae'r posibiliadau ymosod wedi'u cyfyngu gan y ffaith na all rhan leol y cyfeiriad fod yn fwy na 64 nod, ac mae'r nodau arbennig '$' a '|' yn cael eu disodli gan ":" wrth ddianc. Er mwyn osgoi'r cyfyngiad hwn, rydym yn defnyddio'r ffaith bod corff y llythyr yn cael ei drosglwyddo ar ôl rhedeg /usr/libexec/mail.local drwy'r ffrwd mewnbwn, h.y. Trwy drin y cyfeiriad, dim ond y dehonglydd gorchymyn sh y gallwch chi ei lansio a defnyddio corff y llythyren fel set o gyfarwyddiadau. Gan fod penawdau SMTP gwasanaeth wedi'u nodi ar ddechrau'r llythyr, awgrymir defnyddio'r gorchymyn darllen mewn dolen i'w hepgor. Mae camfanteisio gweithredol yn edrych fel hyn:
$nc 192.168.56.143 25
HELO athro.falken
POST GAN:
RCPT I:<[e-bost wedi'i warchod]>
DATA
#0
#1
...
#d
canys i yn W O P R; gwneud
adlais -n "($i)" && id || torri
gwneud > / root/x." `id -u`." "$$"
.
QUIT
Ffynhonnell: opennet.ru