为什么缺陷查找程序报告fopen问题?

问题描述

我正在使用FlawFinder查找一段C代码中的潜在漏洞。

在分析中,该工具报告了此问题:

file.c:54:  [2] (misc) fopen:
  Check when opening files - can an attacker redirect it (via symlinks),force the opening of special file type (e.g.,device files),move things
  around to create a race condition,control its ancestors,or change its
  contents? (CWE-362).

相关的代码是这样的:

FILE *aFile = fopen("/tmp/tmpfile","w");

尽管我知道并非所有报告的问题都是错误或漏洞,但我想了解为什么会发生这种情况以及如何解决该问题。我尝试在网络上搜索,但发现的所有内容都是关于竞赛情况的,而且我不明白为什么这段代码可能导致竞赛情况。

而且,我可以使用替代功能代替fopen吗?

解决方法

正如它所说,从理论上讲,如果您在恒定位置使用文件,则可能会劫持该文件并使用您的exe权限访问他无法访问的内容。不会说这是一个很大的风险,因为它假设攻击者已经对您的系统进行了一定程度的控制,但是,是的,这很可能是一个漏洞。

解决方案:如果只需要一个临时文件,请使用tmpfile。操作系统级别支持临时文件,在打开之前和关闭之后它们将不存在,您无法真正重定向它们。

FILE *aFile = tmpfile();