Windows中一个22年的漏洞
X Windows系统,今天作为世界各地的Linux桌面,已经存在超过20年了,仍然存在Bug。几天前Sysadmins为libXfont库提供了补丁,来对应新发现的已经在代码中存在了22年的特权升级漏洞,补丁抢在了让人厌烦的exploit前发布了。这一漏洞可以使得登入到一个存在漏洞的机器的人将X服务搞崩溃,或者执行输入代码后成为超级用户。
在混沌通信大会(译注:始于1984年,由欧洲最大的黑客联盟组织——德国混沌电脑俱乐部主办。该会议主要研讨计算机和网络安全问题,旨在推进计算机和网络安全。开始多是热爱计算机的黑客参与,其后不断吸引科学家、安全专家和计算机爱好者参加,因此也有人称之为欧州黑客大会。)的一个展示上,发现了数百个漏洞(在X.org上讨论的电子邮件在此:http://lists.x.org/archives/xorg-devel/2013-December/039773.html),最新发现的漏洞是文本的栈溢出漏洞,可以追溯到1991年,这个Bug至今仍存在于所有的X11版本中。
这一漏洞很简单,并且影响共享的电脑,但是本文只想剖析这一系列的安全问题是如何发生的。
来自X.org的公告内容:“一个BDF字体文件包含了一个超过期望长度的字符串,会导致站溢出。在创建了栈保护的X服务上进行测试,当读取用户提供的巧妙设计的字体时,会导致服务立即崩溃。” (译注:http://lists.x.org/archives/xorg-announce/2014-January/002389.html)
存在问题的地方是如下代码中的bdfReadCharacters()函数中(译注:源代码路径http://cgit.freedesktop.org/xorg/lib/libXfont/tree/src/bitmap/bdfread.c)

如果你没有见过这个bug,我会详细解释。屏幕上的字体可以保存成GBD格式(Glyph Bitmap Distribution),详情参见此文档(http://partners.adobe.com/public/developer/en/font/5005.BDF_Spec.pdf),保存后的内容格式是以STARTCHAR 2.1+字体内容的格式。(译注:请参照上图中1305行的代码)

如果被加载的字体包含一个短的版本号,作为字符串加载的话一切正常,例如本文中的版本号“2.1”。这一信息在代码中通过文件dbfread.c中的函数调用函数sscanf将信息拷贝到charName字符数组当中。(译注:参照上述图中的1302-1308行代码)。问题是sscanf函数没有限定读取版本号码的字符串长度,该函数会一致拷贝文件中的数据,直到遇到了一个空格符,才终止。(译注:http://www.cplusplus.com/reference/cstdio/sscanf/
http://www.cplusplus.com/reference/cctype/isspace/)
字符数组charName被定义为长度只有100个字节,因此当一个BDF字体包含一个“STARTCHAR”开始的字符串并且其版本号的长度超过字符数组长度将会导致超过数组范围,将数据放在栈中的其他数据区上。这意味着攻击者可以覆盖内存从而控制处理器的命令指针离开bdfReadCharacters函数,从而有效的劫持程序。
因为X服务通常是以超级用户权限运行的,如果攻击成功,普通用户权限的用户可以通过执行代码来得到机器的控制权。关于在现今系统中存在保护机制情况下,如何触发栈溢出的更深层次的文章可以参考如下两篇文章
http://www.exploit-db.com/papers/24085/
http://crypto.stanford.edu/~blynn/rop/
修补漏洞很简单,如下图所示,明确指定数据长度为99个字节,第100个字节用来保存NULL。

来自X.org的声明:
在由X.org 发布的所有的X服务中,libXfont被用来读取用户指定的字体文件,包含Xorg服务,它通常是以root权限来运行的,或者是以setuid-root的权限来运行以方便访问硬件,这一漏洞可能导致在某些系统中,一个普通用户拿到root权限。
在12月份的混沌通信大会上,Ilja van Sprundel 说他要在两个月内,挖到120个漏洞。Van Sprundel说:“现在我还没有挖到那么多”,Van Sprunde在2013年5月份导致了X.org的大量安全更新,包含数十个需要修正的漏洞,因为客户端程序库相信服务器发送的数据时有效的,没有进行完整性测试。(译注:http://lists.x.org/archives/xorg-devel/2013-May/036276.html)最新的漏洞是通过cppcheck静态分析工具发现的,命名为CVE-2013-6462,安全更新应该在所有的包管理中有效。(译注:有关cppcheck,请参照http://cppcheck.sourceforge.net/)
Windows中一个22年的漏洞的更多相关文章
- windows 中的类似于sudo的命令(在cmd中以另一个用户的身份运行命令)
linux中我们习惯用sudo命令来临时用另一个用户的身份执行命令. windows中,通常我们需要用管理员权限执行命令的时候通常是 右键->run as administrator. 用着键盘 ...
- 在windows中把一个文件夹打成war包
转: 在windows中把一个文件夹打成war包 一般开发打war包时都是用MyEclipse或IntelliJ IDEA等直接导出war文件,这里介绍一种如何把一个文件夹打成war包的方式,如下 ...
- 如何检测Windows中的横向渗透攻击
一.前言 横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(Advanced Persistent Threats,APT)中更加热衷于使用这种攻击方法.攻击者可以利用这些技术 ...
- Appium+Robotframework实现Android应用的自动化测试-1:Appium在Windows中的安装
让我们开始在Windows中开始安装Appium吧,Appium在OS X中的具体安装后面的文章会介绍. 另外,官网上说先要装Node.js,还要装Apache Ant和Apache Maven,Gi ...
- [转]在Windows中配置Rsync同步
在Windows中配置Rsync同步 Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同 时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次 ...
- 快速找出网站中可能存在的XSS漏洞实践
笔者写了一些XSS漏洞的挖掘过程记录下来,方便自己也方便他人. 一.背景 在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统, ...
- 快速找出网站中可能存在的XSS漏洞实践(一)
一.背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录 ...
- 在Windows中监视IO性能
附:在Windows中监视IO性能 本来准备写一篇windows中监视IO性能的,后来发现好像可写的内容不多,windows在细节这方面做的不是那么的好,不过那些基本信息还是有的. 在Windows中 ...
- 如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情?
如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情? 答:跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求.利用受害者在被攻击网站已经获取的注册凭证 ...
随机推荐
- python中深复制与浅复制
转载:http://blog.csdn.net/vicken520/article/details/8227524 java中也经常碰见这种问题.时间原因就不写java方面啦 Python深复制浅复制 ...
- centos7 yum 方式安装nginx
centos7系统库中默认是没有nginx的rpm包的,所以我们自己需要先更新下rpm依赖库 (1)使用yum安装nginx需要包括Nginx的库,安装Nginx的库 #rpm -Uvh http:/ ...
- 【翻译】利用Qt设计师窗体在运行时创建用户界面(Creating a user interface from a Qt Designer form at run-time)
利用Qt设计师窗体在运行时创建用户界面 我们利用Calculator窗体例子中创建的窗体(Form)来展示当一个应用(application)已经生成后,是可以在其运行时产生与例子中相同的用户界面. ...
- Canvas的API整理
canvas元素 可被用来通过脚本(通常是JavaScript)绘制图形.比如,它可以被用来绘制图形,制作图片集合,甚至用来实现动画效果.你可以(也应该)在元素标签内写入可提供替代的的代码内容,这些内 ...
- 【2014-05-06】C++ 设计模式----单例模式
1.何为单例模式? 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点(static).可能有人会想这和全局变量有什么区别呢? 通常我们可以让一个全局成员变量使得一个 ...
- Scrum Meeting 14-20151227
说明 这几天我们代码人员一直在做数据库,没有来得及更新博客,从明天开始将会正常做scrum meeting,也将加快开发 工作,预计beta版本将会在12.30之前发布. 摘要 目前基本开发都已经做的 ...
- angular学习input输入框筛选
学习angular,看到 angular-phonecat测试用例,照着教程运行了一遍,对于初学者有点不是很理解angular 帅选代码的意思,于是找教材,参考资料,明白了input筛选原来这么简单. ...
- MFC编程入门之二十四(常用控件:列表框控件ListBox)
前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...
- linux下安装mysql5.7.17及简单配置
原文:http://www.th7.cn/db/mysql/201612/218745.shtml 1.mysql5.7.17安装在/usr/local/mysql目录里面,也可以安装在其他地方 (安 ...
- eclipse +maven+ssm搭建矿建
记录一下搭建框架的过程1.下载最新的eclipse https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/ec ...