0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ルータの脆弱性情報を備品管理のExcelファイルで自動取得する

Last updated at Posted at 2024-07-21

1. はじめに

QAエンジニアの業務の一つにテストに使用する機材の選定、購入、維持、廃棄があります。また、テスト環境のセキュリティやプロダクトのセキュリティをCSIRTやPSIRTと連携して維持向上する取り組みもあります12。そこでルータの維持(脆弱性対応)を試したところ次のような理由でかなり手間がかかることが分かりました。

  • 流通している脆弱性情報の多さ。ルータの脆弱性はトピック セキュリティ 脆弱性/修正パッチ(INTERNET Watch)セキュリティ・ホットトピックス(ITmedia NEWS)セキュリティホール memoなどで取り上げられることがありますが、ルータは「似た名前の別の機種」と「似た名前の同等機種」のどちらもあり、機種名をアタマに入れておいて情報を追いかけるのはとても困難です。
  • 機種名の副番の扱い。脆弱性情報の機種名に副番を省いているケースがあり、副番込みの機種名で一致しないからといって脆弱性なしと判断すると判断を誤る可能性があります。とはいえあの機種とこの機種は副番違いで本体は一緒といったことを思い出しながら脆弱性情報を読むのは厳しいです。

一例を挙げるとバッファローのWSR-2533DHPLと後継機種のWSR-2533DHPL-Cはルータ本体は一緒で同梱物が異なります3。2024年4月に公開されたバッファロー「WSR-1166DHP」「WSR-2533DHP」など7製品に複数の脆弱性、対策済みファームウェアへの更新を(INTERNET Watch)一部Wi-Fiルーター商品における複数の脆弱性とその対処方法(JVN#58236836)にWSR-2533DHPL-Cは登場しませんが、WSR-2533DHPLと同じファームウェアを使用するWSR-2533DHPL-Cにも同様の脆弱性があります。

  • さまざまな事情で手動でのファームウェア更新が必要になる。
    • 例1:ファームウェアの自動更新機能はあるがテスト中に更新がかかるのは困るのでOFFにしている
    • 例2:テスト環境がローカルで閉じていてファームウェアの更新情報をインターネットから自動取得できない

そこでExcelの備品台帳に1)副番違いの同等機種情報、2)JVNから脆弱性情報を自動で取得する機能を追加し、ファームウェア更新の要否調査の省力化を目指します。

2. JVN

JVNは "Japan Vulnerability Notes" の略で、JPCERT/CCIPAが共同で運用している脆弱性対策情報ポータルサイトです。日本で使用されているソフトウェアなどの脆弱性関連情報とその対策情報が日本語で集約されています4

JVNの脆弱性レポートの読み方によれば、日本の情報セキュリティ早期警戒パートナーシップに基づいた脆弱性情報だけでなく米英をはじめとする海外由来の脆弱性情報も扱われています。

脆弱性レポート一覧を開くとさまざまな機種やソフトウェアの脆弱性レポートがリストされていることがわかります。これを目視で追うのは大変ですが、JVNはMyJVN APIを通して様々な脆弱性対策情報を取得できるのでこちらを利用させていただきます。

  • ベンダ一覧の取得
    • MyJVN APIにおけるベンダ名を調べます
  • 製品一覧の取得
    • ベンダ名を指定してそのベンダの製品一覧を取得します
  • 脆弱性対策概要情報
    • Excel台帳に記載の機種が製品一覧に載っていたら脆弱性対策概要情報を取得します
  • 脆弱性対策詳細情報
    • 今回は使用しませんが、MyJVN APIで脆弱性の詳細情報を取得できます

2.1 ベンダ一覧の取得

まずベンダ一覧の取得(getVendorList)に従ってMyJVN APIにおけるベンダ名を調べます。2024年7月時点で約28,000のベンダが登録されています。1回のAPI発行で取得できるのは最大1万件のためstartItemを変えながら一覧を取得します。

例えば株式会社バッファロー(BUFFALO INC.)は次のようなベンダ情報とわかります。

<Vendor vname="バッファロー" cpe="cpe:/:buffalo_inc" vid="86"/>

2.2 製品一覧の取得

製品一覧の取得(getProductList)に従って各ベンダの製品一覧を取得します。

cpeNameは、{part}はワイルドカード(*)、{vendor}はベンダ一覧で取得した値で例えばバッファローは"buffalo_inc"になります。{product}もワイルドカードを指定します。
https://jvndb.jvn.jp/myjvn?method=getProductList&feed=hnd&cpeName=cpe:/*:buffalo_inc:*

cpeNameの代わりにvendorIdで指定する方法もあります。バッファローはvendorId=86です。
https://jvndb.jvn.jp/myjvn?method=getProductList&feed=hnd&vendorId=86

次のようなXMLが返ってきます。

<?xml version=""1.0"" encoding=""UTF-8"" ?>   
<Result 
version=""3.3"" 
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://jvndb.jvn.jp/myjvn/Results"" 
xmlns:mjres=""http://jvndb.jvn.jp/myjvn/Results"" 
xmlns:status=""http://jvndb.jvn.jp/myjvn/Status"" 
xsi:schemaLocation=""http://jvndb.jvn.jp/myjvn/Results https://jvndb.jvn.jp/schema/results_3.3.xsd"">
    <VendorInfo xml:lang=""ja"">
      <Vendor vname=""バッファロー"" cpe=""cpe:/:buffalo_inc"" vid=""86"">
        <Product pname=""airstation whr-g54s"" cpe=""cpe:/h:buffalo_inc:airstation_whr-g54s"" pid=""8782""/>
        <Product pname=""BHR-4GRV"" cpe=""cpe:/h:buffalo_inc:bhr-4grv"" pid=""26324""/>
        <Product pname=""BHR-4GRV ファームウェア"" cpe=""cpe:/o:buffalo_inc:bhr-4grv_firmware"" pid=""26359""/>
        
