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>

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

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 中文社区