В браузерном дополнении, устанавливаемом при использовании платформы для проведения web-конференций Cisco WebEx, выявлена показательная уязвимость, позволяющая при открытии в браузере специально оформленной страницы выполнить код на уровне операционной системы с правами текущего пользователя. Платформа WebEx получила большое распространение в корпоративной среде и насчитывает более 20 млн пользователей.
Уязвимость вызвана наличием предопределённого идентификатора, позволяющего передать дополнению команды (возможность используется для встраивания на сайты виджетов WebEx). В частности, команды можно передать через запрос со специально оформленной страницы, обращение с которой может быть скрыто от пользователя путем применения блоков iframe. Так как дополнение реализовано в виде надстройки над нативным кодом, вызываемым при помощи API nativeMessaging, атакующие могут добиться выполнения вызовов nativeMessaging от имени дополнения и организовать выполнение произвольного кода на уровне системы.
Эксплоит достаточно прост и сводится к передаче сообщения WebEx с любой страницы, названной
"cwcsf-nativemsg-iframe-43c85c0d-d633-af5e-c056-32dc7efc570b.html" (название принципиально, так как является идентификатором, позволяющим выполнить действия на стороне дополнения). Для выполнения кода используется команда GpcInitCall, позволяющая вызвать функцию из нативного компонента. Например, в подготовленном для платформы Windows эксплоите осуществляется обращение к библиотеке "MSVCR100.DLL" и вызов функции "_wsystem()". В качестве примера приведён запуск калькулятора после открытия в браузере подготовленной атакующими web-страницы.
В дополнении подобная функциональность используется для передачи события "launch_meeting", в результате которого управление передаётся установленному в систему коммуникационному клиенту WebEx (разделяемая библиотека "atmccli"). Передаваемые в составе события "launch_meeting" команды вызывают обработчики, реализованные в виде функций, экспортируемых библиотекой "atmccli". Так как имя библиотеки и команда передаётся в составе запроса, атакующий имеет возможность вместо "atmccli" указать любую системную библиотеку, а вместо команды - любую экспортируемую этой библиотекой функцию. Подобные возможности оставались бы особенностью внутреннего кода дополнения, если бы не наличие скрытого идентификатора, позволяющего передавать команды с внешних ресурсов.
var msg = {
...
GpcComponentName: btoa("MSVCR100.DLL"),
GpcInitCall: btoa("_wsystem(ExploitShellCommand);"), ExploitShellCommand: btoa("calc.exe"),
}
document.dispatchEvent(new CustomEvent("connect", { detail: { token: "token" }}));
document.dispatchEvent(new CustomEvent("message", { detail: {
message: JSON.stringify(msg),
message_type: "launch_meeting",
timestamp: (new Date()).toUTCString(),
token: "token"
}
}));
Разработчики Firefox уже добавили дополнение WebEx Extension в черный список. Дополнение также временно заблокировано в Chrome web store. Компания Cisco подготовила исправление (1.0.3), но оно не блокирует скрытый идентификатор, а ограничивает возможность выполнения запросов с сайтов *.webex.com и *.webex.com.cn при обязательном применении HTTPS. Ряд разработчиков Chromium не согласились с таким исправлением, так как по сути владельцам поддоменов webex.com, среди которых корпоративные клиенты, оставлена возможность выполнения любого кода на стороне системы пользователя и возникают вопросы о возможности осуществления XSS-атак.
|