
CVE-2021-3625 - Zephyr용 샘플 악용
이 저장소에는 CVE-2021-3625에 대한 몇 가지 예제 익스플로잇이 포함되어 있습니다.
버전 2.5.0 이하의 모든 Zephyr 기반 USB 장치는 최대 65kB까지 읽을 수 있는 버퍼 오버플로우의 영향을 받습니다. 실제 장치에 따라 암호화 키나 자격 증명과 같은 민감한 데이터가 유출될 수 있습니다.
이 문제는 IN 방향(읽기, 호스트로)을 가진 조작된 USB 제어 전송 요청과 쓰기 특정 요청(예: 주소 설정(0x05))을 발행하여 트리거될 수 있습니다. 이러한 경우 호스트로의 쓰기가 예상되지 않으므로 응답 길이가 업데이트되지 않아 request->wLength의 초기 설정 값이 그대로 남게 됩니다. wLength는 사용자가 제어할 수 있으므로 0xffff와 같은 임의의 2바이트 값으로 설정될 수 있으며, 이로 인해 65킬로바이트 마이크로컨트롤러 메모리를 읽을 수 있습니다. 버퍼 크기가 훨씬 작기 때문에 오버플로우가 발생하여 공격자가 버퍼 경계 너머의 메모리 내용을 추출할 수 있습니다.
애플리케이션 계층 외에도 Zephyr USB 장치 스택이 활성화된 상태로 빌드된 MCUBoot도 영향을 받습니다. 또한 버퍼 경계를 넘어서는 메모리 읽기와 함께 DFU 클래스를 악용하여 버퍼 오버플로우 쓰기를 달성할 수도 있습니다.
최상의 결과를 얻으려면 libusb를 MAX_CTRL_BUFFER_LENGTH 크기를 기본값 4096바이트에서 0xFFFF로 늘려 빌드하는 것이 좋습니다(libusb/os/linux_usbfs.h).
보안 권고: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363