---
title: "Signal K Server 2.34.0 より前、resources API のパストラバーサルで JWT 署名鍵が漏れ、管理者権限の奪取とコマンド実行に至るおそれ（GHSA-4xm8-rg9h-jhq2、CVSS 9.8）"
url: https://n-t-p.io/worldsecurity/articles/signalk-server-resources-api-path-traversal-ghsa-4xm8-rg9h-jhq2
lang: ja
kind: 速報
category: 脆弱性・CVE
author: World Security 編集部
published: 2026年11月7日
updated: 2026年11月7日
severity: 緊急
---

# Signal K Server 2.34.0 より前、resources API のパストラバーサルで JWT 署名鍵が漏れ、管理者権限の奪取とコマンド実行に至るおそれ（GHSA-4xm8-rg9h-jhq2、CVSS 9.8）

> **TL;DR:** Signal K Server 2.34.0 未満の resources API でパストラバーサル。security.json から JWT 署名鍵が読まれ、管理者トークンの偽造と任意コマンド実行に至る（CVSS 9.8）。CVE 未採番・KEV 掲載なし。2.34.0 で修正。

**要点**
- resources と applicationData の API が ID を検証せず、%2F を使うと保存先の外のファイルを読める
- security.json の JWT 署名鍵が漏れ、管理者トークンの偽造と Execute プロバイダー経由のコマンド実行に至る。設定は再起動後も残る
- 匿名の読み取りを許す allow_readonly=true なら認証なし。既定でも読み取り専用ユーザーのトークンで可能
- signalk-server 2.0.0 以上 2.34.0 未満と @signalk/resources-provider 1.5.3 未満が対象。更新後は署名鍵とパスワードも作り直す
- CVE 未採番、KEV 掲載なし、EPSS は算出なし

船舶向けのデータサーバー Signal K Server（signalk-server）の resources API に、パス区切りを含む識別子で保存先の外のファイルを読み書きできるパストラバーサルがあり、GitHub が重大（Critical、CVSS v3.1 で 9.8）の勧告を公開しました（GHSA-4xm8-rg9h-jhq2）。CVE は未採番で、CISA の KEV にも載っていません。EPSS は CVE が無いため算出されていません。修正版は signalk-server 2.34.0 と `@signalk/resources-provider` 1.5.3 です。

## 何が起きるのか

v2 の REST API `GET /signalk/v2/api/resources/:resourceType/:resourceId` は、`resourceId` を検証せずに `FileStore.getResource()` へ渡し、`path.join()` で保存先のパスを組み立てます。`%2F` でエンコードした `..%2F..%2F` を入れると保存先ディレクトリの外へ出られ、サーバーが読める JSON ファイルを返してしまいます。勧告は、同じ問題が resources と applicationData の API にあり、保存先の外のファイルを読む・書く・消すことができると説明しています。

JWT の署名鍵は `<config>/security.json` に平文で保存されているため、この設定ファイルを読まれると、次の流れで被害が広がります。

1. `<config>/security.json` を読み、JWT の署名鍵とユーザーのパスワードハッシュを得る
2. 得た鍵で管理者の JWT を偽造する（`/skServer/loginStatus` が `userLevel: "admin"` を返すことを、勧告は再現手順で示しています）
3. 管理者として `Execute` 型のプロバイダーを登録し、任意のコマンドを実行する。このプロバイダーは `settings.json` に保存され、再起動後も残ります

最初の読み取りが認証なしで通るのは、匿名の読み取りを許す `allow_readonly=true` の設定のときです。勧告によると、この設定は管理画面から切り替えられる、サポートされた構成です。既定の `allow_readonly=false` の環境でも、読み取り専用ユーザーのトークンがあれば同じ読み取りが通ります。

## 数値で見る

| 項目 | 内容 |
|---|---|
| CVSS v3.1（GitHub 評価） | 9.8 Critical（AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H） |
| 弱点の種類 | CWE-22（パストラバーサル） |
| EPSS | CVE が無いため算出なし |
| CISA KEV | 掲載なし |
| 勧告の公開 | 2026-10-31 7:57（日本時間。GitHub） |

## 対象と修正版

| パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|
| signalk-server（npm） | 2.0.0 以上 2.34.0 未満 | 2.34.0 |
| @signalk/resources-provider（npm） | 1.0.0 以上 1.5.3 未満 | 1.5.3 |

修正は GitHub 上のコミット `83689f0`（マージ日 2026-10-18）で入りました。リソース ID・プロバイダーの種類・コレクション名・applicationData の ID の検証を足し、パスを保存先の直下に限定する内容で、signalk-server 2.34.0 に含まれます。npm の最新版は signalk-server 2.35.1、`@signalk/resources-provider` 1.5.3 を確認しました。

## 対応の考え方

- signalk-server を 2.34.0 以降（できれば最新）へ更新してください。`@signalk/resources-provider` を単体で使っている場合は 1.5.3 以降にします。
- インターネットや共用ネットワークから届く環境では、更新までの間、匿名の読み取りを許す `allow_readonly` を無効にし、アクセスを信頼できる範囲に絞ってください。ただし勧告によれば、無効でも読み取り専用ユーザーのトークンで同じ読み取りができるため、これだけでは防げません。
- 更新後は、署名鍵が漏れた可能性を考えて JWT 署名鍵を作り直し、管理者パスワードを変えてください。2.34.0 のリリースノートには、JWT の鍵を `security.json` の外に保存する変更（PR #3192）が載っています。
- 管理画面のプロバイダー一覧に、身に覚えのない `Execute` 型がないかを確認してください。`settings.json` にも保存されるため、再起動では消えません。
- アクセスログに、`/signalk/v2/api/resources/` へ `%2F` や `..` を含む要求が来ていないかを確かめてください。

## 確認できていない点

- 実環境での悪用の報告は、GitHub 勧告と KEV のいずれにも見当たりません。
- CVE が未採番のため、NVD の評価は確認できていません。
- 勧告の再現コードは手元では実行していません。
- 勧告は修正版を 2.34.0 としています。リリースノートの一覧に、このトラバーサルの修正を名指しした項目はありません。修正コミットの内容と勧告から、2.34.0 に含まれると読み取れます。


## 出典
- [GitHub Advisory GHSA-4xm8-rg9h-jhq2](https://github.com/advisories/GHSA-4xm8-rg9h-jhq2) — GitHub
- [SignalK/signalk-server 修正コミット 83689f0](https://github.com/SignalK/signalk-server/commit/83689f040d7e90280dddc643f44f3e4ce348fbb1) — GitHub
- [signalk-server v2.34.0 リリース](https://github.com/SignalK/signalk-server/releases/tag/v2.34.0) — GitHub
- [npm signalk-server](https://registry.npmjs.org/signalk-server/latest) — npm
- [CISA Known Exploited Vulnerabilities Catalog（JSON）](https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json) — CISA

---
出典: World Security（株式会社NTP） https://n-t-p.io/worldsecurity/articles/signalk-server-resources-api-path-traversal-ghsa-4xm8-rg9h-jhq2