Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Vim, приводящая ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ врСдоносного Ρ„Π°ΠΉΠ»Π°

Π’ тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ… Vim ΠΈ Neovim Π½Π°ΠΉΠ΄Π΅Π½Π° ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2019-12735), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся ΠΏΡ€ΠΈ активности Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π΅ΠΆΠΈΠΌΠ° modeline («:set modeline»), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΎΠΏΡ†ΠΈΠΈ рСдактирования. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² выпусках
Vim 8.1.1365 ΠΈ Neovim 0.3.6.

Π§Π΅Ρ€Π΅Π· modeline допускаСтся установка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ числа ΠΎΠΏΡ†ΠΈΠΉ. Если Π² качСствС значСния ΠΎΠΏΡ†ΠΈΠΈ указываСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ выполняСтся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ sandbox, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… бСзопасных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΈ этом Π² число допустимых Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° «:source», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ «!» для запуска ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для выполнСния ΠΊΠΎΠ΄Π° достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² строкС modeline ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π° «set foldexpr=execute(‘\:source! some_file’):». Π’ Neovim Π²Ρ‹Π·ΠΎΠ² execute Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½, Π½ΠΎ вмСсто Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ assert_fails.

НапримСр, для выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ «uname -a» достаточно просто ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Vim ΠΈΠ»ΠΈ Neovim Ρ„Π°ΠΉΠ», Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ»ΠΈ послСднСй строкС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ:

:!uname -a||» vi:fen:fdm=expr:fde=assert_fails(«source\!\ \%»):fdl=0:fdt=»

Компанда «source! %» ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ, соотвСтствСнно, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ «:!uname -a». Для скрытия Π΄Π°Π½Π½ΠΎΠΉ строки ΠΎΡ‚ Π²Ρ‹Π²ΠΎΠ΄Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ cat ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ эксплоита ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π² vim создаётся сСтСвоС соСдинСниС с shell-доступом Π½Π° систСму ΠΆΠ΅Ρ€Ρ‚Π²Ρ‹, Π½ΠΎ ΠΏΡ€ΠΈ этом Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ cat.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌΠ° modeline ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ «:set modeline?». Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² vimrc ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку «set nomodeline». Π’ дистрибутивах ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° устранСна Π² RHEL, SUSE/openSUSE, Fedora, FreeBSD, Ubuntu, Arch Linux ΠΈ ALT. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ остаётся нСисправлСнной Π² Debian (Π² Debian modeline ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, поэтому Π² состоянии ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π΅ проявляСтся).

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