Техподдержка уязвимостей: CMS. Часть 1



    1С-Битрикс — одна их самых популярных систем CMS. Включает в себя много интересных решений, начиная от сайта визитки, заканчивая высоконагруженными системами. Мы часто встречаем во время пентестов данный продукт и отмечаем, что большинство обнаруживаемых проблем безопасности можно увидеть в самописных модулях, а не в самом ядре Битрикса. Однажды, анализируя защищенность одной системы, построенной на основе коробочного решения, мы задетектили ряд любопытных уязвимостей. Жаль, но про все рассказывать нельзя, а вот про удаленное выполнение кода и повышение привилегий на сервере — уже можно.

    Кстати, разработчики RCE исправлять отказались.

    Вредоносный кот


    Если вы знакомы с интеграцией Битрикса и 1С Бухгалтерией, то наверняка встречали скрипт под названием “1c_bx_import.php”. Если коротко: это отладочный скрипт для диагностики, подробнее с его возможностями можно ознакомиться по ссылке от разработчиков. Помимо ряда специфичных действий, он реализует возможность скачивать и загружать файлы на сервер, распаковывать архивы, удалять произвольные файлы.

    Ситуация с данным скриптом неоднозначная: со слов разработчиков, он не является официальной частью CMS, однако расположен на ресурсах компании и иногда используется технической поддержкой для решения проблем клиентов. В конечном счете это означает, что его вполне можно встретить на различных ресурсах, порой прямо в корне сайта. Разработчик честно указал, что пользоваться данным изделием следует только на свой страх и риск, но юзеры наверняка считают, что все безопасно и хорошо, ведь в скрипте присутствует аутентификация и авторизация. К сожалению, это не совсем так.

    Давайте посмотрим, как в скрипте реализована аутентификация:

    if ((@$_REQUEST['mode']!='query' &&  @$_REQUEST['mode']!='exchange')) 
    define('NEED_AUTH',true);
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

    Скорее всего, изначально задумывалось, что если в URI параметр “mode” равен “query” или “exchange”, то пользователю отдается форма логина, и работа скрипта завершается. Однако, если присмотреться внимательно, то можно заметить, что в логические операторы вкралась ошибка. Получилось ровным счетом наоборот: аутентификация будет запрошена только если “mode” не равен «query» или «exchange»!

    Теперь проверим, что в скрипте с авторизацией. Разработчик предполагал, что скрипт должен выполняться только у администраторов:

    
    if ((!$USER->IsAdmin())&&(@($_GET['mode']!='query'))) 
    {
    	echo 'Доступ запрещён. Вы не администратор сайта. До свидания.';
    	localredirect("/404.php");
    }
    

    Если не будут выполнены оба условия, выполнение скрипта закончится. Давайте посмотрим еще раз внимательно:

    Если пользователь не администратор, и если mode не равен query, то вывести «Доступ запрещен».

    Получается, можно не быть администратором, первое условие не будет истинным, в секцию «Доступ запрещен» мы не попадаем, а скрипт успешно продолжит работу. Выходит, что если анонимный пользователь укажет в качестве параметра «mode» значение «query», ему станут доступны все действия внутри скрипта (за выбор типа функции отвечает параметр «action»). Учитывая, что функциональность файла позволяет скачивать файлы с сервера и загружать их в произвольную директорию, публичный доступ к данному скрипту является весьма большой угрозой для безопасности.

    Полный список команд, доступных для выполнения:

    • createfile — создание файла с текстом “success” по заданному пути
    • setsession — добавление произвольной Cookie в текущую сессию пользователя
    • createiblocktypeform — создание типа инфоблока
    • download — скачивание произвольного файла с сервера
    • xmlgetinfo — скачивание произвольного файла с сервера
    • deletefile — удаление произвольного файла с сервера
    • getfile — получение списка файлов на сервере
    • unzip — распаковка архива
    • upload — загрузка файла в произвольную директорию
    • search — поиск файла на сервере
    • show_bxmltree — вывод структуры директории в виде xml-файла

    Вот, например, запрос, позволяющий скачать конфигурационный файл, содержащий учетную запись для доступа к базе данных:



    А таким запросом злоумышленник может получить листинг файлов на сервере:



    Можно, наконец, и произвольный код загрузить:



    Про уязвимость мы сообщили как клиенту, так и разработчикам CMS. К сожалению, разработчики Битрикса исправлять ошибку отказались, поскольку данный скрипт не является официальным компонентом CMS, как уже было отмечено выше.

    Локальное повышение привилегий


    Разработчики 1C-Битрикс Веб-кластера допустили ошибку, которая позволяет получить привилегии суперпользователя (root) на всех серверах кластера, обладая доступом к системному пользователю bitrix на одном из серверов кластера.

    В 1C-Битрикс Веб-кластер используется система управления серверами Ansible, аутентификация между серверами осуществляется посредством SSH-ключей. Доступ к файлам ключей есть только у суперпользователя. Для того, чтобы Ansible мог прочитать ключи и выполнять команды на удаленных серверах, применяется утилита sudo, повышающая привилегии до пользователя root.

    Установщик кластерной системы добавляет следующую строку в файл конфигурации команды sudo /etc/sudoers:

    bitrix ALL=NOPASSWD: /usr/bin/ansible * -m setup

    Вместо символа звездочки скрипты системы подставляют имя сервера в кластере.

    Утилита sudo ищет вхождения подстроки в строку, а не разделяет аргументы, как это было бы в случае системных команд класса execv. Символ звездочки в строке выше позволяет вставить произвольное количество символов, которые будут разделены на отдельные аргументы. Поэтому повысить свои привилегии можно легко одной командой:

    $ sudo /usr/bin/ansible 127.0.0.1 -m shell -a 'whoami; echo -m setup'
    
    127.0.0.1 | success | rc=0 »
    root
    -m setup
    
    bitrix@test: ~
    

    Для самого sudo аргументы выглядят следующим образом:

    ["sudo", "/usr/bin/ansible", "127.0.0.1", "-m", "shell", "-a", "whoami; echo -m setup"]

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

    Вывод


    Что мы получаем в итоге? Уязвимости достаточно просты и не требуют специфических условий для эксплуатации.

    Перечислим наши действия при поиске возможностей для получения контроля над тестируемым сайтом:

    1. Определяем хост, запускаем процедуру подбора файлов и директорий (dirbuster).
    2. Встретился “bx_1c_import.php”. Скачиваем исходники с сайта разработчика для анализа.
    3. Найдена возможность скачивать произвольные файлы с сервера.
    4. Первостепенно скачиваем конфигурационный файл для доступа к БД — dbcon.php. Увы, MySQL ждет подключений только с “localhost”. Анализируем исходники дальше.
    5. Найдена возможность загружать собственный код. Получаем бэкконнект на наш сервер, однако, текущий пользователь, под которым запущен веб-сервер и от имени которого мы работаем, имеет ограниченный набор прав.
    6. В результате анализа тестируемого хоста становится ясно – это целый кластер. Да и не стали бы делать интеграцию с 1С у сайта-визитки.
    7. Изучаем возможность взаимодействия с “Ansible”.
    8. Повышаем привилегии до root уже на всем кластере.
    9. Ищем новые уязвимости.

    Digital Security

    124,00

    Безопасность как искусство

    Поделиться публикацией

    Похожие публикации

    Комментарии 28
    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        Соглашусь с Alex77761, Битрикс местами конечно еще то полено, но на данный момент я не вижу ни одного достойного аналога под ИМ. Хотя цена за лицензию кусается неплохо…
          0
          Простите, а как же какой-нибудь Magento?

          А если нужно попроще, так по мне, даже Opencart куда более годная платформа для магазина чем Битрикс.
            0
            Простите, а как же какой-нибудь Magento?
            Магенто не отстегивает партнерам до 3/4 цены лицензии:)
              0
              Ну, 3/4 и битрикс не отстегивает.
                0
                imho для крупных партнеров у битрикса индивидуальные условия, которые разглашать нельзя, а может даже и отрицать надо:)
                Отвечать головой за 3/4 не будем, но при открытых данных о 50% для стандартных партнерах не видим ничего удивительного в 75%или больше на индивидуальных условиях.
                Благо это собственно самый сильный продажный инструмент битрикса, из-за которого с защищающими его адептами даже спорить смысла нет, ввиду того что им за это платят, а их оппонентам нет:)
                  0
                  Да понятно, пусть даже 70% от 15900 (самая ходовая редакция Стандарт) или 35900 (редакция Малый бизнес, т.е. обычный интернет-магазин), из которых для крупных партнёров как минимум половину заберёт государство в виде прямых и косвенных налогов, — эти безумные суммы, конечно, решают.
                  Да, есть редакция энтерпрайз с пятизначным ценником, но это действительно единичные внедрения, и там общая стоимость владения сайтом легко за 7 знаков переваливает. В любом случае, это истории про крупный бизнес, который готов платить вендорам за расширенную поддержку mission-critical систем.
              +1
              В наших реалиях ИМ предполагает не только витрину и корзину, но также платежный модуль какого-нибудь «газмясбанка», расчет доставки службой «копытаэкспресс» и да, интеграцию с 1С в конфигурации «Петрович и его велосипедисты». Когда это будет «искаропки» в «других» CMS, причем с поддержкой и обновлениями, а не заброшенный драфт-проект на гитхабе, тогда можно будет о чем-то разговаривать.
              И все равно, потом депутаты выпустят очередной закон про какие-нибудь «онлайн-че-то-там» со сроком исполнения «вчера», и начинай сначала.
                0
                Этого нет и в битриксе.
                Никакой мифической лучшей чем в любой другой CMS связи с 1с там нет.
                Платёжные модули для наших банков и агригаторов есть для всех распространённых платформ, а если экзотика и нет готового, это надо дописывать, что для Битрикса, что для чего-то другого и для другого будет с огромной вероятностью дешевле и проще, кстати.
                  0
                  Из коробки даже битрикс этого не делает. Битрикс из коробки с 1С синхронизируется только если сам 1С из коробки без конфигураций. Платежные системы надо допиливать, да практически все допиливать надо. Модуль каталога в последней реализации наикривейший. Так что смысл существования битрикса я вообще не понимаю
                    0
                    Не спорю, что в битриксе много чего нужно допиливать, но вот конкретно для интернет-магазинов допиливать нужно в разы меньше, чем для любой другой известной мне CMS. Как ни крути, а модули под Битрикс есть почти для всего — банков, служб доставки, CRM, бухгалтерского софта и прочая, прочая. И они, в целом, работают. Просто потому, что их не просто для галочки выпустили, а ими пользуются на реальных проектах.
                    Интересно, чем вам модуль каталога не угодил? Он вполне сносно работает это раз, в том числе наконец-то! нормальные фасетные индексы. И он не завязан на интернет-магазин это два. Т.е. вы вообще можете снести модуль каталога, если он вам так не нравится, и иметь абсолютно рабочий интернет-магазин вокруг своего велосипеда (например, если вы собираете оплату за услуги типа ЖКХ)
                      0
                      Лично я года 3 уже не прикасаюсь как к битриксу, так и к коробочным системам. И бесконечно рад этому, и сейчас я понимаю что одну и ту же выборку на yii я делаю гораздо быстрее чем на битриксе, при этом код изящней, и работает лучше, хотя года 4 назад я бил себя пяткой в грудь и говорил что лучше чем битрикс ничего нет.

                      По поводу каталога, коллега с работы буквально несколько дней назад возился с ним, оказывается при ajax добавлении в корзину криво создается json, который на отрез отказывается парситься на ios устройствах
                        0
                        Т.е. D7 вы не видели, но выборку делаете гораздо быстрее (кстати и в старом апи, если его таки выучить, а не заниматься stack overflow программированием, любая выборка пишется 15 секунд).
                        А ещё вам друг сказал, что в Safari/iOS, оказывается, бывают баги.
                        Ну ок, ок, спасибо что поделились своим объективным и обоснованным мнением.
                          –1
                          Конечно, ведь там, небось, нормально под конкретную задачу спроектированная база, нет ничего лишнего в структуре хранения и получаются вполне хорошие и эффективные запросы-то.
                            0
                            Вы смотрели запросы к бд которые выполняются в битриксе? 2 или 3 раза джойнить одну и ту же таблицу. Джойнить таблицы, которые в принципе не используются. Вставлять кучу js кода + миллионы счетчиков и в итоге страница рендиться больше 1 сек.
                        0
                        -= смысл существования битрикса =
                        а чем(?) вы предложите торговать? конечно со смыслом.
                          0
                          смысл существования

                          Постараются и *окучат всю бюджетку* Школы, садики, представительства администраций, интернаты, поликлиники, мини отели…
                  0
                  Если Битрикс франкинштейн, то что вы считаете «Современными CMS»?
                    –1
                    Например MODx. Как минимум в плане удобства администрирование контента он уделывает Битрикс, что называется, по всем статьям.
                    –2
                    Холивар-холиваром по поводу называть Битрикс CMS или нет. Но заголовок в корне неудачен. Сколько человеко-часов уже потеряно на изучение данной статьи, хотя бы по диагонали и понимание что тут не то, что ожидается?
                      0
                      А тем временем, ссылка на сайт разработчиков в статусе 404
                      +2

                      Добрый вечер!


                      Во-первых. Скрипт, о котором идет речь в публикации  — специализированный код. Он был написан техподдержкой «1С-Битрикс» для быстрой диагностики проблем. А точнее — вопросов по работе с «1C». Скрипт эмулирует работу «1С» и отправляет диагностические данные в техподдержку. Фактически — это утилита. По инструкции скрипт УДАЛЯЕТСЯ после использования.


                      Во-вторых. Ссылка в публикации вела на пост от 24 октября 2010 года. Скрипт не используется в системе «1С-Битрикс» уже несколько лет.


                      Команда «1С-Битрикс» благодарит авторов статьи за трудную работу в архивах. К сожалению, текст не имеет отношения к текущей реальности.


                      Все написанное выше — официальная позиция компании «1С-Битрикс». Спасибо.

                        0
                        -=текст не имеет отношения к текущей реальности=-
                        а в этой реальности
                        когда будет выходить документация одновременно с обновлениями модулей?
                        –1
                        Я конечно понимаю что хейтить битрикс это модно. Но во-первых шанс встретить сейчас на современном сайте данный скрипт практически равен нулю и намного меньше чем других скриптов забытых разработчиками и позволяющих начать планировать атаку на ресурс. Так что правило простое, в продакшене удалять все служебные скрипты. Во-вторых обмен давно уже много раз переделан. Он уже не такой кривой как 7 лет назад, потребность в скрипте в настоящее время отсутствует, более того судя по комментам в актуальной версии битрикса и модуля обмена он не работает.
                          +2
                          Не то, что это модно — это просто.
                          Продукт технически отвратительный, всегда можно найти к чему придраться, зато пиара масса. Только ленивый не пнёт несчастных бракоделов, которые так громко расхваливают своё поделие.
                          Кто-то просто из желания потролить, а кто-то от того, что читать дифирамбы откровенно слабому продукту уже мочи нет.

                          По поводу обсуждаемого в статье: вытащить на свет какую-нибудь серьёзную уязвимость, которую можно массово эксплуатировать прямо сейчас, было бы очень не красиво по отношению к пользователям продукта. А показать как бывает не хорошо всё, стоило. Имхо, всё очень правильно сделано автором.
                          –3
                          Как всё запущено, в системе SLAED CMS проблема с безопасностью была решена изначально, со дня выхода первой версии системы в 2005 года.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое