日本の被害状況Japan incidents
お問い合わせContact

脆弱性の解説 · 2026年10月Vulnerability explainer · October 2026 Node.jsとnpm、
何が危ないのか
Node.js and npm:
what's actually
at risk

10月21日、Node.jsは10件の脆弱性を修正しました。その1週間前にはNext.jsとReactで重大な穴が見つかり、npmでは入れただけで鍵を盗み、ほかのパッケージへ広がる「ワーム」が繰り返し現れています。Node.jsそのもの、その上で動くフレームワーク、部品を配るnpmという3つの層で、何が起きているのかを動く図でやさしく説明します。

On 21 October, Node.js fixed ten vulnerabilities. A week earlier, critical holes turned up in Next.js and React, and on npm "worms" that steal keys the moment you install them and then spread to other packages keep coming back. This page walks through all three layers (Node.js itself, the frameworks on top, and npm, which delivers the parts) in plain words and with moving diagrams.

Node.js:高4件・中3件・低3件Node.js: 4 high, 3 medium, 3 low 修正版:22.23.4 / 24.22.1 / 26.12.1Fixed: 22.23.4 / 24.22.1 / 26.12.1 Node.js 20:サポート終了Node.js 20: end of life

株式会社BekitoBekito Inc.約12分12 min read

この記事の要点Key points

  • Node.jsは10月21日に10件を修正しました(高4件)。最も重いのは、Brotli形式の解凍で決められた箱の外まで書き込む不具合(CVE-2026-111497)。fetch()は返事を自動で解凍するので、悪意あるサーバーにつなぐだけで起きる恐れがあります。
  • 修正版は 22.23.4・24.22.1・26.12.1。Node.js 20と25はサポートが終わっていて、修正版は出ません。
  • Next.jsとReactでは10月14日に「緊急」の脆弱性が修正されました。ログインなしで命令実行につながるもので、画像の最適化の穴には攻撃の実証コードも出ています。
  • npmでは、入れただけで鍵を盗んで広がるワームが続いています。守りの基本は、ロックファイルどおりに入れる(npm ci)、インストール時のスクリプトを止める、公開直後の版を数日待つ、の3つです。
  • 10月22日時点で、Node.jsの10件の悪用は確認されていません。今のうちに更新するのが一番安く済みます。
  • Node.js fixed ten flaws on 21 October, four rated high. The worst is a Brotli decompression bug that writes past the end of its buffer (CVE-2026-111497). Because fetch() decompresses responses automatically, just talking to a malicious server may trigger it.
  • Fixed in 22.23.4, 24.22.1 and 26.12.1. Node.js 20 and 25 are end-of-life and get no fix.
  • Next.js and React fixed critical flaws on 14 October that lead to code execution without logging in. Proof-of-concept code is public for the image optimisation one.
  • On npm, worms that steal keys at install time and then spread keep appearing. The basics: install exactly what the lockfile says (npm ci), block install scripts, and wait a few days before taking brand-new versions.
  • As of 22 October, none of the ten Node.js flaws is known to be exploited. Updating now is the cheapest it will ever be.

01

あなたの環境は大丈夫?Are you affected?バージョンを入れると、すぐに判定しますType a version and get an answer straight away

Node.js・Next.js・npmのバージョンを入れてください。入力した内容はこのページの中だけで判定し、どこにも送りません。Node.jsの公式の確認ツール npx is-my-node-vulnerable は、10月22日時点ではまだ今回の10件に対応していません。

Type your Node.js, Next.js or npm version. The check runs inside this page; nothing you type is sent anywhere. Note that the official checker, npx is-my-node-vulnerable, did not yet know about these ten flaws as of 22 October.

Dockerを使っている場合は、コンテナの中で確かめてください(例:docker exec <名前> node -v)。ベースイメージを作り直さないと、古いNode.jsのまま動き続けます。

If you use Docker, check inside the container (for example docker exec <name> node -v). Until the image is rebuilt, the old Node.js keeps running.

02

この3か月に起きたことThe last three monthsNode.js・フレームワーク・npmNode.js, frameworks and npm

Node.jsのシステムは、Node.js本体、その上のフレームワーク(Next.jsなど)、npmから入れる数百〜数千の部品(パッケージ)でできています。この3か月、そのすべての層で問題が出ました。

A Node.js system is made of Node.js itself, a framework on top (Next.js and the like) and hundreds or thousands of parts (packages) installed from npm. Over the past three months, every one of those layers has had problems.

