Node.js の複数の脆弱性が FIX:広範な影響が指摘されている

Major Node.js Security Flaws: Millions of Apps Could Be Vulnerable

2024/02/15 SecurityOnline — 世界中の何百万人もの開発者が使用している、JavaScript 実行環境である Node.js が、先日に発表したセキュリティ更新プログラムは、複数の深刻度の高い脆弱性を対象としたものである。これらの脆弱性に直ちに対処して、アプリケーションを攻撃から防御する必要がある。


コード・インジェクションと特権の昇格:CVE-2024-21892: Linux 上で動作する Node.js アプリケーションが、昇格した特権下で環境変数を処理する方法に、深刻な脆弱性があることが確認された。この見落としにより、特権を持たないユーザーが、昇格した権限でコードを実行することが可能となり、システムの完全性に対する明白かつ緊急度の高い危機が示されている。すべてのアクティブな Node.js リリース・ラインが影響を受けており、コミュニティにとって重大な懸念事項となっている。

HTTP リクエスト処理による DoS 攻撃:CVE-2024-22019:Node.js サーバに存在する、チャンク・エンコーディングによる HTTP リクエストを処理する際の脆弱性により、サービス拒否 (DoS) 攻撃を受けやすくなっている。この脆弱性の悪用に成功した攻撃者は、リソースの枯渇を引き起こし、無秩序なデータの流入でサーバを圧倒し、機能不全に陥らせることができる。この脆弱性が示唆するのは、強固な入力検証とリソース管理の実践の重要性である。

バッファ内部経由のパス・トラバーサル:CVE-2024-21896: 実験的なパーミッション・モデルを使用するアプリケーションに影響を及ぼす、深刻度の高い脆弱性が発見された。Buffer の内部メソッドの操作に成功した攻撃者は、パス・トラバーサル攻撃を防ぐために設計されたセキュリティ・チェックを回避し、制約のあるディレクトリへの不正アクセスを取得できる。この脆弱性が示唆するのは、いくつかの Node.js 機能の実験的な性質への配慮と、慎重な実装の必要性である。

setuid() による不完全な特権奪取:CVE-2024-22017: libuv の io_uring 操作における予期せぬ動作により、 setuid() を呼び出しても特権が完全に解放されないことが判明した。それにより、プロセスが許可された範囲を超えて、アクションを実行する可能性が生じ、システムのセキュリティ体制に重大なリスクが引き起こされる。

Marvin 攻撃: 暗号におけるタイミング・サイドチャネル:CVE-2023-46809: この、Marvin Attack にちなんで命名された脆弱性は、 crypto ライブラリの privateDecrypt() API に存在し、RSA 暗号文の解読や偽造に悪用される可能性のある、タイミング不一致の問題を引き起こす。この脆弱性が示唆するのは、暗号攻撃の巧妙さと、警戒の必要性である。

パーミッション・モデルのバイパス:CVE-2024-21891: Node.js の実験的なパーミッション・モデルが脆弱であることが証明された。パストラバーサル・シーケンスの不適切なサニタイズにより、攻撃者はファイル・システムのパーミッションを回避できる。この問題と、パーミッション・フラグのワイルドカードに関連する問題(CVE-2024-21890)は、Node.js のファイル・アクセス・パーミッションの取り扱いに、落とし穴があることを強調している。

誰が危険にさらされるのか?

これらの脆弱性により、多くの Node.js アプリケーションが危険にさらされる。以下のいずれかにおいて、Node.js を利用している場合は、直ちに対処する必要がある:

  • Web サーバと API
  • Linux システム上で動作するアプリケーション
  • 実験的許可モデルを使用しているプロジェクト
  • 機密データや暗号化を扱うシステム
必要な対策

Node.js を最新のパッチ付きバージョンに更新する: アプリケーションを保護するための、最も重要なステップである。あなたのシステムに適した、 v18.xv20.xv21.x リリースラインのアップデートを選択してほしい。

エクスペリメンタル・パーミッションを確認する: Node.js の実験的なパーミッション・モデルを使用している場合には、コードとアクセス制御を注意深く監査し、不注意によるセキュリティ・ホールが生じていないことを確認してほしい。

警戒すること: パッチを適用した後でも、進行中の Node.js セキュリティ勧告に関する情報を常に入手する。継続的な警戒は、アプリケーションを保護する鍵である。