[](https://devin.ai/ja)

[](https://devin.ai/ja/blog)

# NodeとPHPの重大な脆弱性を修正する

Cognition2026年10月22日20分で読めます

2026年10月21日、PHPとNode.jsの両プロジェクトは、リモートコード実行につながるおそれのある脆弱性に対処するセキュリティアップデートをリリースしました。いずれかのランタイムを運用しているチームは、影響を受けるサービスを特定し、適切なパッチを直ちに適用する必要があります。しかし、パッチの適用はバージョン番号を変えるだけでは済みません。PHPやNode.jsは、多数のリポジトリにまたがるコンテナイメージ、OSパッケージ、CIパイプライン、インフラ構成の中に含まれている可能性があります。影響を受けるデプロイメントをひとつひとつ特定し、更新し、テストし、デプロイしなければなりません。サポート対象外のバージョンで動作しているアプリケーションでは、互換性のための変更が必要になる場合もあります。

**チームを支援するため、私たちが自ら使用した修正ワークフローを、Devinとあらゆるコーディングエージェントで使えるオープンソースのプラグインとしてパッケージ化しました。** [Vulnerability Fixes](https://devin.ai/security/vulnerability-fixes)プラグインを使うと、エージェントが影響を受けるリポジトリを特定し、変更を加える前に確認を求め、各デプロイメントを検証済みの修正バージョンにパッチし、変更の前後でアプリケーションをテストし、リポジトリごとに的を絞ったPRを1つ作成します。

## 脆弱性の概要

### PHP2Shell（CVE-2026-109618、CVE-2026-109619）

PHP2Shellは、PHPランタイムに存在する、認証なしでリモートコード実行が可能になる2件の重大な（CVSS v4 9.2）欠陥です。

- **CVE-2026-109618**（[GHSA-w8hw-w9fx-j79w](https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w)）：メモリ不足（out-of-memory）状態の発生後に起こるメモリ破損。
- **CVE-2026-109619**（[GHSA-6wmf-4rv5-p3rp](https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp)）：あるリクエストで残った古いグローバル状態が、次のリクエストで再利用される問題。

**影響を受ける環境：** PHPのアドバイザリによると、Webを配信するあらゆるPHP構成にリスクがあります。これにはPHP-FPM、Apache mod\_php（最もリスクが高いと評価）、php-cgi、FrankenPHP、LiteSpeedが含まれます。

**修正バージョン：** 8.2.35、8.3.36、8.4.27、8.5.12。PHP 8.1以前には新しいリリースは提供されません。PHPは、7.4、8.0、8.1向けにソースレベルのバックポートを公開しています。

**完全な修正はアップグレードしかありません。** 注意すべき点は次のとおりです。

- **ディストリビューションのパッケージは、古いバージョン番号のままです。** DebianとUbuntuは、アップストリームのバージョンを変えずに修正をバックポートします。たとえば、Ubuntu 24.04の修正済みパッケージは`8.3.6-0ubuntu0.24.04.13`、Ubuntu 22.04では`8.1.2-1ubuntu2.28`であり、`php -v`の表示は8.3.6または8.1.2のままです。`php -v`ではなく、ベンダーのセキュリティアドバイザリやパッケージの変更履歴（changelog）を確認してください。
- **ダイジェストで固定しているイメージには、新しいダイジェストが必要です。** タグを変えるだけでは不十分です。`php:8.3-fpm`のようなフローティングタグの場合は、新しいベースイメージを取得するための再ビルドが必要です。
- **ソースからビルドしている場合は、php.netで公開されている新しいtarballとそのチェックサムが必要です。**
- **Composerの`require.php`や`config.platform.php`を変更しても、パッチは適用されません。** これらの設定によって、本番環境で動作するPHPが決まるわけではないからです。

すぐにアップグレードできない場合に備えて、PHPは一時的な緩和策を挙げています。これらは影響を受ける範囲を狭めるものの、バグを修正するものではありません。たとえば、`php.ini`またはFPMプールで`session.upload_progress.enabled=0`を設定してすべてのワーカーを再起動することや、プロキシでリクエストボディのサイズとマルチパートのパート数を制限することです。`RLIMIT_AS`や`RLIMIT_DATA`を緩和策として使わないでください。これらは脆弱なコードパスを引き起こします。緩和策の一覧はアドバイザリを参照してください。

### Node.jsの2026年10月21日のセキュリティリリース（CVE-2026-111497を含む）

[Node.jsの2026年10月のセキュリティリリース](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases)では、10件のCVEが修正されています。そのうち4件がHighと評価されています。

- **CVE-2026-111497：** Brotliデコーダーにおける境界外書き込み（out-of-bounds write）で、リモートコード実行につながる可能性があります。HTTPクライアント、サーバー、プロキシなど、Brotliを展開するインターネット公開サービスを優先して対応してください。
- **CVE-2026-105482、CVE-2026-105483、CVE-2026-106069：** TLSおよびDNSのホスト名に関する問題。ユーザーが指定したホストに接続するサービスを優先して対応してください。

**修正バージョン：** 22.23.4、24.22.1、26.12.1。

**Node.js 20以前はサポートが終了（EOL）しており、修正は提供されませんが、引き続き悪用可能です。** 22以降へのメジャーバージョンアップグレードが必要です。

このリリースでは、同梱されているOpenSSL、c-ares、Undici、SQLite、CAストアも更新されており、CAストアにはeMudhraのルート証明書が含まれなくなりました。外部へのTLS接続を行うサービスは、アップグレード後にテストしてください。

## Devinで修正する方法

これらのバグは自動化された手法によって活発に悪用されています。そのため、最初のステップとして、問題に対処している間はPHPのWebアプリケーションを直ちに停止してください。

次に、パッチがコードに与える影響をテストする必要があります。同じリリースライン内のパッチリリース（例：8.3.30 → 8.3.36、24.21.0 → 24.22.1）は通常リスクが低いものの、それでもテストは必要です。しかし、多くのサイトはサポートが終了してパッチが提供されないバージョンのPHPやNodeで稼働しています。新しいメジャーリリースへのアップグレードは、複雑なアプリケーションでは問題を引き起こす可能性が高いでしょう。

私たちは、PHPとNodeの両方についてこのプロセスを代わりに処理する[プラグインをDevin Marketplaceで公開しました](https://devin.ai/security/vulnerability-fixes)。

### Devinがこれらの問題に対処する流れ

1. **インベントリの作成（読み取り専用）。** Devinは、アクセスできるすべてのリポジトリからPHPやNodeを探します。対象は、Dockerfileとベースイメージ、ディストリビューションのパッケージ、ソースビルド、CI（setup-php、setup-node、`.nvmrc`、`.tool-versions`）、Helmのvalues、Terraform、Packer、AWS Lambdaのランタイム、そしてAnsible、Chef、Puppetです。見つかったもの、影響を受けるもの、すでに修正済みのものを報告します。
2. **承認の依頼。** パッチを適用するリポジトリは、あなたが選びます。Devinは作業を始める前に、マイナーまたはメジャーバージョンのアップグレード、ベースOSの変更、アプリケーションコードの変更が必要になりそうなケースなど、パッチバージョンの更新よりもリスクの高いものを明示します。
3. **検証済みのバージョンへのパッチ適用。** Devinは、ローカルのビルド仕様を更新する前に、すべてのタグ、ダイジェスト、パッケージバージョン、チェックサムを、公式レジストリ、ベンダーのアドバイザリ、またはphp.netと照合して確認します。
4. **変更前後のテスト。** Devinは、まず現在のバージョンでテストスイートを実行してベースラインを取得し、次に新しい本番イメージ内で再度実行します。2つのランタイム（拡張機能、ini設定、OpenSSLとICUのバージョン、ベースOS）を比較し、コンテナを起動して実際のレスポンスを確認します。メジャーまたはマイナーバージョンのアップグレードでは、互換性チェックも追加します。何らかのリグレッションが見つかった場合は作業を止め、最小限の修正を提案します。
5. **プルリクエストの作成。** 最後に、Devinはリポジトリごとに1つのプルリクエストを作成します。プルリクエストには、変更前後のバージョン、テスト結果、ランタイムの差異、リスクラベル、そしてロールアウトとロールバックの計画が記載されます。

### 使い方

#### 1. プラグインをインストールする

**Devinの場合：**

1. 左側のサイドバーで、Customizeサブメニューに移動します。

   ![左側のサイドバーでCustomize項目がハイライトされたDevinのWebアプリ](https://devin.ai/images/blog/vulnerability-fixes-plugin/install-1-customize.png)

2. Pluginsタブで、Browse Marketplaceをクリックします。

   ![Browse marketplaceボタンがハイライトされたCustomize → Pluginsタブ](https://devin.ai/images/blog/vulnerability-fixes-plugin/install-2-browse-marketplace.png)

3. 検索バーに **_Vulnerability Fixes_** と入力します。

   ![検索バーを矢印で示したプラグインマーケットプレイス](https://devin.ai/images/blog/vulnerability-fixes-plugin/install-3-search.png)

4. Installをクリックし、適切なスコープにプラグインをインストールします。

   ![Vulnerability FixesプラグインとそのInstallボタンが表示されたマーケットプレイスの検索結果](https://devin.ai/images/blog/vulnerability-fixes-plugin/install-4-install.png)

**Devin CLIの場合：** ターミナルで次のコマンドを実行します。

```
devin plugins install CognitionAI/devin-marketplace#plugins/devin-vuln-fixes
```

OrganizationまたはEnterpriseの管理者は、多数のユーザーに向けてプラグインをまとめてインストールできます。ただし、数十人のエンジニアが同時にこれらのバグのPRを作成するような状況は、おそらく望ましくないでしょう。

#### 2. Devinに修正を依頼する

セッションを開始し、次の修正用プロンプトのいずれかを実行します。

[PHPの脆弱性を修正](https://app.devin.ai/?prompt=Use+the+fix-php-vuln+skill+from+the+Vulnerability+Fixes+plugin.+If+the+plugin+is+not+installed+already%2C+add+it.+Then+inventory+every+repo+connected+to+Devin+for+PHP+runtimes+affected+by+CVE-2026-109618+and+CVE-2026-109619%2C+show+me+the+table%2C+and+wait+for+my+approval+before+patching.)

[Nodeの脆弱性を修正](https://app.devin.ai/?prompt=Use+the+fix-node-vuln+skill+from+the+Vulnerability+Fixes+plugin.+If+the+plugin+is+not+installed+already%2C+add+it.+Then+inventory+every+repo+connected+to+Devin+for+Node.js+runtimes+affected+by+the+October+21%2C+2026+security+release+%28CVE-2026-111497%29%2C+show+me+the+table%2C+and+wait+for+my+approval+before+patching.)

[GitLabの脆弱性を修正](https://app.devin.ai/?prompt=Use+the+fix-gitlab-vuln+skill+from+the+Vulnerability+Fixes+plugin.+If+the+plugin+is+not+installed+already%2C+add+it.+Then+inventory+every+repo+connected+to+Devin+for+self-managed+GitLab+instances+affected+by+CVE-2026-110264%2C+show+me+the+table%2C+and+wait+for+my+approval+before+patching.)

普段の言葉で依頼する（「PHPの脆弱性を修正してください」）と、Devinが該当するスキルを選びます。また、`/vuln-fixes:fix-php-vuln`、`/vuln-fixes:fix-node-vuln`、`/vuln-fixes:fix-gitlab-vuln`でスキルを直接実行することもできます。

対象範囲を絞り込むには、リポジトリ名を指定します。例：「acme/billing-apiとacme/storefrontのPHPの脆弱性を修正してください」

#### 3. インベントリを確認して承認する

Devinは、見つかったすべてのPHPまたはNodeのデプロイメントと、それぞれが影響を受けるかどうかをまとめた表で返答します。パッチを適用するリポジトリと、メジャーバージョンのアップグレード（例：Node 20 → 22）を対象に含めるかどうかを伝えてください。

#### 4. レビュー、マージ、デプロイ

各プルリクエストのテスト結果とリスクラベルを確認します。リスクの高い変更は、まずステージング環境やカナリアにロールアウトしてください。**修正が有効になるのは、新しいビルドがデプロイされてからです。** そのため、パッチを適用したすべてのサービスを再デプロイし、フローティングイメージタグを使用しているものはすべて再ビルドしてください。

### 注意すべき点

- **Devinが検証できるのは、テストでカバーされている範囲だけです。** テストが手薄なアプリケーションでは、プルリクエストにその旨が記載され、ステージングやカナリアでの確認が推奨されます。Devinに追加のテストを書いてもらうこともできます。今がまさにそのタイミングかもしれません！
- **マネージドランタイムには、そのプロバイダーがパッチを適用します。** Devinは、こうしたケースを修正済みとして扱うのではなく、実行すべき確認方法とあわせて報告します。
- **ベンダーのアプライアンスやElectronアプリ**は、独自のPHPやNodeを同梱しています。Devinはそれらをその場でパッチするのではなく、ベンダーによるアップデートが必要なものとしてフラグを立てます。

## 他のプロダクトで修正する方法

この問題への対処を支援するため、他のコーディングツール向けのプラグインもリリースします。このプラグインは標準的なAgent Skillsで構成されており、`npx skills`と互換性があります。そのため、Claude Code、Codex、Cursor、Factory Droid、GitHub Copilot、Gemini CLI、OpenCodeなどの他のプロダクトでも、簡単にインストールして利用できます。

### スキルをインストールする

npx skills

あらゆるエージェントで動作します。CLIがマシン上のエージェントを検出し、インストール先を尋ねます。

```
npx skills add CognitionAI/devin-vuln-fixes
```

すべてのプロジェクトにインストールするには`-g`を、エージェントを選ぶには`-a <agent>`（例：`-a claude-code -a codex -a cursor`）を、単一のスキルだけをインストールするには`--skill fix-php-vuln`を追加します。Node.js 22.20以降が必要です。

Claude Code

マーケットプレイスを追加してから、プラグインをインストールします。

```
/plugin marketplace add CognitionAI/devin-vuln-fixes
/plugin install vuln-fixes@cognition-skills
```

Factory Droid

マーケットプレイスを追加してから、プラグインをインストールします。

```
droid plugin marketplace add https://github.com/CognitionAI/devin-vuln-fixes
droid plugin install vuln-fixes@cognition-skills
```

手動

リポジトリをクローンし、スキルのフォルダー（例：`skills/fix-php-vuln`）を、`.agents/skills/`、`.claude/skills/`、`.windsurf/skills/`などのエージェントのスキルディレクトリにコピーします。

```
git clone https://github.com/CognitionAI/devin-vuln-fixes
cp -r devin-vuln-fixes/skills/fix-php-vuln .agents/skills/
```

ベンダーが新たな修正バージョンを公開したときにそれを反映するには、`npx skills update`を実行します。

### スキルを実行する

Devinに依頼するときと同じように、普段の言葉で依頼します。例：「PHPの脆弱性を修正してください」。エージェントは、スキルの説明文をもとに該当するスキルを選びます。スラッシュコマンドに対応したエージェントでは、スキルを直接実行することもできます。

```
/fix-php-vuln
/fix-node-vuln
/fix-gitlab-vuln
```

Claude Codeのプラグインをインストールした場合、コマンドには名前空間が付きます（例：`/vuln-fixes:fix-php-vuln`）。

スキルは、前述と同じ手順に従います。読み取り専用のインベントリ作成、承認ゲート、検証済みバージョンへのパッチ適用、変更前後のテスト、そしてリポジトリごとに1つのプルリクエストの作成です。特定のエージェントのツールには依存しません。エージェントがサブエージェントに対応している場合、スキルはリポジトリごとに1つのサブエージェントを使用し、対応していない場合はリポジトリを1つずつ処理します。

エージェントには、git、シェル、そしてリポジトリへの読み取りアクセスが必要です。ビルドとテストの手順には、Dockerと、CIですでに使用しているイメージレジストリまたはパッケージミラーへのアクセスも必要です。パブリックなホストへのアクセスがブロックされている場合、スキルはプルリクエスト内でターゲットバージョンを未検証としてマークし、CIで確認できるようにします。

**スキルは、実行する前に必ず内容を確認してください。** これらのプロダクトの多くはローカルで動作し、Devinで提供しているような隔離環境がありません。また、スキルはエージェントの全権限で実行されます。

## 今後に向けて

基盤となる技術において、深刻かつ容易に悪用できる欠陥が公表されるのは、これが最後ではないでしょう。脆弱性が発見されるペースと、攻撃者がAIを使ってキルチェーンを自動化できるようになったことを考えると、私たちはすでに新たな常態に入った可能性が高いといえます。

今後に向けて、私たちは次のことを推奨します。

- **攻撃対象領域（アタックサーフェス）を把握し、縮小すること。** 自社がどのようなコードをインターネットに公開しているのかをまったく把握していない企業が、あまりにも多く存在します。外部の攻撃対象領域を継続的にスキャンし、不要なアプリケーションを廃止し、社内アプリをVPN/ZTNAの背後に移す必要があります。
- **最新のランタイムで動作し、コンテナ化されるようにコードをリファクタリングすること。** これにより、従来型のサーバーへのパッチ適用に伴う課題を解消できます。すでにPHPとNodeの最新のリリーストレインを使っていたチームは、1〜2世代分のバージョンを飛び越えなければならないチームに比べて、はるかに楽な1週間を過ごしています。このような環境では、本番サーバーに対する30日周期のパッチサイクルでは不十分です。セキュリティ関連のニュースに迅速に対応しながら信頼性を維持したいのであれば、クラウドへ移行するか、頻繁に更新されるホスティング基盤の上でコンテナ化したアプリケーションを動かす必要があります。
- **標準ライブラリを使う代わりに、必要な機能を自ら構築することを検討すること。** 標準パッケージへのバックドアの混入や、過去1年間にそれらで見つかった数万件もの脆弱性を踏まえると、コーディングエージェントの力を活用して、目的に特化した機能を構築するほうが賢明かもしれません。何百万行ものコードをインポートすれば、よく知られた典型的な欠陥を抱えた巨大な攻撃対象領域を取り込むことになるからです。

太平洋時間10月26日（月）午前10時30分（日本時間10月27日（火）午前2時30分）に開催される[CSOのAlex Stamosによるウェビナー](https://devin.ai/webinars/patching-critical-vulnerabilities)に、ぜひご参加ください。これらを含む、より長期的な解決策について議論します。

目次

[脆弱性の概要](#脆弱性の概要)[PHP2Shell（CVE-2026-109618、CVE-2026-109619）](#php2shellcve-2026-109618cve-2026-109619)[Node.jsの2026年10月21日のセキュリティリリース（CVE-2026-111497を含む）](#nodejsの2026年10月21日のセキュリティリリースcve-2026-111497を含む)[Devinで修正する方法](#devinで修正する方法)[Devinがこれらの問題に対処する流れ](#devinがこれらの問題に対処する流れ)[使い方](#使い方)[注意すべき点](#注意すべき点)[他のプロダクトで修正する方法](#他のプロダクトで修正する方法)[スキルをインストールする](#スキルをインストールする)[スキルを実行する](#スキルを実行する)[今後に向けて](#今後に向けて)
