В реализации virtio-устройств обнаружена уязвимость [3], позволяющая [4] организовать из изолированных гостевых систем запись и чтение данных с блочных устройств или LVM-разделов, через отправку SCSI-команд через SG_IO ioctl. Уязвимости подвержены окружения, работающие под управлением QEMU и KVM. Проблеме также подвержен OpenVZ, но только в случае проброса разделов, что обычно не практикуется для окружений на базе OpenVZ. Системы на базе Xen не подвержены проблеме, так как драйвер блочных устройств, используемый в Xen, не поддерживает вызов SG_IO ioctl.
Уязвимость распространяется только на блочные устройства, используемые в работе гостевых систем: например, если в гостевую систему проброшен раздел /dev/sda3, то злоумышленник, имеющий root-права в гостевой системе, может не покидая изолированное окружение получить доступ ко всем данным на диске /dev/sda, включая другие разделы и загрузочный сектор. Для эксплуатации проблемы не нужно прибегать к ухищрениям, все работает "из коробки", например, для чтения загрузочного сектора можно использовать штатную утилиту sg_dd [5]:
sg_dd if=/dev/vda blk_sgio=1 bs=512 count=1 of=output
SELinux не может быть использован для блокирования проблемы, так как он делегирует qemu отправку ioctl для дисков, без привязки к отдельным разделам. Обходным путем решения проблемы является запрет на использование проброса SCSI-команд для устройств virtio-blk, но суть проблемы касается особенности ядра Linux, связанной с перенаправлением ioctl для логических разделов. В настоящее время в списке рассылки разработчиков ядра Linux уже предложен [4] набор патчей, вводящих отдельный ioctl-вызов scsi_blk_cmd_ioctl, запрещающих проброс SCSI ioctl для разделов и вводящий белый список для ограничения области действия некоторых операций. Дополнительно патчи подготовлены для libguestfs [6] и libvirt [7]. Обновление с устранением уязвимости пока доступно только для Red Hat Enterprise Linux [3] и Cent OS [8]. Статус выпуска обновлений для различных дистрибутивов можно проследить на данных страницах: Ubuntu [9], Gentoo [10], Slackware [11], Mandriva [12], openSUSE [13], Fedora [14] и Debian [15].
Ссылки:
[1] http://htfl.ru/cat-news-qemu
[2] http://htfl.ru/cat-news-uyazvimosti-po
[3] /out.php?link=https://rhn.redhat.com/errata/RHSA-2011-1849.html
[4] /out.php?link=https://lkml.org/lkml/2011/12/22/270
[5] /out.php?link=http://linux.die.net/man/8/sg_dd
[6] /out.php?link=https://www.redhat.com/archives/libguestfs/2011-December/msg00168.html
[7] /out.php?link=https://www.redhat.com/archives/libvir-list/2011-December/msg00990.html
[8] /out.php?link=http://lists.centos.org/pipermail/centos-announce/2011-December/018358.html
[9] /out.php?link=https://lists.ubuntu.com/archives/ubuntu-security-announce/2011-December/
[10] /out.php?link=http://www.gentoo.org/security/
[11] /out.php?link=http://www.slackware.com/security/list.php?l=slackware-security&y=2011
[12] /out.php?link=http://www.mandriva.com/en/security/advisories?dis=2011
[13] /out.php?link=http://lists.opensuse.org/opensuse-security-announce/2011-12/
[14] /out.php?link=https://admin.fedoraproject.org/updates/F16/security
[15] /out.php?link=http://www.debian.org/security/