找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1697|回复: 0

Linux Kernel ALSA声卡驱动信息泄露漏洞

[复制链接]

286

主题

75

回帖

491

牛毛

一级牛人

車菿山偂^︶ㄣ咇侑潞﹏﹖.

积分
491
发表于 2007-12-14 12:46:31 | 显示全部楼层 |阅读模式 来自 内蒙古兴安盟
受影响系统:

Linux kernel < 2.6.22.8

不受影响系统:

Linux kernel 2.6.22.8

描述:

--------------------------------------------------------------------------------

BUGTRAQ ID: 25***07

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://secunia.com/advisories/26918/

http://labs.idefense.com/intelli ... /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
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-27 04:21 , Processed in 0.143575 second(s), 33 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表