Qualcomm Qpopper 使用不安全的fgets()函数问题
2008-04-09 04:33:11来源:互联网 阅读 ()
发布日期:2000-04-26
更新日期:2000-04-26
受影响系统:
Qualcomm qpopper 3.0描述:
Qualcomm qpopper 2.53
Qpopper 3.0/2.53存在一个潜在的安全问题。Qpopper用fgets()或者类似的函数mfgets()来
从mailbox中读取数据,当读入1023个字节后或者碰到一个'\n'字符后,Qpopper将数据送入
一个固定大小(1024字节)的缓冲区中,恶意用户可能在邮件正文中输入下列内容:
AAAA...AAA(1023个字节)\n
From user Wed Dec 2 05:53 -0700 1992
In this case fgets() will return 3 strings:
在这种情况下,fgets()将会返回3个字符串:
"AAAA...AAA"(1023字节长)
"\n",
"From user Wed Dec 2 05:53 -0700 1992"
这将会被认为是mailbox中下一条新邮件的开始,在"From"行以后的内容将被错误的认为是下
一条邮件的邮件头和正文部分。攻击者可能伪造邮件,发送木马程序,并能避开一些反病毒软
件的检查。
<* 来源:3APA3A (3APA3A@SECURITY.NNOV.RU) *>
建议:
临时补丁:
--- pop_dropcopy.c Sat Mar 18 02:31:11 2000
pop_dropcopy.c Wed Apr 12 18:11:11 2000
@@ -205,6 205,8 @@
int newline = 1;
int isbreaked = 0;
int wasbreaked = 0;
/*
* 0 for not a from line
@@ -229,6 231,14 @@
/* If the previous line was not a newline then just return */
/* From message separators are preceeded by a newline */
if (isbreaked) {
wasbreaked = 1;
return ( 0 );
}
if (wasbreaked) {
wasbreaked = 0;
return ( 0 );
}
if ( *cp == '\n' ) {
newline = 1;
return ( 0 );
@@ -1593,9 1603,13 @@
if( size <= 0 ) {
return NULL;
}
isbreaked = 1;
while( --size && ((c = getc(stream)) != EOF) ) {
if( (*p = (char)c) == '\0' ) *p = ' ';
- if( *p == '\n' ) break;
if( *p == '\n' ) {
isbreaked = 0;
break;
}
}
if( p == s ) return NULL;
*p = '\0';
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash