Serverless Framework内部で使用しているwsライブラリの脆弱性対応を行う

とあるシステムでServerless Framework(以下、serverlessと呼ぶ)を使っているのですが、Githubのリポジトリ上で Dependabot alert が出ていたので、それの調査と対応の内容を書き留めておきます。

前提

  • serverless@2.41.0 を使用

脆弱性の内容を確認する

npm audit コマンドを実行して脆弱性の内容を確認します。

$ npm audit

                       === npm audit security report ===

# Run  npm update ws --depth 7  to resolve 4 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ ws                                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ serverless [dev]                                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ serverless > @serverless/components >                        │
│               │ @serverless/platform-client > ws                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1748                            │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ ws                                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ serverless [dev]                                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ serverless > @serverless/enterprise-plugin >                 │
│               │ @serverless/platform-client > ws                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1748                            │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ ws                                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ serverless [dev]                                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ serverless > @serverless/components >                        │
│               │ @serverless/platform-client-china > @serverless/utils-china  │
│               │ > socket.io-client > engine.io-client > ws                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1748                            │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ ws                                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ serverless [dev]                                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ serverless > @serverless/components >                        │
│               │ @serverless/platform-client-china > ws                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1748                            │
└───────────────┴──────────────────────────────────────────────────────────────┘


found 4 moderate severity vulnerabilities in 668 scanned packages
  run `npm audit fix` to fix 4 of them.

脆弱性の詳細

脆弱性の詳細情報を見ると、以下のように記載がありました。

Overview

In ws before versions 6.2.2 and 7.4.6 there is a ReDOS vulnerability.

Impact

A specially crafted value of the Sec-Websocket-Protocol header can be used to significantly slow down a ws server.

Patches

The vulnerability was fixed in ws@7.4.6

  • ライブラリ ws@7.4.6 より前のバージョンで ReDOS の脆弱性がある
  • Sec-Websocket-Protocolヘッダに特別な細工を施した値を使用すると、wsサーバの速度を大幅に低下させることができる
  • ws@7.4.6 で脆弱性は修正された

対応内容

serverless@2.44.0 にアップデートしました。 serverless@2.44.0package.json の内容を確認すると、脆弱性が修正された ws@7.4.6 を指定しているのを確認できます。

https://github.com/serverless/serverless/blob/v2.44.0/package.json

2.44.0 より前のバージョンでは ws@7.4.5 を使用しているため、2.44.0 までアップデートするのが良さそうでした。 脆弱性の内容を見る限り、AWS Lambdaのデプロイにserverlessを使っているだけだったのでそこまで影響がない内容でしたが、アラートを放置するのも良くないのでサクッと対応しました。

最後に

ライブラリはこまめにアップデートしていきたいですね!