1010月21日にNode.jsで修正された脆弱性(高4・中3・低3)Node.js flaws fixed on 21 Oct (4 high, 3 medium, 3 low)
9.5Next.jsの最も重い脆弱性の深刻度(CVSS v4、10月14日)severity of the worst Next.js flaw (CVSS v4, 14 Oct)
1,500+npmの「信頼済み公開」の不備で乗っ取られ得たパッケージnpm packages exposed by the Trusted Publishing flaw
0悪用が確認されたNode.jsの10件(10月22日時点)of the ten Node.js flaws known to be exploited (22 Oct)
  1. npmワーム「Shai-Hulud」の再来The "Shai-Hulud" npm worm returns

    8月4日、keyvなど広く使われるパッケージの新しい版に、鍵を盗んで広がるコードが仕込まれました。被害は400以上のパッケージ(Elastic)、シンガポールの政府機関は1,300以上の版と数えています。2要素認証のないnpmの鍵が盗まれ、次々と感染版が公開されました。

    On 4 August, new versions of widely used packages such as keyv shipped code that steals keys and spreads. Elastic counted over 400 packages; Singapore's Cyber Security Agency counted over 1,300 versions. npm keys without two-factor authentication were stolen and used to publish one infected version after another.

  2. Next.jsで相次ぐ修正A run of Next.js fixes

    9月22日に画像生成(ImageResponse)の命令実行、9月30日にサーバーから別のサーバーへ不正に問い合わせさせる問題(SSRF)やキャッシュの汚染などが修正されました。

    22 September fixed code execution in image generation (ImageResponse); 30 September fixed server-side request forgery (SSRF), cache poisoning and more.

  3. AI開発ツールのパッケージが乗っ取られるAn AI SDK package is hijacked

    Tensorlakeの tensorlake@0.5.144 が、インストール時にnpm・GitHub・AWS・Kubernetesの鍵、SSHの鍵、.env、AIコーディングツールの設定まで盗むものにすり替わりました。正規のリリースの仕組みから公開されたため、出どころの証明(provenance)も正しく付いていました。

    tensorlake@0.5.144 was swapped for a version that, at install time, steals npm, GitHub, AWS and Kubernetes keys, SSH keys, .env files and AI coding tool configs. It came out of the project's normal release pipeline, so even its provenance record was valid.

  4. npm「信頼済み公開」の不備が公表npm Trusted Publishing flaw disclosed

    npmは公開元のGitHubリポジトリを名前だけで照合していたため、名前の変わった・消えたリポジトリの名前を取り直すと、公開の権限を得られました。1,500以上のパッケージが対象で、悪用は確認されていません。GitHubは10月2日に、使われていない設定を48時間で失効させる対策を入れています。

    npm matched the linked GitHub repository by name only, so re-registering the name of a renamed or deleted repository could grant publish rights. Over 1,500 packages were exposed; no exploitation is confirmed. GitHub had already made unused configurations expire after 48 hours on 2 October.

  5. Next.js・Reactで「緊急」の脆弱性Critical flaws in Next.js and React

    ログインなしで命令実行につながる2件(深刻度9.5)と、サーバーを止められる1件が修正されました。JPCERT/CCは21日の週報で、画像の最適化の脆弱性(CVE-2026-96889)の攻撃の実証コードが公開されていると伝えています。

    Two flaws leading to unauthenticated code execution (severity 9.5) and one that can stall the server were fixed. JPCERT/CC's weekly report on the 21st says proof-of-concept code for the image optimisation flaw (CVE-2026-96889) is public.

  6. Node.jsのセキュリティリリース(10件)Node.js security release (10 flaws)

    22.23.4・24.22.1・26.12.1が公開されました。Brotliの解凍、TLSの証明書の名前確認、DNSの名前解決などの不具合です。同時に、秘密鍵が漏れたと報告されたeMudhraの中間証明書8枚を拒否するようになり、OpenSSLや内蔵の fetch()(undici)も更新されました。

    22.23.4, 24.22.1 and 26.12.1 came out, fixing bugs in Brotli decompression, TLS certificate name checks, DNS resolution and more. They also block eight eMudhra intermediate certificates whose private keys were reported compromised, and update OpenSSL and the built-in fetch() (undici).

03

しくみ①:箱からあふれる解凍How it works 1: decompression that overflows its boxCVE-2026-111497 · Brotli out-of-bounds write · High

Webの通信は、速くするために圧縮して送られます。Brotli(br)はその形式の一つです。Node.jsの fetch() は、相手が「br で圧縮した」と言えば、自動で解凍してくれます。

Web traffic is compressed to make it faster, and Brotli ("br") is one of the formats. When a server says its reply is br-compressed, Node.js's fetch() decompresses it automatically.

解凍する係は、決まった大きさの箱に中身を書き込んでいきます。ところが、細工されたデータが「ここで区切りが変わる」と偽ると、係は確認しないまま書き続け、箱の外の、隣のメモリまで上書きしてしまいました。隣にあるのは、プログラムが使っている別のデータです。それが壊れると、アプリが落ちるか、最悪の場合は攻撃者の命令が動きます。

The decoder writes the output into a box of fixed size. But when crafted data falsely claims "the block changes here", the decoder kept writing without checking and overwrote memory outside the box. That neighbouring memory holds other data the program is using. Corrupt it and the app crashes, or in the worst case the attacker's code runs.

悪意あるサーバーにつなぐと?Talking to a malicious server
Node.jsのアプリがfetch()で外部のサーバーに問い合わせる。悪意あるサーバーがbr圧縮の返事を送る。Node.jsが自動で解凍し、決まった大きさの箱に書き込むが、細工されたデータのせいで箱の外の隣のメモリまで書き込み、メモリが壊れる。修正版では、不正な区切りを見つけた時点で解凍を止める。 あなたのアプリ(Node.js)Your app (Node.js) await fetch(url) 解凍用の箱output buffer 隣のメモリneighbouring memory 不正な区切り→停止bad block → stop メモリ破壊 → 停止・乗っ取りmemory corrupted → crash or takeover 悪意あるMalicious サーバーserver Content-Encoding: br 修正版:不正な区切りを見つけた時点で、解凍を止めるFixed: decoding stops as soon as an invalid block switch appears
  1. アプリが fetch() で外部のサーバーに問い合わせるThe app calls an outside server with fetch()
  2. 悪意あるサーバーが「br で圧縮した」返事を送るThe malicious server replies "br-compressed"
  3. Node.jsが自動で解凍し、決まった大きさの箱へ書き込むNode.js decompresses automatically into a fixed-size box
  4. 細工された区切りのせいで、箱の外まで書き込むA crafted block switch makes it write past the box
  5. 隣のメモリが壊れ、アプリが落ちる。最悪は乗っ取りNeighbouring memory breaks: a crash, or at worst a takeover
  6. 修正版:不正な区切りを見つけた時点で止めるThe fix: stop at the first invalid block switch

エンジニア向け:Node.jsに同梱されたBrotliのデコーダーの DecodeBlockTypeAndLength で、ブロックの種類を1つと宣言したストリームがブロックの切り替えを試みると、出力用のバッファの外へ書き込んでいました。修正(Brotli本家のコミット 0ed4268a)では、そのようなストリームを BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH として早い段階で拒否します。zlib.brotliDecompress*()・createBrotliDecompress() のほか、Content-Encoding: br の応答を自動で解凍する fetch() からも届きます。Brotli本家も同じ日に 1.2.1・1.1.1・1.0.10 を公開しています。10月22日時点で、公開された攻撃コードは見つかっていません。

For engineers: in the Brotli decoder bundled with Node.js, DecodeBlockTypeAndLength wrote past the output buffer when a stream declared a single block type and then tried to switch blocks. The fix (upstream Brotli commit 0ed4268a) rejects such streams early with BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH. It is reachable through zlib.brotliDecompress*() and createBrotliDecompress(), and also through fetch(), which decompresses Content-Encoding: br responses automatically. Upstream Brotli released 1.2.1, 1.1.1 and 1.0.10 the same day. No public exploit was found as of 22 October.

04

しくみ②:同じ住所の、2つの読み方How it works 2: one address, two readingsCVE-2026-106069 / 105483 / 106072 · TLS hostname checks · High

HTTPSでつなぐとき、Node.jsは相手の証明書を見て「本当にその相手か」を確かめます。ところが、IPアドレスは書き方が何通りもあります。たとえば頭に0を付けた 0127.0.0.1 は、ふつうに読めば 127.0.0.1 ですが、0から始まる数を8進数として読む仕組みでは 87.0.0.1 になります。

When connecting over HTTPS, Node.js checks the other side's certificate to confirm it really is who it claims. But an IP address can be written in many ways. 0127.0.0.1, with a leading zero, reads as 127.0.0.1 normally, but software that reads leading-zero numbers as octal sees 87.0.0.1.

証明書を確かめる係と、実際の接続先を決める係(OS)が同じ住所を違う意味に読むと、確認は通ったのに、別の相手につながってしまいます。全角数字で書いたIPアドレスでも、同じようなすり抜けがありました。

If the code that checks the certificate and the code that decides where to connect (the OS) read the same address differently, the check passes but the connection goes somewhere else. IP addresses written in full-width digits allowed a similar bypass.

確認は通ったのに、別の相手へ(例)The check passes, the connection goes elsewhere (example)
アプリに接続先として0127.0.0.1が渡される。証明書を確かめる係はそれを127.0.0.1と読み、証明書と一致すると判断する。接続先を決めるOSは先頭の0を8進数と読み、87.0.0.1へつなぐ。アプリは本物だと思って別のサーバーと通信してしまう。修正版では、読み方が分かれる書き方の名前を拒否する。 アプリApp 0127.0.0.1 証明書の係Certificate check → 127.0.0.1 と読む→ reads 127.0.0.1 証明書と一致 ✓matches cert ✓ 接続の係(OS)Resolver (OS) → 87.0.0.1 と読む→ reads 87.0.0.1 0始まり=8進数leading 0 = octal 本物のサーバーReal server 127.0.0.1 別のサーバーOther server 87.0.0.1 本物だと思ったまま、別の相手と通信してしまうthe app talks to the wrong server, believing it's the real one 修正版:読み方が分かれる書き方の名前は拒否するFixed: ambiguous numeric hosts are rejected
  1. 外から指定された接続先 0127.0.0.1 がアプリに渡るAn outside-supplied host, 0127.0.0.1, reaches the app
  2. 証明書の係は 127.0.0.1 と読み、「一致」と判断The certificate check reads 127.0.0.1 and says "match"
  3. 接続の係(OS)は8進数として 87.0.0.1 と読むThe OS resolver reads it as octal: 87.0.0.1
  4. 確認は通ったまま、別のサーバーとつながるThe check has passed, but it connects to another server
  5. 修正版:読み方が分かれる名前は、最初から拒否The fix: reject ambiguous hosts outright

エンジニア向け:図は考え方を示す例です。修正のコミットによると、TLSの名前確認は数字の形のホスト名を正規化してから証明書と照合していましたが、OSの名前解決は元の文字列を別のアドレスとして解釈できました(CVE-2026-106069)。全角数字のIPアドレスでも同様のすり抜けがあり(CVE-2026-105483、24・26系)、正規でない形のIPv4で証明書のDNS名がIPアドレスの相手を認証できる問題(CVE-2026-106072)も同じ修正で直りました。影響が大きいのは、接続先のホスト名を外部の入力から受け取るアプリ(Webhookの送り先、URLのプレビュー、プロキシなど)です。あわせて、dns.resolve*() がNUL文字を含む名前を手前で切ってしまう問題(CVE-2026-105482)も直りました。example.com\0.trusted.corp は example.com として解決されていました。

For engineers: the diagram illustrates the idea. Per the fix commit, the TLS identity check normalised non-canonical numeric hosts before matching certificates, while platform resolvers could interpret the original string as a different address (CVE-2026-106069). Full-width digit IPs allowed a similar bypass (CVE-2026-105483, 24.x and 26.x), and the same fix closes a case where a certificate's DNS name could authenticate an IP endpoint for non-canonical IPv4 (CVE-2026-106072). Apps most exposed are those that take the destination host from outside input: webhook targets, URL previews, proxies. The release also fixes dns.resolve*() truncating names at a NUL character (CVE-2026-105482): example.com\0.trusted.corp used to resolve as example.com.

05

しくみ③:入れただけで広がる、npmのワームHow it works 3: npm worms that spread on installサプライチェーン攻撃・Shai-Hulud/TensorlakeSupply-chain attacks · Shai-Hulud / Tensorlake

npmのパッケージは、インストールの途中で自動的にプログラムを動かせます(preinstall・postinstallのスクリプト)。本来は準備作業のための機能ですが、乗っ取られた版では、ここで開発者のPCやCI(自動でビルドする仕組み)にある鍵を盗みます。

npm packages can run programs automatically during installation (preinstall and postinstall scripts). The feature is meant for setup work, but in a hijacked version this is where keys are stolen from the developer's machine or the CI system that builds the software.

盗んだnpmの鍵があれば、攻撃者は被害者が管理している別のパッケージにも感染版を公開できます。それを入れた別の開発者からも鍵が盗まれ、また広がる。人の手を介さずに増えていくので「ワーム」と呼ばれます。

With a stolen npm key, the attacker can publish infected versions of the victim's other packages. Developers who install those lose their keys too, and it spreads again. Because it multiplies without anyone steering it, it's called a "worm".

npm install のあとで起きることWhat happens after npm install
開発者がnpm installを実行し、依存パッケージの中に乗っ取られた新しい版が混ざる。インストール中にpreinstallスクリプトが自動で動き、npm・GitHub・クラウドの鍵や.envを集めて攻撃者へ送る。攻撃者は盗んだnpmの鍵で、被害者が管理する別のパッケージに感染版を公開し、それを入れた別の開発者へ広がる。ロックファイルとnpm ci、スクリプトの停止、公開直後の版を待つ設定で防げる。 npm util-x@2.0.1 開発者のPC / CIDeveloper PC / CI $ npm install npm GitHub AWS .env preinstall が自動で実行preinstall runs by itself npm ci・スクリプト停止・数日待つnpm ci · no scripts · wait a few days 攻撃者attacker あなたのパッケージyour packages your-lib your-cli your-sdk ほかの開発者other developers
  1. npm install。依存の依存に、乗っ取られた新しい版が混ざるnpm install. A hijacked new version slips in deep in the tree
  2. インストール中に preinstall スクリプトが自動で動くDuring install, a preinstall script runs by itself
  3. PCやCIの鍵(npm・GitHub・クラウド・.env)を集めて外へIt collects keys (npm, GitHub, cloud, .env) and sends them out
  4. 盗んだ鍵で、あなたの別のパッケージにも感染版を公開The stolen key publishes infected versions of your other packages
  5. それを入れたほかの開発者へ、また広がるIt spreads again to developers who install them
  6. 防ぐ:ロックファイル+npm ci、スクリプトを止める、公開直後の版は待つDefence: lockfile + npm ci, block scripts, wait out brand-new versions

