Signal K Serverに認証なしで全権を奪われる脆弱性、修正版あり
船舶データを扱うSignal K Serverに、ログ取得機能の認証欠落が原因で、外部から管理者として操作される脆弱性が見つかりました。2.33.0より前の版を動かしている組織が対象で、修正版は2.33.0です。更新に加え、更新前に侵入されていないかの確認も必要です。
急ぎ度: 早めに
CVSS v3は9.8のcriticalで、認証なしで管理者権限に至り、修正版2.33.0も出ていますが、実際の悪用が確認されたという情報は今のところありません。
関係があるか
signalk-serverを自社の船舶・設備・検証環境で動かしている組織が対象です。ネットワークの外から管理画面に届く構成ほど、影響を受けやすくなります。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Signal K Server(signalk-server) | 2.33.0より前のすべての版 | 2.33.0 |
確かめ方
- 1稼働中のサーバーのsignalk-serverの版を確認し、2.33.0未満なら対象です。npmでグローバルに入れた環境なら、
npm ls -g signalk-serverで版を確認できます。 - 2Dockerイメージやディストリビューションの同梱パッケージなど、別の方法で導入した環境は、そのイメージやパッケージに含まれる版を確認してください。
- 3管理画面やAPIのポートが、インターネットや社内の広い範囲から到達できるかを、ファイアウォールやルーターの設定で確認してください。
何が起きたか
Signal K Serverのログ取得機能に認証の確認が欠けており、ログの中に含まれる認証用の秘密情報から、管理者として振る舞えてしまう脆弱性です。
問題の入口は /skServer/ziplogs です。ここからログをまとめたZIPアーカイブをダウンロードできますが、アクセスしてよい利用者かどうかの確認が行われません(CWE-306)。
そのZIPには security.json が含まれ、中にはJWTの署名に使う secretKey が入っています。この鍵が手に入ると、サーバーが正規と信じる管理者トークンを作れるため、ログインの仕組みそのものが意味を失います。さらに、管理者アカウントを新しく作って居座ることもできます。
修正はベンダーのリポジトリにコミットとして公開されており、2.33.0のリリースに含まれています。
攻撃の流れ
-
1
ログを取得
認証されないまま、ログのZIPアーカイブをダウンロードされます。
-
2
秘密鍵を入手
ZIPの中の設定ファイルから、トークン署名用の鍵が読み取られます。
-
3
管理者トークン偽造
入手した鍵で、管理者を名乗るトークンを作られます。
-
4
管理者を追加
永続する管理者アカウントを作られ、サーバーを継続的に操作されます。
どう悪用されるか
悪用に認証は要りません。ネットワーク経由で対象のサーバーに到達できれば成立し、利用者の操作も必要なく、特別な条件もありません。CVSSのベクターでも、攻撃元区分はネットワーク、攻撃の複雑さは低、必要な権限なし、利用者の関与なしと評価されています。
成功すると、サーバーの設定やデータの閲覧・書き換え、サービスの停止まで、管理者にできることはすべて外部の第三者の手に渡ります。機密性・完全性・可用性の三つとも、影響は高と評価されています。
しかも、作られた管理者アカウントは残ります。修正版に更新しただけでは、すでに作られたアカウントや、すでに持ち出された鍵は消えません。
今すぐやること
-
1
稼働中の版を確認する
自社で動かしているすべてのsignalk-serverについて、設置場所と版を洗い出します。検証用や使っていない端末も対象に含めます。
npm ls -g signalk-server -
2
2.33.0以降に更新する
対象の環境をまず更新します。外部から届く構成のものから先に進めます。更新の手順は、導入方法に応じてベンダーのリリースページで確認してください。
-
3
更新前に侵入されていないか調べる
管理者アカウントの一覧を確認し、心当たりのないものがあれば無効にします。あわせて、リバースプロキシやサーバーのアクセスログで、
/skServer/ziplogsへの不審なアクセスがないかを見ます。 -
4
秘密鍵の入れ替えを検討する
更新前に外部から到達できていた環境では、鍵がすでに持ち出されたものとして扱うのが安全です。鍵を入れ替えると、偽造済みのトークンも使えなくなります。入れ替えの手順は、ベンダーの告知で確認してください。
-
5
公開範囲を見直す
管理画面を、インターネットや広い社内ネットワークに出す必要があるかを確認します。必要がなければ閉じます。
すぐ更新できないとき
すぐに更新できない場合は、サーバーへのアクセスを信頼できる端末だけに絞ります。ファイアウォールでの接続元制限やVPN経由に限定する方法があり、インターネットへの直接公開は止めてください。リバースプロキシを使っている環境では、/skServer/ziplogs へのアクセスを遮断する方法もありますが、ログのダウンロード機能が使えなくなります。いずれも侵入済みの状態は解消しないため、更新までのつなぎとして扱います。
背景
Signal K Serverはオープンソースのサーバーで、船上のセンサーや航法機器から集めたデータを、Signal Kという共通の形式で配信します。管理画面から設定やユーザーを操作でき、利用者の認証にはJWTを使います。小さな機器の上で動かしていることも多く、運用が個人や現場任せになりやすい製品です。
今回の問題の厄介な点は、認証の穴そのものより、そこから取れるファイルに署名用の鍵が入っていたことです。金庫の鍵の型が、受付で誰にでも渡されるようなもので、鍵穴を守っていても意味がなくなります。ログや設定の書き出し機能に秘密情報が混ざる脆弱性は、署名鍵を使う認証方式で問題になりやすい型です。
よくある質問
Q.インターネットに公開していなければ、影響はありませんか。
まだ分かっていないこと
- 実際の攻撃で悪用されたかどうかは、ベンダーの告知(GitHubのセキュリティアドバイザリ)や公的機関の情報で今後確認する必要があります。
- 管理者権限を得たあとに、船舶の機器や外部システムの制御にまで及ぶのかは分かっていません。
- 2.33.0に更新した時点で秘密鍵が自動的に入れ替わるのか、この問題がいつの版から存在するのかも分かっていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| SignalK | signalk-server |
2.33.0 未満 |
2.33.0 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Signal K Server before 2.33.0 contains a missing authentication vulnerability that allows unauthenticated remote attackers to download log archives via the /skServer/ziplogs endpoint. Attackers can extract the JWT secretKey from security.json in the ZIP, forge administrator tokens, and create persistent admin accounts for full server control.
出典: CVE.org (CVE Program・cvelistV5) NVD