Kök imtiyazları ilə uzaqdan kod icrasına imkan verən OpenSMTPD-də zəiflik

OpenBSD layihəsi tərəfindən hazırlanmış poçt serverində OpenSMTPD müəyyən edilmişdir kritik zəiflik (CVE-2020-7247), bu, kök istifadəçi hüquqları ilə serverdə qabıq əmrlərini uzaqdan icra etməyə imkan verir. Zəiflik Qualys Security (əvvəlki OpenSMTPD auditi) tərəfindən aparılan təkrar audit zamanı müəyyən edilib. həyata keçirilirdi 2015-ci ildə və yeni zəiflik 2018-ci ilin may ayından etibarən mövcuddur). Problem aradan qaldırıldı OpenSMTPD 6.6.2 buraxılışında. Bütün istifadəçilərə yeniləməni dərhal quraşdırmaları tövsiyə olunur (OpenBSD üçün yamaq syspatch vasitəsilə quraşdırıla bilər).

İki hücum variantı təklif olunur. Birinci seçim standart OpenSMTPD konfiqurasiyasında işləyir (yalnız localhost-dan sorğuları qəbul edir) və təcavüzkar serverdə (məsələn, hosting sistemlərində) yerli şəbəkə interfeysinə (döngü) daxil ola bildikdə problemi yerli olaraq istifadə etməyə imkan verir. . İkinci seçim OpenSMTPD xarici şəbəkə sorğularını qəbul etmək üçün konfiqurasiya edildikdə baş verir (üçüncü tərəfin poçtunu qəbul edən poçt serveri). Tədqiqatçılar həm OpenBSD 6.6-a daxil olan OpenSMTPD versiyası, həm də digər əməliyyat sistemləri üçün portativ versiya ilə (Debian Testində aparılır) uğurla işləyən istismarın prototipini hazırlayıblar.

Problem smtp_mailaddr() funksiyasındakı xətadan qaynaqlanır, hansı ki, “MAIL FROM” və “RCPT TO” sahələrində göndərici/qəbuledicini təyin edən və əlaqə zamanı ötürülən dəyərlərin düzgünlüyünü yoxlamaq üçün çağırılır. poçt serveri ilə. E-poçt ünvanının “@” simvolundan əvvəl gələn hissəsini yoxlamaq üçün smtp_mailaddr() funksiyası çağırılır.
valid_localpart(), RFC 5322 tələb etdiyi kimi "!#$%&'*/?^`{|}~+-=_" simvollarını qəbul edir (MAILADDR_ALLOWED).

Bu halda, sətirdən birbaşa qaçış yalnız “!#$%&'*?`{|}~” (MAILADDR_ESCAPE) simvollarını əvəz edən mda_expand_token() funksiyasında yerinə yetirilir. Sonradan, mda_expand_token()-də hazırlanmış xətt 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' əmrindən istifadə edərək çatdırılma agentinə (MDA) zəng edərkən istifadə olunur. . /bin/sh vasitəsilə mbox-a məktublar yerləşdirildikdə, “/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}” sətri işə salınır, burada “%” dəyəri {mbox.from}” “MAIL FROM” parametrindən qaçış datasını ehtiva edir.

Zəifliyin mahiyyəti ondan ibarətdir ki, smtp_mailaddr() məntiqi xətaya malikdir, buna görə boş domen e-poçta göndərilərsə, ünvanın “@” hərfindən əvvəlki hissəsində etibarsız simvollar olsa belə, funksiya uğurlu yoxlama kodunu qaytarır. . Bundan əlavə, sətir hazırlayarkən, mda_expand_token() funksiyası bütün mümkün qabıq xüsusi simvollarından qaçmır, ancaq e-poçt ünvanında icazə verilən xüsusi simvollardan qaçır. Beləliklə, əmrinizi yerinə yetirmək üçün e-poçtun yerli hissəsində “;” simvolundan istifadə etmək kifayətdir. və MAILADDR_ESCAPE dəstinə daxil edilməyən və buraxılmayan boşluq. Misal üçün:

$nc 127.0.0.1 25

SALAM professor.falken
POSTA:<;sleep 66;>
RCPT TO:
MƏLUMAT
.
Çıxın

Bu seansdan sonra OpenSMTPD, mbox-a çatdırıldıqda, qabıq vasitəsilə əmri işə salacaq

/usr/libexec/mail.local -f ;yuxu 66; kök

Eyni zamanda, hücum imkanları ünvanın yerli hissəsinin 64 simvoldan, xüsusi simvollardan isə '$' və '|'-dən çox olmaması ilə məhdudlaşır. qaçarkən ":" ilə əvəz olunur. Bu məhdudiyyəti keçmək üçün biz məktubun gövdəsinin giriş axını vasitəsilə /usr/libexec/mail.local işlədildikdən sonra ötürülməsindən istifadə edirik, yəni. Ünvanı manipulyasiya etməklə siz yalnız sh əmr tərcüməçisini işə sala və məktubun gövdəsini təlimatlar toplusu kimi istifadə edə bilərsiniz. Xidmətin SMTP başlıqları məktubun əvvəlində göstərildiyindən, onları keçmək üçün oxu əmrindən istifadə etmək tövsiyə olunur. İşləyən istismar bu kimi görünür:

$nc 192.168.56.143 25

SALAM professor.falken
MAIL FROM:<; i in 0 1 2 3 4 5 6 7 8 9 abcd üçün; oxuyun r;done;sh;exit 0;>
RCPT TO:[e-poçt qorunur]>
MƏLUMAT
#0
#1
...
#d
WOPR-də i üçün; et
echo -n "($i) " && id || fasilə
tamamlandı > /root/x."`id -u`.""$$"
.
Çıxın

Mənbə: opennet.ru

Добавить комментарий