Уязвимост Π² OpenSMTPD, позволяваща ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ изпълнСниС Π½Π° ΠΊΠΎΠ΄ с ΠΏΡ€Π°Π²Π° root

Π’ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ”ΠΌΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ– OpenBSD ΠΏΠΎΡˆΡ‚ΠΎΠ²ΠΎΠΌΡƒ сСрвСрі OpenSMTPD ΠΎΡ‚ΠΊΡ€ΠΈΡ‚Π° Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° уязвимост (CVE-2020-7247), която позволява ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ изпълнСниС Π½Π° shell ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° с ΠΏΡ€Π°Π²Π°Ρ‚Π° Π½Π° потрСбитСля root. Уязвимостта Π΅ Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ ΠΎΠ΄ΠΈΡ‚, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ ΠΎΡ‚ компанията Qualys Security (ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡΡ‚ ΠΎΠ΄ΠΈΡ‚ Π½Π° OpenSMTPD сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΏΡ€Π΅Π· 2015 Π³ΠΎΠ΄ΠΈΠ½Π°, Π° Π½ΠΎΠ²Π°Ρ‚Π° уязвимост Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° ΠΎΡ‚ ΠΌΠ°ΠΉ 2018 Π³ΠΎΠ΄ΠΈΠ½Π°). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ отстранСна Π² ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ OpenSMTPD 6.6.2. На всички ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄Π° инсталират актуализация (Π·Π° OpenBSD ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС инсталирана Ρ‡Ρ€Π΅Π· syspatch).

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ са Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π½Π° Π°Ρ‚Π°ΠΊΠ°. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² конфигурацията ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° OpenSMTPD (ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° заявки само ΠΎΡ‚ localhost) ΠΈ позволява Сксплоатация Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ атакуващият ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ към локалния ΠΌΡ€Π΅ΠΆΠΎΠ² интСрфСйс (loopback) Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° хостинг систСми). Вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сС проявява, ΠΊΠΎΠ³Π°Ρ‚ΠΎ OpenSMTPD Π΅ настроСн Π·Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° външни ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ заявки (пощСнски ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠΎΡ‰Π° ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈ страни). Π˜Π·ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ са ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° Сксплоита, ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° OpenSMTPD ΠΎΡ‚ OpenBSD 6.6, Ρ‚Π°ΠΊΠ° ΠΈ с прСносимата вСрсия Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ систСми (тСстувано Π² Debian Testing).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠ° Π² функцията smtp_mailaddr(), която сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° корСктността Π½Π° стойноститС Π² ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° Β«MAIL FROMΒ» ΠΈ Β«RCPT TOΒ», опрСдСлящи ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‡Π°/получатСля ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° с пощСнския ΡΡŠΡ€Π²ΡŠΡ€. Π—Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° частта ΠΎΡ‚ пощСнския адрСс, ΠΏΡ€Π΅Π΄ΠΈ символа Β«@Β», Π² smtp_mailaddr() сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° функцията
valid_localpart(), която счита допустими (MAILADDR_ALLOWED) символи Β«!#$%&’*?^`{|}~+-=_Β», Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с изискванията Π½Π° RFC 5322.

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° нСпосрСдствСното СскСйпиранС Π½Π° строката сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π² функцията mda_expand_token(), която замСня само символи Β«!#$%&’*?`{|}~Β» (MAILADDR_ESCAPE). ВпослСдствиС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π°Ρ‚Π° Π² mda_expand_token() стринг сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π°Π³Π΅Π½Ρ‚Π° Π·Π° доставка (MDA) Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° 'execle("/bin/sh", "/bin/sh", "-c", mda_command,…'. Π’ случай Π½Π° вмъкванС Π½Π° писмо Π² mbox Ρ‡Ρ€Π΅Π· /bin/sh сС стартира строката Β«/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}Β», ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ стойността Β«%{mbox.from}Β» Π²ΠΊΠ»ΡŽΡ‡Π²Π° СскСйпирани Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° Β«MAIL FROMΒ».

Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° уязвимостта Π΅, Ρ‡Π΅ smtp_mailaddr() ΠΈΠΌΠ° логичСска Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΏΠΎΡ€Π°Π΄ΠΈ която ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π·Π΅Π½ Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π² email функцията Π²Ρ€ΡŠΡ‰Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ частта ΠΎΡ‚ адрСса ΠΏΡ€Π΅Π΄ΠΈ Β«@Β» ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° нСдопустими символи. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° Π½ΠΈΠ· с функцията mda_expand_token() Π½Π΅ сС СскСйпват всички възмоТни спСциални символи Π½Π° shell, Π° само спСциалнитС символи, допустими Π² ΠΈΠΌΠ΅ΠΉΠ» адрСса. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π·Π° Π΄Π° стартира своята ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° символ Β«;Β» ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π² Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° част Π½Π° ΠΈΠΌΠ΅ΠΉΠ»Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π² Π½Π°Π±ΠΎΡ€a MAILADDR_ESCAPE ΠΈ Π½Π΅ сС СскСйпват. НапримСр:

$ nc 127.0.0.1 25

HELO professor.falken
MAIL FROM:
RCPT TO:
DATA
.
QUIT

Π‘Π»Π΅Π΄ Ρ‚Π°Π·ΠΈ сСсия OpenSMTPD ΠΏΡ€ΠΈ доставка Π² mbox Ρ‰Π΅ стартира Ρ‡Ρ€Π΅Π· shell ΠΊΠΎΠΌΠ°Π½Π΄Π°

/usr/libexec/mail.local -f ;sleep 66; root

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π°, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° Π°Ρ‚Π°ΠΊΠ° са ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ ΠΎΡ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° част Π½Π° адрСса Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° надвишава 64 символа, Π° спСциалнитС символи β€˜$’ ΠΈ β€˜|’ сС замСнят с Β«:Β» ΠΏΡ€ΠΈ СскСйпиранС. Π—Π° заобикалянС Π½Π° Ρ‚ΠΎΠ²Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ тялото Π½Π° писмото сС ΠΏΡ€Π΅Π΄Π°Π²Π° слСд стартиранС Π½Π° /usr/libexec/mail.local ΠΏΡ€Π΅Π· входния ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚.Π΅. Ρ‡Ρ€Π΅Π· ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ с адрСса ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира само командния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ sh ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° тялото Π½Π° писмото ΠΊΠ°Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструкции. Въй ΠΊΠ°Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° писмото сС посочват слуТСбни SMTP заглавия, Π·Π° Π΄Π° Π³ΠΈ пропуснСтС, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° read Π² Ρ†ΠΈΠΊΡŠΠ». Работният Сксплойт ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ слСдния Π²ΠΈΠ΄:

$ nc 192.168.56.143 25

HELO professor.falken
MAIL FROM:
RCPT TO:
DATA
#0
#1
…
#d
for i in W O P R; do
echo -n Β«($i) Β» && id || break
done > /root/x.`id -u`.`$$`
.
QUIT

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster