Node.js、22・24・26系に脆弱性10件のセキュリティ更新 深刻度「高」は4件、圧縮データの展開で遠隔からコード実行のおそれ

時間がない人向けの30秒で理解ゾーン
JavaScriptの実行環境「Node.js」の開発プロジェクトが10月21日(米国時間)、22・24・26の3系列に向けたセキュリティ更新を公開した。直した脆弱性(セキュリティ上の欠陥)は10件で、深刻度「高」は4件。圧縮データの展開処理には、外部から不正なプログラムを実行されるおそれがあった。
修正版は22.23.4・24.22.1・26.12.1、日本時間では21日夜に公開
Node.jsは、Webサービスの裏側で動くサーバーや社内システム、開発用のツールでJavaScriptを動かすための土台となるソフトだ。ExpressやNext.js、Nuxtといった広く使われるフレームワーク(Webアプリを効率よく作るためのひな型となるプログラム群)も、多くはNode.jsの上で動く。
公開した修正版は、22系の「v22.23.4」、24系の「v24.22.1」、26系の「v26.12.1」の3つだった。GitHubに3つのリリースが登録されたのは協定世界時の10月21日10時38分ごろで、日本時間に直すと同じ21日の19時38分ごろ、米西海岸では21日の未明にあたる。プロジェクトは1週間前の10月14日(協定世界時)に、21日かその直後に3系列の修正版を出し、最も高い深刻度は「高(HIGH)」になると予告しており、日程は予告どおりとなった。
Node.jsの公式Xアカウントも日本時間10月22日午前7時39分、22・24・26系の新しいリリースで深刻度の高い問題を含む複数の脆弱性に対処したと伝え、更新を呼びかけた。
🔐 Node.js security updates are now available!
— Node.js (@nodejs) 2026年10月22日
New releases for Node.js 22.x, 24.x & 26.x address multiple vulnerabilities, including high-severity issues.
Review the details and update your systems to stay secure.
🔗 https://t.co/W4kfzx5lxz
#NodeJS #Security
X上で出回った要約には「10件以上の高深刻度脆弱性を修正」とするものもあった。だが、公式の一覧で深刻度「高」とされたのは4件で、残りは「中」が3件、「低」が3件。10件はあくまで深刻度を問わない合計の数字だ。
系列ごとに対象の欠陥も違う。10件すべてが関係するのは26系だけで、24系は8件、22系は7件にとどまる。全角数字で書いたIPアドレスをめぐる「高」の1件は26系と24系だけが対象で、22系には関係しない。
深刻度「高」の4件、Brotliの解凍で外部からコード実行のおそれ
4件のうち、とりわけ注意が必要なのが「CVE-2026-111497」だ。CVEは、世界共通で脆弱性に付けられる識別番号を指す。欠陥があったのは、圧縮形式「Brotli」のデータを解凍する処理だ。BrotliはGoogleが開発した形式で、Webページの転送量を減らすためにブラウザやサーバーで広く使われている。
公式の説明では、Brotliのデータを解凍する際に、決められたメモリの範囲の外へデータを書き込んでしまう欠陥があり、外部から不正なコードを実行されるおそれがあるという。22・24・26の全系列が対象となる。特に、外から受け取った圧縮データをNode.jsで展開(解凍)するシステムは注意が要る。報告したのはNode.jsの開発に携わるMatteo Collinaで、修正には、Brotliの開発元が作った修正をそのまま取り込んだ。
残る3件の「高」は、通信の安全確認と、ドメイン名の扱いにかかわる欠陥だった。
うち2件は、TLS(通信を暗号化し、相手が本物かを証明書で確かめる仕組み)の確認手順をすり抜けられる問題だ。1件はIPアドレスを全角数字で書いた場合、もう1件は接続先の名前がIPアドレスとして緩く解釈されてしまう場合に、証明書が本来の接続先のものかを確かめる手順が正しく働かない。もう1件はDNS(ドメイン名からIPアドレスを調べる仕組み)の問い合わせに使う機能で、名前の中にNUL文字(文字列の終わりを示す特殊な文字)が混ざると、途中で切れた名前のまま扱ってしまう。
| CVE番号 | 深刻度 | 内容 | 対象の系列 |
|---|---|---|---|
| CVE-2026-111497 | 高 | Brotliの解凍処理でメモリの範囲外へ書き込み、外部からコード実行のおそれ | 26・24・22 |
| CVE-2026-105483 | 高 | 全角数字で書いたIPアドレスで、TLS証明書の接続先確認をすり抜け | 26・24 |
| CVE-2026-106069 | 高 | IPアドレスとして緩く解釈される書き方で、TLS証明書の接続先確認をすり抜け | 26・24・22 |
| CVE-2026-105482 | 高 | DNSの問い合わせで、NUL文字を含む名前が途中で切れる | 26・24・22 |
| CVE-2026-105481 | 中 | 使い回すHTTP接続で、要求を送る前に届いた応答を処理してしまう | 26・24・22 |
| CVE-2026-106072 | 中 | 標準的でない書き方のIPv4アドレスで、証明書の確認が不十分になる | 26・24・22 |
| CVE-2026-106074 | 中 | 起動用スナップショットや単一実行ファイルで、乱数の値がプロセス間で重複 | 26・24・22 |
| CVE-2026-106070 | 低 | ZIPのヘッダー確認に失敗した後、攻撃者が用意したデータを返す | 26 |
| CVE-2026-106071 | 低 | パーミッションモデルのワイルドカード指定で、ファイルの権限を広く与えすぎる | 26 |
| CVE-2026-106073 | 低 | パーミッションモデルの制限をfs.realpathSyncで回避できる | 26・24・22 |
「中」「低」の6件と、あわせて更新したライブラリ
「中」の3件は、HTTP接続の使い回し、証明書の確認、乱数の生成にかかわる。中でも乱数の欠陥は、識別子を作るcrypto.randomUUID()や乱数を返すrandomInt()のために、あらかじめ作りためておく乱数が、起動を速めるために、立ち上がった直後の状態を保存しておく「スナップショット」や、アプリを1つの実行ファイルにまとめる機能(SEA)の中へそのまま保存されてしまうものだ。その結果、そのスナップショットや実行ファイルから起動したプロセスは、どれも同じ値を繰り返し出してしまう。
「低」の3件のうち2件は、プログラムが読み書きできるファイルなどを制限する「パーミッションモデル」の機能で、制限をすり抜けたり、権限を広く与えすぎたりする問題だった。もう1件は、26系が備えるZIPファイルの読み込み処理の欠陥だ。このZIPの欠陥と、パーミッションモデルで権限を広く与えすぎる問題の2件は、26系だけが対象となる。
脆弱性の修正とは別に、Node.jsが中に組み込んで使っている「ライブラリ」(ほかの開発元が作ったプログラム)も、すでに公表済みの問題に対処するため新しい版へ更新した。DNSの問い合わせを担う「c-ares」は1.34.9へ、組み込みのfetch機能を支えるHTTP通信のライブラリ「Undici」は26系で8.12.2、24系で7.30.1、22系で6.29.1へ上げた。暗号化を担う「OpenSSL」は24系と22系で3.5.9に、データベース機能の「SQLite」は22系で3.53.4に更新している。
もう1つの更新が、Webサイトの証明書を発行する機関「eMudhra」をめぐる対応だ。同社系の中間証明書(大元のルート証明書と各サイトの証明書の間をつなぐ証明書)8件について、ひも付く秘密鍵が、鍵の作り方の欠陥から第三者に割り出せる状態だったと10月に報告されていた。Node.jsは3系列すべてで、この8件を経由する証明書を拒否するリストを組み込み、信頼する証明書の一覧もMozillaの「NSS 3.131.1」の内容へ入れ替えた。これで「emSign」の名を持つ同社のルート証明書3件が一覧から外れた。Mozillaの記録では、このうち1件は今回の問題を受けた削除で、残る2件は同社が以前から進めていた証明書の切り替えにともない、同社自身が削除を求めたものだ。Mozillaも、報告を受けた10月17日(協定世界時)のうちに、Firefoxで問題の証明書をブロックする措置をとっている。
10月は主要ソフトの緊急更新が相次ぐ、Node.jsは今年5回目
Node.jsと同じ10月21日(協定世界時)には、Webサービスで広く使われるプログラミング言語「PHP」も緊急のセキュリティ更新を出した。認証なしで外部からコードを実行されるおそれのある欠陥2件を直すもので、PHPの開発チームはすべての利用者にただちに更新するよう呼びかけた。修正版はv8.5.12、v8.4.27、v8.3.36、v8.2.35の4つとなる。
関連記事:【PHP脆弱性パニック】「php2shell」とは 大手Webサービスが緊急メンテ、高市総理もコメントする事態に「何が起きてる?」「個人は何をするべきなの?」にわかりやすく解説
ソースコード管理サービスのGitLabも米国時間10月21日、自社サーバーで動かす版に向けて緊急の修正版を出した。直した欠陥は、深刻度を示す指標CVSSで最高の10.0と評価されている。GitLabは10月12日にも、別の10.0の欠陥を直す修正版を出したばかりだった。
関連記事:GitLabにCVSS 10.0の緊急脆弱性、約12年分の自己管理版が対象 10月12日に更新したサーバーも再更新が必要
Node.jsのセキュリティ更新は、2026年に入って5回目となる。1月13日に8件、3月24日に9件、6月18日に12件、7月29日に11件を直しており、7月は予定日から2度延期した末の公開だった。件数で見れば今回の10件は6月や7月を下回る。一方、深刻度「高」の4件は、今年の5回の中で最も多い。
誰が何をすればよいか、バージョンの確かめ方と更新先
影響を受けるのは、Node.jsでサーバーやシステムを動かしている企業や個人の開発者だ。外部の開発会社にシステムづくりを任せている企業も、使っているNode.jsの系列と更新の予定を確かめておきたい。
まずは、いま動いているバージョンを確かめたい。ターミナルやコマンドプロンプトといったコマンドを打つ画面で「node -v」と入力すると、「v24.22.1」のような番号が出る。先頭の数字が系列を示し、22系なら22.23.4、24系なら24.22.1、26系なら26.12.1以降であれば今回の修正を含む。
番号がそれより古ければ、公式サイトから修正版を入手するか、普段使っているNode.jsのバージョン管理ツールで入れ替える。特に急いで更新したいのは、外部から受け取った圧縮データを解凍したり、TLSで外部とやりとりしたりする処理を持つシステムだ。Node.jsに組み込まれたfetch機能は、Brotliで圧縮された応答を受け取ると自動で解凍する。解凍の処理を自分で書いていなくても、fetchで外部のサーバーとやりとりするシステムは当てはまりうる。Linuxの配布元が配るパッケージや、Dockerなどのコンテナの元になる「イメージ」(実行環境のひな型)でNode.jsを使っている場合は、それぞれの配布元が修正版を出したかどうかもあわせて確かめる必要がある。
サポートが終わった系列には、今回の修正版は出ない。20系は2026年4月30日、25系は6月1日にサポートを終えている。公式は、セキュリティ更新が出るたびにサポート終了の版は必ず影響を受けると注意を促し、リリーススケジュールに沿った最新の版を使うよう求めた。古い系列のままなら、サポート中の系列への移行が必要になる。
公式のリリーススケジュールでは、22系は2027年4月30日、24系は2028年4月30日、26系は2029年4月30日まで更新が続く。26系は10月28日に長期サポート版(LTS)へ移る予定で、24系はスケジュール上、10月20日から重要な不具合とセキュリティの修正が中心となる「メンテナンス」の段階に移った。これから新たに系列を選ぶ場合も、こうした期限が判断の材料になる。
[文/構成 by MediaDogs編集部]









































































コメントはこちら