SonarQube 漏洞

Posted

技术标签:

【中文标题】SonarQube 漏洞【英文标题】:SonarQube Vulnerability 【发布时间】: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;

【问题讨论】:

你能提供一些关于正在调用的类的信息吗? 您确定您的代码永远不会被操纵以提供特别敏感文件的内容吗? 【参考方案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 界面将漏洞设置为已修复,在评论部分解释您为保护变量处理而采取的安全措施。

【讨论】:

以上是关于SonarQube 漏洞的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube - JS 依赖项安全漏洞扫描

SonarQube漏洞导致源码泄漏,国产化迫在眉睫

SonarQube漏洞导致源码泄漏,国产化迫在眉睫

SonarQube log4j 漏洞

使用 SonarLint 插件和 SonarQube 服务器未检测到 HTTP 请求重定向漏洞

SonarQube漏洞导致源码泄漏,开源网安CodeSec代码审核平台实现国产化替代,守护代码安全