Googleが開発しているOSSの脆弱性スキャンツールがあったので使ってみた。
OSV-Scannerはプロジェクトで使用しているライブラリに存在する脆弱性を見つけることができるツールです。OSVデータベースから情報を取って来てGemfile.lockやpackege-lock.json等のロックファイルに記述された依存ライブラリの脆弱性を見つけてくれるんだってさ。
Goで書かれており、scoopやhomebrewの環境であればすぐに使える。
インストール方法
Macユーザなら下記でok
# brew install osv-scanner
aptとかの場合、先にgolangをインストールしておく必要がある。
私の環境はaptなのでやむなくソースからインストール必要があった。
| 
					 1 2  | 
						sudo apt install -y golang-go go install github.com/google/osv-scanner/cmd/osv-scanner@v1  | 
					
ソースからインストールするのは別に難しくないのですぐにつかえるよ。
使い方
インストールしたらosv-scannerコマンドが使用できます。
-L でロックファイルを指定するだけ。簡単。
| 
					 1  | 
						osv-scanner -L package-lock.json  | 
					
実際にロックファイルを指定して実行してみるとこんな感じ
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  | 
						osv-scanner -L package-lock.json Scanned /home/z/gatsby-digital-garden/package-lock.json file and found 2475 packages ╭───────────────────────────────────────────────────┬───────────┬─────────────────┬─────────┬───────────────────╮ │ OSV URL (ID IN BOLD)                              │ ECOSYSTEM │ PACKAGE         │ VERSION │ SOURCE            │ ├───────────────────────────────────────────────────┼───────────┼─────────────────┼─────────┼───────────────────┤ │ https://osv.dev/vulnerability/GHSA-whgm-jr23-g3j9 │ npm       │ ansi-html       │ 0.0.7   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-7gc6-qh9x-w6h8 │ npm       │ cross-fetch     │ 3.1.4   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-36jr-mh4h-2g58 │ npm       │ d3-color        │ 1.4.1   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-r7qp-cfhv-p84w │ npm       │ engine.io       │ 4.1.2   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-6h5x-7c5m-7cr7 │ npm       │ eventsource     │ 0.1.6   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-ww39-953v-wcq6 │ npm       │ glob-parent     │ 3.1.0   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-pfrx-2q88-qq97 │ npm       │ got             │ 10.7.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-pfrx-2q88-qq97 │ npm       │ got             │ 7.1.0   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-pfrx-2q88-qq97 │ npm       │ got             │ 8.3.2   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-pfrx-2q88-qq97 │ npm       │ got             │ 9.6.0   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-f8q6-p94x-37v3 │ npm       │ minimatch       │ 3.0.3   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-f8q6-p94x-37v3 │ npm       │ minimatch       │ 3.0.4   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-r683-j2x4-v87g │ npm       │ node-fetch      │ 2.6.1   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-5rrq-pxf6-6jx5 │ npm       │ node-forge      │ 0.10.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-8fr3-hfg3-gpgp │ npm       │ node-forge      │ 0.10.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-gf8q-jrpm-jvxq │ npm       │ node-forge      │ 0.10.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-2r2c-g63r-vccr │ npm       │ node-forge      │ 0.10.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-cfm4-qjh2-4765 │ npm       │ node-forge      │ 0.10.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-x4jg-mjrx-434g │ npm       │ node-forge      │ 0.10.0  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-rp65-9cf3-cjxr │ npm       │ nth-check       │ 1.0.2   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-3j8f-xvm3-ffx4 │ npm       │ parse-path      │ 4.0.4   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-j9fq-vwqv-2fm2 │ npm       │ parse-url       │ 6.0.5   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-pqw5-jmp5-px4v │ npm       │ parse-url       │ 6.0.5   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-566m-qj78-rww5 │ npm       │ postcss         │ 6.0.23  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-5q6m-3h65-w53x │ npm       │ react-dev-utils │ 4.2.3   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-44c6-4v22-4mhx │ npm       │ semver-regex    │ 2.0.0   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-4x5v-gmq8-25ch │ npm       │ semver-regex    │ 2.0.0   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-gp95-ppv5-3jc5 │ npm       │ sharp           │ 0.27.2  │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-g4rg-993r-mgx7 │ npm       │ shell-quote     │ 1.6.1   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-w5p7-h5w8-2hfq │ npm       │ trim            │ 0.0.1   │ package-lock.json │ │ https://osv.dev/vulnerability/GHSA-6fc8-4gx4-v693 │ npm       │ ws              │ 7.4.5   │ package-lock.json │  | 
					
OSVデータベースのリンクが整形されて表示される。
良い感じなのでは?
できたらCVEも見れるといいんだけどなぁ。
一度リンク踏まないといけないのはちょっと面倒くさい。
色々試してみてたら --jsonパラメータを追加すると、CVEもみれた。
| 
					 1  | 
						osv-scanner --json -L package-lock.json   | 
					
修正されたバージョン番号も含まれているし、summaryも含まれているので
デプロイ前に実行したり、CI/CDフローで使いやすそう。
--jsonをつけないで実行した結果は扱いづらい。
見た目が良い以外でまったく役にたたん。 --jsonは必須な気がするね。
一次情報
詳しく知りたい人は、公式のGithubみてね。
じゃあね~~。
