Node.js 22.23.3 LTS、HTTP/2のuse-after-freeバグを修正
9月23日公開のNode.js 22.23.3 LTSは、HTTP/2のuse-after-free(ユースアフターフリー)バグを修正し、Node-APIにSharedArrayBufferのサポートを追加し、OpenSSL 3.5.8に移行しました。
3 分で読めます

Node.jsプロジェクトは2026年9月23日、長期サポート版のパッチであるNode.js 22.23.3をリリースしました。最も重要な変更は、HTTP/2のuse-after-freeバグの修正です。これはHTTP/2接続を処理するコードにあったメモリエラーです。Node.js 22でHTTP/2を提供している人は、アップグレードを計画すべきです。
Node.jsは、JavaScriptをブラウザーだけでなくサーバーでも動かせるようにするランタイムです。バージョン22は長期サポート(LTS)リリースです。つまり何年にもわたって修正が提供され、多くの企業が本番環境で使っています。リリースのコードネームは「Jod」です。
HTTP/2の修正で何が変わるか
HTTP/2は、Webの主要プロトコルの新しいバージョンです。1つの接続で多くのリクエストを同時に運べ、それぞれが独自の「ストリーム」を持ちます。
use-after-freeバグは、プログラムがメモリの一部を返却した後も、そのメモリを使い続けるときに起こります。するとプログラムは、別の何かのものかもしれないデータを読み書きすることになります。この種のバグはプログラムをクラッシュさせることがあるため、すぐに修正されます。
LinuxCompatibleによると、問題はnghttp2_session_mem_recv2()の競合状態でした。この関数は、Node.jsがHTTP/2通信の読み取りに使うライブラリnghttp2の一部です。受信データの処理中にストリームが閉じられると、コードがすでに解放されたメモリに触れる可能性がありました。修正では、RST_STREAMと呼ばれるストリーム終了メッセージの処理を、受信ステップが終わるまで待つようにしています。
どちらの情報源も、このバグのCVE番号や深刻度の評価を示していません。公式のリリースノートは、これをバグ修正として記載しています。プロジェクトのセキュリティリリースの投稿には載っておらず、そこでの最新の項目は2026年7月のものです。
SharedArrayBuffer向けの新しいNode-API関数
Node-APIは、ネイティブアドオンが使う安定したインターフェースです。ネイティブアドオンとは、Node.jsが直接読み込むCやC++で書かれたモジュールで、データベースドライバーや画像ライブラリなどがあります。
このリリースで、これらのアドオンがSharedArrayBufferを扱えるようになります。これは、複数のJavaScriptスレッドが同時に読み書きできるメモリのブロックです。リリースノートでは、napi_create_external_sharedarraybufferが追加され、napi_create_typedarrayがSharedArrayBufferを受け付けるよう拡張されています。
その他の修正と依存関係の更新
小さな修正が2つ記載されています。1つは、コードがESモジュールローダー経由で読み込まれる場合に、ファイルシステムモジュールfsへのパッチを再び可能にするものです。もう1つは、Windowsでの環境変数のエスケープ方法を修正するものです。
このリリースでは、同梱ライブラリも更新されています。
| コンポーネント | 新しいバージョン |
|---|---|
| OpenSSL | 3.5.8 |
| ルート証明書 | NSS 3.125 |
| npm | 10.9.9 |
| corepack | 0.36.0 |
| Undici | 6.28.1 |
| ICU | 78.3 |
| c-ares | 1.34.8 |
| タイムゾーンデータ | 2026c |
OpenSSLはHTTPSの暗号化を担当します。Undiciは、Node組み込みのfetchを支えるHTTPクライアントです。ルート証明書は、Node.jsがデフォルトでどのHTTPSサイトを信頼するかを決めます。
開発者にとっての意味
Node.js 22のサービスがHTTP/2を直接話しているかを確認してください。これには、http2モジュールで構築したサーバー、gRPCサービス、前段にプロキシを置かずに自らTLSを終端するアプリが含まれます。こうしたサービスがストリーム終了のバグに最もさらされているため、まずそれらを22.23.3に移行してください。
ノートPCだけでなく、ベースイメージも更新してください。多くのチームは、Dockerfile、CI設定、.nvmrcファイルでNodeのバージョンを固定しています。それらのファイルで22.を検索し、それぞれを上げてから再ビルドしてください。
ネイティブアドオンを保守している場合、新しいNode-API関数を使えば、コピーせずにワーカースレッドとメモリを共有できます。バージョンチェックを追加してください。これらの関数は新しいリリースにしかなく、古いNode 22のビルドにはないからです。
テストスイートがESモジュールの下でfsモジュールをモックしていて、以前の22.xリリースで壊れた場合は、22.23.3で再実行してください。パッチが再び可能になったことで、回避策を削除できるかもしれません。
最後に、CVEの発表に注意してください。リリースノートにはCVEの記載がなく、プロジェクトが後でセキュリティアドバイザリーを公開する可能性があります。それまでは、次の定期アップデートを待たずに今すぐ適用する価値のあるパッチとして扱ってください。
出典
- Node.js 22.23.3 (LTS) - Node.js
- Node.js 22.23.3 LTS Released with HTTP/2 Use-After-Free Fix - LinuxCompatible
関連記事

SourceHutのビルドログXSS、アカウント乗っ取りが可能に
細工したビルドログでSourceHutユーザーのブラウザ上でスクリプトを実行できるクロスサイトスクリプティングの欠陥です。ansi2html 1.9.4がバージョン1.7.0から1.9.3に影響したCVE-2026-92973を修正しました。

Radicle 1.10.3以前、非公開リポジトリを平文で送信
Radicle(ラディクル)の1.10.3までの全リリースがリポジトリのデータを暗号化せずに送り、攻撃者が信頼済みピアになりすませる。修正版はまだなく、Radicle 2.0でネットワークが変わる。

gzip 1.15、誤ったファイルを削除する競合状態を修正
gzip 1.15は75週間分の119コミットを取り込んだ。誤ったファイルを削除しうる競合状態(レースコンディション)と、.lzh展開時のバッファオーバーフローを修正している。