Уязвимость в KCodes NetUSB в роутерах D-Link, NETGEAR, TP-LINK, Trendnet, ZyXEL и других

    Как вы можете знать, некоторые производители роутеров включают в свою продукцию возможность использовать подключенные в роутер USB-устройства через TCP/IP, используя ПО KCodes NetUSB и свой собственный протокол. Технология позволяет подключать любые типы устройств: принтеры, флешки, веб-камеры, клавиатуры, звуковые карты, т.к. просто инкапсулирует USB в IP.

    Специалисты из SEC Consult обнаружили вопиющую уязвимость на всех роутерах, поддерживающих данную технологию — переполнение буфера на стеке в режиме ядра, которое может привести к удаленному выполнению кода.

    Модуль ядра NetUSB.ko, который прослушивает порт 20005, даже если в роутер не подключено ни одного USB-устройства, для аутентификации использует шифрование AES со статическим ключом (который, конечно же, есть и в ПК-клиенте), что уже позволяет злоумышленнику удаленно воспользоваться подключенным USB-устройством. Однако, главная уязвимость заключается в фиксированном размере буфера для имени компьютера в функции run_init_sbus(), принимающего не более 64 символов. Переполнение этого буфера и приводит к переполнению стека в ядре
    :
    int computername_len;
    char computername_buf[64];
    // connection initiation, handshake
    len = ks_recv(sock, &computername_len, 4, 0);
    // ...
    len = ks_recv(sock, computername_buf, computername_len, 0); // boom!

    Уязвимость присутствует во многих популярных и современных роутерах. Производители используют разные маркетинговые имена для функциональности NetUSB: у NetGear она называется ReadySHARE, а другие просто называют ее «общий доступ к принтеру» или «общий доступ к USB-порту».
    Уязвимость подтверждена на следующих роутерах, с последней версией прошивки:
    • TP-Link TL-WDR4300 V1
    • TP-Link WR1043ND v2
    • NETGEAR WNDR4500

    Хоть NetUSB на этих роутерах работает только на LAN-портах, исследователи обнаружили некоторое количество открытых портов 20005 в интернете. Пока неясно, произошло ли это из-за неправильных настроек по умолчанию, или же пользователи сами открыли доступ извне.
    Неполный список потенциально уязвимых роутеров, в коде прошивок которых присутствует NetUSB
    D-Link DIR-615 C
    NETGEAR AC1450
    NETGEAR CENTRIA (WNDR4700/4720)
    NETGEAR D6100
    NETGEAR D6200
    NETGEAR D6300
    NETGEAR D6400
    NETGEAR DC112A
    NETGEAR DC112A (Zain)
    NETGEAR DGND4000
    NETGEAR EX6200
    NETGEAR EX7000
    NETGEAR JNR3000
    NETGEAR JNR3210
    NETGEAR JR6150
    NETGEAR LG6100D
    NETGEAR PR2000
    NETGEAR R6050
    NETGEAR R6100
    NETGEAR R6200
    NETGEAR R6200v2
    NETGEAR R6220
    NETGEAR R6250
    NETGEAR R6300v1
    NETGEAR R6300v2
    NETGEAR R6700
    NETGEAR R7000
    NETGEAR R7500
    NETGEAR R7900
    NETGEAR R8000
    NETGEAR WN3500RP
    NETGEAR WNDR3700v5
    NETGEAR WNDR4300
    NETGEAR WNDR4300v2
    NETGEAR WNDR4500
    NETGEAR WNDR4500v2
    NETGEAR WNDR4500v3
    NETGEAR XAU2511
    NETGEAR XAUB2511
    TP-LINK Archer C2 V1.0 (Fix planned before 2015/05/22)
    TP-LINK Archer C20 V1.0 (Not affected)
    TP-LINK Archer C20i V1.0 (Fix planned before 2015/05/25)
    TP-LINK Archer C5 V1.2 (Fix planned before 2015/05/22)
    TP-LINK Archer C5 V2.0 (Fix planned before 2015/05/30)
    TP-LINK Archer C7 V1.0 (Fix planned before 2015/05/30)
    TP-LINK Archer C7 V2.0 (Fix already released)
    TP-LINK Archer C8 V1.0 (Fix planned before 2015/05/30)
    TP-LINK Archer C9 V1.0 (Fix planned before 2015/05/22)
    TP-LINK Archer D2 V1.0 (Fix planned before 2015/05/22)
    TP-LINK Archer D5 V1.0 (Fix planned before 2015/05/25)
    TP-LINK Archer D7 V1.0 (Fix planned before 2015/05/25)
    TP-LINK Archer D7B V1.0 (Fix planned before 2015/05/31)
    TP-LINK Archer D9 V1.0 (Fix planned before 2015/05/25)
    TP-LINK Archer VR200v V1.0 (Fix already released)
    TP-LINK TD-VG3511 V1.0 (End-Of-Life)
    TP-LINK TD-VG3631 V1.0 (Fix planned before 2015/05/30)
    TP-LINK TD-VG3631 V1.0 (Fix planned before 2015/05/31)
    TP-LINK TD-W1042ND V1.0 (End-Of-Life)
    TP-LINK TD-W1043ND V1.0 (End-Of-Life)
    TP-LINK TD-W8968 V1.0 (Fix planned before 2015/05/30)
    TP-LINK TD-W8968 V2.0 (Fix planned before 2015/05/30)
    TP-LINK TD-W8968 V3.0 (Fix planned before 2015/05/25)
    TP-LINK TD-W8970 V1.0 (Fix planned before 2015/05/30)
    TP-LINK TD-W8970 V3.0 (Fix already released)
    TP-LINK TD-W8970B V1.0 (Fix planned before 2015/05/30)
    TP-LINK TD-W8980 V3.0 (Fix planned before 2015/05/25)
    TP-LINK TD-W8980B V1.0 (Fix planned before 2015/05/30)
    TP-LINK TD-W9980 V1.0 (Fix already released)
    TP-LINK TD-W9980B V1.0 (Fix planned before 2015/05/30)
    TP-LINK TD-WDR4900 V1.0 (End-Of-Life)
    TP-LINK TL-WR1043ND V2.0 (Fix planned before 2015/05/30)
    TP-LINK TL-WR1043ND V3.0 (Fix planned before 2015/05/30)
    TP-LINK TL-WR1045ND V2.0 (Fix planned before 2015/05/30)
    TP-LINK TL-WR3500 V1.0 (Fix planned before 2015/05/22)
    TP-LINK TL-WR3600 V1.0 (Fix planned before 2015/05/22)
    TP-LINK TL-WR4300 V1.0 (Fix planned before 2015/05/22)
    TP-LINK TL-WR842ND V2.0 (Fix planned before 2015/05/30)
    TP-LINK TL-WR842ND V1.0 (End-Of-Life)
    TP-LINK TX-VG1530(GPON) V1.0 (Fix planned before 2015/05/31)
    Trendnet TE100-MFP1 (v1.0R)
    Trendnet TEW-632BRP (A1.0R)
    Trendnet TEW-632BRP (A1.1R/A1.2R)
    Trendnet TEW-632BRP (A1.1R/A1.2R/A1.3R)
    Trendnet TEW-634GRU (v1.0R)
    Trendnet TEW-652BRP (V1.0R)
    Trendnet TEW-673GRU (v1.0R)
    Trendnet TEW-811DRU (v1.0R)
    Trendnet TEW-812DRU (v1.0R)
    Trendnet TEW-812DRU (v2.xR)
    Trendnet TEW-813DRU (v1.0R)
    Trendnet TEW-818DRU (v1.0R)
    Trendnet TEW-823DRU (v1.0R)
    Trendnet TEW-MFP1 (v1.0R)
    Zyxel NBG-419N v2
    Zyxel NBG4615 v2
    Zyxel NBG5615
    Zyxel NBG5715

    На данный момент только TP-LINK выпустил исправления уязвимости для некоторых моделей, еще 40 моделей получат обновление чуть позже. Некоторые производители позволяют отключить NetUSB, но, по крайней мере, в NetGear такая функциональность отсутствует: нельзя ни просто отключить, ни закрыть порт через firewall.
    Список производителей, использующих NetUSB в своих продуктах, по информации из кодов драйвера
    Allnet
    Ambir Technology
    AMIT
    Asante
    Atlantis
    Corega
    Digitus
    D-Link
    EDIMAX
    Encore Electronics
    Engenius
    Etop
    Hardlink
    Hawking
    IOGEAR
    LevelOne
    Longshine
    NETGEAR
    PCI
    PROLiNK
    Sitecom
    Taifa
    TP-LINK
    TRENDnet
    Western Digital
    ZyXEL

    В KCodes невнятно отреагировали на сообщение об уязвимости, поэтому исследователи написали о ней напрямую производителям и CERT. Также ребята разработали PoC, который (пока) не опубликовали.

    Информация об уязвимости
    Информация на сайте CERT
    Заметка об уязвимости в блоге SEC Consult
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 9

      –3
      О боже, что же делать? Меня взломают?!
      +6
      Крис Касперски "Ошибки переполнения буфера извне и изнутри".

      Цитата — «много интересного текста до этого момента о C++ и динамических массивах… Даже если компилятор вдруг решит заняться контролем границ массива (одно дополнительное обращение к памяти и три-четыре машинных команды), это не решит проблемы, поскольку при обнаружении переполнения откомпилированная программа не сможет сделать ничего умнее, чем аварийно завершить свое выполнение. Вызов исключения не предлагается, поскольку если программист забудет его обработать (а он наверняка забудет это сделать), мы получим атаку типа отказ в обслуживании. Конечно, это не захват системы, но все равно нехорошо.

      Так что ошибки переполнения были, есть и будут!
      »

      Спасибо за пост.
        0
        Одна тонкость — в данном случае язык C. При большом желании можно таки ошибки обрабатывать путём вменяемого прерывания обработки системного вызова с особождением всем памяти контекста. Вот если структура глобальная — тут сложнее, целую подсистему надо как-то погасить. Но и это, в принципе, возможно — лучше, чем ничего.
        +1
        Уязвимость существует в любых прошивках с данным модулем ядра? Это относится к OpenWrt, например?
          +1
          В OpenWRT нет этого модуля ядра. Это проприетарная разработка.
            0
            Ясно. А то я про этот NetUSB впервые слышу. И даже гугл не особо помог.
              0
              Есть USB over IP опенсорсный. И он даже работает. И даже под OpenWRT.
              Только в нем отсутствуют методы аутентификации и защиты. И подразумевается что вы его используете в защищенной сети.
          0
          Уже кто-то видел реально использование уязвимости в сети?

          Only users with full accounts can post comments. Log in, please.