目次(5)

船舶向けのデータサーバー 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 に平文で保存されているため、この設定ファイルを読まれると、次の流れで被害が広がります。
<config>/security.jsonを読み、JWT の署名鍵とユーザーのパスワードハッシュを得る- 得た鍵で管理者の JWT を偽造する(
/skServer/loginStatusがuserLevel: "admin"を返すことを、勧告は再現手順で示しています) - 管理者として
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 に含まれると読み取れます。
この記事について
- 執筆・編集
- World Security 編集部




