BUGTRAQ ID: 28665
CVE(CAN) ID: CVE-2008-1686
fishsound库提供一个编程接口,允许使用Xiph.Org codec(FLAC、Speex和Vorbis)编码和解码音频数据。
fishsound库所使用的Speex库在处理Speex头时存在数组索引错误,如果特制的Speex流在头中包含有负数的modeID字段的话就可能导致执行任意指令。
Speex头中包含有32位的modeID字段,libspeex将其解释为有符的int型(spx_int32_t)。正常的使用方法是索引到全局模式列表以检索SpeexMode *:
mode = (SpeexMode *)speex_mode_list[modeID];
然后创建解码器:
st = speex_decoder_init(mode);
这会在libspeex中调用speex_decoder_init(),类似于:
void *speex_decoder_init(const SpeexMode *mode)
{
return mode->dec_init(mode);
}
因此如果没有保证流头中所给出的modeID处于speex_mode_list[]范围中,就会导致执行任意指令。fishsound检查了上边界(modeID < SPEEX_NB_MODES),但没有检查负数值。
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
<a href=“http://www.annodex.net/software/libfishsound/download/libfishsound-0.9.1.tar.gz” target=“_blank”>http://www.annodex.net/software/libfishsound/download/libfishsound-0.9.1.tar.gz</a>