漏洞起因
边界条件错误
影响系统
Xpdf Xpdf 3.0 pl3
Xpdf Xpdf 3.0 pl2
Xpdf Xpdf 3.0 1pl1
Xpdf Xpdf 3.0 1
Xpdf Xpdf 3.0 0
不受影响系统
Xpdf Xpdf 3.01
危害
远程攻击者可以利用漏洞以应用程序权限执行任意指令。
攻击所需条件
攻击者必须构建恶意PDF文件,诱使用户解析。
漏洞信息
Xpdf是一款PDF文件的开放源码查看器。
Xpdf 3.01之前版本的FoFiType1::parse函数存在缓冲区溢出,问题代码如下fofi/FoFiType1.cc:
133 void FoFiType1::parse() {
…
163 line = getNextLine(line);
164 for (j = 0; j < 300 && line; ++j) {
165 line1 = getNextLine(line);
166 if ((n = line1 – line) > 255) {
167 n = 255;
168 }
169 strncpy(buf, line, n);
getNextLine可返回Null:
117 char *FoFiType1::getNextLine(char *line) {
118 while (line < (char *)file + len && *line != ‘\x0a’ && *line != ‘\x0d’)
{
119 ++line;
120 }
121 if (line < (char *)file + len && *line == ‘\x0d’) {
122 ++line;
123 }
124 if (line < (char *)file + len && *line == ‘\x0a’) {
125 ++line;
126 }
127 if (line >= (char *)file + len) {
128 return NULL;
129 }
因此(line1 – line)没有定义,导致负值n,此值用于之后的strncpy,可溢出buf缓冲区。
测试方法
厂商解决方案
Xpdf 3.01已经修复此漏洞,建议用户下载使用:
http://www.foolabs.com/xpdf/
漏洞提供者
Petr Gajdos and Christian Kornacker
0 条评论。