CVE-2026-54477: 管理パネルのセキュリティヘッダー欠落(クリックジャッキング / XSS)
アドバイザリ
| 項目 | 値 |
|---|
| CVE | CVE-2026-54477 |
| ICSA | ICSA-26-183-03 (Gardyn IoT Hub) |
| CVSS 3.1 | 5.4 (中) |
| ベクター (3.1) | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N |
| ベクター (4.0) | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N |
| CWE (CISA 割当) | CWE-644 (スクリプト構文に対する HTTP ヘッダーの不適切な無害化) |
| CWE (研究者) | CWE-693 (保護メカニズムの不全)、CWE-1021 (レンダリングされた UI レイヤーの不適切な制限) |
| 研究者 | Michael Groberman |
| 公開日 | 2026-07-02 |
| 協調発見 | Gr0m-043 (管理パネルにすべてのセキュリティヘッダーが欠落) |
製品
| 項目 | 値 |
|---|
| ベンダー | Gardyn |
| 製品 | Gardyn Home Kit、Gardyn Studio |
| コンポーネント | 管理パネル (admin.gardyn.io、Netlify) |
| 影響を受けるバージョン | Home ファームウェア < master.627、Studio ファームウェア < master.627、クラウド API < 2.12.2026 |
概要
管理パネルは、HSTS 以外のセキュリティヘッダーなしで配信されます — Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Permissions-Policy は一切ありません。これにより、認証済みの管理セッションに対するクリックジャッキングとクロスサイトスクリプティングが可能になります。
脆弱性の詳細
存在するヘッダー
| ヘッダー | 値 |
|---|
server | Netlify |
strict-transport-security | max-age=31536000 |
cache-control | no-cache |
不足しているヘッダー
クリックジャッキングのシナリオ
X-Frame-Options / CSP の frame-ancestors がない状態では、認証済みの管理セッション上に重ねられた不可視の iframe が、クリック時に PiReboot、DeleteUser、SwitchBannedDevice などの特権アクションをトリガーできます。
XSS の増幅
Gr0m-028 で特定されたクライアントサイドのインジェクションシンク(dangerouslySetInnerHTML の 22 箇所、innerHTML への代入 35 箇所)と組み合わせると、CSP がないため、成功したペイロードは制限なく実行され、データの外部漏洩とセッション伝播を可能にします。
協調発見との対応
| 側面 | 詳細 |
|---|
| Gr0m-043 | HSTS 以外のセキュリティヘッダーが一切ない状態で提供される管理パネル。クリックジャッキング + XSS を可能にする |
| CWE の整合 | 研究者は CWE-693 / CWE-1021 に分類。CISA は CWE-644 を割り当て。どちらもヘッダー欠落の状態を説明している |
| 注記 | この発見は、2026 年 3 月にベンダーが CERT/CC に対して修正済みであると主張したもの。CISA の CVE として公開されたことで、連邦政府の記録上、有効かつ独立した発見として確立された |
修復策
ICSA-26-183-03 に基づき、Gardyn は、IoT Hub の展開済みインフラストラクチャを、記載された脆弱性に対処するために更新したと述べています。推奨される対策セット(Netlify の _headers / netlify.toml):
[[headers]]
for = "/*"
[headers.values]
Content-Security-Policy = "default-src 'self'; script-src 'self'; frame-ancestors 'none';"
X-Frame-Options = "DENY"
X-Content-Type-Options = "nosniff"
Referrer-Policy = "strict-origin-when-cross-origin"
Permissions-Policy = "camera=(), microphone=(), geolocation=()"
研究者: Michael Groberman (Gr0m) · ケース: CERT/CC VU#653116 · アドバイザリ: ICSA-26-183-03