В своей работе по обеспечению ИБ сайтов, мы исследуем проблемы безопасности популярных в России систем управления веб-проектами. CMS 1С-Битрикс – является лидером в этой области, поэтому этой системе уделяется повышенное внимание.
Для актуального на сегодня исследования безопасности, была выбрана демо версия интернет-магазина, работающего на CMS 1С-Битрикс.
Исследование проводилось в виртуальной лаборатории 1С-Битрикс, предназначенной для онлайн тестирования функционала платформы.
Адрес лаборатории «1С-Битрикс: Управление сайтом»: http://bitrixlabs.ru. Не внося никаких изменений в процесс инсталляции, был «развернут» демо интернет-магазин, работающий под управлением 1С-Битрикс: Управление сайтом 16.5.4 по адресу:
http://1071lab.bitrixlabs.ru/
Первым делом, было принято решение обновить решения до последней версии. После установки обновления (1С-Битрикс Решение «Современный интернет-магазин» версии 16.5.3), было начато исследование безопасности предложенного сайта.
Безопасность публичной части сайта «коробки» не вызывала нареканий и ранее, поэтому основное внимание было уделено административному разделу исследуемого сайта.
Множественные XSS
Наибольшее количество уязвимостей кода, позволяющих эксплуатацию непостоянных XSS атак были обнаружены в разделе «Дополнительные поля» административного раздела сайта:
Рабочий стол → Настройки → Пользователи → Список пользователей → Дополнительные поля → Настройки поля
Адрес:
http://1071lab.bitrixlabs.ru/bitrix/admin/userfield_edit.php
В этом разделе, система предлагает создавать пользовательские поля для следующих типов данных: «Видео», «Привязка к элементам highload-блоков», «Строка», «Целое число», «Число», «Дата со временем», «Дата», «Да/Нет», «Файл», «Список», «Привязка к разделам инф. блоков», «Привязка к элементам инф. блоков», «Шаблон», «Опрос», «Содержимое ссылки».
Уязвимыми для XSS атак обнаружены поля формы для создания типов данных «Видео» и «Список».
Форма:
<form method="POST" action="/bitrix/admin/userfield_edit.php?lang=ru" enctype="multipart/form-data" name="post_form">
Уязвимые поля для типа данных «Видео»
Поле input, вариант проверки возможности эксплуатации XSS:
"><script>alert(document.cookie)</script>
N | Название поля | name |
1 | Размер буфера в секундах | SETTINGS[BUFFER_LENGTH] |
2 | Уровень громкости в процентах от максимального: | SETTINGS[VOLUME] |
3 | Размеры (Ш х В, px) | SETTINGS[WIDTH] |
4 | Размеры (Ш х В, px) | SETTINGS[HEIGHT] |
5 | Цвет фона панели управления: | SETTINGS[BGCOLOR] |
6 | Цвет элементов управления | SETTINGS[COLOR] |
7 | Цвет эл. управления при наведении указателя мыши: | SETTINGS[OVER_COLOR] |
8 | Цвет экрана: | SETTINGS[SCREEN_COLOR] |
9 | id="bx_player_skin_input" (скрытое поле) | SETTINGS[SKIN] |
Поле textarea, вариант проверки возможности эксплуатации XSS:
</textarea><script>alert(document.cookie)</script>
10 | Дополнительные переменные | SETTINGS[FLASHVARS] |
11 | Дополнительные переменные Silverlight: | SETTINGS[SILVERVARS] |
Уязвимое поле для типа данных «Список»
Поле input, вариант проверки возможности эксплуатации XSS:
"><script>alert(document.cookie)</script>
12 | Подпись при отсутствии значения: | SETTINGS[CAPTION_NO_VALUE] |
На действия администраторов сайта (входящих в группу «Администраторы [1]») фильтр проактивной защиты Битрикс не распространяется, поэтому эксплуатация XSS атаки возможна без каких-либо ограничений.
Предполагая вопрос по поводу получения данных «защищенной» http-only cookie PHPSESSID: данные этой cookie не требуется для успешной эксплуатации атаки. Приведенный ниже пример успешной эксплуатации связки XSS + CSRF на «1С-Битрикс: Управление сайтом» подтверждает факт того, что использование http-only cookie нельзя рассматривать как полноценную защиту от XSS атак.
Эксплуатация CSRF атаки.
В процессе проведенного исследования, мы обратили внимание на возможность получения CSRF токенов, в разделе настроек пользователей (в т.ч. администраторов) системы:
Административный раздел сайта:
Рабочий стол → Настройки → Пользователи → Список пользователей
Адрес сайта: (на момент тестирования) http://1071lab.bitrixlabs.ru/bitrix/admin/user_edit.php?lang=ru&ID=1. К примеру, в случае смены пароля, или каких иных учетных данных администратора, данные отправляются на обработчик следующим образом:
POST /bitrix/admin/user_edit.php?ID=1&lang=ru HTTP/1.1
Host: 1071lab.bitrixlabs.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://1071lab.bitrixlabs.ru/bitrix/admin/user_edit.php?lang=ru&ID=1
Cookie: PHPSESSID=fdtc1nha7vd6fsgq9spuih3na0; BITRIX_SM_SOUND_LOGIN_PLAYED=Y; BITRIX_SM_GUEST_ID=1; BITRIX_SM_LAST_VISIT=13.01.2017+08%3A14%3A53; BITRIX_SM_SALE_UID=a44218257184b130c660695f7132ea02; BITRIX_CONVERSION_CONTEXT_s1=%7B%22ID%22%3Anull%2C%22EXPIRE%22%3A1484351940%2C%22UNIQUE%22%3A%5B%22sale_payment_add_day%22%5D%7D
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------81949277201
Content-Length: 9588
-----------------------------81949277201
Content-Disposition: form-data; name="autosave_id"
20247bf0249c12c0e2f15effa95c29d52
-----------------------------81949277201
Content-Disposition: form-data; name="TITLE"
-----------------------------81949277201
Content-Disposition: form-data; name="NAME"
Bitrix
-----------------------------81949277201
Content-Disposition: form-data; name="LAST_NAME"
Team
-----------------------------81949277201
Content-Disposition: form-data; name="SECOND_NAME"
-----------------------------81949277201
Content-Disposition: form-data; name="EMAIL"
admin@insafety.org
-----------------------------81949277201
Content-Disposition: form-data; name="LOGIN"
admin
-----------------------------81949277201
Content-Disposition: form-data; name="NEW_PASSWORD"
admin12345
-----------------------------81949277201
Content-Disposition: form-data; name="NEW_PASSWORD_CONFIRM"
admin12345
-----------------------------81949277201
Content-Disposition: form-data; name="XML_ID"
--- Множество различных данных ---
-----------------------------81949277201
Content-Disposition: form-data; name="sessid"
aa4c42ead8583afbd067d0409d1b25b0
Единственными валидируемыми данными (полагаю, что это и есть CSRF токены) для этого запроса являются:
«autosave_id» и «sessid», которые элементарно получить с помощью JS:
В качестве примера, можно привести «тестирование» на XSS, вышеописанных полей.
"><script>alert(phpVars['bitrix_sessid'])</script>
"><script>alert(document.getElementsByName('autosave_id')[0].value)</script>
Для того, чтобы взломать сайт на CMS 1С-Битрикс, эксплуатируя XSS+CSRF, достаточно сделать вектором атаки запрос, который, к примеру, изменит учетные данные доступа администратора сайта, или добавит нового, созданного атакующим.
Для подтверждения вышеописанного способа атаки на сайт, мы создали «боевой» JS скрипт, эксплуатирующий недостатки в разработке системы, и протестировали его работоспособность атаки на практике, в виртуальной лаборатории 1С-Битрикс.
Скрипт успешно «отработал», поставленную перед ним задачу. Итогом работы стала смена имя пользователя, пароля и почты администратора сайта. Авторизация в административной части «нового» администратора прошла успешно.
Вектором атаки является обычный POST XMLHttpRequest к /bitrix/admin/user_edit.php.
По понятным причинам, POC по эксплуатации вышеописанной техники атак на сайты, работающих под управлением «1С-Битрикс: Управление сайтом» в статье предоставлен не будет.
Вся информация по вышеописанной проблеме безопасности (включая вектор атаки) была передана в компанию Битрикс 19 сентября 2016 года. На 16 января 2016 года, уязвимости административного раздела CMS 1С-Битрикс версии 16.5.4 не устранены.
Дополнение:
На сегодняшний день, виртуальная лаборатория 1С-Битрикс предлагает к тестированию решения на CMS 1С-Битрикс 16.5.4. Ядро платформы в виртуальной лаборатории 1С-Битрикс, путем нехитрых манипуляций, можно обновить до версии 16.5.8.
В редакции 1С-Битрикс: Управление сайтом 16.5.8 вышеописанные XSS устранены, но проблемы безопасности, особенно в плане эксплуатации CSRF атаки, остались прежними. Проблемы с XSS также никуда не делись.
К примеру, эксплуатация вышеописанной угрозы возможна через уязвимые поля раздела: «Создать курс валют» → «Настройки курса» по адресу:
http://1071lab.bitrixlabs.ru/bitrix/admin/currency_rate_edit.php?lang=ru&filter=Y&set_filter=Y
Уязвимыми к XSS являются следующие поля формы:
<form method="POST" action="" name="rate_edit">
N | Название поля | name |
1 | Номинал | RATE_CNT |
2 | Курс | RATE |
Реализация самой атаки в реакции 1С-Битрикс: Управление сайтом 16.5.8 осталась прежней.
Видео по теме:
Видео лучше смотреть в «полный» экран.
Вопросы по конструкции XSS атаки
Способов эксплуатаций XSS атак множество. Техники их проведения и конструкции подробно описаны во множестве статей, которые легко найти в Сети.
Что касаемо предложенной атаки, то для ее успешной эксплуатации придется решить один вопрос с токеном sessid, защищающего форму. Этот вопрос решаем.
В качестве примера, для версий платформы, предлагаемых в виртуальной лаборатории 1С-Битрикс, это значение можно получить запросом: http://1028lab.bitrixlabs.ru/bitrix/components/bitrix/pull.request/ajax.php (1028lab.bitrixlabs.ru – новый адрес предоставленного к тестированию ресурса)
Ответ будет выглядеть следующим образом:
{'BITRIX_SESSID':'47f51fa0d098862e588033cdc8d39388','ERROR':'SESSION_ERROR'}
Существуют и иные способы получения этого токена. Все зависит от конкретного ресурса, сервера, его настроек и т.п.
Предвосхищая вопросы по CORS 'Access-Control-Allow-Origin' или Сross-Origin Framing – в этой статье, как и в комментариях, эти вопросы обсуждаться не будут, как и дальнейшее обсуждение конструкции полноценной атаки.
Основной целью этой статьи является обеспечение безопасности сайтам на платформе 1C-Битрикс, а не создание полноценной инструкции по их взлому.
К сожалению, вышеописанные уязвимости платформы, успешно эксплуатируются хакерами.
Начиная с осени прошлого года, в нашу компанию inSafety, стали поступать обращения клиентов с проблемой взломов их сайтов.
Разбирая инциденты, мы обнаружили вышеописанные проблемы безопасности платформы 1С-Битрикс.
Защита от вышеописанной XSS + CSRF атаки
Компания Битрикс не приветствует модификацию системных файлов платформы, поэтому единственным вариантом защиты, может стать ограничение доступа по IP к файлам, расположенным в директориях /bitrix/admin/.
Понимая, что такой «радикальный» способ защиты может быть применим далеко не ко всем сайтам, вторым вариантом можно рассмотреть ограничение доступа к /bitrix/admin/. путем установки дополнительной парольной пары по типу Basic Authentication
Заключение
Обнаруженная проблема – является максимальной угрозой для сайтов, созданных на платформе «1С-Битрикс: Управление сайтом».
Эксплуатация XSS атаки, в случае ее грамотного исполнения, гарантирует взлом практически любого сайта, работающего под управлением CMS 1С-Битрикс последних версий.
Эксплуатация XSS атаки в связке с CSRF позволяет:
— изменять любые учетные данные доступа пользователей сайта
— создавать новых пользователей сайта, с различными привилегиями
— изменять привилегии существующих пользователей сайта
В отдельных случаях, особенно для ресурсов с недостаточным уровнем защиты на уровне
сервера, возможна эксплуатация CSRF в чистом виде, без ХSS. Кроме того, вышеописанная атака делает обычную XSS (к примеру, в строке поиска, что часто встречается у сайтов на 1С-Битрикс) максимальной угрозой безопасности сайта.
Резюме
1. Не оставляйте открытым доступ к авторизации административного раздела сайта.
2. Обновляйте ядро платформы 1С-Битрикс, специалисты компании устраняют уязвимости по мере их обнаружения.
3. Хотя бы раз в год проводите аудит безопасности ваших интернет проектов, для предотвращения взлома и атак.
Разбираться с последствиями взлома всегда сложнее и затратнее, чем предупредить его.
Важно понимать, что эксперименты с безопасностью чужих сайтов, не говоря о эксплуатации атаки в криминальных целях, может повлечь уголовную ответственность. Вся информация по угрозе безопасности сайтов, в этом посте, предоставлена с целью повышения общего уровня ИБ конечных продуктов на платформе 1C-Битрикс.
Автор: inSafety