RSS Проект Ноль
Подписаться
Класс ошибок Windows: Доступ к заблокированным COM-объектам с помощью IDispatch
Джеймс Форшоу, исследователь из Google Project Zero, обсуждает «класс ошибок, связанных с захваченным объектом» в объектно-ориентированных технологиях удаленного взаимодействия, таких как DCOM и .NET Remoting. Эти технологии позволяют создавать объектно-ориентированные интерфейсы, способные пересекать границы процессов и безопасности, но эта гибкость имеет и недостатки, включая потенциальную возможность повышения привилегий или удаленного выполнения кода.Не все объекты, которые могут быть удалённо вызваны, безопасны для этого, и некоторые объекты, такие как XML-библиотеки, могут выполнять произвольный скрипт в контексте документа XSLT. Если объект XML-документа становится доступен за пределами границы безопасности, клиент может выполнить код в контексте серверного процесса.Существует несколько сценариев, которые могут привести к появлению этого класса ошибок, включая непреднамеренное совместное использование небезопасного объекта, использование асинхронных примитивов маршалинга и злоупотребление встроенными механизмами поиска и создания экземпляров объектов. Например, библиотеки Windows Runtime содержали ошибку, добавляющую код в существующий COM-объект XML DOM Document v6, который раскрывал специфичные для среды выполнения интерфейсы и позволял злоумышленнику запрашивать старый интерфейс IXMLDOMDocument и использовать его для запуска скрипта XSLT.Ещё один пример — классы .NET FileInfo и DirectoryInfo, которые могут быть маршалированы как по значению, так и по ссылке, и могут использоваться для создания нового экземпляра объекта в процессе сервера. Злоумышленник может использовать это, отправляя сериализованную форму объекта на сервер, который создаст новый экземпляр объекта, а затем прочитает созданный объект, который будет маршалирован обратно злоумышленнику по ссылке.Наконец, упомянут сценарий злоупотребления встроенными механизмами поиска и создания экземпляров объектов для создания неожиданного объекта. Например, в COM злоумышленник может использовать API CoCreateInstance для создания произвольного COM-объекта в контексте сервера и получить его обратно клиенту. Это может быть использовано для создания объекта XML DOM Document на сервере, возвращения его клиенту, маршалированного по ссылке, а затем использования его для выполнения произвольного кода в контексте сервера.Эти сценарии подчеркивают важность тщательного рассмотрения последствий безопасности при использовании объектно-ориентированных технологий удаленного взаимодействия и обеспечения того, чтобы только безопасные объекты передавались через границы безопасности.