Ninu olupin meeli ti o dagbasoke nipasẹ iṣẹ akanṣe OpenBSD
Meji orisi ti kolu ti a ti dabaa. Aṣayan akọkọ n ṣiṣẹ ni atunto OpenSMTPD aiyipada (gbigba awọn ibeere nikan lati ọdọ localhost) ati gba ọ laaye lati lo iṣoro naa ni agbegbe, nigbati ikọlu ba ni anfani lati wọle si wiwo nẹtiwọọki agbegbe (loopback) lori olupin (fun apẹẹrẹ, lori awọn eto alejo gbigba) . Aṣayan keji yoo han nigbati OpenSMTPD ti tunto lati gba awọn ibeere nẹtiwọki ita (olupin meeli ti o gba meeli ẹni-kẹta). Awọn oniwadi ti pese ilokulo apẹẹrẹ kan ti o ṣiṣẹ ni aṣeyọri pẹlu iyatọ OpenSMTPD lati OpenBSD 6.6 ati pẹlu ẹya gbigbe fun awọn ọna ṣiṣe miiran (ti a ṣe ni Idanwo Debian).
Iṣoro naa jẹ idi nipasẹ aṣiṣe kan ninu iṣẹ smtp_mailaddr (), eyiti a pe lati ṣayẹwo deede ti awọn iye ninu awọn aaye “MAIL FROM” ati “RCPT TO” ti o pinnu olufiranṣẹ / olugba ati pe o tan kaakiri lakoko asopọ. si olupin mail. Iṣẹ smtp_mailaddr () ni a pe ni smtp_mailaddr () lati ṣayẹwo fun apakan ti adirẹsi imeeli ti o wa ṣaaju ihuwasi "@".
valid_localpart(), eyi ti o ro "!#$%&'*/?^`{|}~+-=_" awọn ẹyọkan bi a ti gba laaye (MAILADDR_ALLOWED), gẹgẹ bi ibeere RFC 5322.
Ni idi eyi, okun naa ti salọ taara ni iṣẹ mda_expand_token (), eyiti o rọpo awọn ohun kikọ nikan "!#$%&'*?`{|}~" (MAILADDR_ESCAPE). Siwaju sii, okun ti a pese sile ni mda_expand_token () ni a lo nigbati o ba n pe oluranlowo ifijiṣẹ (MDA) ni lilo aṣẹ 'execle ("/ bin/sh", "/ bin/sh", "-c", mda_command,…'. meeli. si mbox nipasẹ /bin/sh, laini "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" ti wa ni ṣiṣe, nibiti iye "%{mbox.from}" pẹlu data ti o salọ lati inu paramita "MAIL FROM".
Koko-ọrọ ti ailagbara ni pe smtp_mailaddr () ni aṣiṣe ọgbọn nitori eyiti, ti agbegbe ti o ṣofo ba ti kọja si imeeli, iṣẹ naa yoo pada koodu ijẹrisi aṣeyọri, paapaa ti apakan adirẹsi ṣaaju “@” ni awọn ohun kikọ ti ko tọ. Siwaju si, nigba ti ngbaradi a okun pẹlu mda_expand_token () -iṣẹ, ko gbogbo awọn ti ṣee ikarahun pataki ohun kikọ sa, sugbon nikan pataki ohun kikọ laaye ninu awọn mail adirẹsi. Nitorinaa, lati ṣiṣẹ aṣẹ rẹ, o to lati lo aami ";" ni apakan agbegbe ti imeeli. ati aaye, ti ko si ninu ṣeto MAILADDR_ESCAPE ti ko si salọ. Fun apere:
$ nc 127.0.0.1 25
HELO professor.falken
mail LATI:<; orun 66;>
RPT SI:
DATA
.
olodun-
Lẹhin igba yii, OpenSMTPD, nigbati o ba fi jiṣẹ si mbox, yoo ṣiṣẹ aṣẹ nipasẹ ikarahun
/usr/libexec/mail.local -f ;orun 66; gbongbo
Ni akoko kanna, awọn aye ikọlu ni opin nipasẹ otitọ pe apakan agbegbe ti adirẹsi ko le kọja awọn ohun kikọ 64, ati awọn kikọ pataki '$' ati '|' ti wa ni rọpo pẹlu ":" nigba sa. Lati yika aropin yii, otitọ pe ara ti ifiranṣẹ naa ni a gbejade lẹhin ṣiṣe /usr/libexec/mail.local nipasẹ ṣiṣan titẹ sii, i.e. nipasẹ ifọwọyi pẹlu adirẹsi, o le ṣe ifilọlẹ onitumọ aṣẹ sh nikan ki o lo ara ti lẹta naa gẹgẹbi ilana ilana. Niwọn igba ti awọn akọle SMTP iṣẹ ti wa ni pato ni ibẹrẹ lẹta, o daba lati lo ipe pipaṣẹ kika ni lupu kan lati foju wọn. Imudani ṣiṣẹ dabi nkan bi eyi:
$ nc 192.168.56.143 25
HELO professor.falken
MAIL LATI:<;fun i in 0 1 2 3 4 5 6 7 8 9 abcd;ma ka r;ti ṣe;sh;jade 0;>
RPT SI:[imeeli ni idaabobo]>
DATA
#0
#1
...
#d
fun i ni WOPR; ṣe
iwoyi -n "($i)" && id || fọ
ṣe > /root/x."`id -u`""$$"
.
olodun-
orisun: opennet.ru