CVE:CVE-2005-3191
CNNVD:CNNVD-200512-114
Xpdf是便携文档格式(PDF)文件的开放源码浏览器。
多家厂商软件版本所捆绑的xpdf中存在堆溢出漏洞。
DCT流解析代码没有充分的验证用户输入。xpdf/Stream.cc的DCTStream::readProgressiveSOF函数从PDF文件的用户可控数据中读取numComps的值，然后在循环中使用该值将数据拷贝到预先分配的堆缓冲区中，如下所示：
GBool DCTStream::readProgressiveSOF() {
...
 numComps = str->getChar();
...
 for (i = 0; i < numComps; ++i) {
 compInfo[i].id = str->getChar();
 c = str->getChar();
 compInfo[i].hSample = (c >> 4) & 0x0f;
 compInfo[i].vSample = c & 0x0f;
 compInfo[i].quantTable = str->getChar();
 }
...
向numComps提供过大的值就可以导致破坏堆内存。成功利用这个漏洞的攻击者可以导致拒绝服务或执行任意代码。
solution:Upgrade xpdf xpdf to a higher version than 0.90,0.91,0.92,0.93,1.0,1.0a,1.1,2.0,2.1,2.2,2.3,3.0,3.0.1,3.0_pl2,3.0_pl3,and avoid the version 0.90,0.91,0.92,0.93,1.0,1.0a,1.1,2.0,2.1,2.2,2.3,3.0,3.0.1,3.0_pl2,3.0_pl3