12.3.向社区通报情况

12.3.1. VuXML 数据库

发现安全漏洞后,尽快通知port用户社区是非常重要和紧急的步骤。这样的通知有两个目的。首先,如果危险确实很严重,立即采取应急措施是明智的。例如,停止受影响的网络服务,甚至完全卸载port,直到漏洞得到修复。其次,许多用户只偶尔升级安装的软件包。他们会从通知中得知,一旦修正版本可用,必须立即更新软件包。

鉴于树中ports的数量庞大,每次事件都发布安全通告会造成信息泛滥,当涉及真正严重的事项时,会失去受众的注意。因此,在 FreeBSD VuXML 数据库中记录ports中发现的安全漏洞。安全官员团队成员也监视这些需要他们干预的问题。

提交者可以自行更新 VuXML 数据库,协助安全官员团队,并更快地向社区传递关键信息。那些不是提交者或发现了异常严重漏洞的人不应该犹豫,应该直接联系安全官员团队,如 FreeBSD 安全信息页面所述。

VuXML 数据库是一个 XML 文档。其源文件 vuln.xml 位于port security/vuxml 中。因此,文件的完整路径名将是 PORTSDIR/security/vuxml/vuln.xml。每当在port中发现安全漏洞时,请在该文件中添加一个条目。在熟悉 VuXML 之前,最好的做法是找到一个适合当前情况的现有条目,然后复制并将其用作模板。

12.3.2. VuXML 简介

完整的 XML 格式很复杂,远远超出了本书的范围。然而,为了对 VuXML 条目的结构有基本了解,只需要了解标签的概念。XML 标签名被尖括号括起来。每个开放标签必须有一个匹配的闭合标签。标签可以嵌套。如果嵌套,内部标签必须在外部标签之前关闭。标签有一个层次结构,即更复杂的嵌套规则。这类似于 HTML。主要区别在于 XML 是可扩展的,即基于定义自定义标签。由于其固有结构,XML 将其他无定形的数据整理成形。VuXML 特别适用于标记安全漏洞描述。

现在考虑一个现实的 VuXML 条目:

<vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> 
  <topic>Several vulnerabilities found in Foo</topic> 
  <affects>
    <package>
      <name>foo</name> 
      <name>foo-devel</name>
      <name>ja-foo</name>
      <range><ge>1.6</ge><lt>1.9</lt></range> 
      <range><ge>2.*</ge><lt>2.4_1</lt></range>
      <range><eq>3.0b1</eq></range>
    </package>
    <package>
      <name>openfoo</name> 
      <range><lt>1.10_7</lt></range> 
      <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>
    </package>
  </affects>
  <description>
    <body xmlns="http://www.w3.org/1999/xhtml">
      <p>J. Random Hacker reports:</p> 
      <blockquote
        cite="http://j.r.hacker.com/advisories/1">
        <p>Several issues in the Foo software may be exploited
          via carefully crafted QUUX requests.  These requests will
          permit the injection of Bar code, mumble theft, and the
          readability of the Foo administrator account.</p>
      </blockquote>
    </body>
  </description>
  <references> 
    <freebsdsa>SA-10:75.foo</freebsdsa> 
    <freebsdpr>ports/987654</freebsdpr> 
    <cvename>CVE-2023-48795</cvename> 
    <certvu>740169</certvu> 
    <uscertta>SA10-99A</uscertta> 
    <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> 
    <url>http://j.r.hacker.com/advisories/1</url> 
  </references>
  <dates>
    <discovery>2010-05-25</discovery> 
    <entry>2010-07-13</entry> 
    <modified>2010-09-17</modified> 
  </dates>
</vuln>

标记名称应该是不言自明的,因此我们只会更仔细地查看需要填写的字段:

这是 VuXML 条目的顶层标记。它有一个必需属性, vid ,为该条目指定一个通用唯一标识符(UUID)(用引号括起来)。为每个新的 VuXML 条目生成一个 UUID(不要忘记用 uuidgen(1)生成 VuXML UUID 并将其替换为模板 UUID)。

