可能重复:
访问()的安全漏洞
我从人的页面访问(2)引用:
警告 :使用访问 ()来检查,如果用户被授权,例如,其实这样做使用前打开一个文件打开 (2)创建了一个安全漏洞,因为用户可能会利用检查和打开文件之间的时间间隔短操纵它。 出于这个原因,应避免使用该系统调用。
这是什么意思,以及在什么情况下会是一个问题?
可能重复:
访问()的安全漏洞
我从人的页面访问(2)引用:
警告 :使用访问 ()来检查,如果用户被授权,例如,其实这样做使用前打开一个文件打开 (2)创建了一个安全漏洞,因为用户可能会利用检查和打开文件之间的时间间隔短操纵它。 出于这个原因,应避免使用该系统调用。
这是什么意思,以及在什么情况下会是一个问题?
这仅仅是设置用户ID和设置组ID应用的安全问题。 对于运行在用户本身的应用没有任何威胁,因为有问题的操作将被操作系统反正被拒绝。
考虑这种情况:你有运行的UNIX程序root
通过设置用户ID。 该程序使用access
检查其他用户的文件权限,然后运行该文件为root
,但只有在权限检查已经成功。 比方说,该计划被称为securerun
,并运行它,如下所示:
securerun myfile
攻击者可以来利用这个安全漏洞来运行程序,使用该算法:
xyz
其中的用户具有执行权限 A
和B
A
等待几毫秒,并且执行cp norunning xyz
更换xyz
与攻击者想要运行一个文件,但没有运行权限这么做 B
调用securerun xyz
如果攻击者通过获取他的时间权利得到幸运的话,你的securerun
将检查旧的执行权限xyz
,但它会运行新的xyz
,副本norunning
,黑客不应该运行。 由于在检查和执行之间很短的时间窗,攻击者势必会得到幸运在某些时候,如果他试图在一个循环,他的策略很多次。
这是一个典型的“检查到的使用时间时间”竞争状态。
典型的错误代码:
access
,以检查是否要宣读了用户的文件,在程序中使用提升的权限运行 在“短间隔”,用户可能能够操作文件系统,例如:
ln -f secret_file.txt non_secret_file.txt
然后open
将打开秘密文件进行读取,即使它失败的access
检查必须在检查已完成的时间已经到位的链接。