
CVE-2026-90781 のスタンドアロン再現ツール: alsa-lib の __snd_ctl_ascii_elem_id_parse() における name= パース(クォートあり・なし)での 1 バイト OOB 書き込み
CVE-2026-90781 のスタンドアロン C 再現プログラムです。これは alsa-lib の __snd_ctl_ascii_elem_id_parse() において、name=(引用符付きおよび引用符なしの両形式)を解析する際に発生する 1 バイトの境界外書き込みです。
src/control/ctlparse.c(v1.2.16.1 およびそれ以前の開発 HEAD)において:
char buf[64];
...
if (size < (int)sizeof(buf)) { // BUG: allows size == 64
*ptr++ = *str;
size++;
}
...
*ptr = '\0'; // writes buf[64] when size == 64
numid= のパスはすでに sizeof(buf) - 1 に修正されていますが、2 つの name= ループは修正されていません。
gcc -o reproducer reproducer.c
./reproducer
# With AddressSanitizer (recommended to observe the OOB write):
gcc -fsanitize=address -g -o reproducer reproducer.c
./reproducer
WRITE of size 1 at ... Stack right redzone
reproducer.c — 脆弱な解析ロジックと修正済みの解析ロジックを正確に再現src/control/ctlparse.c1e27d63(numid= パス)