エンジニア向け:10月8日の tensorlake@0.5.144 では、preinstall が lib/setup.mjs を動かし、Bunの実行環境を使って本体を起動しました。命令を受け取るサーバーの場所はイーサリアムのスマートコントラクトから読み、偽のGitHub Actionsのワークフローも仕込みます。さらに「gh-token-monitor」という常駐の仕組み(WindowsのタスクスケジューラーやLinuxのサービス、macOSのLaunchAgent)を残し、盗んだGitHubの鍵が無効にされると攻撃者の処理を動かします。対応の順番が大事で、Socketは「鍵を無効にする前に、常駐の仕組みを先に消す」よう勧めています。8月の波では、Claude CodeやVS Codeの設定にフックを書き足して居座る手口も確認されました。正規のリリースの仕組みから公開された版は、出どころの証明(provenance)も正しく付くため、証明があるから安全、とは言えません。

For engineers: in the 8 October tensorlake@0.5.144, a preinstall hook ran lib/setup.mjs, which launched the payload with the Bun runtime. It found its command server through an Ethereum smart contract and planted fake GitHub Actions workflows. It also installed a persistent "gh-token-monitor" (Windows scheduled task, Linux service, macOS LaunchAgent) that runs an attacker handler if the stolen GitHub token is revoked. Order matters: Socket advises removing the monitor before revoking tokens. The August wave persisted by adding hooks to Claude Code and VS Code settings. A version published through a project's real release pipeline carries a valid provenance record, so provenance alone doesn't prove a package is safe.

06

Next.js・Reactの脆弱性Next.js and React flaws2026年10月14日修正・next 16.4.1 / 15.5.28Fixed 14 Oct 2026 · next 16.4.1 / 15.5.28

Next.jsは、Node.jsの上で動く代表的なWebのフレームワークです。10月14日の修正には、ログインなしでサーバー上の命令実行につながる「緊急」が2件含まれます。

Next.js is one of the most popular web frameworks running on Node.js. The 14 October release includes two critical flaws that lead to code execution on the server without logging in.

脆弱性Flaw深刻度Severity対象Affected内容What it is
GHSA-673q-mjm6-r5xr
React GHSA-xqc2-xf4c-x3h3
Critical 9.5next 16.0.0〜16.4.0use cache の関数が複数の型付き配列を返すとき、ログインなしで命令実行。回避策なし。React Server Componentsのパッケージは19.0.9・19.1.10・19.2.9・19.3.1で修正。Unauthenticated code execution when a use cache function returns multiple typed arrays. No workaround. The React Server Components packages are fixed in 19.0.9, 19.1.10, 19.2.9 and 19.3.1.
CVE-2026-96889
GHSA-2464-fhr4-w9xw
Critical 9.5next 10.0.0〜15.5.27, 16.0.x〜16.4.0画像の最適化(/_next/image)でSVGを処理するときの命令実行(glibcのLinux)。原因は画像ライブラリlibrsvgの解放後使用。sharp 0.35.5以上で回避できる。JPCERT/CCが実証コードの公開を確認。Code execution while the image optimiser (/_next/image) processes SVG, on glibc-based Linux. The root cause is a use-after-free in the librsvg image library. sharp 0.35.5 or later avoids it. JPCERT/CC reports public proof-of-concept code.
GHSA-p3m5-59mp-jv5r
React GHSA-h3gv-c5rc-p453
High 8.2next 13.0.0〜15.5.27, 16.0.0〜16.4.0Server Actionsを1つ以上持つApp Routerのアプリに細工したリクエストを送ると、CPUを使い切ってサーバー全体が止まる。Pages Routerのみのアプリは対象外。A crafted request to an App Router app with at least one Server Action burns CPU and stalls the whole process. Pages Router-only apps are not affected.

出典:Next.js「Security Update: October 14, 2026」、GitHub Security Advisories(vercel/next.js、react、lovell/sharp)、JPCERT/CC Weekly Report 2026-10-21

Sources: Next.js "Security Update: October 14, 2026"; GitHub Security Advisories (vercel/next.js, react, lovell/sharp); JPCERT/CC Weekly Report 2026-10-21

Next.jsを自分のサーバーで動かしている場合は、next・sharp・OSのlibrsvgをすべて更新してください。Vercelなどのホスティングでも、アプリの依存関係はあなたの側で更新する必要があります。

If you run Next.js on your own servers, update next, sharp and the operating system's librsvg. Even on Vercel and similar hosts, updating your app's dependencies is your job.

07

Node.jsの10件の一覧All ten Node.js CVEs2026年10月21日・22.23.4 / 24.22.1 / 26.12.1で修正21 Oct 2026 · fixed in 22.23.4 / 24.22.1 / 26.12.1

10月22日時点で、これらのCVEはまだ米NVDやJVN iPediaに登録されていません。番号で検索しても見つからないことがあります。

As of 22 October, these CVEs were not yet published in the US NVD or Japan's JVN iPedia, so searching by number may find nothing.

