Уязвимости и бэкдоры в телефонах Grandstream

    Хочу поделиться парой серьёзных уязвимостей, найденных мною в телефонных аппаратах Grandstream.

    1. Загрузка произвольного конфига в телефон

    Изучая веб интерфейс цветных телефонов gxp21xx для изучения их api, наткнулся на скрипт загрузки конфига в телефон, это скрипт /cgi-bin/upload_cfg

    В отличии от других скриптов, этому скрипту не передаётся sessionid, а передаётся только файл. Быстрая проверка через curl показала, что и вправду, воспользоваться этим скриптом можно без авторизации:

    curl -i -F name="config.txt" -F file="@config.txt;type=text/plain" -H "Content-Disposition: form-data; name=file; filename=config.txt" http://xx.xx.xx.xx/cgi-bin/upload_cfg
    

    Файл config.txt представляет из себя тектовый файл с набором параметров вида: Рхххх=уууу
    Заливая файл с одной строчкой «P2=admin», мы меняем админский пароль на телефоне, после чего можем залогиниться в веб интерфейс.

    В телефоне присутствуют аналогичные скрипты для загрузки воллпейпера, телефонной книги и т.д.

    Данная узязвимость присутствует в телефонах gxp2130, gxp2140 и gxp2160

    2. Дамп конфига телефона

    Следующая уязвимость ещё страшнее первой. Была уже обнаружена после получения рутового доступа к телефону и анализа скриптов в cgi-bin.

    Это скрипт /cgi-bin/dumpsettings, вот его содержимое:

    #!/usr/bin/haserl
    #!/bin/ash
    <?
    
    RESULT=`nvram show | grep -v :STR`
    
    HEADER="Content-Type: text/plain\r\n\r\n"
    HEADER="Expires: $(date)\r\n$HEADER"
    HEADER="Content-disposition: attachment; filename=settings.cfg\r\n$HEADER"
    HEADER="Cache-Control: no-cache, must-revalidate\r\n$HEADER"
    
    echo -en $HEADER
    echo "$RESULT"
    
    ?>

    Как видно этот чудо скрипт просто отправляет вывод команды nvram show | grep -v :STR без какого либо намёка на авторизацию. А в nvram содержится много интересных параметров, помимо самого конфига. Ну и конечно там все пароли в открытом виде: админский и сип аккаунты.

    Эта уязвимость в большинстве устройств grandstream (а может и во всех), включая шлюзы.

    3. Шифрованные конфига

    Помимо xml конфигов, при провижинге телефон может использовать зашифрованный тектовый конфиг. Утилиту для создания такого конфига можно скачать на сайте грандстрима. Первое что настораживает, при использовании этой утилиты, что она не просит никакой пароль для шифрования. На телефоне для расшифровки конфига используется утилита prov_config_dec, которой для дешифровки нужен только мак. Таким образом, расшифровать конфиг нет никакой проблемы. А некоторые voip провайдеры, уверены в надёжности шифрования и выкладывают такие конфиги в открытый доступ (для провижининга телефонов своих клиентов). Простым перебором мак адресов, у одного из американских voip провайдеров удалось скачать порядка пятисот конфигов с сип учётками внутри.

    4. Бэкдор от грандстрима

    Решил за одно поискать и бэкдоры в прошивке. Реверс-инжиниринг банарника dropbear показал, что залогиниться по ssh можно не только под юзером admin, но и под юзером root, используюя ключик. Паблик кей заботливо лежит в прошивке по пути /rom/.ssh/authorized_keys

    Так что владельцы приватного ключа, могут спокойно залогиниться по ssh. А получив рутовый доступ на телефон, можно например прослушивать разговоры, или даже просто слушать, что происходит вокруг телефона, даже вне разговора.

    Данным узязвимостям можно найти не одно применение, это может быть:
    • Банальное воровство сип учёток
    • Подмена имени звонящего через телефонную книгу
    • Подмена сип сервера с целью перехвата траффика и прослушки
    • Загрузка вредоносного софта в систему телефона, например для записи с микрофона или для произведения каких либо атак

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

    Ну и если не хотите дожидаться новой прошивки с закрытыми уязвимостями (саппорт у грандстрима какой-то очень тугой), то можно самому выпилить уязвимые скрипты из прошивки, как это описано здесь.
    Поделиться публикацией
    Комментарии 28
      +3
      Не факт что вообще будет новая прошивка с закрытыми уязвимостями.
        0
        3. Шифрованные конфиги

        Так я и не понял в чём прикол этого шифрования. На TFTP лежат конфиги для железок, железка запрашивает файл вида VENDOR_MAC.bin и получив его расшифровывает с использованием ключа MAC. Какой смысл шифровать конфиг, если ключ содержится в имени файла?
          0
          Видимо надежда на то, что злоумышленник не будет знать алгоритм шифрования :) Сейчас есть другой вариант шифрования, шифруются xml файлы aes'ом по заданному паролю, но чтобы телефон понял этот конфиг, необходимо заранее прописывать руками пароль в аппарате.
            0
            Так обычно производитель выкладывает утилиты для шифрования\дешифрования конфигов, дабы можно было себе провижионинг настроить. Мне казалось что основная фишка провижионинга в том, что техник, который будет устанавливать железу в ней разбирается не больше уровня знания того, в какой разъём какой провод воткнуть, а железка уже сама настраивается.

            Если у железки есть клавиатура и дисплей, то ввод пароля вполне тривиальная процедура, но как защитить устройства, которых их не имеют? Роутеры, VoIP шлюзы и другие железки, у которых из интерфейсов ввода только кнопка Reset.
          0
          А как вы получили обычный шелл на телефоне?
          У меня только родная оболочка, если заходить под юзером admin:

          admin@XXX.XXX.XXX.XXX's password:
          Grandstream GXP1160 Command Shell Copyright 2011
            0
            Читайте мою предыдущую статью. habrahabr.ru/post/249855/
            Если вкратце, то наберите команду gssu, кейген по ссылке выше
              0
              Почти сразу же нашёл, спасибо, всё работает )
            +1
            Вы не думали на какой-нибудь большой security-конференции (DEFCON, BlackHat, GrrCON, ACM-CCS, IEEE Security & Privacy) выступить? Материала у вас уже куча, причем на самом деле весьма серьезного.
              0
              Телефон Grandstream GXP2124
              Просто открыл браузер, ввел в адресную строку:
              xxx.xxx.xxx.xxx/cgi-bin/dumpsettings

              И браузер предложил сохранить файл конфига… не зашифрованный…
                0
                Ага, так и есть, и пароля не спросил :)
                  0
                  GXP1400 — та же песня… Все читаемо)
                    0
                    Ну так в статье же я написал, что этой уязвимости подвергнуты почти все устройства от грандстрима
                  +1
                  Интересно, а можно слушать разговоры внутри комнаты, где стоит аппарат перекинув /dev/voice0 через nc в свой /dev/dsp?
                  Имеется в виду даже без звонка, а просто, что в комнате происходит.
                    +1
                    Grandstream извещен об этих проблемах и работает над их исправлением.
                    К сожалению, я пропустил вашу первую статью…

                    Даже не знаю, могу ли я попросить убрать описание дыр до момента их исправления???
                      0
                      А можем мы просить убрать бекдор для владельцев приватного ключика из /rom/.ssh/authorized_keys?
                        0
                        Я же написал что мы в процессе.
                        Реально я понимаю что нашли дыры и это хорошо. Но дыры выложены с конкретными инструкциями — это может стать проблемой…

                        Я же не требую убрать пост, я спросил можно ли :)
                      +2
                      Итак, я рад сообщить, что Grandstream выпустил фиксы на указанные проблемы!!!

                      Фиксы решают 1,2 и 4 уязвимости на телефонах GXP2130/40/60 и GXP110x/116x/14xx/21xx. Скачать обновленные прошивки можно на сайте, с пометкой BETA!!! www.grandstream.com/support/firmware

                      Либо, можно автоматически обновить телефон по HTTP по ссылке firmware.grandstream.com/BETA, чего я не рекомендую, так как при нестабильном Интернет соединение могут быть проблемы )))

                      Что же касается третьей уязвимости с шифрованием конфига, то эта проблема известна и она была решена переходом на использование XML конфига. На данный момент Grandstream поддерживает провижининг текстовым файлом для старых операторов, которые еще не мигрировали на XML. Работа с ними так же ведется )))
                        0
                        Большое спасибо за фикс. Про шифрованный конфиг, я указывал скорее на уязвимости у операторов, которые используют старый формат. Про шифрованный xml я тоже упомянул в статье.
                          0
                          Сейчас посмотрел апдейт внимательнее, файлик /.ssh/authorized_keys остался то на месте :)
                            0
                            Вам интересно пообщаться напрямую с саппортом по этому вопросу?
                            Мы можем все сделать более оперативно, если я не буду передаточным механизмом )))
                              0
                              Да, конечно.
                                +1
                                OK. Значит надо выполнить пару простых действий ))

                                Зарегистрироваться здесь helpdesk.grandstream.com/
                                Открыть тикет и скинуть мне его номер, я пропедалирую разработчиков.

                                После хеппиэнда вышлю какой-нибудь видеотелефон в подарок ;)
                                  0
                                  Держите 20150223043845
                                    +1
                                    В итоге Грандстрим заявил что это не бекдор, а «механизм траблшутинга» :))) Другого ответа я не ожидал. Так что всем рекомендую зарывать ssh
                                      0
                                      Да, к сожалению признаю этот факт… Вынесу в открытый доступ полный ответ саппорта :)

                                      Actually the mechanism you described is not a backdoor, but a troubleshooting mechanism. To perform it you will need both the device's Admin password (given by the user) and Grandstream's private Key (known by Grandstream developers). Without the consent of the user the mechanism will not be possible. So only Grandstream will be able to access the device (with the authorization of the user) in the case where Grandstream assistance is needed to troubleshoot a particular problem.

                                      Разработчики пообещали, что в будущем добавят возможность отключения данного «траблшутинг механизма» :) в прошивку.
                                        0
                                        С каких пор для авторизации по ключу нужен еще и пароль?.. То ли нас обманывают, то ли они сами не понимают как эта «траблшутинг механизма» работает.
                            0
                            Нестабильный интернет не должен вызывать проблемы — обычно firmware скачивается на локальный storage и только после этого начинается прошивка. Во всяком случае именно так все происходит в устройствах, под которые разрабатываем мы, и все конкуренты, которых я наблюдал — такое же поведение.

                            Проблемы могут быть, если внезапно в процессе прошивки вырубится питание/пользователь нажмет что-то и прервер процедуру.
                              0
                              Ну…

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

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

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