FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章与书籍
  • UNIX 四分之一世纪
  • Unix 痛恨者手册
  • FreeBSD Port 开发者手册翻译项目
  • 编辑日志
  • 译者说明
  • FreeBSD Port 开发者手册
    • FreeBSD Port 开发者手册
  • 第 1 章 简介
    • 1.1.简介
  • 第 2 章 制作新的 port
    • 2.1.制作新的 port
  • 第 3 章 简单的 port
    • 3.1.编写 Makefile
    • 3.2.编写描述文件
    • 3.3.创建校验和文件
    • 3.4.测试 port
    • 3.5.用 portlint 来检查 port
    • 3.6.提交新的 port
  • 第 4 章 复杂的 Port
    • 4.1 Port 工作原理
    • 4.2.获取源代码
    • 4.3.修改 port
    • 4.4.打补丁
    • 4.5.配置
    • 4.6.处理用户输入
  • 第 5 章 配置 Makefile
    • 5.1.原始来源
    • 5.2.命名
    • 5.3.归类
    • 5.4.源代码包文件
    • 5.5.维护者(MAINTAINER)
    • 5.6.一句话说明(COMMENT)
    • 5.7.项目网站
    • 5.8.许可证
    • 5.9.PORTSCOUT
    • 5.10.依赖
    • 5.11.从属 port 和 MASTERDIR
    • 5.12.man 手册
    • 5.13.info 文件
    • 5.14.Makefile 参数
    • 5.15.特殊的工作目录
    • 5.16.解决冲突
    • 5.17.安装文件
    • 5.18. 使用 BINARY_ALIAS 来重命名命令,而不是在编译中打补丁
  • 第 6 章 特殊情况
    • 第 6 章 特殊情况
  • 第 7 章 Flavors
    • 7.1.Flavors 简介
    • 7.2.使用 FLAVORS
    • 7.3.USES=php 和 Flavors
    • 7.4.USES=python 和 Flavors
    • 7.5.USES=lua 和 Flavors
  • 第 8 章 高级 pkg-plist 实践
    • 8.1.根据 make 变量对 pkg-plist 进行修改
    • 8.2.空目录
    • 8.3.配置文件
    • 8.4.动态与静态软件包列表
    • 8.5.自动创建软件包列表
    • 8.6.用关键词扩展软件包列表
  • 第 9 章 pkg-*
    • 9.1.pkg-message(安装二进制包时显示的消息文件)
    • 9.2.pkg-install、pkg-pre-install 和 pkg-post-install(安装二进制包时执行的脚本文件)
    • 9.3.pkg-deinstall、pkg-pre-deinstall 和 pkg-post-deinstall(卸载时执行的脚本文件)
    • 9.4.修改 pkg-* 文件的名字
    • 9.5.使用 SUB_FILES 和 SUB_LIST
  • 第 10 章 测试 port
    • 10.1.运行 make describe
    • 10.2.运行 make test
    • 10.3.Portclippy / Portfmt
    • 10.4.Portlint
    • 10.5.Port 工具
    • 10.6.PREFIX 和 DESTDIR
    • 10.7.Poudriere
    • 10.8.调试 port
  • 第 11 章 升级 port
    • 11.1.使用 Git 制作补丁
    • 11.2.UPDATING 和 MOVED
  • 第 12 章 安全
    • 12.1.安全为何如此重要
    • 12.2.修复安全漏洞
    • 12.3.向社区通报情况
  • 第 13 章 该做什么和不该做什么
    • 第 13 章 该做什么和不该做什么
  • 第14章 一个简单的 port
    • 第 14 章 一个简单的 port
  • 第 15 章 在 Port Makefile 中变量的顺序
    • 第 15 章 在 Port Makefile 中变量的顺序
  • 第 16 章 保持更新
    • 第 16 章 保持更新
  • 第 17 章 使用 USES 宏
    • 第 17 章 使用 USES 宏
  • 第 18 章 __FreeBSD_version 的值
    • 第 18 章 __FreeBSD_version 的值
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 12.3.1. VuXML 数据库
  • 12.3.2. VuXML 简介
  • 12.3.3. 测试对 VuXML 数据库的更改
  • 12.3.4. 交叉检查衍生项目
在GitHub上编辑
导出为 PDF
  1. 第 12 章 安全

12.3.向社区通报情况

上一页12.2.修复安全漏洞下一页第 13 章 该做什么和不该做什么

