製品ごとのセキュリティリスクの調査

こんにちは、Red Hat の Middleware Technical Account Manager のイアンです。

Red Hat Security Data ページに提供されている daysofrisk.pl というスクリプトがご存知でしょうか?このスクリプトを使っていただくと、特定の製品のセキュリティ更新の数とその一覧を簡単に取得することが可能です。

NOTE: 当記事は Red Hat TAM Blog に公開された Getting a list of fixes for a Red Hat product between two dates is easy with daysofrisk.pl を参照して作成しました。

準備

始める前に、スクリプトとスクリプトが利用するデータをダウンロードしてください。Linux環境の場合は以下のようなコマンドを実行します。

$ mkdir security_review
$ cd security_review
$ wget https://www.redhat.com/security/data/metrics/release_dates.txt https://www.redhat.com/security/data/metrics/rhsamapcpe.txt https://www.redhat.com/security/data/metrics/cve_dates.txt https://www.redhat.com/security/data/metrics/daysofrisk.pl
$ chmod 700 daysofrisk.pl

準備が整いましたら、daysofrisk.pl を実行しましょう。

脆弱性報告数の取得

例えば、Red Hat JBoss Enterprise Application Platform 7.2 (以降EAPとして表記) の Critical、Important および Moderate のセキュリティ更新を確認したい場合は以下のコマンドを実行します。

$ ./daysofrisk.pl --cpe jboss_enterprise_application_platform:7.2 --severity CIM

EAP 7.2 の Common Platform Enumeration(略: CPE) の製品名が jboss_enterprise_application_platform:7.2 になります。重大度を絞り込むために --severity CIM のオプションを使って、Critical、Important および Moderate のセキュリティ更新のみにします(重大度Lowを除外しています)。

NOTE: 他のコマンドライン引数に関しては、daysofrisk.pl --help を実行してください。

その結果が以下のようになります。

** Product: Red Hat Jboss Enterprise Application Platform 7.2 (all packages)
** CPE: redhat:jboss_enterprise_application_platform:7.2
** Severity: Critical Important Moderate
** Dates: 20190122 - 20220719 (1275 days)

** 46 advisories (I=37 M=9 )
** 75 vulnerabilities (I=29 M=46 )
** Advisory Workload index is 0.03
** Vulnerability Workload index is 0.03
** Average is 129 days
** Median is 117 days
** 13% were 0day
** 16% were within 1 day
** 18% were within 7 days
** 21% were within 14 days
** 28% were within 31 days
** 34% were within 90 days

結果を見ていただくと、EAP 7.2 がリリースされた2019年01月22日から2022年7月現在までに、46個のセキュリティ報告の中に75個の脆弱性が報告されていることがお分かり頂けます。セキュリティ報告の内の37個が Important で、9個が Moderate の重大度になっていました。

CVEの詳細情報の取得

daysofrisk.pl は上記の情報だけではなく、CVE情報をデフォルトで summary.xml に出力します。残念ながら、summary.xml の情報量は少ないです。各CVEの情報は以下のとおりです。

<item>
  <cve>CVE-2017-18640</cve>
  <severity>M</severity>
  <source>cvenotification</source>
  <reportedon>20191219</reportedon>
  <cvss3>7.6</cvss3>
  <fixedby>RHSA-2021:3140</fixedby>
  <fixedon>20210811</fixedon>
  <publicon>20191212</publicon>
  <daysdiff>608</daysdiff>
</item>

このXMLと Red Hat Security APICVE一覧 機能を使って、もう少し詳細な情報を取得することが可能です。Security API はカスタマーポータルのアカウントがなくてもご利用頂けます。

以下のスクリプトは summary.xml からCVE番号を抽出し、コンマ区切りの形に変換してから、APIを呼び出します。

#!/usr/bin/env bash
# XMLからCVE IDを抽出しコンマ区切り文字列に変換する
cve_ids="$(xmllint --nowarning --xpath '/summary/item/cve/text()' summary.xml | sort -r | paste -sd "," -)"
# APIを使ってCVE詳細を取得する
curl -s -H "accept: application/json" "https://access.redhat.com/hydra/rest/securitydata/cve.json?ids=$cve_ids"

その結果は以下のようなJSON形式のデータになります。

[
  {
    "CVE": "CVE-2021-3859",
    "severity": "important",
    "public_date": "2022-02-01T00:00:00Z",
    "advisories": [
      "RHSA-2022:5532",
      ...
    ],
    "bugzilla": "2010378",
    "bugzilla_description": "CVE-2021-3859 undertow: client side invocation timeout raised when calling over HTTP2",
    "cvss_score": null,
    "cvss_scoring_vector": null,
    "CWE": "CWE-214",
    "affected_packages": [
      "eap7-wildfly-http-client-0:1.1.10-1.Final_redhat_00001.1.el8eap",
      ...
    ],
    "resource_url": "https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2021-3859.json",
    "cvss3_scoring_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
    "cvss3_score": "7.5"
  },
  {
    "CVE": "CVE-2021-40690",
    "severity": "moderate",
    "public_date": "2021-09-17T00:00:00Z",
    "advisories": [
      "RHSA-2022:5532",
      ...
    ],
    "bugzilla": "2011190",
    "bugzilla_description": "CVE-2021-40690 xml-security: XPath Transform abuse allows for information disclosure",
    "cvss_score": null,
    "cvss_scoring_vector": null,
    "CWE": "CWE-200",
    "affected_packages": [
      "camel-quarkus-xmlsecurity",
      ...
    ],
    "resource_url": "https://access.redhat.com/hydra/rest/securitydata/cve/CVE-2021-40690.json",
    "cvss3_scoring_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
    "cvss3_score": "7.5"
  }
]

jqコマンドやPythonでJSONを処理し、分かりやすい形に変換できます。また上記の resource_url を使って、個別のCVEのより詳細(概要も含め)な情報を取得できます。

他の製品

他のミドルウェアも同じように一覧を生成できます。jboss_enterprise_application_platform:7.2 の変わりに以下のCPEを使ってください。

製品名 CPE
AMQ Broker 7 amq_broker:7
AMQ Streams 2 amq_streams:2
Red Hat Fuse 7 jboss_fuse:7
Red Hat Single Sign-On 7 red_hat_single_sign_on:7

マイナーバージョンがない場合

マイナーバージョンまで管理されている製品が少ないため、マイナーバージョンを使った場合にセキュリティ報告が0件の場合はマイナーバージョンの公開日を使うことを推奨いたします。

例えば、Red Hat Fuse 7.8 の一覧を作りたい場合は、Fuse Maintenance Schedule によりますと、7.8が2020年12月17日に公開されることが分かります。開始日として指定して、daysofrisk.plを実行できます。

$ ./daysofrisk.pl --cpe jboss_fuse:7 --datestart 20201217 --severity CIM

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。