中华网络安全联盟 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 进程知识 技术论坛
中华网络安全联盟 >> 新闻中心 >> 漏洞发布 >> Fenice远程溢出及拒绝服务漏洞
新闻中心
行业动态
软件新闻
安全资讯
病毒预警
漏洞发布
Apache Tomcat远程信息
Advanced Poll common
GnuPG parse_comment缓
Sun sysinfo() Kernel
Microsoft IE Interne
Microsoft IE超长Cont
MiniBB news.php远程文
多种D-Link路由器UPNP
Fenice远程溢出及拒绝服务漏洞
字体:

中华网络安全联盟    来源:转载    时间:2006-4-25 17:32:24

 

受影响系统:
(LS)3 Fenice 1.10


描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 17678

Fenice是符合IETF标准的多媒体流服务器。

Fenice的实现上存在多个漏洞,远程攻击者可能利用这些漏洞在服务器上执行任意指令或导致拒绝服务攻击。

-------------------------------
A] parse_url缓冲区溢出
-------------------------------

Fenice的RTSP模块使用parse_url函数解析URI中的服务器、端口和文件名。这个函数使用一些strcpy调用填充主函数所传送的服务器和file_name缓冲区,这就允许攻击者利用缓冲区溢出漏洞执行恶意指令。

在rtsp/parse_url.c中:

int parse_url(const char *url, char *server, unsigned short *port, char *file_name)
// Note: this routine comes from OMS
{
        /* expects format '[rtsp://server[:port/]]filename' */

    ...
                        strcpy(server, token);
    ...
                        token = strtok(NULL, " ");
                        if (token)
                                strcpy(file_name, token);
    ...
                char *token = strtok(full, " \t\n");
                if (token) {
                        strcpy(file_name, token);
                        server[0] = '\0';
                        valid_url = 1;
                }
        }
        free(full);
        return valid_url;
}

------------------------
B] RTSP_msg_len崩溃
------------------------

处理客户端发送的Content-Length字段的函数没有检查这个参数的大小/符号。在RTSP_msg_len函数中ml变量用于包含首部中的字节数,bl变量用于包含Content-Length值。当到达客户端请求的末尾时,程序将bl添加到ml。如果bl(Content-Length)是一个很大的值,如2147483647,ml就会变为负数,这样就可以绕过之后的ml> rtsp->in_size检查,导致访问无效的内存区,服务器会崩溃。

在rtsp/RTSP_msg_len.c中:

void RTSP_msg_len(int *hdr_len, int *body_len, RTSP_buffer * rtsp)
// This routine is from OMS.
{
        int eom; /* end of message found */
        int mb; /* message body exists */
        int tc; /* terminator count */
        int ws; /* white space */
        int ml; /* total message length including any message body */
        int bl; /* message body length */
        char c; /* character */
        char *p;

        eom = mb = ml = bl = 0;
        while (ml <= rtsp->in_size) {
        ...
                if (eom) {
                        ml += bl; /* add in the message body length */
                        break; /* all done finding the end of the message. */
                }
                if (ml >= rtsp->in_size)
                        break;
        ...
                                if (sscanf(&(rtsp->in_buffer[ml]), "%d", &bl) != 1) {
                                        fnc_log(FNC_LOG_FATAL,"invalid ContentLength encountered in message.");
                                        exit(-1);
                                }
                        }
                }
        }

        if (ml > rtsp->in_size) {
                fnc_log(FNC_LOG_FATAL,"buffer did not contain the entire RTSP message.");
                exit(-1);
        }
    ...
        *hdr_len = ml - bl;
        for (tc = rtsp->in_size - ml, p = &(rtsp->in_buffer[ml]); tc && (*p == '\0'); p++, bl++, tc--);
        *body_len = bl;
}

<*来源:Luigi Auriemma (aluigi@pivx.com
 
  链接:http://archives.neohapsis.com/archives/bugtraq/2006-04/0496.html
*>

测试方法:
--------------------------------------------------------------------------------

警 告

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

A] GET /[about 320 'a's] HTTP/1.0

B] GET / HTTP/1.0
    Content-Length: 4294967295

建议:
--------------------------------------------------------------------------------
厂商补丁:

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

http://streaming.polito.it/server

字体:
 
设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
Copyright©2006-2008 中华网络安全联盟 All rights reserved.