最后更新于18天前

12.3.1. VuXML 数据库

在发现安全漏洞后,尽早通知 Port 用户社区是非常重要且紧急的步骤。这样的通知有两个目的。首先,如果风险真的很严重,最好立即采取临时解决方案。例如,停止受影响的网络服务,或者在漏洞修复前完全卸载该 Port。其次,很多用户通常只偶尔升级已安装的包。他们会从通知中得知,一旦有修复版本发布,就必须立即更新包。

鉴于 Ports 树中 Port 数量庞大,不能在每个事件发生时都发布安全公告,这样会造成信息泛滥,导致观众对真正严重的事件失去关注。因此,发现的 Ports 中的安全漏洞会被记录在 中。安全官员团队成员也会监视它,处理需要他们干预的问题。

提交者可以自己更新 VuXML 数据库,协助安全官员团队,并更快速地向社区提供关键信息。对于那些不是提交者,或者发现了特别严重的漏洞的人,应当毫不犹豫地直接联系安全官员团队,联系方式可以在 页面上找到。

VuXML 数据库是一个 XML 文档。其源文件 vuln.xml 保存在 Port 中。因此,该文件的完整路径将是 PORTSDIR/security/vuxml/vuln.xml。每当发现一个新的 Port 安全漏洞时,请将该条目添加到该文件中。在熟悉 VuXML 之前,最好先找到一个现有条目作为模板,复制并使用它。

12.3.2. VuXML 简介

完整的 XML 格式非常复杂,超出了本书的范围。然而,要基本了解 VuXML 条目的结构,只需要了解标签的概念。XML 标签名称用尖括号括起来。每个打开的 <tag> 必须有一个匹配的关闭标签 </tag>。标签可以嵌套。如果是嵌套的,必须先关闭内部标签,再关闭外部标签。标签有层次结构,即更复杂的嵌套规则。这与 HTML 类似。主要的区别在于,XML 是 eXtensible(可扩展的),即基于定义自定义标签。由于 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>

标签名称应该是不言自明的,因此我们只详细说明需要填写的字段:

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

  • ③ 这里列出受影响的包名称。可以列出多个名称,因为多个包可能基于同一个主 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)。新条目不得包含该字段。仅在编辑现有条目时添加。

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

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

首先检查是否已有该漏洞的条目。如果已有,该条目应能匹配该包的前一个版本 2013.58:

% pkg audit dropbear-2013.58

如果未找到匹配条目,则为此漏洞添加一个新条目:

% cd ${PORTSDIR}/security/vuxml
% make newentry
% 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

验证语法和格式是否正确:

% make validate

上述命令会生成 vuln-flat.xml 文件,也可以使用以下命令生成:

% make vuln-flat.xml

注意

验证条目中的 <affected> 区块是否能匹配正确的包版本:

% 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.

能匹配旧版本,不会匹配新版本则。

12.3.4. 交叉检查衍生项目

① 这是 VuXML 条目的顶层标签。它有一个必需的属性 vid,指定该条目的通用唯一标识符(UUID,用引号括起来)。每个新的 VuXML 条目都应生成一个 UUID(并且不要忘记用其替换模板 UUID,除非是从头编写条目)。使用 来生成 VuXML UUID。

⑨ 这是一个 。

⑩ 这是一个 。

⑪ 这是一个 标识符。

⑫ 这是一个 漏洞说明。

⑬ 这是一个 技术网络安全警报。

前提是安装最新版的 Port。

如果该漏洞具有 标识符,可以使用以下命令代替:

其中 FreeBSD-SA-YY-XXXXXX.asc 是已发布的 。

至少需要安装以下其中一个包:、。

如果上游项目存在已知漏洞,应检查 Ports 树中该项目的衍生版本或分支是否也受影响。例如,如果在 中发现漏洞,应评估类似的衍生项目,如 、 或其他类似项目是否也存在相同漏洞。请在 VuXML 条目中列出所有受影响的衍生项目,以确保这些 Ports 的用户也能获知相关信息。

FreeBSD VuXML 数据库
FreeBSD 安全信息
security/vuxml
uuidgen(1)
FreeBSD 安全公告
FreeBSD 问题报告
MITRE CVE
US-CERT
US-CERT
security/vuxml
MITRE CVE
FreeBSD 安全公告
textproc/libxml2
textproc/jade
www/firefox
www/librewolf
www/waterfox