CVE深刻度Severity対象の系列Lines内容What it is
CVE-2026-111497High26 · 24 · 22Brotliの解凍で箱の外へ書き込む(命令実行のおそれ)Brotli decoder out-of-bounds write (may allow code execution)
CVE-2026-105482High26 · 24 · 22dns.resolve がNUL文字を含む名前を手前で切るdns.resolve truncates names containing a NUL character
CVE-2026-106069High26 · 24 · 22数字の形の接続先で、TLS証明書の名前確認をすり抜けるTLS certificate hostname bypass when the host loosely resolves to an IP
CVE-2026-105483High26 · 24全角数字のIPアドレスで、TLS証明書の名前確認をすり抜けるTLS hostname bypass with an IP written in full-width digits
CVE-2026-105481Medium26 · 24 · 22使い回す接続(keep-alive)が、リクエスト前に届いた返事を処理してしまうA keep-alive socket processes a response written before the request was sent
CVE-2026-106072Medium26 · 24 · 22正規でない形のIPv4で、証明書のDNS名がIPアドレスの相手を認証してしまうNon-canonical IPv4 lets a certificate's DNS name authenticate an IP endpoint
CVE-2026-106074Medium26 · 24 · 22crypto.randomUUID()・randomInt() の乱数の貯めが起動スナップショットに保存され、同じ値をくり返すcrypto.randomUUID() and randomInt() caches are saved into startup snapshots, so every process repeats the same values
CVE-2026-106070Low26新しいZIP読み込みが、確認に失敗したあと攻撃者のデータを返すZipFile returns attacker-controlled bytes after failed header validation
CVE-2026-106071Low26権限モデル(--permission)がワイルドカードで広すぎる権限を与えるPermission Model over-grants filesystem access via wildcards
CVE-2026-106073Low26 · 24 · 22権限モデルを fs.realpathSync ですり抜けられるPermission Model bypass with fs.realpathSync

出典:Node.js「Wednesday, October 21, 2026 Security Releases」、各版のリリースノートと修正コミット

Sources: Node.js "Wednesday, October 21, 2026 Security Releases"; release notes and fix commits

系列Line状態(10月22日)Status (22 Oct)修正版Fixed inサポート終了End of life
26最新(10月28日にLTS)Current (LTS from 28 Oct)26.12.12029-04-30
24LTS(保守期間へ)LTS (moving to maintenance)24.22.12028-04-30
22保守LTSMaintenance LTS22.23.42027-04-30
25 / 23終了End of lifeなしnone2026-06-01 / 2025-06-01
20 / 18終了End of lifeなしnone2026-04-30 / 2025-04-30

08

いますぐやることWhat to do now

  1. Node.jsを更新し、イメージも作り直すUpdate Node.js and rebuild your images今週this week

    22.23.4・24.22.1・26.12.1以降へ。Node.js 20以前と25はサポート切れなので、22・24・26へ移ってください。Dockerを使っているなら、ベースイメージ(node:22-… など)を取り直して作り直し、コンテナの中で node -v を確かめます。

    To 22.23.4, 24.22.1 or 26.12.1 or later. Node.js 20 and older, and 25, are end-of-life: move to 22, 24 or 26. With Docker, pull the base image (node:22-… etc.) again, rebuild, and check node -v inside the container.

    node -v
  2. Next.js・React・sharpを更新するUpdate Next.js, React and sharp今日today

    next は 16.4.1 か 15.5.28、sharp は 0.35.5以上、React Server Componentsのパッケージを直接使っているなら19.0.9・19.1.10・19.2.9・19.3.1へ。OSのlibrsvgも更新します。

    next to 16.4.1 or 15.5.28, sharp to 0.35.5 or later, and the React Server Components packages, if you use them directly, to 19.0.9, 19.1.10, 19.2.9 or 19.3.1. Update the OS librsvg too.

    npm ls next sharp react-server-dom-webpack
  3. npmの入れ方を固めるHarden how you install from npm今月中this month

    • ロックファイルどおりに入れる:package-lock.json をコミットし、CIや本番では npm ci を使う(勝手に新しい版を取りに行かない)
    • インストール時のスクリプトを止める:npm 12は既定で止まります(必要なものは npm install-scripts approve で許可)。npm 11以前なら ignore-scripts=true
    • 公開直後の版を待つ:min-release-age(npm 11.10以降)で、公開から数日たった版だけを入れる。ワームの多くは数時間〜数日で見つかって消されます。ただし、緊急の修正版も待たされる点に注意
    • 公開する側:npmの鍵に2要素認証を必ず付ける。npm trust list で「信頼済み公開」の先が今も自分のリポジトリか確認する
    • Install exactly what the lockfile says: commit package-lock.json and use npm ci in CI and production, so nothing quietly pulls a new version
    • Block install scripts: npm 12 blocks them by default (approve the ones you need with npm install-scripts approve). On npm 11 or older, set ignore-scripts=true
    • Wait out brand-new versions: min-release-age (npm 11.10+) installs only versions older than N days. Most worms are found and pulled within hours to days. The catch: urgent fixes wait too
    • If you publish: always put two-factor authentication on npm, and run npm trust list to confirm every Trusted Publishing link still points at your own repository
    npm config set min-release-age 3   # 公開から3日たった版だけ / only versions 3+ days old
    npm config set ignore-scripts true   # npm 11以前 / npm 11 and older
  4. 乗っ取られた版を入れていないか調べるCheck you never installed a hijacked version今週this week

    ロックファイルとビルドのログで、tensorlake@0.5.144 や、8月の感染版(keyv@6.0.0・cacheable@2.5.1・flat-cache@6.1.24・file-entry-cache@11.1.6・cache-manager@7.2.10 など)を探します。見つかったら、その端末をネットから切り離し、居座りの仕組みを先に消してから、npm・GitHub・クラウド・AIツールの鍵をすべて入れ替えてください。「chore: update config」という覚えのないコミットも探します。

    Search lockfiles and build logs for tensorlake@0.5.144 and the August infected versions (keyv@6.0.0, cacheable@2.5.1, flat-cache@6.1.24, file-entry-cache@11.1.6, cache-manager@7.2.10 and others). If you find one, take that machine off the network, remove the persistence first, then rotate every npm, GitHub, cloud and AI tool key. Also look for unexpected commits titled "chore: update config".

    grep -rnE 'tensorlake@0\.5\.144|keyv@6\.0\.0|…' --include=package-lock.json .
