残暑の続く中、いかがお過ごしでしょうか。
ここのところのWordPressプラグイン脆弱性大量発生でCVE識別子等をゴリゴリとブログ記事に記載していたので、これをリンクにしたら便利かなあと、WordPressの簡単ハックをしてみました。
やりたいこと
WordPressのブログで、本文に「CVE-YYYY-NNNN」「JVNDB-YYYY-NNNNNN」「WPVDB-NNNN」があったら自動的にその詳細ページにリンクさせるようにします。
なお、CVEの場合のNNNNは、4桁だけでなく、5桁、6桁もありそうです。それにも対応しておきましょう。URLは「https://nvd.nist.gov/vuln/detail/CVE-YYYY-NNNN」で良さそうです。
JVNDBはさすが日本というか、最初から6桁となっています。7桁になることは多分ないですね。URLは年ごとに別のディレクトリで「https://jvndb.jvn.jp/ja/contents/YYYY/JVNDB-YYYY-NNNNNN.html」になっています。
WPVDBは、調べる範囲で4桁しか存在していないようですが、年で区分されていないため、単調増加します。今WPVDB-9511まで来ているので5桁以上にも対応しておく必要がありそうです。URLは「https://wpvulndb.com/vulnerabilities/NNNN」になっています。
そもそも脆弱性識別子とは
共通脆弱性識別子CVE(Common Vulnerabilities and Exposures)は、個別製品中の脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が採番している識別子です。オープンソースをはじめ各種企業が脆弱性を公表する際はこの識別子を使っています。
CVE識別子に対応する具体的な情報は、アメリカ国立標準技術研究所NIST(National Institute of Standards and Technology)が管理している脆弱性情報データベースNVD (National Vulnerability Database)が提供しています。
JVNDB番号はJPCERT/CCと情報処理推進機構(IPA)によって蓄積されているJVN iPediaの脆弱性に割り振られる識別子で、CVEやJVNを中心に世界中の脆弱性情報で日本国内に流通している可能性のある製品の脆弱性を収集したものです。とはいえ、国内で報告される脆弱性情報は微々たるもの(感覚として全体の5%にも満たない)で、NVDの翻訳がほとんどです。NVDでCVSS(共通脆弱性評価システム, Common Vulnerability Scoring System)が確定後数日でJVNDB番号が割り当てられるのが通例です。
WPVDBはWordPressに特化した脆弱性スキャナWPScanのための脆弱性データベースで使用される識別子です。正式には番号のみのようですが、当社では識別を容易にするため「WPVDB-」を接頭辞にしています。ここに登録された脆弱性はCVE番号が割り当てられることが少なく、管理上は面倒です。APIもあるのですが私的利用以外は有償です。
テーマファイル(functions.php)の修正
さて処理の方針が明確になったので、functions.phpに以下を追加します。
<?php //---------------------------------------------------------------- // JVNDB/CVEの自動リンク add_filter('the_content', function($content) { $content = preg_replace('/CVE-\\d{4}-\\d{4,}/', '<a href="https://nvd.nist.gov/vuln/detail/$0">$0</a>', $content); $content = preg_replace('/JVNDB-(\\d{4})-\\d{6}/', '<a href="https://jvndb.jvn.jp/ja/contents/$1/$0.html">$0</a>', $content); $content = preg_replace('/WPVDB-(\\d{4,})/', '<a href="https://wpvulndb.com/vulnerabilities/$1">$0</a>', $content); return $content; });
こんな感じでクイックハックしています。1行目のphpタグは普通はすでに書かれているので不要かと思いますので、実質6行のお手軽ハックでした。
動作はこんな感じです(CVE-2019-14945)
ということで、最近でCVE、JVNDB、WPVDBそれぞれのIDがついている脆弱性…CVE-2019-14945ですかね。JVNDB-2019-007559そしてWPVDB-9506、こんな感じでリンクされます。
あれ、見出し部分はリンクされてないですね。特に何もしてないんですけどね。まあ見出しは対象外としたかったので丁度いいということで。
もっと便利に!
こうやって簡単に改造ができるところがWordPressの便利なところですね。手書きのHTMLではソースコード一括変換に頼るしかないところでした。ウェブ黎明期を知っているジジイとしては楽な時代になったと痛感します。他にも色々と小ネタを追加していこうかと思っています。