安全研究
安全漏洞
GNU Screen转义序列缓冲区溢出漏洞
发布日期:2003-11-27
更新日期:2003-12-03
受影响系统:
GNU screen 4.0.1描述:
GNU screen 3.9.9
GNU screen 3.9.8
GNU screen 3.9.4
GNU screen 3.9.15
GNU screen 3.9.13
GNU screen 3.9.10
GNU screen 3.9.11
- Caldera Open Linux Workstation 3.1.1
- Caldera Open Linux Server 3.1.1
- Conectiva Linux graficas
- Conectiva Linux ecommerce
- Conectiva Linux 7.0
- Conectiva Linux 6.0
- Conectiva Linux 5.1
- Conectiva Linux 5.0
- Debian Linux 2.2
- FreeBSD 4.5
- FreeBSD 4.4
- FreeBSD 4.3
- HP HP-UX 11.20
- HP HP-UX 11.11
- HP HP-UX 11.0
- HP HP-UX 10.20
- Mandrake Linux 8.2
- Mandrake Linux 8.1
- Mandrake Linux 8.0
- Mandrake Linux 7.2
- NetBSD 1.5.2
- NetBSD 1.5.1
- NetBSD 1.5
- OpenBSD 3.0
- OpenBSD 2.9
- OpenBSD 2.8
- OpenBSD 2.7
- OpenBSD 2.6
- RedHat Linux 7.2
- RedHat Linux 7.1
- RedHat Linux 7.0
- RedHat Linux 6.2
- Slackware Linux 8.0
- Slackware Linux 7.1
- Sun Solaris 8.0
- Sun Solaris 7.0
- Sun Solaris 2.6
- SuSE Linux 7.1
- SuSE Linux 7.0
- SuSE Linux 6.4
BUGTRAQ ID: 9117
Screen是一款免费开放源代码的终端管理软件,由Free Software Foundation分发和维护,可使用在多种Unix和Linux操作系统下。
Screen不正确处理转义序列字符,本地或者远程攻击者可以利用这个漏洞进行缓冲区溢出攻击,精心构建提交数据可能以进程权限在系统上执行任意指令。
问题存在于ansi.c代码中:
ansi.c:
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if (curr->w_NumArgs < MAXARGS)
{
if (curr->w_args[curr->w_NumArgs] < 100000000)
curr->w_args[curr->w_NumArgs] =
10 * curr->w_args[curr->w_NumArgs] + (c - '0');
}
break;
case ';':
case ':':
curr->w_NumArgs++;
break;
w_NumArgs是一个符号整数,在转义字符中发送2GB';'字符,会引起内部变量变为负值,这样就使能成功绕过< MAXARGS的保护检查,而后续的采用此负值的操作可导致破坏内存信息,可能以进程权限在系统上执行任意指令。
由于转义序列可源自使用SSH,telnet,或其他网络工具的远程网络会话,因此此漏洞也可能被远程利用。
<*来源:Timo Sirainen (tss@iki.fi)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=106995837813873&w=2
*>
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 第三方补丁下载:
--- ansi.c.old 2003-11-15 18:04:12.000000000 +0200
+++ ansi.c 2003-11-15 18:04:51.000000000 +0200
@@ -559,7 +559,7 @@
{
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
- if (curr->w_NumArgs < MAXARGS)
+ if (curr->w_NumArgs >= 0 && curr->w_NumArgs < MAXARGS)
{
if (curr->w_args[curr->w_NumArgs] < 100000000)
curr->w_args[curr->w_NumArgs] =
厂商补丁:
GNU
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.gnu.org
浏览次数:3065
严重程度:0(网友投票)
绿盟科技给您安全的保障