Как уже писал в апдейте к посту про баг в HNAP DIR-890L, его нашли в начале года, в DIR-645, и выпустили патч. Сейчас D-Link выпустил патч и для DIR-890L.
Патчи для DIR-645 и DIR-890L одинаковые, поэтому я буду писать только про DIR-890L.

Хоть в предыдущем посте я рассматривал только выполнение команд, патч указывает на несколько дыр в безопасности, которые появились из-за использования strstr для валидации HNAP-заголовка SOAPAction:
  • Использование неаутентифицированных пользовательских данных в вызове system
  • Использование неаутентифицированных пользовательских данных в вызове sprintf
  • Неаутентифицированные пользователи могут выполнять привилегированные HNAP-запросы (такие, как смена пароля администратора)

Видите, D-Link признала все это в информации об уязвимости, и они ясно представляли все векторы атаки.
Итак, убрали ли они переполнение стека sprintf?

image
sprintf(cmd_buf, “sh %s%s.sh > /dev/console”, “/var/run”, SOAPAction);

Нет.

Убрали ли они вызов system?
image
system(cmd_buf);

Конечно нет!

Используют ли они strcmp вместо strstr для валидации заголовка SOAPAction?
image
if(strstr(SOAPAction, “http://purenetworks.com/HNAP1/GetDeviceSettings”) != NULL)

Пфф, че заморачиваться-то?

Все их решение этих фундаментальных проблем сводится к использованию функции access для проверки того, что в SOAPAction допустимое, ожидаемое значение, путем проверки существования файла /etc/templates/hnap/<SOAPAction>.php:
image
Вызов sprintf(), затем сразу access()

Ага, это хотя бы защитит от внедрения произвольных данных в sprintf и system

Однако, они добавили еще один sprintf до access; их патч для закрытия неаутентифицированного переполнения стека в sprintf добавляет еще одно неаутентифицированное переполнение стека в sprintf.

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

Думаю, никому нет дела до того, что любой неаутентифицированный пользователь может получить информацию о хостах во внутренней сети, просматривать и изменять системные настройки или сбросить роутер на заводские настройки:
$ wget --header="SOAPAction: http://purenetworks.com/HNAP1/GetDeviceSettings/SetFactoryDefault" http://192.168.0.1/HNAP1

Оставайся таким же классным, D-Link.

UPD: D-Link выпустили обновление, закрывающее уязвимости

Комментарии (47)


  1. maisvendoo
    27.04.2015 20:09

    Можно оффтопный вопрос — какой отладчик изображен на скринах? А то, к стыду своему, не признаю этих окошек, но судя по шрифтам и именованию меток это встроенный в IDA Pro?


    1. rrock
      27.04.2015 20:13
      +3

      Это раскрытый элемент графа в IDA. Просто дизассемблер.


    1. ValdikSS Автор
      27.04.2015 20:13
      +7

      Это и есть IDA Pro, Graph View. Нажмите пробел или минус.


      1. maisvendoo
        27.04.2015 20:16
        +2

        Спасибо


  1. REZ1DENT3
    27.04.2015 22:24
    +3

    Круто…
    Сейчас буду тестить на соседях ;) У них как раз DIR-890L


  1. g1t5
    27.04.2015 22:30
    +1

    Патч над думать делал товарищ из АНБ.


    1. namespace
      28.04.2015 08:00
      +23

      Нет, в АНБ работают куда более квалифицированные спецы, их закладки обычно почти нереально находить, а тут какая-то параша просто.


      1. g1t5
        28.04.2015 11:11
        +13

        АНБ Junior :)


    1. INSTE
      28.04.2015 14:25

      Да просто костыли-костыльчики :)


  1. Disasm
    27.04.2015 22:32
    +12

    Надеюсь, хотя бы в OpenWRT такого нет.


    1. maisvendoo
      28.04.2015 11:15
      +4

      OpenWRT легко проверить, ибо код открыт. Кстати, хорошая тема для ребят, ведущих блог о PSV Studio


      1. Disasm
        28.04.2015 11:18

        Было бы кому проверять ещё. А PVS Studio вряд ли умеет искать закладки, подобные тем, что описаны в этой статье.


        1. maisvendoo
          28.04.2015 14:54

          Насколько я понял, уязвимости, описанные в статье возникают в том числе из-за небезопасного использования C-функций работы со строками. PVS Studio анализирует код на предмет таких проблем.

          P.S.: Почитав такую информацию, прихожу к выводу, что покупая роутер лучше брать модель допускающую перешивку открытым ПО… Что собственно и делаю


          1. Disasm
            28.04.2015 14:57

            Это да, но вызов функции system, в которую попадают данные от пользователя, он вряд ли найдёт. Тут уже taint-анализ нужен.


      1. INSTE
        28.04.2015 14:24
        +1

        А что там в OpenWRT проверять на PVS? Ядро там — ванильный Linux, морда на lua. Разве что UCI и procd.


  1. BalinTomsk
    28.04.2015 05:29
    -1

    ---Используют ли они strcmp вместо strstr для валидации заголовка SOAPAction?

    Как? Это перпедикулярные функции.


    1. AxisPod
      28.04.2015 06:13
      +2

      Не совсем конечно так, strcmp сравнивает строки, strstr ищет вхождение подстроки в строке. Но частично вы правы, функции не взаимозаменяемы.


  1. robux
    28.04.2015 11:11
    -9

    > Да какого, блин, хрена, D-Link?

    Сомневаюсь, что они не могут закрыть описанные уязвимости.
    Скорее всего — не хоят. Здесь правильно вспомнить Сноудена и то, о чём он говорил.

    D-Link — тайваньская корпорация, а Тайвань, как и Япония с Южной Кореей, всеми костьми лежит под США.
    Корпорациям так просто никто не позволит полностью закрыть все уязвимости.


    1. INSTE
      28.04.2015 14:23
      +6

      Все проще — им просто плевать (бах-бах и в продакшн в кристаллизованном виде).
      Китайцы пишут свои прошивки на «отвали»: запустилось и ладно.
      Чего стоит ситуация с китайским DIR825B1 на Atheros, в котором в самой новой прошивке падает ядро на более-менее сильном upload на L2TP.
      И самое главное — им почти бесполезно жаловаться и слать багрепорты: исправят только если придет приказ сверху, а просто так никто не будет работать.


  1. pcdesign
    28.04.2015 12:24
    +1

    А подскажите, пожалуйста, эта уязвимость реализуется только за натом из сети 192.168.х.х?
    Или можно к белому IP адресу роутера подключиться и эксплуатировать данную уязвимость?


    1. xBrowser
      28.04.2015 13:06

      В первом посте было сказано:

      Мы можем отправлять HNAP-запросы из WAN, если было включено удаленное администрирование.

      Следовательно уязвима только минимальная часть устройств. Либо беспарольные/взломанные через Wi-Fi.

      К слову, мне не удалось воспроизвести уязвимость через WAN, протестировав 2 сегмента сети. Не одного из 50 устройств, ответивших по 80/8080 порту.


      1. pcdesign
        28.04.2015 13:26
        +1

        Спасибо за инфу.


  1. umraf
    28.04.2015 12:55
    +2

    Интересно, у кого-нибудь получилось воспроизвести уязвимость? На каких железках?


    1. xBrowser
      28.04.2015 13:16
      +1

      До вышеупомянутого патча были уязвимы:

      Список устройств, подверженных риску
      DAP-1522 revB
      DAP-1650 revB
      DIR-880L
      DIR-865L
      DIR-860L revA
      DIR-860L revB
      DIR-815 revB
      DIR-300 revB
      DIR-600 revB
      DIR-645
      TEW-751DR
      TEW-733GR


      1. INSTE
        28.04.2015 14:21

        Подвержены уязвимости только с китайской прошивкой — с русской нет. Например те же самые 815 / 300 русские этому не подвержены.


      1. umraf
        28.04.2015 16:42

        Соседний пост и этот список видел. Видимо, вы неправильно поняли, интересует именно отзывы пользователей «больных» железок. Хм, или я вас неправильно понял, и у вас эти железки есть и они «больны»?


        1. xBrowser
          29.04.2015 00:13

          Нету. Показалось, что не читали первый пост.


  1. dcc0
    28.04.2015 19:46

    Вспомнил, что собирал для 320 прошивку из исходников, был тулчейн и «руводство от Олега». Но там BCM5354.

    А для DIR-890L есть что-то подобное?


  1. powerman
    28.04.2015 23:13

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


    1. grossws
      28.04.2015 23:15

      Да ладно, есть mikrotik. RouterOS вполне нормален.


      1. powerman
        29.04.2015 00:14

        Возможно. Но, как я понимаю, исходников нет, так что остаётся в это просто верить, так?


        1. grossws
          29.04.2015 03:06

          В случае какого-нибудь Cisco IOS, вроде, то же?


    1. INSTE
      29.04.2015 15:40

      И сразу получаем на порядок более низкие скорости маршрутизации, кое-как работающий WiFi (даже у atheros есть ограничения в открытых драйверах по multicast), низкие скорости работы с USB-накопителями, неработающие ускорители криптоопераций и многое другое.
      Вы именно затем покупаете роутер, чтобы максимально не использовать все его фичи? :)


      1. powerman
        29.04.2015 17:40
        +1

        FUD. У меня стоит OpenWRT на гигабитном роутере с WiFi, никаких проблем ни со скоростью маршрутизации, ни с WiFi нет. Насчёт USB не знаю, но крупно сомневаюсь что в линухе на роутерах есть какие-то проблемы с USB. Ускорение криптоопераций — запросто может и не работать, в это верю легко… только вот нафига мне быстрые криптооперации, если кто угодно может получить на этом роутере рута и снифать весь трафик и память хоть до хоть после этих невероятно быстрых криптоопераций?


        1. INSTE
          29.04.2015 18:39

          Проблемы есть, и очень большие — думаю сами знаете, как быстро работает ntfs-3g через fuse на обычных компах. А теперь можете представить как оно работает на мелких процах роутеров, которые «благодаря» переходу на OpenWRT вынуждены еще и программно маршрутизировать трафик.

          Не утверждаю, что D-Link идеал по качеству и поддержке прошивок, скорее даже антипример, но советовать пользователям абсолютно всех роутеров сразу бездумно ставить OpenWRT без осознания ими что они потеряют при этом — очень глупо.


          1. powerman
            29.04.2015 19:52

            Не всем, а тем, которых волнует безопасность.


          1. maisvendoo
            29.04.2015 23:20

            бездумно ставить OpenWRT без осознания ими что они потеряют при этом — очень глупо.


            В моих руках побывало два роутера от TP-Link: 1043 nd v2 (мой) и 842 nd (брату подарил). Оба перепрошил достав из коробки (первый и покупался с целью перепрошивки «напосмотреть»). Чтобы что-то не работало — такого не было. Оба девайса прекрасно выполняют все свои функции.


            1. INSTE
              30.04.2015 02:08

              Самые дешевые устройства на устаревших чипах Atheros не имеют аппаратных ускорителей, поэтому на них OpenWRT можно ставить безболезненно.
              Ну и естественно — работать-то все будет. Вопрос в том насколько быстро и какие показатели производительности все это будет выдавать.


              1. maisvendoo
                30.04.2015 08:57

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


                М-да, немного оффтоп, но вспоминается шутка одного из известных в недавнем прошлом видеоблогеров, на тему ответа на вопрос, что же лучше: родная прошивка, OpenWRT или самодельный роутер. Ответ — лучше… лучше Cisco!


                1. INSTE
                  30.04.2015 21:47

                  Шутки шутками, а циска выдает задекларированные показатели именно благодаря аппаратному ускорению большого числа операций на ASIC. ОС там в основном для сохранения конфига, мониторинга и настройки/поддержания в нужном состоянии ASIC.
                  Но потому она и стоит дороже всех остальных «полупрограммных» и полностью программных решений.


        1. INSTE
          29.04.2015 18:49

          Ну и вот для примера только вчера измеренная скорость маршрутизирования на гигабитном DIR-825B1, прошитом в OpenWRT 14.07 (2 потока TCP, гигабитные каналы, сервер accel-ppp 1.7.4, mtu 1400: идеальный вариант с низким pps) (загрузка процессора при этом равна 100%, то есть даже веб-интерфейс не открывается):

          IPoE: 220 мегабит/с
          PPTP: 42 мегабит/с
          L2TP: 140 мегабит/с
          PPPoE: 180 мегабит/с

          Если вы считаете, что для гигабитного роутера это нормальные скорости в «идеальных» (с точки зрения pps) условиях — то дальше не о чем говорить.


          1. powerman
            29.04.2015 19:47

            У меня тоже DIR-825 B1. Инет у меня 100Mbps (и роутер их честно выдаёт), так что гигабит наружу потестировать возможности нет. А внутри локалки сейчас скопировал 5GB фильм с виндовой машины на линуховый сервер по самбе — 80MB/sec, т.е. порядка 650 мегабит/c минимум, и я абсолютно уверен что ограничивающим фактором была скорость винтов. Да, запустил сейчас копирование в /dev/null — в начале было 92-93MB/sec. Если прерывать копирование где-то на 20% и запускать с начала (чтобы винда закешировала начало файла и отдавала его из памяти) — я и 103MB/sec видел. По-моему это вполне честный гигабит. OpenWRT у меня правда давно не обновлялся, вроде версии 10.x.


            1. INSTE
              29.04.2015 20:28

              Не, то, что встроенный RTL8366S коммутирует пакеты на гигабите — это даже не обсуждается, все-таки это аппаратный свитч. И тут я согласен, что 110-120 Мбайт/сек получить вообще не проблема. Если бы уж и коммутация свичем была бы программной, то это было бы совсем вызывающим ужасом.
              Я же писал про скорости WAN <-> LAN.


              1. powerman
                29.04.2015 20:38

                Ну, формально у меня линух-сервер как раз в WAN порт подключен. Но я согласен, это не то же самое, что вышеупомянутые IPoE/PPTP/etc. А есть цифры, сколько они выдают на родной прошивке?


                1. INSTE
                  30.04.2015 02:10

                  Не помню, поскольку родная прошивка была снесена еще пару лет назад :)
                  Но думаю ситуация именно с NAT была бы примерно равной: этот чип не имеет модулей аппаратного ускорения (поэтому российский DLink с 2012 года на них ничего не делает). Другое дело MediaTek/Broadcom/Realtek.


                  1. encyclopedist
                    01.05.2015 01:28

                    То есть виновата таки не OpenWRT, а тормозной процессор.


                    1. INSTE
                      01.05.2015 02:02

                      На конкретно Atheros AR7161 — да