首页 -> 安全研究

安全研究

安全漏洞
TuxBR LIBCGI远程缓冲区溢出漏洞

发布日期:2002-11-28
更新日期:2002-12-04

受影响系统:
TuxBR LIBCGI 1.0.3
TuxBR LIBCGI 1.0.2
描述:
BUGTRAQ  ID: 6270

LIBCGI是一款由C编写的CGI程序,提供GET和POST请求模式,具有URL解码,访问MySQL等功能。

LIBCGI中'cgi_lib.c'脚本中的'parse_field()'函数对输入检查不正确,远程攻击者可以利用这个漏洞进行缓冲区溢出攻击,以LIBCGI进程权限在系统上执行任意指令。

'cgi_lib.c'代码中的129行'parse_field()'函数对用户的输入缺少正确的边界缓冲区溢出:

129  void parse_field(char *field, char *rtnfield)
        ...
   132       char *ptr,
   133            *endptr,
   134            tmp_field[128];
        ...
   137          sprintf(tmp_field,"%s=",field); // "field1="
   138
   139          if((ptr=strstr(req_http,tmp_field))!=NULL)
   140          {
   141                  ptr+=strlen(tmp_field); // "[value]&field2=[value2]&field3=[value3]"
   142
   143                  if((endptr=strchr(ptr,'&'))!=NULL) // "&field2=[value2]&field3=[value3]"
   144                  {
   145                      memmove(rtnfield, ptr, (endptr - ptr)+1); // here.
   146                          rtnfield[(endptr - ptr)]='\0';
   147                  }
        ...
   --

攻击者可以提交超长的数据作为parse_field()函数的参数,触发缓冲区溢出,精心构建提交数据可能以LIBCGI进程权限在系统上执行任意指令。

<*来源:dong-h0un U (xploit@hackermail.com
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=103849201924389&w=2
*>

测试方法:

警 告

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

dong-h0un U (xploit@hackermail.com)提供了如下测试方法:

http://x82.inetcop.org/h0me/c0de/0x82-Remote.tuxbrLibcgi.s

建议:
临时解决方法:

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

* dong-h0un U <xploit@hackermail.com>提供如下第三方补丁:

=== libcgi.patch ===

--- cgi_lib.c    Sat Dec 29 07:10:47 2001
+++ cgi_lib.patch.c    Thu Nov 21 23:47:13 2002
@@ -126,7 +126,7 @@


//Faz o parse buscando pelo campo na string de request HTTP
-void parse_field(char *field, char *rtnfield)
+void parse_field(char *field, char *rtnfield, int size)
{

      char *ptr,
@@ -142,12 +142,12 @@

        if((endptr=strchr(ptr,'&'))!=NULL)
        {
-            memmove(rtnfield, ptr, (endptr - ptr)+1);
+            memmove(rtnfield, ptr, size-1);//(endptr - ptr)+1);
            rtnfield[(endptr - ptr)]='\0';
        }
        else
        {
-            memmove(rtnfield, ptr, (strlen(ptr))+1);
+            memmove(rtnfield, ptr, size-1);//(strlen(ptr))+1);
            rtnfield[(strlen(ptr))+1]='\0';
        }

--- cgi_lib.h    Sun Jan 20 06:58:34 2002
+++ cgi_lib.patch.h    Thu Nov 21 23:47:05 2002
@@ -37,7 +37,7 @@
  /*********************/

void SwapChar(char *pOriginal, char cBad, char cGood);
-void parse_field(char *field, char *rtnfield);
+void parse_field(char *field, char *rtnfield, int size);
void get_request(unsigned int method, char *request);
void URLDecode(unsigned char *pEncoded);
void vExiterr();
--- samples/sample3.c    Thu Dec 27 05:52:12 2001
+++ samples/sample3.patch.c    Thu Nov 21 23:51:14 2002
@@ -9,9 +9,9 @@
  
         get_request(1,req_http);
  
-        parse_field("name",name);
-        parse_field("address",address);
-        parse_field("telephone",tel);
+        parse_field("name",name,(int)sizeof(name));
+        parse_field("address",address,(int)sizeof(address));
+        parse_field("telephone",tel,(int)sizeof(tel));
  
         URLDecode(name);
         URLDecode(address);

=== eof ===

厂商补丁:

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

http://www.tuxbr.com.br

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