
Технический отчет и PoC-эксплойт для CVE-2020-11519 и CVE-2020-11520
Date: June 2020
Author: Dennis Elser (code: github)
Согласно веб-представлению продукта, Winmagic SecureDoc «позволяет предприятиям эффективно управлять безопасностью своей ИТ-среды, используя такие функции, как: полное шифрование диска (FDE), многофакторная аутентификация, шифрование контейнеров сменных носителей (RMCE) и шифрование файлов и папок (FFE). Эти функции помогают предприятиям повысить безопасность, снизить бизнес-риски и соответствовать государственным и нормативным требованиям к шифрованию жестких дисков».
Продукт Winmagic SecureDoc, доступный в автономной и корпоративной редакциях, затронут двумя уязвимостями локального повышения привилегий (CVE-2020-11519 и CVE-2020-11520) в версиях 8.3 и 8.5. После того, как уязвимости были сообщены в Winmagic в конце марта, вендор выпустил патч (версия 8.5SR2) в середине июня 2020 года. Однако было обнаружено, что этот патч устраняет уязвимости недостаточно, что сделало версию 8.5SR2 также уязвимой к описанным недостаткам. Хотя технические подробности об уязвимостях по этой причине удерживались, с тех пор недостатки приходится считать общедоступными. По словам вендора, еще один патч находится в разработке, примерно через 106 дней после первоначального отчета об уязвимости в Winmagic. 15 июля, через 111 дней после первоначального отчета об уязвимости вендору, Winmagic выпустила SecureDoc v8.5 SR2 HF1 для клиентов, который, как сообщается, исправляет CVE-2020-11519 и CVE-2020-11520. Версии SecureDoc старше 8.3 не тестировались, но можно предположить, что они также затронуты, исходя из кода затронутого компонента.
Успешная эксплуатация любой из уязвимостей приведет к повышению привилегий до SYSTEM для локально аутентифицированных злоумышленников.
Обе уязвимости затрагивают компонент «SDDisk2k.sys», драйвер режима ядра, поставляемый с продуктом Winmagic SecureDoc. Недостатки безопасности были выявлены с помощью ручного статического анализа с использованием дизассемблера и декомпилятора Hex-Rays IDA Pro. Ретроспективно, слабые места можно было бы обнаружить с гораздо меньшими усилиями, если бы вместо этого были применены динамические методы тестирования, такие как фаззинг. Это связано с тем, что драйвер может взаимодействовать с ограниченными приложениями пользовательского режима и по умолчанию предполагает, что их входные данные являются корректными.
Из-за небезопасного создания объекта устройства «SecureDocDevice» драйвером «SDDisk2k.sys» и отсутствия кода, который бы устанавливал соответствующий дескриптор безопасности, даже ограниченные учетные записи пользователей получают возможность получить дескриптор устройства с помощью функции API CreateFile(). Предоставляя приложению пользовательского режима дескриптор своего объекта устройства, драйвер тем самым открывает прямой путь к своей поверхности атаки в пространстве ядра.``` c RtlInitUnicodeString(&DestinationString, L"\Device\SecureDocDevice"); RtlInitUnicodeString(&SymbolicLinkName, L"\DosDevices\SecureDocDevice"); if ( IoCreateDevice(v1, 0xDD8u, &DestinationString, 0x8D1Fu, 0, 0, &DeviceObject) >= 0 ) // <--- unsafe { memset(DeviceObject->DeviceExtension, 0, 0xDD8ui64); DeviceObject->Flags |= 4u; DeviceObject->AlignmentRequirement = 0; if ( IoCreateSymbolicLink(&SymbolicLinkName, &DestinationString) < 0 ) IoDeleteDevice(DeviceObject); IoObject = DeviceObject; }
В результате реверс-инжиниринга ряда обработчиков служб [IOCTL](https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-i-o-control-codes) драйвера "SDDisk2k.sys" было обнаружено, что один из них предоставляет критическую функциональность пользовательскому режиму, а именно - по замыслу позволяет выполнять операции чтения и записи необработанных секторов диска произвольного накопителя. Кроме того, при взаимодействии с этим кодом было замечено, что драйвер игнорирует любые эксклюзивные блокировки, которые могли быть установлены ранее на накопителе. Как следствие, становятся возможными одновременные операции чтения/записи, что способствует состояниям гонки и риску потери данных.