
На прошлой неделе разработчики клиента для веб-конференций Zoom закрыли серьезную уязвимость, которая при некоторых обстоятельствах могла приводить к выполнению произвольного кода. Уязвимость получила идентификатор
Исследователь Иван Фратрич (Ivan Fratric) по сути смог построить атаку на далеко не самой очевидной основе. Для пересылки сообщений в Zoom используется собственная реализация открытого протокола XMPP. Проблема заключалась в том, что код, отвечающий за разбор содержимого сообщений в формате XML, различается на сервере и на клиенте. Минимальные различия в парсинге удалось превратить в полноценную атаку, которая при этом не требует никаких действий от жертвы, если передача сообщений от атакующего в принципе разрешена.
Исследователь назвал свою атаку XMPP Stanza Smuggling. Stanza или «строфы» — это стандартные элементы в формате XML, пересылаемые от отправителя на сервер и далее к получателю. Фратрич нашел способ протаскивания незаконных строф контрабандой в теле сообщения. Причина была в том, что на сервере Zoom (по предположению исследователя) используется модифицированное открытое ПО ejabberd. Для парсинга XML в нем применяется библиотека fast_xml, в которой, в свою очередь, использован код парсера Expat. На клиенте для того же самого используется библиотека Gloox. Как оказалось, библиотека Expat не проверяет пару символов, если использовать идентификатор трехбайтовой кодировки UTF. Gloox, в свою очередь, игнорирует идентификатор, проверяет ввод посимвольно, а значит, в ту самую пару символов можно протащить троянского коня.
Дальше эксперт строил цепь атаки, и оказалось, что его возможности тут достаточно велики — он ведь способен передавать без проверки на сервере служебные сообщения. Можно, например, изменить домен, на который пользователь направляется, когда он хочет приложить файл из облачного сервиса. Но в этом же наборе функций была найдена возможность изменить адреса серверов Zoom. После подмены доменного имени не обязательно пытаться имитировать работу настоящего сервера Zoom, достаточно пересылать сообщения между клиентом и сервером. А в нужный момент, когда клиент в очередной раз пойдет проверять наличие обновлений, подсунуть ему вредоносный исполняемый файл.
Помимо этой проблемы, Фратрич нашел еще пару уязвимостей в механизме парсинга XML. Хотя проблема в обработке входящих данных технически была на сервере, Zoom, судя по всему, в первую очередь пропатчил клиент, заблокировав возможность подмены сервера, то есть исключил атаку типа Man-in-the-Middle. Помимо этого, информация об ошибке парсинга была отправлена разработчикам библиотеки Expat.
Что еще произошло:
Компания Microsoft
Издание ArsTechnica