**省略**

        <Product pname=""WSR-2533DHP ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhp_firmware"" pid=""54844""/>
        <Product pname=""WSR-2533DHP2 ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhp2_firmware"" pid=""54845""/>
        <Product pname=""WSR-2533DHP3 ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhp3-bk_firmware"" pid=""50174""/>
        <Product pname=""WSR-2533DHPL ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhpl_firmware"" pid=""54847""/>
        <Product pname=""WSR-2533DHPL2 ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhpl2-bk_firmware"" pid=""50173""/>
        <Product pname=""WSR-2533DHPLB ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhplb_firmware"" pid=""75022""/>
        <Product pname=""WSR-2533DHPLS ファームウェア"" cpe=""cpe:/o:buffalo_inc:wsr-2533dhpls_firmware"" pid=""54849""/>

**省略**

        <Product pname=""WZR2-G108 ファームウェア"" cpe=""cpe:/o:buffalo_inc:wzr2-g108_firmware"" pid=""53929""/>
        <Product pname=""WZR2-G300N ファームウェア"" cpe=""cpe:/o:buffalo_inc:wzr2-g300n_firmware"" pid=""53930""/>
      </Vendor>
    </VendorInfo>
    <status:Status version=""3.3"" method=""getProductList"" lang=""ja"" retCd=""0"" retMax=""10000"" errCd="""" errMsg="""" totalRes=""222"" totalResRet=""222"" firstRes=""1"" feed=""hnd"" cpeName=""cpe:/*:buffalo_inc:*""/>
  </Result>

なお、返却されるXMLのpnameは次のようです。

  • ファームウアとファームウアが混在している
  • "シリーズ" などの文字列が含まれることがある
  • WSR-2533DHPLはあるがWSR-2533DHPL-Cはない

2.3 脆弱性対策概要情報

脆弱性対策概要情報(getVulnOverviewList)に従って製品の脆弱性対策概要情報を取得します。

cpeNameは製品一覧で取得したCPE製品名で、例えばバッファローWSR-2533DHPLは"cpe:/o:buffalo_inc:wsr-2533dhpl_firmware"です。バッファローWSR-2533DHPLの2024/1/1~2024/12/31における脆弱性対策概要情報は次のように取得します。

次のようなXMLが返ってきます。

<?xml version=""1.0"" encoding=""UTF-8"" ?>   
<rdf:RDF 
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://purl.org/rss/1.0/"" 
xmlns:rss=""http://purl.org/rss/1.0/"" 
xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#"" 
xmlns:dc=""http://purl.org/dc/elements/1.1/"" 
xmlns:dcterms=""http://purl.org/dc/terms/"" 
xmlns:sec=""http://jvn.jp/rss/mod_sec/3.0/"" 
xmlns:marking=""http://data-marking.mitre.org/Marking-1"" 
xmlns:tlpMarking=""http://data-marking.mitre.org/extensions/MarkingStructure#TLP-1"" 
xmlns:status=""http://jvndb.jvn.jp/myjvn/Status"" 
xsi:schemaLocation=""http://purl.org/rss/1.0/ https://jvndb.jvn.jp/schema/jvnrss_3.2.xsd http://jvndb.jvn.jp/myjvn/Status https://jvndb.jvn.jp/schema/status_3.3.xsd"" 
xml:lang=""ja"">
    <channel rdf:about=""https://jvndb.jvn.jp/apis/myjvn"">
      <title>JVNDB 脆弱性対策情報</title>
      <link>https://jvndb.jvn.jp/apis/myjvn</link>
      <description>JVNDB 脆弱性対策情報</description>
      <dc:date>2024-07-08T00:50:55+09:00</dc:date>
      <dcterms:issued/>
      <dcterms:modified>2024-07-08T00:50:55+09:00</dcterms:modified>
      <sec:handling>
        <marking:Marking>
          <marking:Marking_Structure xsi:type=""tlpMarking:TLPMarkingStructureType"" marking_model_name=""TLP"" marking_model_ref=""http://www.us-cert.gov/tlp/"" color=""WHITE""/>
        </marking:Marking>
      </sec:handling>
      <items>
        <rdf:Seq>
          <rdf:li rdf:resource=""https://jvndb.jvn.jp/ja/contents/2024/JVNDB-2024-000040.html""/>
        </rdf:Seq>
      </items>
    </channel>
    <item rdf:about=""https://jvndb.jvn.jp/ja/contents/2024/JVNDB-2024-000040.html"">
      <title>バッファロー製無線LANルーターにおける複数の脆弱性</title>
      <link>https://jvndb.jvn.jp/ja/contents/2024/JVNDB-2024-000040.html</link>
      <description>株式会社バッファローが提供する複数の無線LANルーターには、次の複数の脆弱性が存在します。&lt;ul&gt;&lt;li&gt;パスワードの平文保存(CWE-256)- CVE-2024-23486&lt;/li&gt;&lt;li&gt;OSコマンドインジェクション(CWE-78)- CVE-2024-26023&lt;/li&gt;&lt;/ul&gt;これらの脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方がIPAに報告し、JPCERT/CCが開発者との調整を行いました。 報告者:株式会社サイバーディフェンス研究所 永岡 悟 氏</description>
      <dc:creator>Information-technology Promotion Agency, Japan</dc:creator>
      <sec:identifier>JVNDB-2024-000040</sec:identifier>
      <sec:references source=""CVE"" id=""CVE-2024-23486"">https://www.cve.org/CVERecord?id=CVE-2024-23486</sec:references>
      <sec:references source=""CVE"" id=""CVE-2024-26023"">https://www.cve.org/CVERecord?id=CVE-2024-26023</sec:references>
      <sec:references source=""JVN"" id=""JVN#58236836"">https://jvn.jp/jp/JVN58236836/index.html</sec:references>
      <sec:references id=""CWE-78"" title=""OSコマンドインジェクション(CWE-78)"">https://jvndb.jvn.jp/ja/cwe/CWE-78.html</sec:references>
      <sec:references id=""CWE-Other"" title=""その他(CWE-Other)"">https://www.ipa.go.jp/security/vuln/scap/cwe.html</sec:references>
      <sec:cpe version=""2.2"" vendor=""バッファロー"" product=""WSR-2533DHPL ファームウェア"">cpe:/o:buffalo_inc:wsr-2533dhpl_firmware</sec:cpe>
      <sec:cvss score=""6.8"" severity=""Medium"" vector=""CVSS:3.0/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"" version=""3.0"" type=""Base""/>
      <dc:date>2024-04-15T12:13:45+09:00</dc:date>
      <dcterms:issued>2024-04-15T12:13:45+09:00</dcterms:issued>
      <dcterms:modified>2024-04-15T12:13:45+09:00</dcterms:modified>
    </item>
    <status:Status version=""3.3"" method=""getVulnOverviewList"" lang=""ja"" retCd=""0"" retMax=""50"" errCd="""" errMsg="""" totalRes=""1"" totalResRet=""1"" firstRes=""1"" feed=""hnd"" rangeDatePublished=""n"" rangeDateFirstPublished=""n"" datePublicStartY=""2024"" datePublicStartM=""1"" datePublicStartD=""1"" datePublicEndY=""2024"" datePublicEndM=""12"" datePublicEndD=""31"" cpeName=""cpe:/o:buffalo_inc:wsr-2533dhpl_firmware""/>
  </rdf:RDF>

