Welcome visit China Anti-virus group
我要发布文章
当前位置:中国反病毒小组 >> 系统漏洞 >> 浏览文章     
   
 

 

 

Linux Kernel ALSA驱动snd-page-alloc本地Proc文件信息泄露漏洞

 佚名 2007年09月28日 来源:反病毒小组整理   我要发布文章
 

 

欢迎进入反病毒社区论坛,与技术人员互动交流进入
受影响系统:
Linux kernel < 2.6.22.8
不受影响系统:
Linux kernel 2.6.22.8
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 25807
CVE(CAN) ID: CVE-2007-4571

Linux Kernel是开放源码操作系统Linux所使用的内核。

Linux系统的ALSA声卡驱动实现上存在漏洞,本地攻击者可能利用此漏洞获取内核内存中的敏感信息。

Linux Kernel在处理多个/proc/driver/snd-page-alloc文件的读操作时存在安全漏洞,sound/core/memalloc.c文件中如下定义了读操作的系统调用snd_mem_proc_read:

484 static int snd_mem_proc_read(char *page, char **start, off_t off,
485 int count, int *eof, void *data)
486 {
487 int len = 0;
...
494 len += snprintf(page + len, count - len,
495 "pages : %li bytes (%li pages per %likB)\n",
496 pages * PAGE_SIZE, pages, PAGE_SIZE / 1024);
...
508 return len;
509 }

在494行调用了snprintf以生成proc文件系统项的输出,如果提供了计数值1,snprintf就会仅向目标缓冲区写入单个字节,但如果有足够空间的话,函数就会返回应写入的字节数。没有设置过*eof值,也没有使用过*ppos值。

fs/proc/generic.c文件中定义了从proc_file_read调用的这个函数:

51 static ssize_t
52 proc_file_read(struct file *file, char __user *buf, size_t nbytes,
53 loff_t *ppos)
54 {
...
136 n = dp->read_proc(page, &start, *ppos,
137 count, &eof, dp->data);
...
155 n -= *ppos;
156 if (n <= 0)
157 break;
158 if (n > count)
159 n = count;
160 start = page + *ppos;
...
186 n -= copy_to_user(buf, start < page ? page : start, n);
...
193 *ppos += start < page ? (unsigned long)start : n;

在136行从对snd_proc_mem_read函数的调用返回了值n。由于返回值(在单个设备的情况下大约为41)大于所请求的读大小(1),在158行n值被设置为count,之后*ppos递增,从start(计算为page + *ppos)将n字节拷贝到了用户域。

在之后的用户域读操作中,如果*ppos大于0的话,proc_file_read函数就会拷贝过snd_mem_proc_read写入的页面,导致泄露内核内存。

<*来源:Neil Kettle (mu-b@65535.com)

链接:http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.22.8
http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=600
*>

建议:
--------------------------------------------------------------------------------
临时解决方法:

* 卸载snd_page_alloc模块
* 修改/etc/fstab中的加载参数限制对/proc文件系统的访问

厂商补丁:

Linux
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.8.tar.bz2
www.china-antivirus.com

 
共有位读者阅读过此文 [关闭本页]

中国反病毒小组给您安全的保障

    搜索:
 
  □- 本周热门文章 □- 常用专杀下载 □- 服务器安全文章
 



口袋西游盗号木马wgatraye.exe分析
教你将Linux配置为代理防火墙
Linux系统下封杀非法IP
Linux如何 伪装IP
Linux系统常见问题处理方法
怎样把Linux系统服务器当作Mac的服务器
DOS下远程修改Serv-UFTP用户的登录密码
怎样做反向域名解析?
安全配置向导(SCW)为Win2003打造铜墙铁壁
在RedHat 6.0上安装Oracle 8i(全攻略)
 
 
 
 
 



关于我们 | 版权声明 | 技术论坛 | 联系我们 | 我要投稿 Copyright(c) china-antivirus.com All rights reserved 反病毒小组