• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

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

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,332
Розыгрыши
0
Реакции
622
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом ресерче я хочу рассказать о цепочке уязвимостей, которую я нашел в системах компании — производителя роутеров, камер и модемов. Мы пройдем путь от возможности перебора пользователей на сайте через захват аккаунтов до полного захвата камер через RCE.
Это исследование получило третье место на Для просмотра ссылки Войди или Зарегистрируйся в категории «Девайс». Соревнование ежегодно проводится компанией Awillix.

Точка входа, или 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, можно найти приблизительное местонахождение камеры через базу данных Для просмотра ссылки Войди или Зарегистрируйся. Эта информация нам еще пригодится.


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

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

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

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

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

Для просмотра ссылки Войди или Зарегистрируйся
Вот уязвимая строчка кода:

sprintf(s, "echo $(cat /proc/net/rtl8188fu/wlan0/survey_info | grep '%s' | awk '{print $4}')",
(const char *)&v31[1]);
Когда пользователь переходит в меню Network Detection и привязывает камеру к сети, система проверяет уровень сигнала, выполняя вот такую команду:

echo $(cat /proc/net/rtl8192fu/wlan0/survey_info | grep '%s' | awk '{print $4}')
Далее SSID Wi-Fi без проверки используется в коде.

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

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

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

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


Фантазии​

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

Для просмотра ссылки Войди или Зарегистрируйся
Набор команд у BusyBox немаленький, и есть ftpget. В теории можем творить, что захотим, в инфраструктуре компании, купившей такие камеры.
 
Activity
So far there's no one here
Сверху Снизу