12.3.向社区通报情况
最后更新于
最后更新于
在发现安全漏洞后,尽早通知 Port 用户社区是非常重要且紧急的步骤。这样的通知有两个目的。首先,如果风险真的很严重,最好立即采取临时解决方案。例如,停止受影响的网络服务,或者在漏洞修复前完全卸载该 Port。其次,很多用户通常只偶尔升级已安装的包。他们会从通知中得知,一旦有修复版本发布,就必须立即更新包。
鉴于 Ports 树中 Port 数量庞大,不能在每个事件发生时都发布安全公告,这样会造成信息泛滥,导致观众对真正严重的事件失去关注。因此,发现的 Ports 中的安全漏洞会被记录在 中。安全官员团队成员也会监视它,处理需要他们干预的问题。
提交者可以自己更新 VuXML 数据库,协助安全官员团队,并更快速地向社区提供关键信息。对于那些不是提交者,或者发现了特别严重的漏洞的人,应当毫不犹豫地直接联系安全官员团队,联系方式可以在 页面上找到。
VuXML 数据库是一个 XML 文档。其源文件 vuln.xml 保存在 Port 中。因此,该文件的完整路径将是 PORTSDIR/security/vuxml/vuln.xml。每当发现一个新的 Port 安全漏洞时,请将该条目添加到该文件中。在熟悉 VuXML 之前,最好先找到一个现有条目作为模板,复制并使用它。
完整的 XML 格式非常复杂,超出了本书的范围。然而,要基本了解 VuXML 条目的结构,只需要了解标签的概念。XML 标签名称用尖括号括起来。每个打开的 <tag>
必须有一个匹配的关闭标签 </tag>
。标签可以嵌套。如果是嵌套的,必须先关闭内部标签,再关闭外部标签。标签有层次结构,即更复杂的嵌套规则。这与 HTML 类似。主要的区别在于,XML 是 eXtensible(可扩展的),即基于定义自定义标签。由于 XML 的固有结构,它将原本无序的数据整理成形。VuXML 特别为标记安全漏洞描述而设计。
现在考量一个实际的 VuXML 条目:
标签名称应该是不言自明的,因此我们只详细说明需要填写的字段:
② 这是所发现问题的一行描述。
③ 这里列出受影响的包名称。可以列出多个名称,因为多个包可能基于同一个主 Port 或软件产品。这可能包括稳定版和开发版、本地化版本,以及具有不同重要构建配置选项的从属 Port。
④ 这里以一个或多个范围形式指定受影响包的版本,使用 <lt>
, <le>
, <gt>
, <ge>
, 和 <range>
元素的组合。请检查给出的版本范围是否没有重叠。在范围说明中,*
(星号)表示最小的版本号。特别地,2.*
小于 2.a
。因此可以使用星号来匹配所有可能的 alpha
、beta
和 RC
版本。例如,2.3.*
会选择性地匹配每个 2.x
版本,而 2.03.0
不会,因为它跳过了 2.r3
并匹配了 3.b
。上述示例表示受影响的版本包括 1.6
到但不包括 1.9
,2.x
版本中小于 2.4_1
的部分,以及版本 3.0b1
。
⑤ 在 <package>
区块中可以列出若干相关包组(本质上是 Ports)。当多个软件产品(比如 FooBar、FreeBar 和 OpenBar)源自同一代码库并共享其漏洞时可使用此方式。请注意这与在一个 <name>
区块中列出多个名称的不同。
⑥ 版本范围必须考虑 PORTEPOCH
和 PORTREVISION
(如适用)。请记住,根据排序规则,带有非零 PORTEPOCH
的版本大于任何没有 PORTEPOCH
的版本,例如,3.0,1
大于 3.1
,甚至大于 8.9
。
⑦ 这是问题的摘要说明。本字段使用 XHTML。至少要有包裹内容的 <description>
和 </description>
标签。可以使用更复杂的标记,但仅限于准确性和清晰性的目的:请勿添加视觉效果装饰。
⑧ 本节包含相关文档的引用。建议尽可能多地提供适用的引用。
⑭ 这是邮件列表中存档帖子的 URL。可选属性 msgid
可用于指定该帖子的消息 ID。
⑮ 这是一个通用 URL,仅在其他引用类别都不适用时才使用。
⑯ 这是问题公开披露的日期(YYYY-MM-DD)。
⑰ 这是该条目添加的日期(YYYY-MM-DD)。
⑱ 这是该条目中任意信息最后一次修改的日期(YYYY-MM-DD)。新条目不得包含该字段。仅在编辑现有条目时添加。
本例描述了一个关于 dropbear
包的新漏洞条目,该漏洞在版本 dropbear-2013.59
中已修复。
首先检查是否已有该漏洞的条目。如果已有,该条目应能匹配该包的前一个版本 2013.58
:
如果未找到匹配条目,则为此漏洞添加一个新条目:
其中 CVE-YYYYY-XXXX
是有效的 CVE 标识符。
如果该漏洞是 FreeBSD 安全公告,可使用以下命令代替:
验证语法和格式是否正确:
上述命令会生成 vuln-flat.xml 文件,也可以使用以下命令生成:
注意
验证条目中的 <affected>
区块是否能匹配正确的包版本:
确保该条目不会错误地匹配不受影响的版本。
现在检查是否匹配正确的版本范围:
能匹配旧版本,不会匹配新版本则。
① 这是 VuXML 条目的顶层标签。它有一个必需的属性 vid
,指定该条目的通用唯一标识符(UUID,用引号括起来)。每个新的 VuXML 条目都应生成一个 UUID(并且不要忘记用其替换模板 UUID,除非是从头编写条目)。使用 来生成 VuXML UUID。
⑨ 这是一个 。
⑩ 这是一个 。
⑪ 这是一个 标识符。
⑫ 这是一个 漏洞说明。
⑬ 这是一个 技术网络安全警报。
前提是安装最新版的 Port。
如果该漏洞具有 标识符,可以使用以下命令代替:
其中 FreeBSD-SA-YY-XXXXXX.asc
是已发布的 。
至少需要安装以下其中一个包:、。
如果上游项目存在已知漏洞,应检查 Ports 树中该项目的衍生版本或分支是否也受影响。例如,如果在 中发现漏洞,应评估类似的衍生项目,如 、 或其他类似项目是否也存在相同漏洞。请在 VuXML 条目中列出所有受影响的衍生项目,以确保这些 Ports 的用户也能获知相关信息。