指定した期間に脆弱性が発見されているかを知りたいので、statusのtotalResに注目します。上の例ではtotalResが1で脆弱性が発見されていることがわかります。

2.3.1 2024/7/31追記

LAN-W300N/R(ロジテック株式会社)の脆弱性対策概要情報がcpeNameだと正しく取得できずproductIdだと取得できることがわかりました。4章のソースコードはproductIdで取得するように改修済みです。

(a)ロジテック株式会社の製品一覧の取得

(b)cpeNameで脆弱性対策概要情報を取得

<?xml version=""1.0"" encoding=""UTF-8"" ?>   
<rdf:RDF 
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://purl.org/rss/1.0/"" 
xmlns:rss=""http://purl.org/rss/1.0/"" 
xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#"" 
xmlns:dc=""http://purl.org/dc/elements/1.1/"" 
xmlns:dcterms=""http://purl.org/dc/terms/"" 
xmlns:sec=""http://jvn.jp/rss/mod_sec/3.0/"" 
xmlns:marking=""http://data-marking.mitre.org/Marking-1"" 
xmlns:tlpMarking=""http://data-marking.mitre.org/extensions/MarkingStructure#TLP-1"" 
xmlns:status=""http://jvndb.jvn.jp/myjvn/Status"" 
xsi:schemaLocation=""http://purl.org/rss/1.0/ https://jvndb.jvn.jp/schema/jvnrss_3.2.xsd http://jvndb.jvn.jp/myjvn/Status https://jvndb.jvn.jp/schema/status_3.3.xsd"" 
xml:lang=""ja"">
    <channel rdf:about=""https://jvndb.jvn.jp/apis/myjvn"">
      <title>JVNDB 脆弱性対策情報</title>
      <link>https://jvndb.jvn.jp/apis/myjvn</link>
      <description/>
      <dc:date>2024-07-31T22:13:34+09:00</dc:date>
      <dcterms:issued/>
      <dcterms:modified>2024-07-31T22:13:34+09:00</dcterms:modified>
      <items>
        <rdf:Seq>
          <rdf:li rdf:resource=""https://jvndb.jvn.jp/apis/myjvn""/>
        </rdf:Seq>
      </items>
    </channel>
    <item rdf:about=""https://jvndb.jvn.jp/apis/myjvn"">
      <title>MyJVN 該当する脆弱性対策情報はありません。</title>
      <link>https://jvndb.jvn.jp/apis/myjvn</link>
      <description>MyJVN 該当する脆弱性対策情報はありません。</description>
      <dc:creator>Information-technology Promotion Agency, Japan</dc:creator>
      <dc:date>2024-07-31T22:13:34+09:00</dc:date>
      <dcterms:issued>2024-07-31T22:13:34+09:00</dcterms:issued>
      <dcterms:modified>2024-07-31T22:13:34+09:00</dcterms:modified>
    </item>
    <status:Status version=""3.3"" method=""getVulnOverviewList"" lang=""ja"" retCd=""0"" retMax=""50"" errCd="""" errMsg="""" totalRes=""0"" totalResRet=""0"" firstRes=""1"" feed=""hnd"" rangeDatePublished=""n"" rangeDateFirstPublished=""n"" datePublicStartY=""2012"" datePublicStartM=""1"" datePublicStartD=""1"" datePublicEndY=""2012"" datePublicEndM=""12"" datePublicEndD=""31"" cpeName=""cpe:/a:logitec:lan-w300n%2Fr_firmware""/>
  </rdf:RDF>

(c)productIdで脆弱性対策概要情報を取得

