
CVE-2021-27289: Ksix Zigbeeデバイスにおける再生保護バイパス
皆さん、こんにちは。
プロらしいやり方としては、このリポジトリのタイトルをまさに今のまま – 明確で説明的で、要点を突いたもの – にするのが正解だったと思います。しかし、まとめているときに、他にもいくつかのタイトルが頭に浮かびました。例えば以下のようなものです:
ともあれ、ここに物語があります。
新しい脆弱性を開示する準備をしていたとき、何年も前に取り組んだ仕事を思い出しました – 最終学位プロジェクトで Thread や Zigbee といった IoT プロトコルを研究しているときに見つけたバグです。当時、MITRE に報告書を送りましたが、返事はなく、単に無視されたのだろうと思っていました。
ふと好奇心から、提出に使った昔の Gmail アカウントにログインしてみました…すると驚いたことに、2023年 – 3年後 – に実際に CVE が割り当てられているのを見つけました。
CVE-2021-27289、学生時代に報告した脆弱性に関連付けられたものです。
なぜこんなに時間がかかったのでしょうか?最初にベンダーに連絡したとき、彼らは修正するだけの人員がいないと言い、その言い訳を繰り返していました。私は MITRE に対し、誰もそれに対処しているようには見えないと伝えました。おそらく彼らは待っていたのでしょう – 結局この問題はパッチが当てられることは決してなかったからです。
このバグは Ksix が製造したいくつかの Zigbee ベースの IoT デバイスに影響を与えました。核心的な問題は、Zigbee 仕様で定義されフレームカウンタによって強制される再生保護メカニズムが適切に実装されていなかったことです。
デバイスがフレームカウンタを正しくチェックしなかったため、攻撃者はネットワークと通信し、シーケンス番号をデバイスが最後に認識した値よりも高い値に増やすだけでパケットを偽装できました。これにより、キャプチャしたメッセージを再生し、有効なものとして受け入れさせることが可能になり、結果として認証バイパスが発生しました。
このリポジトリには、最終プロジェクトで取り組んだすべてが含まれています:
Ksix Zigbee IoT デバイスは、Zigbee の再生保護メカニズムの不適切な実装に起因する再生攻撃の脆弱性の影響を受けます。
以下のバージョンでテストされ、脆弱であることが確認されました。それ以降のバージョンはテストしていないため、影響を受ける可能性もあります。
これらの製品はベンダーのウェブサイトや Amazon などのプラットフォームではもう入手できず、製造中止になったようです。
影響を受けるデバイスの Zigbee スタックは、Zigbee 仕様で定義されたフレームカウンタフィールドに依存する再生保護メカニズムを適切に強制しません。このフィールドは、受信したメッセージが新しいものであり、再生されたものではないことを保証するためのものです。
しかし、この実装ではフレームカウンタが無視されるか、正しく検証されません。その結果、攻撃者は正当な Zigbee パケットをキャプチャし、そのシーケンス番号をより高い値(例:250)に増やしてネットワークに再送信することができます。
デバイスはシーケンス番号のみをチェックするため、メッセージを新しいものとして受け入れます – これにより、認証や暗号化を破ることなく、偽装された通信と不正な操作が可能になります。
デバイスの種類と環境への統合方法によっては、これにより、ユーザーがネットワークを設定するために使用した元のアプリに、偽のアラートやセンサー状態(例:動体検知、ドア開放)が表示される可能性があります – 実際には何も起こっていないにもかかわらずです。より複雑なセットアップでは、偽装されたデータに基づいて自動化ワークフローが不安定になったり、意図しない動作が引き起こされたりする可能性もあります。
これらのデバイスは通常、Tuya Smart などのアプリを使って設定され、センサーがトリガーされると(例えばドアが開いたり動体を検知したりすると)リアルタイムでユーザーに通知します。これにより、物理的なイベントが決して発生しなかったとしても、以下の攻撃が特に効果的になります。
この特定の再生脆弱性の直接的な影響は限定的ですが、プロトコルをより深く理解することで – 私が最終学位プロジェクトで探求したように – 最小限のリソースで実行可能な、より高度な攻撃シナリオが明らかになります。
#!/bin/bash
function usage(){ echo -e "\nUsage: $0 [ZigbeeChannel] [SecuenceNumber] [HexDumpFile] [ShortSource] [ExtendedSource] [ShortDestination] [ShortPanId] [FCS]" echo -e "Example: $0 11 250 Open_Door_Alert_Hex_Dump 0x0001 11:ff:11:ff:11:ff:11:ff 0x0000 0x3333 0x0000 \n" echo -e "IMPORTANT: This is a script that I developed to understand how an IEEE 802.15.4 / Zigbee packet is formed, modify some fields of the packet in a simple way and see the effect when forwarding it to the network. If you want to exploit the vulnerability, follow the steps that I specify in the comments I make in the script. I exploited the vulnerability by spoofing a packet (sequence number 250) that contained the message "Door open".\n" }
function message(){ echo -e "\nProof of Concept" echo -e "There is an incorrect check of the "sequence number" field on Ksix Zigbee devices\n" echo -e "IMPORTANT: This is a script that I developed to understand how an IEEE 802.15.4 / Zigbee packet is formed, modify some fields of the packet in a simple way and see the effect when forwarding it to the network. If you want to exploit the vulnerability, follow the steps that I specify in the comments I make in the script. I exploited the vulnerability by spoofing a packet (sequence number 250) that contained the message "Door open".\n" }