漏洞发布时间:2000-5-22 12:08:00
漏 洞 描 述:
当远程用户向XFree86的6000端口发送一个特殊的TCP包,能使X server的停止工作一段时间,此时,服务器耗费100%CPU.鼠标不能移动,屏幕不能刷新。更为严重的是,击键反应迟钝,包括控制台切换键和服务器关闭键都不能使用。只能重新启动服务器。
导致拒绝服务的时间长短和服务器CPU主频的速度有关,一台P2-350,测试时间为3分15秒。你可以同时发送多个这个的TCP包来加快导致拒绝服务的时间。
并不是所有的X server都受该漏洞的影响,当X server上存在"#define XCSECURITY",才会受其影响。可用下面的命令检查:
strings /路径/XF86_SVGA | grep "XC-QUERY-SECURITY-1"
受影响的版本包括:
XFree86-3.3.5
XFree86-3.3.6
XFree86-4.0 (4.0只受轻微的影响)
漏洞测试
程序代码部分如下:
下面是xc/programs/Xserver/os/secauth.c, AuthCheckSitePolicy()
// dataP 是用户提供的数据
char *policy = *dataP;
int nPolicies;
...
// 把nPolicies 赋值为 -1
nPolicies = *policy++;
while (nPolicies) {
...
nPolicies--;
}
用来计数的变量"nPolicies"取值为-1,会进行20亿次的运算,再比较20亿次,最后才等于0.这样就能使
X server进入一个40亿次的循环。
解 决 方 法: