Espressif ESP-NOWの欠陥により攻撃者は通信を再生することができる

Espressif ESP-NOWの欠陥により攻撃者は通信を再生することができる

Nozomi Networks ESP-NOWは、Espressif社のワイヤレス・プロトコルで、既存のワイヤレス・ハードウェア上でスマート・デバイスを直接、高速、低消費電力で制御することができる。

注目すべきは、発見された脆弱性の1つで、攻撃者がESP-NOWが実装しているリプレイ防止策をバイパスし、脆弱な2つのESP-NOWノード間で交換された以前にキャプチャされたパケットを自由に再送信できる可能性があることである。この脆弱性は暗号化レイヤーで保護されたパケットにさえ影響し、暗号化キーの知識を必要としません。実際の攻撃シナリオの例としては、警報システムの任意の解除や、自動入場ゲートの不正な開放などがあります。

私たちの発見が公表された後、Espressifはこれらの問題に対処するための修正を同社の公式GitHubリポジトリに速やかに実装しました。資産所有者は、脆弱なコンポーネントを使用しているデバイスのファームウェアを早急に更新するよう促されている。当社のお客様には、NozomiのGuardian Air ワイヤレスセンサーが、これらの欠陥の悪用に対する保護を提供するためにアップデートされました。

このブログでは、まずEspressifとESP-NOWプロトコルについて簡単に紹介する。次に、これらの脆弱性によって促進される可能性のある実際の攻撃シナリオを、欠陥そのものと影響を受けるデバイスの詳細な概要とともに説明する。最後に、これらの脆弱性に対処するために利用可能な公式の改善策を紹介します。

研究範囲

エスプレシフ・システムズは、IoT ソリューションを提供する有名なプロバイダーであり、半導体業界で圧倒的な地位を占めている。2023年、同社は約2億チップの売上を報告し、2014年に画期的なESP8266モデルを発表して以来、10億以上のシステムオンチップ(SoC)を出荷してきた。これらの数字は、エスプレシフが半導体市場で大きな影響力を持っていることを裏付けるだけでなく、IoT 、スマートデバイス分野の形成において主導的な役割を果たしていることも示している。

図1.ESP-NOWスタック。(出典:エスプレシフ)

Espressifは、革新的な技術として、デバイス間の直接無線通信用に設計された独自のプロトコルであるESP-NOWを開発した。データリンクレイヤーで動作し、Wi-Fiアクションフレーム(図1)を利用するこのプロトコルは、ESP-IDF SDK内で部分的にオープンソースの拡張モジュールとして提供されています。ESP-NOWは、Wi-Fi接続を特徴とする様々なEspressif SoCと互換性があり、デバイス間のシームレスで効率的な通信を可能にします。ESP-NOWは迅速な応答を実現するよう特別に設計されており、混雑したネットワーク環境で一般的に発生する遅延やパケットロスを最小限に抑えます。このため、ESP-NOWは、IoT アプリケーションの接続性強化を目指す開発者に人気のソリューションとなっています。

これらの脆弱性の影響は?

最も影響が大きい脆弱性はCVE-2024-42483で、脆弱なESP-NOWノードに対してリプレイ攻撃が可能です。これは、暗号化セキュリティ・レイヤーで保護され、暗号化キーがない通信でも発生する可能性があります。

標的とされるシステムによっては、この脆弱性が重大な結果をもたらす可能性がある。例えば、ESP-NOWは建物のアラームなどのセキュリティ・システムで使用され、モーション・センサーとの通信を可能にしている。このようなシナリオでは、攻撃者はこの脆弱性を悪用して、以前に傍受した正当な「OFF」コマンドを再生し、それによってモーション・センサーを自由に無効にすることができる。

ESP-NOWのもう1つの一般的なアプリケーションは、自動ゲートやガレージドアに使用されるようなリモートドアオープナーの実装である。このような状況では、攻撃者が「OPEN」コマンドを傍受し、後日そのコマンドを再生してドアを開け、建物に不正アクセスする可能性があります。

これらの攻撃を実現するために必要な唯一の前提条件は、リプレイするためにターゲット通信をスニッフする能力であることを強調したい。この機能は高ゲインのWi-Fi指向性アンテナで容易に実現できるため、脅威行為者は送信ノードから数十メートル離れた場所から攻撃を実行できる可能性がある。

CVE-2024-42484によってもたらされる追加の影響は、任意のノード上でサービス拒否(DoS)状態を誘発する可能性である。しかし、リファレンス実装で行われたテストでは、脆弱性そのものを悪用することには成功したものの、この効果を引き起こすのに必要な条件を再現することには成功しませんでした。

