首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核中的sscanf函数容易受到缓冲区溢出攻击吗?

Linux内核中的sscanf函数容易受到缓冲区溢出攻击吗?
EN

Stack Overflow用户
提问于 2013-05-02 03:04:49
回答 1查看 4.8K关注 0票数 4

据我所知,典型的缓冲区溢出攻击发生在攻击溢出堆栈上的内存缓冲区时,从而允许攻击者注入恶意代码并重写堆栈上的返回地址以指向该代码。

在使用盲目地将数据从一个区域复制到另一个区域的函数(如sscanf)时,这是一个常见的问题,检查一个区域的终止字节:

代码语言:javascript
复制
char str[8];                               /* holds up to 8 bytes of data */
char *buf = "lots and lots of foobars";    /* way more than 8 bytes of data */
sscanf(buf, "%s", str);                    /* buffer overflow occurs here! */

我注意到Linux内核中的一些sysfs_ops store函数是使用Linux内核版本的sscanf函数实现的:

代码语言:javascript
复制
static char str[8];    /* global string */
static ssize_t my_store(struct device *dev,
                        struct device_attribute *attr,
                        const char *buf, size_t size)
{
        sscanf(buf, "%s", str);    /* buf holds more than 8 bytes! */
        return size;
}

假设这个store回调函数被设置为一个可写的sysfs属性。恶意用户是否能够通过write调用故意使缓冲区溢出?

通常,我希望防范缓冲区溢出攻击--比如限制读取的字节数--但我在大量函数(例如drivers/scsi/scsi_sysfs.c)中看不到任何攻击。

Linux内核版本的sscanf的实现可以防止缓冲区溢出攻击吗?或者还有另一个原因--也许考虑到Linux内核在幕后的工作方式,缓冲区溢出攻击是不可能的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 08:50:20

Linux sscanf()容易受到缓冲区溢出的攻击;检查源代码会发现这一点。您可以使用width specifiers来限制允许%s写入的数量。在某些情况下,您的str上一定也运行了copy_from_user()。用户空间可能会向内核传递一些垃圾指针。

在您引用的Linux版本中,scsi_sysfs.c确实存在缓冲区溢出。最新版本不支持此功能。committed fix应该会解决您看到的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16324626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档