Skip to main content

Node.jsのリリースで重大なHTTPセキュリティ脆弱性を修正

Node How even quick async functions can block the Event Loop starve tumb

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

影響を受けるのはどのバージョンですか?

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のみです。

        header-field   = field-name ":" OWS field-value OWS
    ; https://tools.ietf.org/html/rfc7230#section-3.2
OWS            = *( SP / HTAB )
    ; https://tools.ietf.org/html/rfc7230#section-3.2.3

「この脆弱性はどのように修正されましたか?」

Node.jsのHTTPリクエストスマグリング脆弱性 CVE-2019-15605について

Node.jsには、不正なTransfer-Encodingヘッダーを利用したHTTPリクエストスマグリング攻撃に対する脆弱性があることが判明しました。以下のHTTPリクエストの例は、この問題がどのように発生するかを示すもので、現在はこの回帰をテストするために使われています。

POST / HTTP/1.1
Content-Type: text/plain; charset=utf-8
Host: hacker.exploit.com
Connection: keep-alive
Content-Length: 10
Transfer-Encoding: chunked, eee

HELLOWORLDPOST / HTTP/1.1
Content-Type: text/plain; charset=utf-8
Host: hacker.exploit.com
Connection: keep-alive
Content-Length: 28

I AM A SMUGGLED REQUEST!!!

この脆弱性はどのように修正されましたか?

  • 関連コミット: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からご連絡ください。当社の責任ある開示プログラムは、開発者と報告者の双方を保護しながら、研究者が発見した脆弱性から開発者が安全に学べるよう支援します。