В реализации virtio-устройств обнаружена уязвимость, позволяющая организовать из изолированных гостевых систем запись и чтение данных для блочных устройств или LVM-разделов, через отправку SCSI-команд через SG_IO ioctl. Уязвимости подвержены окружения, работающие под управлением QEMU и KVM. Проблеме также подвержен OpenVZ, но только в случае проброса разделов, что обычно не практикуется для окружений на базе OpenVZ. Системы на базе Xen не подвержены проблеме, так как драйвер блочных устройств, используемый в Xen, не поддерживает вызов SG_IO ioctl.

Уязвимость распространяется только на блочные устройства, используемые в работе гостевых систем: например, если в гостевую систему проброшен раздел /dev/sda3, то злоумышленник, имеющий root-права в гостевой системе, может не покидая изолированное окружение получить доступ ко всем данным на диске /dev/sda, включая другие разделы и загрузочный сектор. Для эксплуатации проблемы не нужно прибегать к ухищрениям, все работает "из коробки", например, для чтения загрузочного сектора можно использовать штатную утилиту sg_dd:


sg_dd if=/dev/vda blk_sgio=1 bs=512 count=1 of=output

Суть проблемы касается особенности ядра Linux, связанной с перенаправлением ioctl для логических разделов. В настоящее время в списке рассылки разработчиков ядра Linux уже предложен набор патчей, вводящих отдельный ioctl-вызов scsi_blk_cmd_ioctl, запрещающих проброс SCSI ioctl для разделов и вводящий белый список для ограничения области действия некоторых операций. Линус Торвальдс не одобрил данные патчи для включения в ядро 3.2, так как они содержат слишком значительные изменения, которые опасно принимать накануне релиза 3.2, который ожидается через несколько дней. Поэтому, в настоящее время ищутся более простые альтернативные способы устранения проблемы или рассматривается возможность выпуска внепланового кандидата в релизы ядра 3.2 для дополнительного тестирования патчей.

SELinux не может быть использован для блокирования проблемы, так как он делегирует qemu отправку ioctl для дисков, без привязки к отдельным разделам. Обходным путем решения проблемы является запрет на использование проброса SCSI-команд для устройств virtio-blk. Дополнительно патчи подготовлены для libguestfs и libvirt. Обновление с устранением уязвимости пока доступно только для Red Hat Enterprise Linux, Scientific Linux и Cent OS. Статус выпуска обновлений для различных дистрибутивов можно проследить на данных страницах: Ubuntu, Gentoo, Slackware, Mandriva, openSUSE, Fedora и Debian.

Источник: http://www.opennet.ru/opennews/art.shtml?num=32703