<?xml version=""1.0"" encoding=""UTF-8"" ?>   
<rdf:RDF 
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://purl.org/rss/1.0/"" 
xmlns:rss=""http://purl.org/rss/1.0/"" 
xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#"" 
xmlns:dc=""http://purl.org/dc/elements/1.1/"" 
xmlns:dcterms=""http://purl.org/dc/terms/"" 
xmlns:sec=""http://jvn.jp/rss/mod_sec/3.0/"" 
xmlns:marking=""http://data-marking.mitre.org/Marking-1"" 
xmlns:tlpMarking=""http://data-marking.mitre.org/extensions/MarkingStructure#TLP-1"" 
xmlns:status=""http://jvndb.jvn.jp/myjvn/Status"" 
xsi:schemaLocation=""http://purl.org/rss/1.0/ https://jvndb.jvn.jp/schema/jvnrss_3.2.xsd http://jvndb.jvn.jp/myjvn/Status https://jvndb.jvn.jp/schema/status_3.3.xsd"" 
xml:lang=""ja"">
    <channel rdf:about=""https://jvndb.jvn.jp/apis/myjvn"">
      <title>JVNDB 脆弱性対策情報</title>
      <link>https://jvndb.jvn.jp/apis/myjvn</link>
      <description>JVNDB 脆弱性対策情報</description>
      <dc:date>2024-07-31T22:19:20+09:00</dc:date>
      <dcterms:issued/>
      <dcterms:modified>2024-07-31T22:19:20+09:00</dcterms:modified>
      <sec:handling>
        <marking:Marking>
          <marking:Marking_Structure xsi:type=""tlpMarking:TLPMarkingStructureType"" marking_model_name=""TLP"" marking_model_ref=""http://www.us-cert.gov/tlp/"" color=""WHITE""/>
        </marking:Marking>
      </sec:handling>
      <items>
        <rdf:Seq>
          <rdf:li rdf:resource=""https://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000051.html""/>
        </rdf:Seq>
      </items>
    </channel>
    <item rdf:about=""https://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000051.html"">
      <title>LAN-W300N/R シリーズにおけるアクセス制限不備の脆弱性</title>
      <link>https://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000051.html</link>
      <description>ロジテック株式会社の提供する LAN-W300N/R シリーズには、アクセス制限不備の脆弱性が存在します。  ロジテック株式会社の提供する LAN-W300N/R シリーズは、無線 LAN ルータです。LAN-W300N/R シリーズには、リモート管理の設定に関する、アクセス制限不備の脆弱性が存在します。  この脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方が IPA に報告し、JPCERT/CC が開発者との調整を行いました。 報告者: IPA セキュリティセンター 情報セキュリティ技術ラボラトリー 澤 迅、岡崎 圭輔、勝海 直人 氏</description>
      <dc:creator>Information-technology Promotion Agency, Japan</dc:creator>
      <sec:identifier>JVNDB-2012-000051</sec:identifier>
      <sec:references source=""CVE"" id=""CVE-2012-1250"">https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-1250</sec:references>
      <sec:references source=""IPA CFA"" id=""「LAN-W300N/R」シリーズにおけるセキュリティ上の弱点(脆弱性)の注意喚起"">http://www.ipa.go.jp/about/press/20120525.html</sec:references>
      <sec:references source=""JPCERT-AT"" id=""JPCERT-AT-2012-0017 (ロジテック社製ブロードバンドルータの脆弱性に関する注意喚起)"">https://www.jpcert.or.jp/at/2012/at120017.html</sec:references>
      <sec:references source=""JVN"" id=""JVN#85934986"">http://jvn.jp/jp/JVN85934986/index.html</sec:references>
      <sec:references source=""NVD"" id=""CVE-2012-1250"">http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-1250</sec:references>
      <sec:references source=""関連文書"" id=""OCN 【重要】ロジテック製ルータの一部機種におけるセキュリティ不具合に関するお知らせ"">http://www.ocn.ne.jp/info/announce/2012/05/16_2.html</sec:references>
      <sec:references id=""CWE-264"" title=""認可・権限・アクセス制御(CWE-264)"">https://jvndb.jvn.jp/ja/cwe/CWE-264.html</sec:references>
      <sec:cpe version=""2.2"" vendor=""ロジテック株式会社"" product=""LAN-W300N/R ファームウェア"">cpe:/a:logitec:lan-w300n%2Fr_firmware</sec:cpe>
      <sec:cvss score=""7.5"" severity=""High"" vector=""AV:N/AC:L/Au:N/C:P/I:P/A:P"" version=""2.0"" type=""Base""/>
      <dc:date>2012-05-25T12:04:10+09:00</dc:date>
      <dcterms:issued>2012-05-25T12:04:10+09:00</dcterms:issued>
      <dcterms:modified>2012-05-25T12:04:10+09:00</dcterms:modified>
    </item>
    <status:Status version=""3.3"" method=""getVulnOverviewList"" lang=""ja"" retCd=""0"" retMax=""50"" errCd="""" errMsg="""" totalRes=""1"" totalResRet=""1"" firstRes=""1"" feed=""hnd"" rangeDatePublished=""n"" rangeDateFirstPublished=""n"" datePublicStartY=""2012"" datePublicStartM=""1"" datePublicStartD=""1"" datePublicEndY=""2012"" datePublicEndM=""12"" datePublicEndD=""31"" productId=""5197""/>
  </rdf:RDF>

2.4 脆弱性対策詳細情報

脆弱性対策概要情報で取得した脆弱性対策情報IDを脆弱性対策詳細情報(getVulnDetailInfo)に与えると詳細情報が得られます。

例えば2.3節で取得した脆弱性対策情報ID(JVNDB-2024-000040)の詳細情報は次のようにして取得できます。

次のようなXMLが返ってきます。

