Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9009

毎日npm auditを実行して脆弱性対応する

$
0
0

はじめに

Node.jsで開発している方は多くのnpmパッケージを利用していますよね。これらの脆弱性をいち早く見つけて対応するために、私が実践していることを紹介します。

CIと言えるかやや不安ですが、細かく考えずCI/CD Advent Calendarに投稿してしまいます。

背景

ある程度の規模の企業では、依存パッケージの脆弱性スキャンとしてOSSや商用ツールを利用しているところもあるでしょう。ただし、小規模な企業や個人開発ではそこまでなかなか手が回らない、お金が出せないというケースもあるかもしれません。そこで、安価に(できれば無料で)手っ取り早く脆弱性を発見する仕組みを検討してみました。

対象

package-lock.jsonに列挙されている依存パッケージの脆弱性検知を対象とします。自前のソースコードの脆弱性スキャンなどは本記事の対象外です。

脆弱性検知の方法

私は個人開発のリポジトリで2つの方法を併用しています。

  • Snyk
  • npm audit on CircleCI

本記事では後者を紹介します。

npm audit on CircleCI

npm auditはnpmに標準で含まれるサブコマンドで https://www.npmjs.com/advisories(など?)を情報源として脆弱性を見つけるものです。npm v6ぐらいから利用できます。

私が採用している方法は何も難しいものではなく、このnpm auditコマンドをCircleCIで毎日実行して、脆弱性が見つかったらSlackに通知するというものです。では、設定ファイルを紹介します。

.circleci/config.yml
version:2jobs:build:docker:-image:circleci/nodesteps:-checkout-run:name:update npmcommand:'sudonpminstall-gnpm@latest'-run:npm ci-run:name:npm testcommand:$(npm bin)/nyc npm test && $(npm bin)/nyc report --reporter=text-lcov | $(npm bin)/coveralls-run:npm run lint-run:name:install serverlesscommand:'sudonpminstall-gserverless'-deploy:name:sls deploycommand:|if [ "${CIRCLE_BRANCH}" == "master" ]; thensls deploy --stage prodelsesls deploy --stage devfivul-check:docker:-image:circleci/nodesteps:-checkout-run:name:update npmcommand:'sudonpminstall-gnpm@latest'-run:npm ci-run:npm auditworkflows:version:2commit-workflow:jobs:-buildnightly:triggers:-schedule:cron:"016***"filters:branches:only:masterjobs:-vul-check

https://github.com/oke-py/container-linux-release-feed/blob/master/.circleci/config.yml

npm auditに関係ない部分もそのまま掲載していますが、vul-checkあたりをご参照ください。nightly buildでmasterブランチに対してnpm cinpm auditを実行しています。こちらがエラー時の例です。
https://circleci.com/gh/oke-py/container-linux-release-feed/193

脆弱性対応

こうして毎晩脆弱性をチェックし、見つかったときはどうするかを示します。

npm audit fix; npm update

基本的にはこれだけです。極稀にnpm audit fixでは解決できず、手動で対応する必要があります(昔すぎてどんな対応をしたか忘れました)。

所感

前述のように2種類の方法を併用していますが、半年ほど使ってみてSnykからの通知を起点に対応したことはありません。npm auditで脆弱性を見つけています。

おわりに

安価で手っ取り早く脆弱性スキャンする方法を紹介しました。ざっと確認したところ他の言語では3rd partyのツールに頼らざるを得ない感じです。標準サポートされないかな・・・


Viewing all articles
Browse latest Browse all 9009

Trending Articles