LIMB
Вход Регистрация

тема

I See You! Как я нашел уязвимости в приложении, сайте и прошивке IP-камеры

Staryie_Kikers1 · · 0 ответов · 844 просмотров

Содержание статьи​

  • 01. Точка входа, или Account takeover
  • 02 .А как же остальные?
  • 03. Захватываем камеры, или еще одна RCE
  • 04 .Анализ прошивки
  • 05. Фантазии
В этом ресерче я хочу рассказать о цепочке уязвимостей, которую я нашел в системах компании — производителя роутеров, камер и модемов. Мы пройдем путь от возможности перебора пользователей на сайте через захват аккаунтов до полного захвата камер через RCE.


Точка входа, или Account takeover​


В первых числах мая я решил окунуться в хардварь и специально для этого купил IP-камеру. На ее полное исследование у меня ушло чуть меньше двух месяцев.

Все камеры этой компании‑производителя управляются через приложение. Довольно популярное — оно загружено уже больше 500 тысяч раз.

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

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

Не удалось прогрузить медиа
























Метод хеширования можно было увидеть в JADX.
Не удалось прогрузить медиа












Приложение берет SHA-256 от данных в Base64 и затем вызывает MD5.
Не удалось прогрузить медиа

                                      






                                        Полный алгоритм вычисления сигнатуры


































Алгоритм восстановили, теперь можно перебирать!
Для ускорения и правильного вычисления сигнатуры я написал на JS скрипт, который достигал скорости перебора в 270 запросов в секунду.
Учитывая, что срок жизни кода — 30 минут, вероятность подбора верного кода с первой попытки превышает 48%. Так как за один день можно отправить не более восьми кодов восстановления, вероятность захватить аккаунт за сутки — 99,5%.
При вводе правильного кода в ответе лежит VERIFY_CODE, который потом подставляется в форму сброса пароля.
Смотрим запрос смены пароля.


Не удалось прогрузить медиа


Видим VERIFY_CODE и сигнатуру, а также подмечаем странный формат пароля.

Расчехляю Frida и вижу, что вместо асимметричного шифрования пароля используется MD5.




Не удалось прогрузить медиа


Не удалось прогрузить медиа





























Приложение берет пароль в Hex и добавляет к нему SHA-1 от почты. Между паролем и почтой добавляются нули так, чтобы длина полученной строки делилась на четыре без остатка. Далее берутся байты этой строки и пять раз (!) хешируются в MD5.
Теперь после подбора кода можно сразу менять пароль на свой и входить в аккаунт жертвы. При этом все сессии жертвы деактивируются.
Сейчас уязвимость уже закрыта.


 

А как же остальные?​


Главный изъян этой атаки — нужно предварительно знать почту жертвы.


Тут на помощь приходит одна из функций приложения — «друзья».


Добавлять друзей можно, указав их почту, телефон или (внимание!) user_id. Последний имеет вид ID_region_number, где number — инкрементируемое число.



Не удалось прогрузить медиа


Можно просто перебрать user_id пользователей в Burp Intruder и собрать большой список почт.


 

Захватываем камеры, или еще одна RCE​


Получив доступ к аккаунту жертвы, атакующий может смотреть список ближайших к камере точек доступа Wi-Fi.


Не удалось прогрузить медиа


Используя их SSID, можно найти приблизительное местонахождение камеры через базу данных wigle.net. Эта информация нам еще пригодится.


 

Анализ прошивки​


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


Еще неделю я изучал прошивку. Мое внимание привлекли функции подключения камеры к Wi-Fi и проверка скорости сети. Давай посмотрим поближе на функцию F3C8C.

Не удалось прогрузить медиа







































Она играет роль распределителя: получает команду с параметрами и выбирает, какой из функций их передавать.







А в коде ниже обнаруживаем отличную возможность для инъекции команд ОС.

Не удалось прогрузить медиа


Вот уязвимая строчка кода:

Вот уязвимая строчка кода:
Code:
sprintf(s, "echo $(cat /proc/net/rtl8188fu/wlan0/survey_info | grep '%s' | awk '{print $4}')",

(const char *)&v31[1]);

Когда пользователь переходит в меню Network Detection и привязывает камеру к сети, система проверяет уровень сигнала, выполняя вот такую команду:

Code:
echo $(cat /proc/net/rtl8192fu/wlan0/survey_info | grep '%s' | awk '{print $4}')



В survey_info хранятся данные ближайших точек доступа.


Не удалось прогрузить медиа



Если создать сеть с именем 
Code:
q';echo k3vg3n>/home/poc;echo '
 и подключить камеру к ней, то мы получим RCE с правами root.


Минус такого RCE состоит в том, что можно использовать только короткие команды: камера не может подключиться к точкам доступа, SSID которых превышает 32 байта.


Зато теперь, имея RCE и зная расположение камеры, можно приехать к этому месту и прокинуть шелл, тем самым полностью захватив камеру.


 

Фантазии​


После получения шелла можно редактировать файловую систему камеры, встроить бэкдор, подключить камеру обратно к рабочему Wi-Fi и даже сканировать хосты внутренней сети.


Не удалось прогрузить медиа





















Набор команд у BusyBox немаленький, и есть ftpget. В теории можем творить, что захотим, в инфраструктуре компании, купившей такие камеры.

источник
👍66 ❤️13 🔥7 🤔18 😢16

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.