安全研究

安全漏洞
Libnemesi多个远程缓冲区溢出漏洞

发布日期:2007-12-28
更新日期:2007-12-28

受影响系统:
Politecnico di Torino Libnemesi 0.6.4-rc1
不受影响系统:
Politecnico di Torino Libnemesi 0.6.4-rc2
描述:
BUGTRAQ  ID: 27048

libnemesi是用于实现RTSP/RTP流播放的开源客户端库。

libnemesi的实现上存在多个缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。

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

handle_rtsp_pkt函数没有限制大小便使用了32字节的ver缓冲区包含服务器(如HTTP/1.0)所发送的版本,以下是rtsp/rtsp_handlers.c中的漏洞代码:

int handle_rtsp_pkt(rtsp_thread * rtsp_th)
{
    char ver[32];
    int opcode;
    ...
    if (sscanf((rtsp_th->in_buffer).data, "%s ", ver) < 1) {
    ...

--------------------------------------------------
B] send_*_request函数缓冲区溢出
--------------------------------------------------

rtsp/rtsp_send.c文件中的send_*_request函数(send_pause_request、send_play_request、send_setup_request和send_teardown_request)使用了256字节加上一个参数大小所初始化的缓冲区,但没有考虑服务器所接收的其他内容,如Content-Base,这可能导致各种缓冲区溢出漏洞。


-----------------------------------------
C] get_transport_str_*缓冲区溢出
-----------------------------------------

get_transport_str_sctp、get_transport_str_tcp和get_transport_str_udp函数的大小参数没有引用目标缓冲区的大小而是源缓冲区大小,以下是rtsp/rtsp_transport.c中的漏洞代码:

int get_transport_str_sctp(rtp_session * rtp_sess, char * tkna, char * tknb) {
    char str[256];
    uint16_t stream;
    do {
        if ((tkna = strstrcase(tknb, "server_streams"))) {
            for (; (*tkna == ' ') || (*tkna != '='); tkna++);
            for (tknb = tkna++; (*tknb == ' ') || (*tknb != '-');
                 tknb++);

            strncpy(str, tkna, tknb - tkna);
            ...

<*来源:Luigi Auriemma (aluigi@pivx.com
  
  链接:http://marc.info/?l=bugtraq&m=119878049903430&w=2
*>

测试方法:

警 告

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

http://aluigi.org/poc/libnemesibof.zip

建议:
厂商补丁:

Politecnico di Torino
---------------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://live.polito.it/files/downloads/libnemesi/libnemesi-0.6.4-rc2.tar.bz2

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