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/CCとIPAが共同で運用している脆弱性対策情報ポータルサイトです。日本で使用されているソフトウェアなどの脆弱性関連情報とその対策情報が日本語で集約されています4。
JVNの脆弱性レポートの読み方によれば、日本の情報セキュリティ早期警戒パートナーシップに基づいた脆弱性情報だけでなく米英をはじめとする海外由来の脆弱性情報も扱われています。
脆弱性レポート一覧を開くとさまざまな機種やソフトウェアの脆弱性レポートがリストされていることがわかります。これを目視で追うのは大変ですが、JVNはMyJVN APIを通して様々な脆弱性対策情報を取得できるのでこちらを利用させていただきます。
- ベンダ一覧の取得
- MyJVN APIにおけるベンダ名を調べます
- 製品一覧の取得
- ベンダ名を指定してそのベンダの製品一覧を取得します
- 脆弱性対策概要情報
- Excel台帳に記載の機種が製品一覧に載っていたら脆弱性対策概要情報を取得します
- 脆弱性対策詳細情報
- 今回は使用しませんが、MyJVN APIで脆弱性の詳細情報を取得できます
2.1 ベンダ一覧の取得
まずベンダ一覧の取得(getVendorList)に従ってMyJVN APIにおけるベンダ名を調べます。2024年7月時点で約28,000のベンダが登録されています。1回のAPI発行で取得できるのは最大1万件のためstartItemを変えながら一覧を取得します。
- https://jvndb.jvn.jp/myjvn?method=getVendorList&feed=hnd&startItem=1
- https://jvndb.jvn.jp/myjvn?method=getVendorList&feed=hnd&startItem=10001
- https://jvndb.jvn.jp/myjvn?method=getVendorList&feed=hnd&startItem=20001
例えば株式会社バッファロー(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ルーターには、次の複数の脆弱性が存在します。<ul><li>パスワードの平文保存(CWE-256)- CVE-2024-23486</li><li>OSコマンドインジェクション(CWE-78)- CVE-2024-26023</li></ul>これらの脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方が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ルーターには、次複数の脆弱性が存在します。<ul><li>パスワードの平文保存(CWE-256)- CVE-2024-23486</li><li>OSコマンドインジェクション(CWE-78)- CVE-2024-26023</li></ul>これらの脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方が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>想定される影響は各脆弱性により異なりますが、次のような影響を受ける可能性があります。<ul><li>当該製品のログイン画面にアクセスできる攻撃者によって、設定済みの認証情報を窃取される(CVE-2024-23486)</li><li>当該製品にログイン可能な攻撃者によって、任意のOSコマンドを実行される(CVE-2024-26023)</li></ul></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シート構成です。
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()が使用します。
3.3 getProductListUrlシート
3.4 productListシート
getProductListのレスポンスを表形式で保存します。
3.5 tmpシート
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ページや記事を参考にさせていただきました。
-
参考:これからの品質保証部門のあり方(SQiP2023) ↩
-
詳しくは後継機種は1)ツメの折れないLANケーブルを標準添付、2)NTTぷららが提供する「ひかりTV 4K」の動作確認済み、3)価格変更(値下げ)です。 ↩