Exiv2的Blue-teaming:创建安全咨询流程

这篇博客文章是关于加强Exiv2项目安全性的系列文章中的第一篇。我的目标是分享一些技巧,帮助您加强自己项目的安全性。

|
| 7分钟

这篇博客文章是关于加强Exiv2公司项目。我使用Exiv2所采取的大多数步骤通常适用于其他项目,因此我的目标是分享一些技巧,希望这些技巧能帮助您加强自己项目的安全性。有时,最简单的学习方法是以身作则。例如,我发现它更容易开始libFuzzer软件从另一个项目复制设置,而不是阅读文档。因此,我正在分享Exiv2中的示例,希望能对您有所帮助。

本系列将有四个帖子:

  1. 创建安全咨询流程
  2. Kev的三条漏洞修复规则
  3. 将自定义CodeQL查询添加到代码扫描
  4. 添加libFuzzer目标并在OSS-Fuzz中注册Exiv2

关于Exiv2

Exiv2是一个命令行实用程序和C++库,用于读取或修改图像文件的元数据。去年,我写了一篇博客帖子关于我如何成为Exiv2公司并描述了我如何使用AFL公司搜索Exiv2中的错误。最后,我自信地预测,模糊化不太可能在Exiv2中发现更多的错误。我的预测维持了将近一年的时间,但最近又有更多的错误开始出现#15222021年4月5日报道。

发生了什么变化?最近似乎有几个人对Exiv2的模糊化感兴趣,并开始测试Exiv2中的许多命令行选项。去年我对Exiv2进行模糊处理时,我只测试了Exiv2的默认配置,没有任何额外的命令行选项。属于20个新问题最近发现,只有四个影响Exiv2的默认配置:越界读取由找到@玉龙,一个未初始化变量也由发现@玉龙,一个无限循环我发现了,并且越界读取由我发现。其他需要额外的命令行选项。我认为很少有人从互联网上下载不受信任的图像,并在上面运行带有额外选项的Exiv2,所以我认为此类错误的安全风险非常小。但修复这些错误要比争论它们的重要性容易得多,所以我欢迎这些错误报告。

我喜欢为Exiv2做贡献的一个原因是,它允许我从另一方面看到安全性。我的主要工作是GitHub安全实验室就是发现并报告开源项目中的漏洞。我通常站在进攻端,或“红色团队”,但对于Exiv2,我站在防守端,即“蓝色团队”。蓝色团队没有什么荣耀,只是需要修复的低严重性错误似乎源源不断。当我向其他项目报告错误时,我希望我的蓝色团队经验能帮助我更多地同理心。

为Exiv2创建安全咨询流程

当新的一批漏洞开始涌入时,其发生方式与过去相同,公开问题包括这个。目前,开源存储库没有一种很好的方式来私下接受安全披露,但我将解释我们如何使用我们的安全策略和GitHub安全咨询用于Exiv2。安全咨询与机密问题类似,只是它只能由项目管理员打开。

安全.md

创建安全咨询流程的第一步是添加安全策略。在GitHub上执行此操作的建议方法是添加名为安全.md。策略显示在安全选项卡项目的:

显示安全选项卡的屏幕截图

请注意,security选项卡还显示了为项目发布的安全建议。稍后将详细介绍。

可以读取Exiv2的安全策略在这里。我选择了提供自己的电子邮件地址作为安全联系人地址的低技术解决方案。一个更理想的解决方案是创建一个官方电子邮件地址,比如security@exiv2.org,但我想尽快完成,不会因为创建新邮件列表而分心。1我的意图是使电子邮件对话尽可能简短。当我收到一封关于Exiv2中某个漏洞的电子邮件时,我创建了一份安全公告草案,并邀请报告该问题的人成为该公告的合作者。所有后续沟通都可以在公告的评论部分进行。

我们试图强调安全政策中的几点重要内容:

  1. 复制步骤。没有什么比收到不清楚的错误报告更糟糕的了,所以政策包含了关于预期结果的详细说明。
  2. 漏洞何时成为安全问题?例如,一个只存在于主分支而不存在于Exiv2官方版本中的错误是一个常规错误,而不是安全问题。

安全提示功能

要创建安全咨询,您需要是项目管理员。转到“安全”选项卡,单击安全公告链接,您将看到此绿色按钮(如果您是管理员):

起草新安全公告的选项截图

GitHub Security Advisories有几个很酷的功能。创建咨询时,它最初位于草案状态,它允许您使用它进行有关漏洞的私下讨论,并在发布之前准备公告的文本。我最喜欢的功能是您可以请求CVE。CVE是漏洞的唯一标识号。申请简历过去是发布公告中比较乏味的部分之一,但现在只需点击按钮即可。我还喜欢该咨询有一个信用卡报告漏洞的人的字段。例如,这个建议记入@亨尼塞斯.

临时私人叉子是另一个很酷的功能。您可以使用它们来协作修复,在准备发布公告之前,将代码更改保密。公告发布后叉消失了,所以我不能给你看一个,但是是来自临时私有分叉的合并提交示例。我必须承认,我已停止在Exiv2中使用临时私有分岔。它们有一个缺点:像GitHub Actions这样的自动检查无法运行。这是因为存在一种风险,即自动检查可能会意外破坏对该漏洞的禁运。例如,Exiv2使用Codecov公司检查pull请求的代码覆盖率,包括将代码覆盖率数据上传到Codecov。这通常是一件好事,Codecov是一个非常有用的工具,用于检查新代码是否正确测试,但它可能不适合于仍处于禁运状态的高度敏感的安全修复程序。然而,最近在Exiv2中发现的漏洞没有一个严重到足以保证这种程度的保密性。因此,我一直在将修复程序开发为常规(公共)拉取请求,以获得自动检查的好处。如果我收到一个在Exiv2中实现代码执行的PoC,那么我将使用一个临时私有分叉来实现修复。

结论

这是关于加强Exiv2安全性的四部分系列中的第一篇博客。这篇文章是关于使用安全.md定义安全策略以及如何请求CVE和发布安全咨询。请下周再来看看第二部分,我在其中阐述了我的三条错误修复规则。

跟随推特上的GitHub安全实验室了解最新的安全研究。


1 提供公共电子邮件地址是维护人员共同关心的问题。我意识到,作为一个白人,我收到侮辱性电子邮件的风险要比一些人低得多。此外,我的电子邮件地址已经很容易在不同的地方找到,例如我的git提交历史记录,所以我认为在Exiv2的安全策略中发布它不会增加太多额外的风险。

编写人

相关职位