关于行业中的漏洞披露
漏洞披露是一个领域,其中漏洞报告者(例如安全研究人员)与项目维护者之间的协作非常重要。从发现潜在有害的安全漏洞的那一刻起,到向全世界公开漏洞(理想情况下,同时提供补丁),双方都需要通力合作。通常,当有人私下向维护者报告安全漏洞时,维护者会开发修复程序,对其进行验证,并通知项目或软件包的用户。
漏洞的初始报告是私下进行的,只有在维护者确认问题并理想情况下提供补救措施或补丁后才会发布完整详细信息,有时会延迟一段时间以允许更多时间安装补丁。有关更多信息,请参阅 OWASP 备忘单系列网站上的“关于漏洞披露的 OWASP 备忘单系列”。
漏洞报告者的最佳实践
建议将漏洞私下报告给维护者。作为漏洞报告者,在可能的情况下,我们建议您避免以下行为:
- 在没有给维护者机会进行补救的情况下公开披露漏洞。
- 绕过维护者。
- 在修复版代码可用之前披露漏洞。
- 在没有公开漏洞赏金计划的情况下,期望因报告问题而获得补偿。
如果漏洞报告者尝试联系维护者但未收到回复,或者联系维护者后被要求等待过长时间才能披露,则可以公开披露漏洞。
我们建议漏洞报告者将其披露策略的条款作为其报告流程的一部分明确说明。即使漏洞报告者不遵守严格的策略,也建议您就漏洞披露的时间安排向维护者设定明确的期望。有关披露策略的示例,请参阅 GitHub 安全实验室网站上的“安全实验室的披露策略”。
维护者的最佳实践
作为维护者,建议您明确指出希望通过何种方式以及在何处接收漏洞报告。如果此信息不明确,漏洞报告者将不知道如何联系您,并且可能会诉诸于从 Git 提交历史记录中提取开发者电子邮件地址以尝试找到合适的安全联系人。这可能导致摩擦、报告丢失或未解决报告的发布。
维护者应及时披露漏洞。如果您的代码库中存在安全漏洞,我们建议您:
- 在您的回复和披露中,将漏洞视为安全问题,而不是简单的错误。例如,您需要在发行说明中明确提及该问题是安全漏洞。
- 尽快确认收到漏洞报告,即使没有立即可用于调查的资源。这表明您响应迅速并采取行动,并为维护者与漏洞报告者之间的后续互动奠定积极的基调。
- 在您验证报告的影响和真实性时,请让漏洞报告者参与其中。漏洞报告者可能已经花时间在各种场景中考虑了该漏洞,其中一些场景您可能自己没有考虑过。
- 以您认为合适的方式修复问题,并仔细考虑漏洞报告者提供的任何疑虑和建议。通常,漏洞报告者会了解某些特殊情况和修复绕过方法,如果没有安全研究背景,很容易错过这些方法。
- 在您为发现者署名时,始终感谢漏洞报告者。
- 尽快发布修复程序。
- 在您披露漏洞时,确保让更广泛的生态系统了解该问题及其补救措施。在某些情况下,项目当前开发分支中已修复了已知的安全问题,但提交或后续版本并未明确标记为安全修复或版本,这种情况并不少见。这可能会导致下游使用者出现问题。
发布安全漏洞的详细信息并不会让维护者看起来很糟糕。软件中的任何地方都存在安全漏洞,用户会信任那些拥有明确且已建立的安全漏洞披露流程的维护者。
关于 GitHub 上项目的漏洞报告和披露
GitHub 上提供两种流程:
- 标准流程:漏洞报告者使用代码库安全策略中提供的联系信息与代码库维护者取得联系。然后,代码库维护者根据需要创建代码库安全公告草稿。
- 私有漏洞报告:漏洞报告者通过提出仓库咨询草案并提供其发现的详细信息,直接且私下地向仓库维护者披露漏洞详细信息。
标准流程
GitHub 上的项目漏洞报告和披露流程如下所示
如果您是漏洞报告者(例如,安全研究人员)并且想要报告漏洞,请首先检查相关仓库是否有安全策略。有关更多信息,请参阅“向您的仓库添加安全策略”。如果有,请遵循该策略了解流程,然后再联系该仓库的安全团队。
如果没有安全策略,与维护者建立私下沟通的最有效方式是创建一个问题,要求提供首选的安全联系人。需要注意的是,该问题将立即公开可见,因此不应包含任何有关漏洞的信息。一旦建立沟通,您可以建议维护者为将来使用定义安全策略。
注意
仅限 npm - 如果我们收到有关 npm 包中恶意软件的报告,我们会尝试私下联系您。如果您没有及时解决问题,我们将公开披露。有关更多信息,请参阅 npm 文档网站上的“报告 npm 包中的恶意软件”。
如果您在 GitHub 中发现了安全漏洞,请通过我们的协调披露流程报告漏洞。有关更多信息,请参阅 GitHub 安全漏洞赏金 网站。
如果您是维护者,您可以从流程的起始阶段开始接管流程,方法是为您的仓库设置安全策略,或以其他方式清楚地提供安全报告说明,例如在项目的自述文件(README)中。有关添加安全策略的信息,请参阅“向您的仓库添加安全策略”。如果没有安全策略,漏洞报告者可能会尝试通过电子邮件或其他方式私下联系您。或者,有人可能会公开发布包含安全问题详细信息的问题。
作为维护者,要披露代码中的漏洞,您首先需要在 GitHub 中的包仓库中创建安全咨询草案。仓库安全咨询允许公共仓库的维护者私下讨论和修复项目中的安全漏洞。在协作修复后,仓库维护者可以发布安全咨询,向项目的社区公开披露安全漏洞。通过发布安全咨询,仓库维护者可以更轻松地让其社区更新包依赖项并研究安全漏洞的影响。有关更多信息,请参阅“关于仓库安全咨询”。
要开始,请参阅“创建仓库安全咨询”。
私有漏洞报告
公共仓库的所有者和管理员可以在其仓库上启用私有漏洞报告。有关更多信息,请参阅“配置仓库的私有漏洞报告”。
私有漏洞报告为漏洞报告者提供了一种简单的方法,可以在 GitHub 中私下向仓库维护者披露安全风险,并且能够立即通知仓库维护者该问题。有关安全研究人员和仓库维护者的更多信息,请分别参阅“私下报告安全漏洞”和“管理私下报告的安全漏洞”。
注意
如果包含漏洞的仓库未启用私有漏洞报告,则安全研究人员和仓库维护者都需要遵循上面“标准流程”部分中描述的说明。