跳到内容

安全问题

编辑此页

本文档解释了 Symfony 核心团队如何处理 Symfony 安全问题(Symfony 是托管在主要 symfony/symfony Git 仓库中的代码)。

报告安全问题

如果您认为您在 Symfony 中发现了安全问题,请不要使用 bug 跟踪器,也不要公开它。相反,所有安全问题都必须发送至 security [at] symfony.com。发送到此地址的电子邮件将转发到 Symfony 核心团队的私有邮件列表。

以下问题不被视为安全问题,应作为常规 bug 修复处理(如果您有任何疑问,请随时发送电子邮件给我们以进行确认):

  • 在调试工具中发现的任何安全问题,这些工具绝不能在生产环境中启用(包括 Web 分析器或在 APP_DEBUG 设置为 trueAPP_ENV 设置为除 prod 之外的任何值时启用的任何内容);
  • 在为测试提供的类中发现的任何安全问题,这些类绝不应在生产环境中使用(例如名称中包含 Mock 的模拟类或 Test 命名空间中的类);
  • 任何可以归类为安全加固的修复,例如路由枚举、登录节流绕过、拒绝服务攻击、定时攻击或缺少 SensitiveParameter 属性。

在任何情况下,核心团队对哪些问题被视为安全漏洞拥有最终决定权。

安全漏洞赏金

Symfony 是一个开源项目,其中大部分工作由志愿者完成。我们感谢开发人员尝试查找 Symfony 中的安全问题并负责任地报告它们,但我们目前无法支付漏洞赏金。

解决流程

对于每份报告,我们首先尝试确认漏洞。确认后,核心团队将按照以下步骤制定解决方案:

  1. 向报告者发送确认函;
  2. 制定补丁;
  3. mitre.org 获取 CVE 标识符;
  4. 为 Symfony 官方 博客 撰写关于该漏洞的安全公告。此帖子应包含以下信息:

    • 始终包含“安全发布”字符串的标题;
    • 漏洞描述;
    • 受影响的版本;
    • 可能的漏洞利用;
    • 如何修补/升级/绕过受影响的应用程序;
    • CVE 标识符;
    • 致谢。
  5. 将补丁和公告发送给报告者以供审核;
  6. 将补丁应用于所有维护的 Symfony 版本;
  7. 为所有受影响的版本打包新版本;
  8. 在 Symfony 官方 博客 上发布帖子(也必须将其添加到“`安全公告`_”类别);
  9. 更新由 FriendsOfPHP 组织维护的公共 安全公告数据库,该数据库由 check:security 命令 使用。

注意

包含安全问题的版本不应在星期六或星期日发布,除非该漏洞已公开。

注意

在我们制定补丁时,请不要公开该问题。

注意

解决问题所需的时间从几天到一个月不等,具体取决于问题的复杂程度以及与下游项目的协调(请参阅下一段)。

与下游开源项目协作

由于 Symfony 被许多大型开源项目使用,我们标准化了 Symfony 安全团队与下游项目在安全问题上的协作方式。流程如下:

  1. 在 Symfony 安全团队确认安全问题后,它会立即向下游项目安全团队发送电子邮件,告知他们该问题;
  2. Symfony 安全团队创建一个私有 Git 仓库,以方便就该问题进行协作,并向 Symfony 安全团队、受该问题影响的 Symfony 贡献者以及每个下游项目的一名代表授予对该仓库的访问权限;
  3. 所有有权访问私有仓库的人员都通过拉取请求、代码审查和评论来协作解决问题;
  4. 找到修复程序后,所有相关项目都会协作寻找联合发布的最佳日期(不能保证所有发布都会在同一时间,但我们将尽力使它们在同一时间左右发布)。当已知该问题未在野外被利用时,两周的时间被认为是合理的时间量。

参与此过程的下游项目列表保持尽可能小,以便更好地管理披露前机密信息的流动。因此,项目是否包含在内由 Symfony 安全团队自行决定。

截至今天,以下项目已验证此过程,并且是此过程中包含的下游项目的一部分:

  • Drupal(发布通常在星期三进行)
  • eZPublish

问题严重性

为了确定安全问题的严重性,我们会考虑任何潜在攻击的复杂性、漏洞的影响以及可能影响的项目数量。这个 15 分的总分随后会转换为以下级别:低、中、高、严重或特殊。

攻击复杂度

根据利用漏洞的复杂程度,得分介于 1 到 5 之间

  • 4 - 5 基本:攻击者必须遵循一组简单的步骤
  • 2 - 3 复杂:攻击者必须遵循非直观的步骤,且具有高度的依赖性
  • 1 - 2 高:成功的攻击取决于超出攻击者控制范围的条件。也就是说,成功的攻击无法随意完成,但需要攻击者在预期成功攻击之前,投入一定量的精力来准备或执行针对易受攻击组件的攻击。

影响

以下领域的得分相加得出总分。“影响”的得分上限为 6 分。每个领域的得分介于 0 到 4 分之间。

  • 完整性:此漏洞是否会导致非公开数据可访问?如果是,攻击者是否可以控制泄露的数据?(0-4)
  • 披露:此漏洞是否允许系统数据(或系统处理的数据)被泄露?如果是,攻击者是否可以控制修改?(0-4)
  • 代码执行:该漏洞是否允许在最终用户的系统或运行该系统的服务器上执行任意代码?(0-4)
  • 可用性:服务或应用程序的可用性是否受到影响?是可用性降低还是服务/应用程序的完全丧失可用性?可用性包括网络服务(例如,数据库)或资源,例如网络带宽、处理器周期或磁盘空间的消耗。(0-4)

受影响的项目

以下领域的得分相加得出总分。“受影响的项目”的得分上限为 4 分。

  • 它会影响使用组件的部分或全部用户吗?(1-2)
  • 会导致这种情况的组件使用是否已被认为是糟糕的做法?(0-1)
  • 组件有多常见/流行(例如,Console 与 HttpFoundation 与 Lock)?(0-2)
  • 是否有许多知名的开源项目使用 Symfony 受到影响,需要协调发布?(0-1)

总分

  • 攻击复杂度:1 - 5
  • 影响:1 - 6
  • 受影响的项目:1 - 4

严重级别

  • 低:1 - 5
  • 中:6 - 10
  • 高:11 - 12
  • 严重:13 - 14
  • 特殊:15

安全公告

提示

您可以使用 check:security 命令 检查您的 Symfony 应用程序是否存在已知的安全漏洞。

查看 安全公告 博客类别,获取 Symfony 版本中修复的所有安全漏洞的列表,从 Symfony 1.0.0 开始。

本作品,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本