|
发布日期:2005-01-26 更新日期:2005-01-27 受影响系统: Openswan Openswan 2.2.0 不受影响系统: Openswan Openswan 2.3.0 Openswan Openswan 1.0.9 描述: -------------------------------------------------------------------------------- Openswan是一款Linux系统下的IPSEC实现,基于FreeS/WAN项目。 Openswan在处理XAUTH和PAM支持时存在一个缓冲区溢出,远程攻击者可以利用这个漏洞可能以进程权限在系统上执行任意指令。 当Openswan以XAUTH和PAM编译支持时,在pluto应用程序中缺少充分的边界检查,在programs/pluto/xauth.c中的get_internal_addresses()函数分配小的字符数组并拷贝超长用户控制的数据到这个数组中,可导致发生缓冲区溢出: in programs/pluto/id.h: 47: #define IDTOA_BUF 512 in programs/pluto/xauth.c: 148: #ifdef XAUTH_USEPAM 149: int retval; 150: char str[48]; 151: #endif ... 169: if(retval == PAM_SUCCESS) 170: { 171: char buf[IDTOA_BUF]; ... 185: sprintf(str,"ID=%s", buf); 精心构建提交数据,可能以pluto进程权限在系统上执行任意指令。默认情况下Openswan不以XAUTH和PAM选项编译。另外此漏洞发生在IKE Phase-1 SA建立之后,需要共享密钥验证及客户提供证书,进一步降低此漏洞危险性。 <*来源:iDEFENSE 链接:www.idefense.com/application/poi/display?id=190 *> 建议: -------------------------------------------------------------------------------- 临时解决方法: 如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁: * XAUTH和PAM配置选项可在Makefile.inc中找到,可关闭此配置选项或采用如下补丁: Index: xauth.c =================================================================== RCS file: /xelerance/master/openswan-2/programs/pluto/xauth.c,v retrieving revision 1.35 diff -u -p -u -r1.35 xauth.c - --- xauth.c 30 Nov 2004 15:30:24 -0000 1.35 +++ xauth.c 8 Jan 2005 02:25:35 -0000 @@ -187,7 +187,7 @@ int get_internal_addresses(struct connec { #ifdef XAUTH_USEPAM int retval; - - char str[48]; + char str[IDTOA_BUF+sizeof("ID=")+2]; #endif #ifdef NAT_TRAVERSAL /* only NAT-T code lets us do virtual ends */ @@ -222,7 +222,7 @@ int get_internal_addresses(struct connec memmove(buf, c1+3, strlen(c1) + 1 - 3); } } - - sprintf(str,"ID=%s", buf); + snprintf(str, sizeof(str), "ID=%s", buf); pam_putenv(con->pamh,str); pam_open_session(con->pamh,0); } 厂商补丁: Openswan -------- 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: http://www.openswan.org/code/
|