当前位置: 首页 > 知识库问答 >
问题:

SonarQube问题:确保解压缩此存档文件是安全的

暴乐邦
2023-03-14

我的代码可以从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归档文件是安全敏感的

我怎样才能解决这个问题?看起来对我来说很安全。

先谢谢你

共有1个答案

蓟和煦
2023-03-14

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

编辑:

该规则警告以下问题:

  • CVE-2018-1263:有可能构建一个(外部)zip,其中包含提取时将被放置在提取目录之外的文件。当向zip添加文件时,文件将在zip中由文件名(如果需要,包括路径)标识。CVE数据库还没有提到一个例子。
  • CVE-2018-16131:有可能创建一个压缩包,当提取时,它将消耗所有可用存储器,这将使主机崩溃(“压缩炸弹”)。CVE数据库指向此问题,其中有人成功利用此问题。

SonarQube不想知道ZipArchive是如何实现的。很有可能,在向zip添加新项目时,如果首先提取原始zip,就会暴露上述问题。您正在自己的代码中创建和使用(内存中,但这不是很相关)zip存档,而不是使用任何外部提供的zip文件,因此,如果您信任该文件,这两个文件在这里都没有问题。Net实现所使用的方法。

SonarQube文档还指向这个包含符合安全性的解决方案的Java示例。即使在那时,SonarQube也很可能会警告你。

 类似资料:
  • 问题内容: 我可以解压缩zip,gzip和rar文件,但是我还需要解压缩bzip2文件以及对其进行存档(.tar)。我还没有遇到好的图书馆可以使用。 我理想地将Java与Maven一起使用,我想将其作为依赖项包含在POM中。 您推荐什么图书馆? 问题答案: 我所看到的最好的选择是具有此Maven依赖项的Apache Commons Compress 。 从示例:

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • 问题内容: Groovy中是否有内置支持来处理Zip文件(采用groovy方式)? 还是我必须使用Java的java.util.zip.ZipFile来处理Groovy中的Zip文件? 问题答案: AFAIK,没有本机的方法。但是请查看本文,了解如何向File 添加方法,这与您要查找的内容非常接近。您只需要制定一个方法。

  • 问题内容: 我想使用Web浏览器在客户端显示OpenOffice文件,.odt和.odp。 这些文件是压缩文件。使用Ajax,我可以从服务器获取这些文件,但是它们是压缩文件。我必须使用JavaScript解压缩它们,我尝试使用inflate.js,http: //www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt ,但没有成功。

  • 问题内容: 我想使用urllib下载文件,并在保存之前对文件进行解压缩。 这就是我现在所拥有的: 最终将写入空文件。我该如何实现自己的追求? 更新的答案: 问题答案: 在写完之后,但要传递给之前,您需要寻找到开始的地方。否则它将被模块从头读取,并显示为空文件。见下文:

  • 这里我有几个文件夹中的Bookfolder(英语,印地语,日语)。将英语,印地语,日语转换为english.zip,hindi.zip和japanese.zip。一切都很好,我把zip文件和文件夹保存在Bookfolder中,这是我用java做的事情。但是当我手动解压缩zip文件ex:english.zip时,右键单击这里的解压缩,然后显示错误为意外的归档结束。这是我的代码。 当我提取新的zip文