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(网友投票)