XFree86 Xserver 远程拒绝服务漏洞
发布日期:2000-05-25
更新日期:2000-05-26
受影响系统:XFree86 X11R6 4.0
XFree86 X11R6 3.3.6
- RedHat Linux 6.2 i386
XFree86 X11R6 3.3.5
- RedHat Linux 6.1 i386
描述:
XFree86 3.3.5, 3.3.6 和 4.0存在一个拒绝服务漏洞。如果远程用户发送一个错误格式的包到
X server正在监听的6000端口,将使X server停止响应一段时间,这个时间视CPU的速度不等,
可能是几分钟或者更长。在这期间,键盘,鼠标均会停止响应(4.0下鼠标仍然可以响应),X server
将会占用%100的CPU 时间。只有在编译时定义了XCSECURITY宏的XFree86 server受这个漏洞的影响,
用户可以通过下列命令检查是否自己的X server是有问题的:
strings /path/to/XF86_SVGA | grep "XC-QUERY-SECURITY-1"
有问题的代码在:xc/programs/Xserver/os/secauth.c, AuthCheckSitePolicy()函数中:
// dataP 是用户提供的数据
char *policy = *dataP;
int nPolicies;
...
// 如果我们让 nPolicies 初始值为-1...
nPolicies = *policy++;
while (nPolicies) {
...
nPolicies--;
}
我们看到,如果计数器"nPolicies"初始值设置成 -1 ,再减下去将进行20亿次的循环,计数器才能
减少到零。这将大量占用CPU时间,导致拒绝服务攻击发生。
<* 来源:Chris Evans <chris@ferret.lmh.ox.ac.uk> *>
建议:
临时解决办法:
使用"-nolisten tcp"参数运行X server,这样X server将不会通过网络接受客户连接。
浏览次数:7023
严重程度:0(网友投票)