首页 -> 安全研究

安全研究

安全漏洞
ECartis LIScript任意变量查看漏洞

发布日期:2003-08-14
更新日期:2003-08-20

受影响系统:
Ecartis Ecartis 1.0.0 snapshot 20030417
Ecartis Ecartis 1.0.0 snapshot 20030416
Ecartis Ecartis 1.0.0 snapshot 20030404
Ecartis Ecartis 1.0.0 snapshot 20030318
Ecartis Ecartis 1.0.0 snapshot 20030312
Ecartis Ecartis 1.0.0 snapshot 20030309
Ecartis Ecartis 1.0.0 snapshot 20030303
Ecartis Ecartis 1.0.0 snapshot 20030227
Ecartis Ecartis 1.0.0 snapshot 20021013
Ecartis Ecartis 1.0.0 snapshot 20020427
Ecartis Ecartis 1.0.0 snapshot 20020125
Ecartis Ecartis 1.0.0 snapshot 20020121
描述:
BUGTRAQ  ID: 8420

Ecartis是一款邮件列表管理器。

Ecartis没有正确处理用户提供的输入,远程攻击者可以利用这个漏洞未授权获得敏感信息。

Ecartis包含的liscript支持部分变量和函数,部分地方对用户输入完全可信,允许调用部分函数或查看变量,用户提交如下的请求:

subscribe secret-list
subscribe <$post-password>

第一条命令会失败,但是Ecartis会选择secre-list作为活动列表,第二条命令也不成功,但是返回的邮件会包含post-password的实际密码信息。

<*来源:Timo Sirainen (tss@iki.fi
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=106087546418461&w=2
*>

建议:
临时解决方法:

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

* 第三方补丁如下:

diff -ru ecartis-1.0.0-old/src/smtp.c ecartis-1.0.0/src/smtp.c
--- ecartis-1.0.0-old/src/smtp.c    Fri Apr 18 09:45:04 2003
+++ ecartis-1.0.0/src/smtp.c    Thu Aug 14 17:30:24 2003
@@ -330,18 +330,19 @@
    return 1;
}

-void smtp_body_822bis(const char *src, char *dest)
+void smtp_body_822bis(const char *src, char *dest, size_t size)
{
     const char *ptr1;
-    char *ptr2;
+    char *ptr2, *end;
     int lastcr;

     lastcr = 0;

     ptr1 = src;
     ptr2 = dest;
+    end = dest + size - 2;

-    while(*ptr1) {
+    while(*ptr1 && ptr2 < end) {
        if ((*ptr1 == '\n') && (!lastcr)) {
           *ptr2++ = '\r';
        } else if (*ptr1 == '\r') {
@@ -367,7 +368,7 @@
{
     char buffer[HUGE_BUF];

-    smtp_body_822bis(line,&buffer[0]);
+    smtp_body_822bis(line,&buffer[0], sizeof(buffer));

     clean_var("smtp-last-error", VAR_TEMP);
     if (!sock_printf(my_socket,"%s",buffer)) {
@@ -385,7 +386,7 @@

     buffer_printf(buffer2, sizeof(buffer2) - 1, "%s\r\n", line);

-    smtp_body_822bis(buffer2,&buffer[0]);
+    smtp_body_822bis(buffer2,&buffer[0], sizeof(buffer));

     clean_var("smtp-last-error", VAR_TEMP);
     if (!sock_printf(my_socket,"%s",buffer)) {
diff -ru ecartis-1.0.0-old/src/unhtml.c ecartis-1.0.0/src/unhtml.c
--- ecartis-1.0.0-old/src/unhtml.c    Fri Apr 18 09:45:04 2003
+++ ecartis-1.0.0/src/unhtml.c    Thu Aug 14 17:43:03 2003
@@ -161,6 +161,25 @@
         case HTMLPARSE_NORMAL:
         case HTMLPARSE_EATTAG:
           {
+             /* Wordwrap */
+             if (linechars > 76) {
+                char tempbuf[1024];
+                *tptr = 0;
+                
+                tptr = strrchr(linebuffer,' ');
+                if (!tptr) tptr = strrchr(linebuffer,'-');
+                if (!tptr) tptr = &tempbuf[76];
+
+                buffer_printf(tempbuf,1023,"%s",
+                  (*tptr == ' ') ? tptr + 1 : tptr);
+                *tptr = 0;
+
+                newline(outfile,&linebuffer[0],indent,linemode);
+                buffer_printf(linebuffer,79,"%s",tempbuf);
+                tptr = &linebuffer[strlen(linebuffer)];
+                linechars = strlen(linebuffer);
+                lastspace = 1;
+             }
              if (tempchar == '&') {
                 memset(buffer, 0, sizeof(buffer));
                 tagptr = &buffer[0];
@@ -182,25 +201,6 @@
                    lastspace = (tempchar == ' ');
                 }

-                /* Wordwrap */
-                if (linechars > 76) {
-                   char tempbuf[1024];
-                   *tptr = 0;
-                  
-                   tptr = strrchr(linebuffer,' ');
-                   if (!tptr) tptr = strrchr(linebuffer,'-');
-                   if (!tptr) tptr = &tempbuf[76];
-
-                   buffer_printf(tempbuf,1023,"%s",
-                     (*tptr == ' ') ? tptr + 1 : tptr);
-                   *tptr = 0;
-
-                   newline(outfile,&linebuffer[0],indent,linemode);
-                   buffer_printf(linebuffer,79,"%s",tempbuf);
-                   tptr = &linebuffer[strlen(linebuffer)];
-                   linechars = strlen(linebuffer);
-                   lastspace = 1;
-                }
              }
           }
           break;
@@ -338,7 +338,8 @@
                 }
                 parsemode = HTMLPARSE_NORMAL;
              } else {
-               *tagptr++ = tempchar;
+               if (tagptr < buffer + sizeof(buffer) - 1)
+                 *tagptr++ = tempchar;
              }
           }
           break;
diff -ru ecartis-1.0.0-old/src/unmime.c ecartis-1.0.0/src/unmime.c
--- ecartis-1.0.0-old/src/unmime.c    Fri Apr 18 09:45:04 2003
+++ ecartis-1.0.0/src/unmime.c    Thu Aug 14 17:22:36 2003
@@ -98,7 +98,7 @@

       tptr2 = &temp2[0];

-      while (*tptr && (*tptr != '=')) {
+      while (*tptr && (*tptr != '=') && tptr2 < temp2 + sizeof(temp2) - 1) {
          if (!isspace((int)*tptr)) *tptr2++ = *tptr;
          tptr++;
       }
@@ -116,7 +116,7 @@

          tptr2 = &temp2[0];

-         while (*tptr && (*tptr != ';')) {
+         while (*tptr && (*tptr != ';') && tptr2 < temp2 + sizeof(temp2) - 1) {
             if ( (!escape) && isspace((int)*tptr) ) {
                if (!eattrail) {
                   /* We store the position to remove end spaces */

厂商补丁:

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

http://www.ecartis.org/

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