【问题标题】:SonarQube issue: Make sure that decompressing this archive file is safeSonarQube 问题:确保解压此存档文件是安全的
【发布时间】:2019-12-14 23:40:51
【问题描述】:

我的代码可以从 3 个字符串创建 3 个文件并将其压缩到存档中,例如:

private static async Task<byte[]> CreateArchive(CertificateCredentials certificate)
{
    using (var ms = new MemoryStream())
    {
        using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, false))
        {
            await Add(archive, "certificate.der", certificate.CertificateContent);
            await Add(archive, "issuing_ca.der", certificate.IssuingCACertificateContent);
            await Add(archive, "private_key.der", certificate.PrivateKeyContent);
        }
        return ms.ToArray();

        async Task Add(ZipArchive zipArchive, string filename, string content)
        {
            ZipArchiveEntry zipEntry = zipArchive.CreateEntry(filename);
            using (var originalFileStream = new MemoryStream(Convert.FromBase64String(content)))
            using (Stream zipEntryStream = zipEntry.Open())
            {
                await originalFileStream.CopyToAsync(zipEntryStream);
            }
        }
    }
}

在 SonarQube 报告中,我在这一行得到了关键安全热点

using (Stream zipEntryStream = zipEntry.Open())

带有消息:

确保解压此存档文件是安全的

https://rules.sonarsource.com/csharp?search=Expanding%20archive%20files%20is%20security-sensitive

我该如何解决这个问题?它对我来说看起来很安全。

提前谢谢你

【问题讨论】:

  • 您是否检查了规则详细信息中的“问自己是否”部分?
  • @JeroenHeier 是的,有什么问题吗?
  • 那么你会发现自己没有风险。您可以将此问题标记为误报,并且您已准备好。 SonarQube 正在尽最大努力检测没有太多误报的问题。
  • @JeroenHeier 对不起,我不明白你的意思。它如何帮助我修复警告?

标签: c# sonarqube


【解决方案1】:

关于安全相关规则,您可以找到实际文档here。您可以在“对安全相关规则的期望”中读到,误报的可能性更大,并且当出现问题时,人们应该查看它。因此,根据示例,这个问题很可能被识别为误报,并且不需要更改代码。在用户指南中,您可以找到here 如何处理报告的问题。在“自动问题分配”部分(技术审查)中,您可以阅读如何使用 SonarQube UI 将问题标记为误报(这需要项目的管理问题权限)。这可以防止将来报告此代码的问题。当基于此规则报告了很多问题时,您可以决定禁用该规则或降低其优先级。另一种可能性是narrow the focus,例如忽略几个块中的问题。这完全取决于项目的类型和项目/安全要求。

编辑:

该规则会针对以下问题发出警告:

  • CVE-2018-1263:可以使用文件构建(外部)zip,在提取时,这些文件将放置在提取目录之外。将文件添加到 zip 时,文件将在 zip 中通过文件名(如果需要,包括路径)来标识。 CVE 数据库尚未提及示例。
  • CVE-2018-16131:可以创建一个(外部)zip,提取后会消耗所有可用内存,这会导致主机崩溃(“Zip Bomb”)。 CVE 数据库指向this 问题,有人成功利用此问题。

SonarQube 不想知道 ZipArchive 是如何实现的。很有可能,在将新项目添加到 zip 时,如果第一次提取原始 Zip 会暴露上述问题。您正在自己的代码中创建和使用(在内存中,但不是很相关)zip 存档,而不是使用 任何外部提供的 zip 文件,所以如果您信任 .使用的方法的网络实现。

SonarQube 文档还指向 this Java 示例,其中包含符合安全性的解决方案。即使这样,SonarQube 也很有可能会警告您。

【讨论】:

  • 我需要解释为什么我的代码不安全,因为我不清楚。规则说:根据文件扩展目录的完整路径验证提取文件的完整路径!我在这里没有任何路径,所以我想知道为什么在我的情况下它是不安全的。你能解释一下吗?
  • @Chebur 我已经更新了答案。有人可以解释为什么答案被降级吗?
猜你喜欢
  • 1970-01-01
  • 2019-08-06
  • 2022-08-18
  • 2021-04-29
  • 2020-11-08
  • 1970-01-01
  • 2022-12-21
  • 2022-08-10
  • 2023-01-25
相关资源
最近更新 更多