【问题标题】:SonarQube VulnerabilitySonarQube 漏洞
【发布时间】:2021-06-05 02:52:27
【问题描述】:

我是使用 SonarQube 的新手,我正在尝试修复一些漏洞,但不确定如何修复。我还附上了显示 sonarQube 问题的图片。我的直觉告诉我我需要以某种方式验证 selectedFileName 参数。非常感谢您的想法和想法。

这是代码:

[HttpGet("[action]/{selectedFileName}/{selectedTruckModel}/{selectedTravelTimeSettingName}/{selectedCorneringSettingId}/{selectedImportTemplateSettingId}/{selectedPropertiesName}")]
public IEnumerable<RPMTravelTimeTest> CalculateTravelTimeFromSegmentFile(string selectedFileName, string selectedTruckModel, string selectedTravelTimeSettingName, string selectedCorneringSettingId, string selectedImportTemplateSettingId,string selectedPropertiesName)
{
        var travelTimeTestList = new RPMTravelTimeTestCollection();
        travelTimeTestList.LoadTravelTimeTestBySegmentFile(_isHaaSProduction,
                                                           config.Value.StandardHaulageConnectString,
                                                           selectedTruckModel,
                                                           selectedTravelTimeSettingName,
                                                           selectedCorneringSettingId,
                                                           selectedImportTemplateSettingId,
                                                           selectedFileName,
                                                           selectedPropertiesName);

    return travelTimeTestList;
}

【问题讨论】:

  • 你能提供一些关于正在调用的类的信息吗?
  • 您确定您的代码永远不会被操纵以提供特别敏感文件的内容吗?

标签: c# .net sonarqube webapi


【解决方案1】:

我会尽力回答这个问题。

此处的 SonarScanner 标识您正在创建类 RPMTravelTimeTestCollection 的实例,并使用 LoadTravelTimeTestBySegmentFile 方法直接使用用户输入数据构建对象。 SonarScanner 识别并确定安全敏感的实际问题是您已声明的 HTTP GET 方法的调用者给出的 selectedFileName 字符串变量。

我不知道您如何处理 selectedFilename 用户输入,但您可能没有受到路径遍历漏洞的保护,更多信息请点击此处:https://owasp.org/www-community/attacks/Path_Traversal

您可以在 LoadTravelTimeTestBySegmentFile 方法中实现输入验证,该方法验证变量 selectedFilename 未提供路径遍历字符或任意文件扩展名,但为了避免使用正则表达式或类似技术的错误验证实现,我将改为使用白名单实现,如以下:

public bool ValidateFileName(string fileName, string destDirectory)
{
    // destDirectory could be "C:/Users/example/App_Data/traveltimesfolder/"
    // fileName could be traveltimes.csv

    string destFileName = Path.GetFullPath(System.IO.Path.Combine(destDirectory, fileName));
    string fullDestDirPath = Path.GetFullPath(destDirectory + Path.DirectorySeparatorChar);

    return destFileName.StartsWith(fullDestDirPath, StringComparison.Ordinal);
}

如果用户尝试使用路径遍历字符访问您使用 method 参数指定的所提供 destDirectory 之外的文件夹,则上述代码将返回 false。您应该通过添加文件扩展名检查和其他类型的规则来执行安全文件读取来丰富上述验证。

您甚至可以继续编写一些单元测试来测试来自负载列表的恶意输入数据,您可以在此处找到各种路径遍历负载:https://github.com/danielmiessler/SecLists

如果漏洞仍然存在于 SonarQube Web 界面中,则通过 Web 界面将漏洞设置为已修复,在评论部分解释您为保护变量处理而采取的安全措施。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2018-10-12
    • 2020-06-17
    • 2018-12-21
    • 2019-07-23
    • 2020-12-16
    • 2022-09-28
    • 2021-01-30
    • 1970-01-01
    相关资源
    最近更新 更多