その結果、この脆弱性がリファレンスコードを使用するデバイスに重大な脅威をもたらす可能性は低い。この脆弱性がリスクになるのは、製造業者や資産所有者がリファレンス・コードに修正を加えた場合(例えば、新しい機能を追加したり、特定のシナリオにおけるデバイスの動作を変更したりする場合)など、まれな場合のみです。

脆弱性リストと影響を受けるバージョン

次の表は、発見された2つの脆弱性をCVSS v3.1の基本スコア順に並べたものである。

CVE IDCWECVSS v3.1 ベーススコアCVSS v3.1 ベクトル
CVE-2024-42483信頼されたデータによる信頼されないデータの受け入れ (CWE-349)5.3CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L/E:H/RL:W/RC:C
CVE-2024-42484境界外読み取り (CWE-125)4.3CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

CVE-2024-42483 は、コミット 0c8bd74456e797520351d72ed85b44a8ddf0ed63 (included) までのESP-NOW GitHub リポジトリに影響します。

コミット e8748dd33eced44e5f0dd6ad7ba11a39e4ab71d9 (included) までの CVE-2024-42484 が影響します。

脆弱性スポットライト

我々が発見した2つの脆弱性のうち、CVE-2024-42483は、最終的に脅威行為者にリプレイ攻撃を実行させる可能性があるため、最も危険である。

リプレイ攻撃を防ぐという特定の目的のため、すべてのESP-NOWパケットには、送信ごとにランダムに生成される16ビットで構成される一意の「マジック」値が含まれています。ESP-NOWノードは「g_msg_magic_cache」と呼ばれるローカル・マジック・キャッシュを使用し、受信した各メッセージのタイプとマジック値のペアを保存します。

このメカニズムの原理は単純である。受信メッセージを受信すると、ESP-NOWノードはキャッシュの内容をチェックする。メッセージのタイプとマジック・バリューがすでに存在する場合、メッセージは重複として識別され、破棄される。そうでない場合、メッセージは受け入れられ、処理フローは通常通り進行する。

このアプローチは理論的には強固に見えるが、以下の2つの欠点により、実際には不十分であることが証明されている:

  • これらのマジック・バリューを保存するために各ノードが保持するローカル・キャッシュの容量には限りがある。デフォルトでは、図2に示すように、各ノードのキャッシュには32スロットしかない。これらのスロットはラウンドロビン方式で管理され、キャッ シュが一杯になると、新しいメッセージはその型とマジック値で最も古いエントリーを上書 きする;
  • ローカルキャッシュは、メッセージの種類によって区別されることはない。ブロードキャストであるかユニキャストであるかにかかわらず、また暗号化されているか平文で送信されているかにかかわらず、すべての種類のメッセージに対して単一の共有リソースとして機能する。
図2.g_msg_magic_cache "の宣言。

その結果、攻撃者は平文、ブロードキャスト、および認証されていないESP-NOWメッセージのバーストでネットワークを氾濫させることができる。この戦略により、攻撃者は正当なエントリのキャッシュをクリアすることができ、暗号化ステータスに関係なく、以前にキャプチャしたパケットを再投入する機会を作り出すことができる。

この攻撃シナリオを図3に示す。

図3.自動ゲートのドアを開けることになる攻撃シナリオの例。

修復

これらの脆弱性が報告された後、エスプレシフは速やかにESP-NOWのリファレンス実装の欠陥に対処した。

資産所有者が自身のESP搭載デバイスのファームウェアを直接管理している場合、ESP-NOWのGitHubリポジトリのローカルコピーを少なくともコミット4e30db50d541b2909d278ef0db05de1a3d7190ef(両方の脆弱性に対するパッチを含む最初のもの)に更新した後に新しいイメージをビルドすることで、これらの脆弱性を修正することができる。

あるいは、資産所有者は、前述の脆弱性を修正したパッチ付きファームウェアイメージを入手するために、デバイスの製造元に連絡するよう促されている。

何らかの理由で資産所有者がデバイスをアップデートできない場合、以下の緩和策を実施することで、悪用に成功する可能性を減らすことができます:

  • 受信側の脆弱なデバイスに近接した無線チャネルを(例えば、Guardian Air )監視する;
  • 送信デバイスのワイヤレス信号パワーを最小にし、敵対者が有効なメッセージを傍受する可能性を減らす;
  • 受信側の脆弱なデバイスが正しく、期待通りに機能していることを定期的に検証する。