npm audit だけでは足りない理由Why npm audit isn't enough

npm audit は「すでに知られている脆弱性」を教えてくれますが、乗っ取られたばかりの新しい版を入れる瞬間は止められません。ワームは、入れたその場で鍵を盗みます。入れ方そのものを固めることが、いちばん効く対策です。

npm audit tells you about known vulnerabilities, but it can't stop the moment you install a freshly hijacked version, and a worm steals keys right then. Hardening how you install is what actually works.

Bekitoのサーバーは?What about Bekito's servers?

2026年10月22日に確認Checked 22 October 2026

Bekitoのサーバーで動くNode.jsは、すべて10月21日の修正版(22.23.4・24.22.1)に更新済みです。会社のWebサイトの裏側(API)はnpmの外部パッケージを使わず、Node.jsの標準機能だけで作っています。製品のビルドは、ロックファイルどおりに入れる npm ci で行っています。

All Node.js on Bekito's servers is on the 21 October fixed releases (22.23.4 and 24.22.1). The back end of our company website uses no npm packages at all, only what Node.js provides. Our products are built with npm ci, which installs exactly what the lockfile says.

自社のシステムが気になる方へWorried about your own systems?

外から見える古いソフトや管理画面を調べる「外から見える入口チェック」のほか、更新の進め方のご相談もお受けしています。

Besides our external entry-point check, which finds outdated software and exposed admin screens from the outside, we're happy to help plan your updates.

相談するTalk to us

よくある質問Frequently asked questions

Node.jsはどのバージョンに更新すればよいですか?Which Node.js version should we move to?

2026年10月21日の修正版、22.23.4・24.22.1・26.12.1以降です。Node.js 20はすでにサポートが終わっており、修正版は出ません。新しく作るなら24か26(26は10月28日に長期サポート版になります)。

The 21 October 2026 releases: 22.23.4, 24.22.1, 26.12.1 or later. Node.js 20 is end-of-life and gets no fix. For new work, choose 24 or 26 (26 becomes LTS on 28 October).

いちばん危ないのはどれですか?Which one is the most dangerous?

Node.jsの中では、Brotli形式の解凍で箱の外に書き込んでしまう不具合(CVE-2026-111497)です。fetch()は返事を自動で解凍するため、悪意あるサーバーにつなぐだけで引き起こされる恐れがあります。Next.jsを使っている場合は、10月14日に修正された画像の最適化の脆弱性(CVE-2026-96889)など、ログインなしで命令実行につながるものも急いで直してください。

Within Node.js, the Brotli decompression bug that writes past its buffer (CVE-2026-111497): fetch() decompresses replies automatically, so connecting to a malicious server may be enough. If you use Next.js, urgently fix the 14 October flaws that allow unauthenticated code execution, such as the image optimisation flaw (CVE-2026-96889).

すでに攻撃されていますか?Are these being exploited?

2026年10月22日時点で、10月21日のNode.jsの10件はCISAの「悪用が確認された脆弱性」の一覧に入っておらず、公開された攻撃コードも見つかっていません。Next.jsの画像の脆弱性(CVE-2026-96889)は、JPCERT/CCが攻撃の実証コードの公開を確認しています。npmのワーム型攻撃は実際に起きています。

As of 22 October 2026, none of the ten Node.js flaws is on CISA's Known Exploited Vulnerabilities list and no public exploit was found. For the Next.js image flaw (CVE-2026-96889), JPCERT/CC reports public proof-of-concept code. The npm worm attacks are real and ongoing.

npmのワーム型攻撃とは何ですか?What is an npm worm?

乗っ取られたパッケージの新しい版をインストールすると、インストール時に自動で動くスクリプトが、PCやCIにあるnpm・GitHub・クラウドの鍵を盗み、その鍵で被害者が管理する別のパッケージにも感染版を公開して広がる攻撃です。2025年のShai-Huludから続き、2026年8月にも数百のパッケージが被害を受けました。

