Π ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΌΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ OpenBSD ΠΏΠΎΡΡΠΎΠ²ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΎΡΠΊΡΠΈΡΠ° Π΅ (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
