Xpdf ‘FoFiType1::parse’缓冲区溢出漏洞

漏洞起因
边界条件错误
 
影响系统
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 条评论。

发表评论