<?xml version=""1.0"" encoding=""UTF-8"" ?>   
<VULDEF-Document 
version=""3.2"" 
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://jvn.jp/vuldef/"" 
xmlns:vuldef=""http://jvn.jp/vuldef/"" 
xmlns:status=""http://jvndb.jvn.jp/myjvn/Status"" 
xmlns:sec=""http://jvn.jp/rss/mod_sec/3.0/"" 
xmlns:marking=""http://data-marking.mitre.org/Marking-1"" 
xmlns:tlpMarking=""http://data-marking.mitre.org/extensions/MarkingStructure#TLP-1"" 
xsi:schemaLocation=""http://jvn.jp/vuldef/ https://jvndb.jvn.jp/schema/vuldef_3.2.xsd http://jvn.jp/rss/mod_sec/3.0/ https://jvndb.jvn.jp/schema/mod_sec_3.0.xsd http://data-marking.mitre.org/extensions/MarkingStructure#TLP-1 https://jvndb.jvn.jp/schema/tlp_marking.xsd http://jvndb.jvn.jp/myjvn/Status https://jvndb.jvn.jp/schema/status_3.3.xsd"" 
xml:lang=""ja"">
    <Vulinfo>
      <VulinfoID>JVNDB-2024-000040</VulinfoID>
      <VulinfoData>
        <Title>バッファロー製無線LANルーターにおける複数の脆弱性</Title>
        <VulinfoDescription>
          <Overview>株式会社バッファローが提供する複数の無線LANルーターには、次複数の脆弱性が存在します。&lt;ul&gt;&lt;li&gt;パスワードの平文保存(CWE-256)- CVE-2024-23486&lt;/li&gt;&lt;li&gt;OSコマンドインジェクション(CWE-78)- CVE-2024-26023&lt;/li&gt;&lt;/ul&gt;これらの脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方がIPAに報告し、JPCERT/CCが開発者との調整を行いました。 報告者:株式会社サイバーディフェンス研究所 永岡 悟 氏</Overview>
        </VulinfoDescription>
        <Affected>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WCR-1166DS ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wcr-1166ds_firmware</Cpe>
            <VersionNumber>Ver. 1.32およびそれ以前(CVE-2024-26023)</VersionNumber>
          </AffectedItem>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WSR-1166DHP ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wsr-1166dhp_firmware</Cpe>
            <VersionNumber>Ver. 1.14およびそれ以前(CVE-2024-26023)</VersionNumber>
          </AffectedItem>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WSR-1166DHP2 ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wsr-1166dhp2_firmware</Cpe>
            <VersionNumber>Ver. 1.14およびそれ以前(CVE-2024-26023)</VersionNumber>
          </AffectedItem>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WSR-2533DHP ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wsr-2533dhp_firmware</Cpe>
            <VersionNumber>Ver. 1.06およびそれ以前(CVE-2024-23486、CVE-2024-26023)</VersionNumber>
          </AffectedItem>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WSR-2533DHP2 ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wsr-2533dhp2_firmware</Cpe>
            <VersionNumber>Ver. 1.10およびそれ以前(CVE-2024-23486、CVE-2024-26023)</VersionNumber>
          </AffectedItem>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WSR-2533DHPL ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wsr-2533dhpl_firmware</Cpe>
            <VersionNumber>Ver. 1.06およびそれ以前(CVE-2024-23486、CVE-2024-26023)</VersionNumber>
          </AffectedItem>
          <AffectedItem>
            <Name>バッファロー</Name>
            <ProductName>WSR-A2533DHP2 ファームウェア</ProductName>
            <Cpe version=""2.2"">cpe:/o:buffalo_inc:wsr-a2533dhp2_firmware</Cpe>
            <VersionNumber>Ver. 1.10およびそれ以前(CVE-2024-23486、CVE-2024-26023)</VersionNumber>
          </AffectedItem>
        </Affected>
        <Impact>
          <Cvss version=""3.0"">
            <Severity type=""Base"">Medium</Severity>
            <Base>6.8</Base>
            <Vector>CVSS:3.0/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H</Vector>
          </Cvss>
          <ImpactItem>
            <Description>想定される影響は各脆弱性により異なりますが、次のような影響を受ける可能性があります。&lt;ul&gt;&lt;li&gt;当該製品のログイン画面にアクセスできる攻撃者によって、設定済みの認証情報を窃取される(CVE-2024-23486)&lt;/li&gt;&lt;li&gt;当該製品にログイン可能な攻撃者によって、任意のOSコマンドを実行される(CVE-2024-26023)&lt;/li&gt;&lt;/ul&gt;</Description>
          </ImpactItem>
        </Impact>
        <Solution>
          <SolutionItem>
            <Description>[アップデートする] 開発者が提供する情報をもとに、ファームウェアを最新版へアップデートしてください。</Description>
          </SolutionItem>
        </Solution>
        <Related>
          <RelatedItem type=""vendor"">
            <Name>JVN</Name>
            <VulinfoID>株式会社バッファローからの情報</VulinfoID>
            <URL>https://jvn.jp/jp/JVN58236836/407111/index.html</URL>
          </RelatedItem>
          <RelatedItem type=""vendor"">
            <Name>株式会社バッファロー</Name>
            <VulinfoID>一部Wi-Fiルーター商品における複数の脆弱性とその対処方法(JVN#58236836)</VulinfoID>
            <URL>https://www.buffalo.jp/news/detail/20240410-01.html</URL>
          </RelatedItem>
          <RelatedItem type=""advisory"">
            <Name>Common Vulnerabilities and Exposures (CVE)</Name>
            <VulinfoID>CVE-2024-23486</VulinfoID>
            <URL>https://www.cve.org/CVERecord?id=CVE-2024-23486</URL>
          </RelatedItem>
          <RelatedItem type=""advisory"">
            <Name>Common Vulnerabilities and Exposures (CVE)</Name>
            <VulinfoID>CVE-2024-26023</VulinfoID>
            <URL>https://www.cve.org/CVERecord?id=CVE-2024-26023</URL>
          </RelatedItem>
          <RelatedItem type=""advisory"">
            <Name>JVN</Name>
            <VulinfoID>JVN#58236836</VulinfoID>
            <URL>https://jvn.jp/jp/JVN58236836/index.html</URL>
          </RelatedItem>
          <RelatedItem type=""cwe"">
            <Name>JVNDB</Name>
            <VulinfoID>CWE-78</VulinfoID>
            <Title>OSコマンドインジェクション</Title>
            <URL>https://jvndb.jvn.jp/ja/cwe/CWE-78.html</URL>
          </RelatedItem>
          <RelatedItem type=""cwe"">
            <Name>JVNDB</Name>
            <VulinfoID>CWE-Other</VulinfoID>
            <Title>その他</Title>
            <URL>https://www.ipa.go.jp/security/vuln/scap/cwe.html</URL>
          </RelatedItem>
        </Related>
        <History>
          <HistoryItem>
            <HistoryNo>1</HistoryNo>
            <DateTime>2024-04-10T14:39:54+09:00</DateTime>
            <Description>[2024年04月15日]\n  掲載</Description>
          </HistoryItem>
        </History>
        <DateFirstPublished>2024-04-15T12:13:45+09:00</DateFirstPublished>
        <DateLastUpdated>2024-04-15T12:13:45+09:00</DateLastUpdated>
        <DatePublic>2024-04-15T00:00:00+09:00</DatePublic>
      </VulinfoData>
    </Vulinfo>
    <sec:handling>
      <marking:Marking>
        <marking:Marking_Structure xsi:type=""tlpMarking:TLPMarkingStructureType"" marking_model_name=""TLP"" marking_model_ref=""http://www.us-cert.gov/tlp/"" color=""WHITE""/>
      </marking:Marking>
    </sec:handling>
    <status:Status version=""3.3"" method=""getVulnDetailInfo"" lang=""ja"" retCd=""0"" retMax=""10"" errCd="""" errMsg="""" totalRes=""1"" totalResRet=""1"" firstRes=""1"" feed=""hnd"" vulnId=""JVNDB-2024-000040""/>
  </VULDEF-Document>

3. Excel台帳

以下にサンプルのExcel台帳を示します。daichoシート~tmpシートの合計5シート構成です。

1_daicho.png

3.1 daichoシート

サンプルのためシリアルナンバー欄やMACアドレス欄などは割愛しています。

  • C2セル:マクロの実行日が自動で入力されます
  • E2ボタン:ボタン押下でマクロのmain()を実行します
  • D列:機種名
  • E列:ルータのファームウェアバージョン
  • H列:処置内容を「購入、FW更新、廃棄」のプルダウンメニューで選択
  • K列~R列:5行目~7行目に示される年月日からその年の年末までの脆弱性発見件数
  • 機材情報は台帳シートの8行目から開始

K列~R列の脆弱性発見件数は、D列の機種名で脆弱性対策概要情報APIを叩いて取得したtotalResの値が自動で入力されます。

daichoシートのルータのファームウェアバージョンや処置履歴、脆弱性発見件数や、JVNの脆弱性情報を参照してファームウェア更新の要否を判断します。

3.2 renameListシート

マクロのrenameModelName()が使用します。

  • A列:リネーム前の機種名
  • B列:リネーム後の機種名
    2_renameList.png

3.3 getProductListUrlシート

  • getProductListのリクエストURLを入力します
    3_getProductListUrl.png

3.4 productListシート

getProductListのレスポンスを表形式で保存します。

  • A列:機種名(B列のpnameを加工したもの)
  • B列:レスポンスのpname(製品名)
  • C列:レスポンスのcpe(CPE製品名)
  • D列:レスポンスのpid(製品ID)
    4_productList.png

3.5 tmpシート

  • デバッグに使うシートです。
    5_tmp.png

4. Excel VBAプログラム

Excel VBAのソースコードを以下に示します。

'参考資料
'MyJVN API
'  https://jvndb.jvn.jp/apis/
'ExcelVBAでHTTPアクセスしてXMLデータを取得する
'  https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8
'Excel VBAで xmlデータを扱うときは名前空間に注意する
'  https://dampgblog.hinohikari291.com/vbaxmlnamespace/
'
'更新履歴
'2024-07-21 v1.0
'  Qiitaに公開
'2024-07-31 v1.1
'  脆弱性対策概要情報をproductIdで取得するように変更
'  LAN-W300N/R(ロジテック株式会社)の脆弱性対策概要情報がcpeNameだと正しく取得できず
'  productIdだと取得できることがわかったため

Option Explicit

'シート名
Const daichoSheetName = "daicho"
Const renameListSheetName = "renameList"
Const getProductListUrlSheetName = "getProductListUrl"
Const productListSheetName = "productList"
Const tmpSheetName = "tmp"

'daichoシート
'機材情報は台帳シートの8行目から開始
Const daichoStartRow = 8
'機種名はD列
Const daichoModelNameCol = "D"
'daicho脆弱性発見の列番号、K列(11列目、2018)、L列(12列目、2019)、、、R列(18列目、2024)
Const daichoYearStartCol = 11
Const daichoYearEndCol = 18
Const daichoYearRow = 5
Const daichoMonthRow = 6
Const daichoDayRow = 7

'productListシート
Const productListModelNameCol = "A" 'A列:機種名(JVN脆弱性情報のpnameを加工したもの、VLOOKUPで参照することを考慮しA列に配置)
Const productListPnameCol = "B"         'B列:pname
Const productListCpeCol = "C"              'C列:cpe
Const productListPidCol = "D"               'D列:pid

Sub main()
    '台帳(daicho)
    Dim daichoSheet As Worksheet
    Set daichoSheet = Worksheets(daichoSheetName)
    
    daichoSheet.Cells(2, "c") = "in progress..."
    Call genProductList
    Call getProductVulnNum
    daichoSheet.Cells(2, "c") = Date
    
End Sub

'ProductListシートに機種情報を出力する
Sub genProductList()
    'getProductListUrlシートとその行数
    Dim getProductListUrlSheet As Worksheet
    Set getProductListUrlSheet = Worksheets(getProductListUrlSheetName)
    Dim getProductListUrlLen As Long 'getProductListUrlの行数
    getProductListUrlLen = getProductListUrlSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    'productListシート(初期化も行う)
    Dim productListSheet As Worksheet
    Set productListSheet = Worksheets(productListSheetName)
    Sheets(productListSheetName).Cells.Clear
    
    '変数の宣言
    Dim http As XMLHTTP60
    Dim doc As DOMDocument60
    Dim node As IXMLDOMNode
    Dim url As String
    Dim pnameStr As String
    Dim cpeStr As String
    Dim pidStr As String
    Dim modelNameStr As String
    
    Dim i As Long 'getProductListUrlシートの行番号
    Dim j As Long 'productList出力先の行番号
    j = 1
    For i = 1 To getProductListUrlLen
        url = getProductListUrlSheet.Range("A" & i).Text
        If Left(url, 5) <> "https" Then
            MsgBox "getProductListUrlのURLが不正です", vbCritical
            Exit Sub
        End If
        'HTTPアクセスを設定して発射
        Set http = New XMLHTTP60
        http.Open "GET", url, False
        http.send
        
        'HTTPアクセスに失敗があったら中止
        If http.statusText <> "OK" Then
            MsgBox "サーバーへの接続に失敗しました", vbCritical
            Exit Sub
        End If
        
        'XMLデータを取り込む
        Set doc = New DOMDocument60
        doc.LoadXML (http.responseText)
        
        'XPathを使ってノード(要素)を取り込む
        doc.SetProperty "SelectionNamespaces", "xmlns:a='http://jvndb.jvn.jp/myjvn/Results'"
        For Each node In doc.SelectNodes("//a:Product")
            '各ノードの属性を取得し、適宜加工してシートに貼り付ける
            pnameStr = node.Attributes.getNamedItem("pname").Text
            cpeStr = node.Attributes.getNamedItem("cpe").Text
            pidStr = node.Attributes.getNamedItem("pid").Text
            modelNameStr = Replace(pnameStr, " ファームウェア", "")
            modelNameStr = Replace(modelNameStr, " ファームウエア", "")
            modelNameStr = Replace(modelNameStr, "シリーズ", "")
            modelNameStr = Replace(modelNameStr, "BUFFALO ", "")
            
            productListSheet.Range(productListPnameCol & j).Value = pnameStr
            productListSheet.Range(productListCpeCol & j).Value = cpeStr
            productListSheet.Range(productListPidCol & j).Value = pidStr
            productListSheet.Range(productListModelNameCol & j).Value = modelNameStr
            j = j + 1
        Next
        
        '後片付け
        Set http = Nothing
        Set doc = Nothing
        Set node = Nothing
    Next i
    
End Sub

'ある機種のある期間における脆弱性発見件数をdaichoへ出力する
Sub getProductVulnNum()
    '台帳(daicho)
    Dim daichoSheet As Worksheet
    Set daichoSheet = Worksheets(daichoSheetName)
    Dim daichoLen As Long 'daichoの行数
    daichoLen = daichoSheet.Cells(Rows.Count, daichoModelNameCol).End(xlUp).Row
    
    '脆弱性プロダクト一覧(productList)
    Dim productListSheet As Worksheet
    Set productListSheet = Worksheets(productListSheetName)
    Dim productListLen As Long 'productListの行数
    productListLen = productListSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim modelNameStr As String
    Dim cpeStr As String
    Dim pidStr As String 'v1.1
    Dim yearStr As String
    Dim monthStr As String
    Dim dayStr As String
    Dim i As Long 'daicho行番号
    Dim j As Long 'daicho脆弱性発見の列番号
    Dim k As Long 'productList行番号
    Dim totalResNum As Long
    
    For i = daichoStartRow To daichoLen '台帳に記載の機種を1行ずつ調べる
        For j = daichoYearStartCol To daichoYearEndCol '各年ごとに脆弱性発見の有無を調べる
            modelNameStr = daichoSheet.Cells(i, daichoModelNameCol).Text
            modelNameStr = renameModelName(modelNameStr)
            yearStr = daichoSheet.Cells(daichoYearRow, j).Text
            monthStr = daichoSheet.Cells(daichoMonthRow, j).Text
            dayStr = daichoSheet.Cells(daichoDayRow, j).Text
            For k = 1 To productListLen
                '機種名の大文字小文字を区別せずに比較する
                If UCase(productListSheet.Cells(k, productListModelNameCol).Text) = UCase(modelNameStr) Then
                   'cpeStr = productListSheet.Cells(k, productListCpeCol).Text
                   'totalResNum = getVulnOverViewListNum(cpeStr, yearStr, monthStr, dayStr) 'v1.0
                    pidStr = productListSheet.Cells(k, productListPidCol).Text
                    totalResNum = getVulnOverViewListNum(pidStr, yearStr, monthStr, dayStr) 'v1.1
                    daichoSheet.Cells(i, j) = totalResNum
                End If
            Next k
        Next j
    Next i
    
End Sub

'リネーム前の機種名を引数で受け取り、リネーム後の機種名を返却する
'A列:リネーム前の機種名
'B列:リネーム後の機種名
Function renameModelName(modelNameStr As String)
    Dim renameListSheet As Worksheet
    Set renameListSheet = Worksheets(renameListSheetName)
    Dim renameListLen As Long 'renameListの行数
    renameListLen = renameListSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long 'renameList行番号
    For i = 1 To renameListLen
        If renameListSheet.Cells(i, "A").Text = modelNameStr Then
            modelNameStr = renameListSheet.Cells(i, "B").Text
            Exit For
        End If
    Next i
    
    renameModelName = modelNameStr

End Function

'次の期間内における、pidで与えられた機種の脆弱性発見件数を返却する
'year年month月day日~year年12月31日
'v1.1 第一引数をcpe→pidへ変更
Function getVulnOverViewListNum(pid As String, year As String, month As String, day As String)
    Dim http As XMLHTTP60
    Dim doc As DOMDocument60
    Dim node As IXMLDOMNode
    Dim url As String
    Dim tmpSheet As Worksheet
    Set tmpSheet = Worksheets(tmpSheetName)
    Dim totalResNum As Long
    Sheets(tmpSheetName).Cells.Clear
    
   'v1.0
   'url = "https://jvndb.jvn.jp/myjvn?method=getVulnOverviewList&feed=hnd&rangeDatePublished=n&rangeDateFirstPublished=n&datePublicStartY=" & year & "&datePublicStartM=" & month & "&datePublicStartD=" & day & "&datePublicEndY=" & year & "&datePublicEndM=12&datePublicEndD=31&cpeName=" & cpe
   'url = "https://jvndb.jvn.jp/myjvn?method=getVulnOverviewList&feed=hnd&rangeDatePublished=n&rangeDateFirstPublished=n&datePublicStartY=" & year & "&datePublicStartM=" & month & "&datePublicStartD=" & day & "&datePublicEndY=" & year & "&cpeName=" & cpe
   'v1.1
    url = "https://jvndb.jvn.jp/myjvn?method=getVulnOverviewList&feed=hnd&rangeDatePublished=n&rangeDateFirstPublished=n&datePublicStartY=" & year & "&datePublicStartM=" & month & "&datePublicStartD=" & day & "&datePublicEndY=" & year & "&datePublicEndM=12&datePublicEndD=31&productId=" & pid
    tmpSheet.Range("A" & 1).Value = url
    
    'HTTPアクセスを設定して発射
    Set http = New XMLHTTP60
    http.Open "GET", url, False
    http.send
    
    'HTTPアクセスに失敗があったら中止
    If http.statusText <> "OK" Then
        MsgBox "サーバーへの接続に失敗しました", vbCritical
        Exit Function
    End If
    
    'XMLデータを取り込む
    Set doc = New DOMDocument60
    doc.LoadXML (http.responseText)
    
    'XPathを使ってノード(要素)を取り込む
    doc.SetProperty "SelectionNamespaces", "xmlns:a='http://jvndb.jvn.jp/myjvn/Status'"
    For Each node In doc.SelectNodes("//a:Status")
        '各ノードの属性を取得して、シートに貼り付ける
        tmpSheet.Range("A" & 2).Value = node.Attributes.getNamedItem("version").Text
        tmpSheet.Range("A" & 3).Value = node.Attributes.getNamedItem("totalRes").Text
        tmpSheet.Range("A" & 4).Value = node.Attributes.getNamedItem("rangeDatePublished").Text
        tmpSheet.Range("A" & 5).Value = node.Attributes.getNamedItem("rangeDateFirstPublished").Text
        tmpSheet.Range("A" & 6).Value = node.Attributes.getNamedItem("datePublicStartY").Text
        tmpSheet.Range("A" & 7).Value = node.Attributes.getNamedItem("datePublicStartM").Text
        tmpSheet.Range("A" & 8).Value = node.Attributes.getNamedItem("datePublicStartD").Text
        tmpSheet.Range("A" & 9).Value = node.Attributes.getNamedItem("datePublicEndY").Text
        tmpSheet.Range("A" & 10).Value = node.Attributes.getNamedItem("datePublicEndM").Text
        tmpSheet.Range("A" & 11).Value = node.Attributes.getNamedItem("datePublicEndD").Text
       'tmpSheet.Range("A" & 12).Value = node.Attributes.getNamedItem("cpeName").Text 'v1.0
        tmpSheet.Range("A" & 12).Value = node.Attributes.getNamedItem("productId").Text 'v1.1
        totalResNum = CLng(node.Attributes.getNamedItem("totalRes").Text)
    Next
    
    '後片付け
    Set http = Nothing
    Set doc = Nothing
    Set node = Nothing
    getVulnOverViewListNum = totalResNum
    
End Function

5. おわりに

  • 備品管理のExcelファイルに脆弱性情報の自動取得機能を追加したことで脆弱性対応の要否調査を省力化できる期待があります。
  • JVNが扱う脆弱性であればルータに限らず同様の手順で対応できるものと思います。
  • 脆弱性対処に向けた製品開発者向けガイド(IPA)」では開発環境のセキュリティ確保が取り上げられています。QAは開発とテストのどちらにも関わるためテスト環境だけでなく開発環境もひっくるめて脆弱性に対応するのが良いように思います。

A. 参考資料

以下のWebページや記事を参考にさせていただきました。

  1. 参考:これからの品質保証部門のあり方(SQiP2023)

  2. 参考:xSIRT構築事例に関するヒアリング結果(内閣サイバーセキュリティセンター)

  3. 詳しくは後継機種は1)ツメの折れないLANケーブルを標準添付、2)NTTぷららが提供する「ひかりTV 4K」の動作確認済み、3)価格変更(値下げ)です。

  4. 参考:JVNとは?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?