Ailagbara ni OpenSMTPD ti o fun laaye ipaniyan koodu isakoṣo bi gbongbo

Ninu olupin meeli ti o dagbasoke nipasẹ iṣẹ akanṣe OpenBSD ṢiiSMTPD mọ lominu ni palara (CVE-2020-7247) ti o fun ọ laaye lati ṣiṣẹ awọn pipaṣẹ ikarahun latọna jijin lori olupin pẹlu awọn ẹtọ olumulo olumulo. Ailagbara naa jẹ idanimọ lakoko atunyẹwo atunyẹwo nipasẹ Qualys Security (ayẹwo iṣaaju ti OpenSMTPD ti waye ni 2015, ati ailagbara tuntun ti wa lati May 2018). Isoro imukuro ninu idasilẹ OpenSMTPD 6.6.2. Gbogbo awọn olumulo ni imọran lati fi imudojuiwọn naa sori ẹrọ ni iyara (fun OpenBSD, alemo le fi sii nipasẹ syspatch).

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

Fi ọrọìwòye kun