SV.STR_PAR.UNDESIRED_STRING_PARAMETER

文件路径中的字符串参数

在文件路径中使用字符串参数可能存在危险,因为这可能使重要数据受到恶意攻击。SV.STR_PAR.UNDESIRED_STRING_PARAMETER 检查器会查找使用绝对路径与字符串参数的文件操作函数的实例。

漏洞与风险

如果系统数据或调试信息通过输出流或日志功能(使未授权方可访问数据或信息)离开程序,可能暴露信息。由于输入验证错误,可能导致漏洞。在这种情况下,攻击者可能避开根,并使用“\..”字符序列通过目录遍历攻击在系统上检索或放置任意文件。此外,通过尝试检索不存在的文件,也可能泄露根的绝对路径。

对此类型错误的响应可揭露详细的系统信息,并可能导致安全机制故障和拒绝服务 (DoS) 攻击。

缓解与预防

要避免该漏洞:

  • 检查文件名操作,以便使用字符串参数
  • 确保堆栈跟踪和错误消息直接提交至用户不可查看的一个日志
  • 确保错误消息未暴露可用于恶意攻击的路径信息

漏洞代码示例

复制
  int main(int argc, char *argv[])
  {
      int fh;
      fh = creat( "/usr/bin/ls", _S_IREAD | _S_IWRITE );
      if ( fh == -1 )
          return -1;
      else
      {
          write(fh, argv[1], sizeof(argv[1]));
         close( fh );
         return 0;
     }
 }

Klocwork 针对第 4 行生成问题报告,指出对 creat 的调用在文件路径中使用的字符串参数可能存在危险。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。