Node.jsのリリースで重大なHTTPセキュリティ脆弱性を修正
2020年2月6日
0 分で読めます本日(2020年2月6日)、重大度「Critical」の問題1件と「High」の問題2件を修正する新しいNode.jsセキュリティリリースが公開されました。このリリースでは、HTTPの解析もより厳格になっています。公式のリリースノートによると、以下のNode.jsコミットに含まれるとおりです。
また、セキュリティを強化するため、HTTPの解析がより厳格になりました。準拠していないHTTP実装との相互運用に問題が生じる可能性があるため、コマンドラインフラグ
--insecure-http-parser、またはinsecureHTTPParser HTTPオプションを使って厳格なチェックを無効にできます。ただし、安全でないHTTPパーサーの使用は避けてください。
要点
現在サポートされているNode.jsの全バージョン(10.x、12.x、13.x)が影響を受けます。できるだけ早く、以下の修正済みバージョンにアップグレードすることを強くおすすめします:10.19.0、12.15.0、13.8.0
2020-02-06、バージョン10.19.0、Dubnium(LTS)
2020-02-06、バージョン12.15.0、Erbium(LTS)
2020-02-06、バージョン13.8.0、current
影響を受けるのはどのバージョンですか?
HTTPおよびTLSを直接または間接的に使用しているNode.js 10.x、12.x、13.xが影響を受けます。ExpressベースのWebアプリケーションなどが該当します。
また、11.x、9.x、<= 8.xなど、サポート対象外のNode.jsバージョンを使用している場合も影響を受けます。
以下のNode.jsの脆弱性が特定され、それぞれにCVEが割り当てられました。
CVE-2019-15606:HTTPヘッダー値の末尾にあるOWSが削除されない
CVE-2019-15605:不正なTransfer-Encodingヘッダーを利用したHTTPリクエストスマグリング
CVE-2019-15604:不正な証明書文字列によってTLSサーバーでアサーションをリモートから発生させることが可能
Node.jsのHTTPヘッダー脆弱性 CVE-2019-15606について
この脆弱性は、HTTPヘッダー値の末尾にあるOWSが削除されないことに関連しています。GitHub上のこのコミットのコメントでは、次のように説明されています。
HTTPヘッダー値の末尾にはOWSが含まれる場合がありますが、これは削除する必要があります。OWSは意味上、ヘッダー値の一部ではありません。値の一部として扱われると、想定されるヘッダー値と実際の値が不必要に不一致になる可能性があります。
先頭のOWSにあたる単一のSPCは、フィールド値の前によく見られます。これはHTTPパーサーが先頭のOWSをすべて削除することで、すでに処理されています。パーサーの利用側で削除する必要があるのは、末尾のOWSのみです。
「この脆弱性はどのように修正されましたか?」
関連コミット:25b6897e8a http: ヘッダー値末尾のOWSを削除
関連情報:RFC 7230 セクション3.2およびセクション3.2.3
未公開の参照情報:元のGitHubプルリクエストおよびHackerOneの報告
Node.jsのHTTPリクエストスマグリング脆弱性 CVE-2019-15605について
Node.jsには、不正なTransfer-Encodingヘッダーを利用したHTTPリクエストスマグリング攻撃に対する脆弱性があることが判明しました。以下のHTTPリクエストの例は、この問題がどのように発生するかを示すもので、現在はこの回帰をテストするために使われています。
この脆弱性はどのように修正されましたか?
関連コミット:eea3a7429b test: TEを使ったリクエストのスマグリングは不可能、および8f41e837bb deps: llhttpを2.0.4に更新
未公開の参照情報:元のGitHubプルリクエストとHackerOneの報告
CVE-2019-15604として特定されたNode.jsの脆弱性について
Node.jsには、不正な証明書文字列によってTLSサーバーでアサーションをリモートから発生させるTLS関連の問題があることが判明しました。元のコミットメッセージでは、次のように詳しく説明されています。
X509V3_EXT_printは、X509拡張がバッファへの出力に対応していない場合、1以外の値を返すことがあります。回復不能なアサーションで失敗するのではなく、ハッシュマップ内の該当する値をJSのnull値に置き換えます。
この脆弱性はどのように修正されましたか?
関連コミット:1156a9e5f8 crypto: 未対応のextが原因で発生するアサーションを修正
セキュリティレポートの詳細はHackerOneの報告をご覧ください
Snykはセキュリティコミュニティを大切にしており、オープンソースパッケージの脆弱性を責任ある形で開示することが、ユーザーのセキュリティとプライバシーの確保につながると考えています。オープンソースソフトウェアに脆弱性を発見した場合は、https://snyk.io/vulnerability-disclosureからご連絡ください。当社の責任ある開示プログラムは、開発者と報告者の双方を保護しながら、研究者が発見した脆弱性から開発者が安全に学べるよう支援します。
