xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

XFree86 fbglyph 存在拒绝服务攻击


发布时间:2001-12-11
更新时间:2001-12-11
严重程度:
威胁程度:远程拒绝服务
错误类型:输入验证错误
利用方式:服务器模式

受影响系统
XFree86 X11R6 4.0
XFree86 X11R6 4.0.1
   + RedHat Linux 7.0
XFree86 X11R6 4.0.3
   + RedHat Linux 7.1
详细描述
XFree86 4.x 存在一个内存破坏/缓冲溢出攻击,这个漏洞可以使用KDE Web 浏览器
/文件管理应用程序"Konqueror"来产生导致拒绝服务攻击。也可能存在攻击者在
运行X 服务程序的机器上获得权限提升。

在下面的条件下可产生问题:

1)当Konqueror 浏览器处理在实际浏览窗口超长的字符串时候(如从浏览器粘贴
超长字符串到远程站点)。
2)在Konqueror文件管理程序中双击超长文件名的文件。

测试代码
尚无

解决方案
采用如下补丁程序:

Index: fbglyph.c
===================================================================
RCS file: /xf86/xc/programs/Xserver/fb/fbglyph.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- fbglyph.c 2001/05/29 04:54:09 1.11
+++ fbglyph.c 2001/09/07 15:16:00 1.12
@@ -34,9 +34,19 @@
int height)
{
BoxRec box;
+ BoxPtr pExtents = REGION_EXTENTS (0, pRegion);

- if (x + width < 0) return FALSE;
- if (y + height < 0) return FALSE;
+ /*
+ * Check extents by hand to avoid 16 bit overflows
+ */
+ if (x < (int) pExtents->x1)
+ return FALSE;
+ if ((int) pExtents->x2 < x + width)
+ return FALSE;
+ if (y < (int) pExtents->y1)
+ return FALSE;
+ if ((int) pExtents->y2 < y + height)
+ return FALSE;
box.x1 = x;
box.x2 = x + width;
box.y1 = y;
@@ -261,10 +271,10 @@
FbBits,
int,
int);
- FbBits *dst;
- FbStride dstStride;
- int dstBpp;
- int dstXoff, dstYoff;
+ FbBits *dst = 0;
+ FbStride dstStride = 0;
+ int dstBpp = 0;
+ int dstXoff = 0, dstYoff = 0;

glyph = 0;
if (pGC->fillStyle == FillSolid && pPriv->and == 0)
@@ -352,10 +362,10 @@
FbBits,
int,
int);
- FbBits *dst;
- FbStride dstStride;
- int dstBpp;
- int dstXoff, dstYoff;
+ FbBits *dst = 0;
+ FbStride dstStride = 0;
+ int dstBpp = 0;
+ int dstXoff = 0, dstYoff = 0;

glyph = 0;
if (pPriv->and == 0)

相关信息
参考:http://www.securityfocus.com/archive/1/244322
http://www.securityfocus.com/archive/1/244393