【问题标题】:mkdir() and "Time of Check, Time of Use" vulnerabilitiesmkdir() 和“检查时间,使用时间”漏洞
【发布时间】:2011-06-02 17:32:58
【问题描述】:

对于 C,是否有安全的替代 mkdir()?我正在检查一些代码,并注意到它正在使用对mkdir() 的调用。根据我在 US-CERT 安全编码网站上阅读的内容,使用该功能使其容易受到“检查时间,使用时间”(TOCTOU)的影响。

编辑

来自 zlib 的 miniunz.c 源代码

int mymkdir(dirname)
    const char* dirname;
{
    int ret=0;
#ifdef WIN32
    ret = mkdir(dirname);
#else
#ifdef unix
    ret = mkdir (dirname,0775);
#endif
#endif
    return ret;
}

上面的mkdir就是我所指的。

【问题讨论】:

    标签: c mkdir secure-coding


    【解决方案1】:

    你的问题有点含糊;参考 US-CERT 文档和一些示例代码会很好。

    不过,我敢打赌答案是mkdirat()

    【讨论】:

      【解决方案2】:

      mkdir() 仅在 TOCTOU - Time of Check, Time of Use 前面是检查目录是否存在时。

      在你的例子中,如果调用代码做正确的事情,上面的用法是可以的。检查 Zack 的评论。

      【讨论】:

      • 最好解释一下为什么 mkdir 的这种用法不受 TOCTOU 违规的影响:如果路径名的最后一个组件已经存在,mkdir 被指定为失败,与openO_EXCL 相同。如果这个函数的调用者正确地处理了失败,事情就很好了。然而,这只是一个消除 Unix 和 Windows 之间差异的包装器——我们需要查看调用代码来了解程序是否避免了先调用 stat 然后假设 mkdir 会成功的常见错误。
      • 我不相信这是真的。
      猜你喜欢
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多