这是发现的问题的一行描述。

受影响的软件包名称列在那里。可以给出多个名称,因为几个软件包可能基于单个主 port 或软件产品。这可能包括稳定和开发分支,本地化版本和包含不同重要构建时间配置选项选择的从属 ports。

软件包的受影响版本在那里指定为使用 , , , 和 元素的一个或多个范围的组合。检查给定的版本范围是否不重叠。 在范围规范中, * (星号)表示最小版本号。特别地, 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 。

几个相关的软件包组(基本上,ports)可以在 部分中列出。如果几个软件产品(比如 FooBar、FreeBar 和 OpenBar)是从同一代码库发展而来,并且仍然共享其错误和漏洞,则可以使用此功能。请注意,这与在单个 部分中列出多个名称的区别。

版本范围必须允许 PORTEPOCH 和 PORTREVISION (如果适用)。请记住,根据排序规则,具有非零 PORTEPOCH 的版本大于任何不含 PORTEPOCH 的版本,例如, 3.0,1 大于 3.1 ,甚至大于 8.9 。

这是问题摘要。XHTML 用于此字段。至少必须出现

。可以使用更复杂的标记,但仅用于准确性和清晰度:请勿添加花哨的内容。

此部分包含对相关文档的引用。鼓励提供尽可能多的参考文献。

这是一个 FreeBSD 安全公告。

这是一个 FreeBSD 问题报告。

这是一个 MITRE CVE 标识符。

这是一个 US-CERT 漏洞通告。

这是一个 US-CERT 技术网络安全警报。

这是一个存档在邮件列表中的帖子的网址。属性 msgid 是可选的,可以指定帖子的消息 ID。

这是一个通用的网址。只有当其他参考类别都不适用时才使用。

这是问题披露的日期(YYYY-MM-DD)。

这是条目添加的日期(YYYY-MM-DD)。

这是条目中的任何信息上次修改的日期(YYYY-MM-DD)。新条目不得包括此字段。在编辑现有条目时添加它。

12.3.3. 测试对 VuXML 数据库的更改

此示例描述了软件包 dropbear 中的一个漏洞的新条目,该漏洞已在版本 dropbear-2013.59 中修复。

作为先决条件,安装一个新版本的安全/vuxml port。

首先,检查是否已经有关于这个漏洞的条目。如果有这样的条目,它将匹配先前版本的软件包, 2013.58 :

% pkg audit dropbear-2013.58

如果找不到任何条目,请为这个漏洞添加一个新条目。

% cd ${PORTSDIR}/security/vuxml
% make newentry

如果漏洞具有 MITRE CVE 标识符,则可以改用以下命令:

% cd ${PORTSDIR}/security/vuxml
% make newentry CVE_ID=CVE-YYYY-XXXXX

其中 CVE-YYYYY-XXXX 是有效的 CVE 标识符。

如果漏洞是 FreeBSD 安全公告,则可以改用以下命令:

% cd ${PORTSDIR}/security/vuxml
% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc

其中 FreeBSD-SA-YY-XXXXXX.asc 是一个已发布的 FreeBSD 安全公告。

验证其语法和格式:

% make validate

前一个命令会生成 vuln-flat.xml 文件。也可以使用以下命令生成:

% make vuln-flat.xml

验证该条目的 部分是否匹配正确的软件包:

% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58

确保该条目在输出中不产生错误匹配。

现在检查是否匹配正确的软件包版本:

% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59
dropbear-2012.58 is vulnerable:
dropbear -- exposure of sensitive information, DoS
CVE: CVE-2013-4434
CVE: CVE-2013-4421
WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html

1 problem(s) in the installed packages found.

前者版本匹配,而后者版本不匹配。

最后更新于

FreeBSD 中文社区