Installing a hijacked new version runs a script automatically that steals npm, GitHub and cloud keys from the machine or CI, then uses them to publish infected versions of the victim's other packages, and so it spreads. It began with Shai-Hulud in 2025, and in August 2026 hundreds of packages were hit again.

npm auditだけで十分ですか?Is npm audit enough?

十分ではありません。npm auditは既知の脆弱性を教えてくれますが、乗っ取られた新しい版を入れる瞬間は防げません。ロックファイルとnpm ci、インストールスクリプトの停止、公開直後の版を避けるmin-release-ageを組み合わせてください。

No. npm audit reports known vulnerabilities, but can't stop you installing a freshly hijacked version. Combine a lockfile and npm ci, blocked install scripts, and min-release-age to skip brand-new versions.

BekitoのサーバーのNode.jsは更新済みですか?Has Bekito updated its own Node.js?

はい。Bekitoのサーバーで動くNode.jsは、2026年10月22日までに修正版(22.23.4・24.22.1)へ更新済みであることを確認しました。

Yes. We confirmed on 22 October 2026 that all Node.js on our servers is on the fixed releases (22.23.4 and 24.22.1).

用語集Glossary

Node.js
JavaScriptをサーバーで動かすための実行環境。多くのWebサービスやAPIの土台です。
The runtime that runs JavaScript on servers, underneath many web services and APIs.
npm
Node.jsの部品(パッケージ)を配る仕組みと、その倉庫。1つのアプリが数百〜数千の部品を使います。
The system and registry that distributes Node.js packages. One app can use hundreds or thousands of them.
LTS(長期サポート版)LTS (long-term support)
長い期間、修正が出る版。本番ではLTSの偶数の版を使うのが基本です。
A release line that gets fixes for a long time. Production systems normally use even-numbered LTS lines.
Brotli
Googleが作った圧縮形式。Webの通信で「br」として使われます。
A compression format from Google, used on the web as "br".
範囲外書き込みOut-of-bounds write
用意した箱(メモリ)の外まで書き込んでしまう不具合。別のデータを壊し、乗っ取りにつながることがあります。
Writing past the end of the memory set aside, corrupting other data and sometimes enabling a takeover.
TLS証明書TLS certificate
HTTPSの相手が本物であることを示す電子的な身分証。名前(ドメインやIP)と結びついています。
The digital ID that proves an HTTPS server is genuine, tied to a name (domain or IP).
サプライチェーン攻撃Supply-chain attack
使っている部品やサービスを乗っ取り、それを使う多くの会社へ一度に届く攻撃。
Hijacking a part or service many companies use, to reach all of them at once.
ワームWorm
人の操作なしに、自分で次の相手へ広がっていく悪意あるプログラム。
Malicious code that spreads to the next victim on its own.
インストールスクリプトInstall script
npmのパッケージを入れるときに自動で動くプログラム(preinstall・postinstall)。ワームが鍵を盗む入口になります。
Programs that run automatically when an npm package is installed (preinstall, postinstall). Worms use them to steal keys.
ロックファイルLockfile
入れる部品の版を固定するファイル(package-lock.json)。npm ci はこれどおりに入れます。
A file that pins every package version (package-lock.json). npm ci installs exactly what it says.
出どころの証明(provenance)Provenance
パッケージがどのリポジトリのどのビルドから作られたかの記録。正規の仕組みが乗っ取られると、悪い版にも正しく付きます。
A record of which repository and build produced a package. If the real pipeline is hijacked, bad versions get a valid record too.
CI
コードの変更のたびに自動でビルドやテストをする仕組み。多くの鍵が置かれているため、狙われやすい場所です。
Continuous integration: systems that build and test code on every change. They hold many keys, which makes them a target.

出典Sources

  1. Node.js: Wednesday, October 21, 2026 Security Releases(2026年10月21日)
  2. Node.js v22.23.4・v24.22.1・v26.12.1 リリースノート(2026年10月21日)
  3. Node.js Release schedule(2026年10月22日閲覧)
  4. google/brotli releases 1.2.1 / 1.1.1 / 1.0.10(2026年10月21日)
  5. Next.js: Security Update, October 14, 2026・September 2026 security release
  6. sharp GHSA-wq5f-xc86-pv6w(2026年9月30日)
  7. JPCERT/CC Weekly Report 2026-10-21
  8. Socket: Tensorlake SDK compromise(2026年10月8日)
  9. Elastic Security Labs: Shai-Hulud ChainDrop(2026年8月6日)・CSA Singapore AD-2026-009
  10. Help Net Security: npm Trusted Publishing flaw(2026年10月13日)・GitHub Changelog(2026年10月2日)
  11. npm CLI(npm 12.0.0、min-release-age、install-scripts)
  12. undici security advisories(2026年10月14〜15日)

このページの内容は2026年10月22日18時時点のものです。悪用の状況は、その後の発表で変わることがあります。

This page reflects information as of 18:00 JST on 22 October 2026. The exploitation status may change with later announcements.