Ang kahinaan sa Vim na humahantong sa pagpapatupad ng code kapag nagbubukas ng malisyosong file

Sa mga text editor kalakasan и neovim natagpuan kahinaan (CVE-2019-12735), na nagpapahintulot na maisakatuparan ang arbitrary code kapag binubuksan ang isang espesyal na idinisenyong file. Ang problema ay nangyayari kapag ang default modeline mode (“:set modeline”) ay aktibo, na nagbibigay-daan sa iyong tukuyin ang mga opsyon sa pag-edit sa naprosesong file. Naayos ang kahinaan sa mga release
Vim 8.1.1365 и Neovim 0.3.6.

Limitado lamang na bilang ng mga opsyon ang maaaring mai-install sa pamamagitan ng modeline. Kung ang isang expression ay tinukoy bilang isang halaga ng opsyon, ito ay isinasagawa sa sandbox mode, na nagbibigay-daan lamang sa pinakasimpleng ligtas na operasyon. Sa kasong ito, kasama sa wastong utos ang command na ":source", kung saan maaari mong gamitin ang "!" modifier. upang magpatakbo ng mga arbitrary na utos mula sa tinukoy na file. Kaya, upang maisakatuparan ang code, sapat na upang ipahiwatig sa linya ng modelo ang isang konstruksiyon tulad ng "set foldexpr=execute('\:source! some_file'):". Sa Neovim, ang pagtawag sa execute ay ipinagbabawal, ngunit ang assert_fails ay maaaring gamitin sa halip.

Halimbawa, upang patakbuhin ang command na "uname -a", buksan lang ang isang file sa Vim o Neovim na ang una o huling linya ay nagsasabing:

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

Kumpanya “pinagmulan! %" ay magbabasa ng mga utos mula sa kasalukuyang file at naaayon ay isasagawa ang ":!uname -a". Maaaring gamitin ang mga escape sequence upang itago ang isang ibinigay na linya mula sa output ng cat utility. Halimbawa, dito pagsamantalahan ang prototype kapag binubuksan ang isang file sa vim, ang isang koneksyon sa network ay nilikha na may shell access sa system ng biktima, ngunit ang file na ito ay hindi pumukaw ng hinala kapag nag-output sa terminal gamit ang cat utility.

Maaari mong suriin ang aktibidad ng modeline mode gamit ang command na ": set modeline?". Upang hindi paganahin ito, maaari mong idagdag ang linyang "set nomodeline" sa vimrc. Sa mga pamamahagi ang problema ay naayos sa RHEL, SUSE/openSUSE, Fedora, FreeBSD, Ubuntu, Arch Linux и ALT. Ang kahinaan ay nananatiling hindi natatakpan Debian (sa Debian modeline ay hindi pinagana bilang default, kaya ang kahinaan ay hindi lilitaw sa default na estado).

Pinagmulan: opennet.ru

Magdagdag ng komento