
CVE-2021-3625 - Zephyr向けのサンプルエクスプロイト
このリポジトリには、CVE-2021-3625 向けのいくつかのサンプルエクスプロイトが含まれています。
Zephyr ベースのすべての usb デバイスは、バージョン 2.5.0 まで(2.5.0 を含む)で、 最大 65kB の読み出しを可能にするバッファオーバーフローの影響を受けます。実際のデバイスによっては、 暗号鍵や認証情報などの機密データの漏えいにつながる可能性があります。
この問題は、巧妙に細工された usb コントロール転送リクエストを発行し、 IN 方向(ホストへの読み出し)と書き込み固有のリクエスト(例: set address (0x05))を送信することで引き起こされる可能性があります。このような場合、ホストへの書き込みは想定されていないため、応答 長は更新されず、request->wLength の最初に設定された値がそのまま残ります。 wLength はユーザーが制御できるため、 0xffff のような任意の 2 バイト値に設定でき、結果として 65 キロバイトのマイクロコントローラメモリを読み出すことができます。バッファのサイズは 大幅に小さいため、オーバーフローが発生し、攻撃者は バッファ境界を越えたメモリ内容を抽出できます。
アプリケーション層に加えて、Zephyr USB デバイススタックを有効にした MCUBoot ビルドも 影響を受けます。さらに、バッファ境界を越えたメモリ読み出しに加えて、DFU クラスも バッファオーバーフロー書き込みを達成するために悪用される可能性があります。
最良の結果を得るには、MAX_CTRL_BUFFER_LENGTH のサイズを、 デフォルトの 4096 バイトから 0xFFFF に増やした libusb ビルドを使用することをお勧めします (libusb/os/linux_usbfs.h)。
セキュリティアドバイザリ: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363