Symlink在Python中的漏洞利用

时间:2010-12-24 04:57:16

标签: python symlink python-2.4

在阅读shell脚本和临时文件处理时,我遇到了Symlink漏洞。 http://www.linuxsecurity.com/content/view/115462/151/是基本想法。我想知道Python open()是否检查它将要打开的文件以查看它是否是符号链接并尝试以'w'模式打开符号链接文件。令我惊讶的是,它打开了链接,因此覆盖了链接所指向的文件。现在,如果我的python程序正在以可预测的方式执行大量文件处理,则攻击者不可能通过我的程序应该创建的文件的名称创建链接并将其链接到关键系统文件。这会覆盖系统文件并导致系统崩溃吗? 我使用Python 2.4。后续的python版本是否解决了这个问题?

或者这是一个问题吗?

3 个答案:

答案 0 :(得分:2)

如果您的程序以提升的权限(例如root)运行,那么您可以通过不写入较低权限用户能够创建符号链接的目录中的文件来防止此类攻击。

语言或运行时库无法解决此问题,但必须在程序运行的环境中解决。

(请注意,如果您的程序以提升的权限运行,那么创建符号链接的用户将不会让他们在没有您的程序的情况下完成他们自己无法完成的任何操作。)

答案 1 :(得分:1)

首先,运行脚本的用户不应具有编写关键系统文件的权限。其次,解决这个问题不是蟒蛇的任务。这是脚本开发人员的任务。 Python至少从2.3开始提供tempfile

答案 2 :(得分:1)

只有创建临时文件(通常是写入文件)时才会出现问题,这些文件具有可预测的名称,并且位于其他用户可以写入的目录中。因此,如果您的脚本只写入您的主目录,那么您可以。 如果需要在共享写入目录中创建临时文件,例如/ tmp,你应该使用类似的东西 http://docs.python.org/library/tempfile.html