本記事では、Vulsで使用している脆弱性DB、およびそれを構成する脆弱性データソースに潜っていきます。
今回使用する脆弱性DBは、こちらのcommit(e89fc33)で採用されたvuls.dbです。
はじめに、vuls.dbについて紹介します。
vuls.dbは、従来のgo-cve-dictionaryやgoval-dictionary, gostなどのVulsを支えてきた各脆弱性DBを一つにしていく目的で開発されている脆弱性DBです。
vuls.dbは次のようにFetchとExtract、DBの3つの工程を経て、作成・配布されます。
さて、vuls.dbを実際に見ていきます。
Note:
一部のコマンドは結果をすべて表示するには、非常に大きいため、一部省略しています。
もし、結果すべてを見たい場合は、Appendixを参照するか、コマンドを実行してください
まずは、DBを手元に準備します。
それでは、CVE-2024-26815について調べてみます。
次のように、CVE-2024-26815に紐づくアドバイザリ(RHSA-2024:9315)や、CVE-2024-26815の情報、および検知条件が表示されます。
もし、検知条件だけが欲しい場合は次のコマンドで求められます。
実は先程、CVE-2024-26815を調べたときの検知条件には奇妙なところがあります。
次のように、kernel-rtに対して、fixed/unfixed両方の検知条件が書いてあることです。
続いては、どうしてそのようなことになっているのかについて見ていきましょう。
データソース周りを触るために、vuls-data-updateをインストールします。
data_sourcesの部分に、DB作成時のデータソースの情報が記されているので、そちらを利用します。
まずは、vuls-data-extracted-redhat-ovalv2-rhelを手元に用意します。
Note:
事情があり、data_sourcesのurlに書いてあるrepositoryは利用できなくなったため、ghcr.io/vulsio/vuls-data-db/<repository name>で代用しています。
続いて、vuls-data-extracted-redhat-ovalv2-rhelのどのファイルがCVE-2024-26815について書いてあるか調べます。--treeishにはdata_sources.extracted.commitを指定します。
では、それぞれのファイルにどのように書いてあるか見ます。
見てみると、kernel-rtはdata/CVE/2024/CVE-2024-26815.jsonではunfixedとして、data/RHSA/2024/RHSA-2024:9315.jsonではfixedとして記述されていることが分かりました。
ここまでは、CVE-2024-26815を題材に、vulsやvuls-data-updateを利用して、あるタイミングのvuls.dbやvuls.dbを構成するデータソースにある脆弱性情報を追ってきました。
ここからは、vuls.dbやvuls.dbを構成するデータソースの変更差分を追う話になります。
ところで、私がCVE-2024-26815について調べていたのは、kernelパッケージをインストールしていたユーザから、ある日を境に検知しなくなったが、それはなぜか?と質問を頂いたからです。
この記事を執筆している時期(2025/04/15 17:16)で、kernelパッケージでCVE-2024-26815の検知条件は次のとおりです。
ユーザがインストールしているkernelパッケージのバージョンは0:5.14.0-503.11.1.el9_5より大きかったため、検知されないのは正しい挙動です。
2025/03/28頃は検知していたらしいので、そのときのvuls.dbを用意します。
こちらに過去作成したvuls.dbがあるので、丁度よさそうなvuls.dbを持ってきます。
https://github.com/vulsio/vuls-nightly-db/pkgs/container/vuls-nightly-db/versions
今回は3/27に作成されたこちらを使います。
次のように、digestを使うことで、過去作成されたDBを用意することも可能です。
https://github.com/vulsio/vuls-nightly-db/pkgs/container/vuls-nightly-db/383438406
さて、./vuls-0327.dbで、CVE-2024-26815を検知するkernelパッケージについて見ていきます。
すると、この時点のvuls.dbには、kernelパッケージに対して、fixedとunfixedの両方が定義されているため、検知されていたということが分かりました。
では、3/27から現在の間で、データがどのように変更されたのか追ってみます。
各vuls.dbを作成するときに使用したデータソースと、そのときのcommit hashを整理しました。
| 2025/03/27 | 2025/04/15 | |
|---|---|---|
| vuls-data-extracted-redhat-ovalv2-rhel | ec73de5ee7dd353c56ba433232df1aa16b5ee150 | 068db606fc0a941f05c32d3053a19dbd393c1aea |
| vuls-data-raw-redhat-ovalv2 | e57990b150c38eaac5c1b87575b295b99b592c8c | 5dcbaae8cca8d32cd10bbba8690c94baae454925 |
まずは、vuls-data-extracted-redhat-ovalv2-rhelの変更について見てみます。
続いて、ベンダが提供するデータをできる限りそのまま保存しているvuls-data-raw-redhat-ovalv2の差分を見てみます。
というわけで、kernelパッケージでCVE-2024-26815が3/28頃を境に検知しなくなったのは、RedHatが提供するデータから、kernelパッケージに関する記述が削除されたからということが分かりました。
今回、vuls.dbとデータソースであるvuls-data-extracted-redhat-ovalv2-rhelとvuls-data-raw-redhat-ovalv2について追ってみました。
Vulsを使っていて、ある脆弱性の検知条件は何だろう?、どうして前回は検知したが、今回は検知しなくなったのだろう?という疑問に対して、以前より容易に強力に追跡できるようになりました。
脆弱性管理に活用していただければ幸いです。
issueやpull requestも歓迎しております!