| |||||
| Dernière réponse | ||
|---|---|---|
| Sujet : [blabla@olympe] Le topic du modo, dieu de la fibre et du monde | ||
| el muchacho |
Voici comment je le comprends: 1) dans Unix, le mot de passe est hashé par crypt() et le hash est comparé à la chaîne qui se trouve normalement à la place de * dans /etc/passwd 2) En cas d'erreur, l'algo de hash sha512 de crypt() retourne NULL. Mais comme d'hab avec les fonctions C qui retournent NULL, les programmeurs qui l'appellent oublient de tester la valeur de retour pour NULL. Donc généralement, ça crashe. Donc des petits malins de la libc sous alpine (nommée musl) se sont dits en 2012 que sha512 pourrait retourner autre chose que NULL. Sauf qu'ils ont choisi... je te le donne dans le mille : "*" ! Donc maintenant, si la fonction sha512 de crypt() ne sait pas gérer l'entrée, elle retourne "*" et donc l'étape 1 fonctionne et l'accès est accordé. C'était littéralement LA valeur de retour qu'il ne fallait jamais retourner. 3) c'est à partir de là qu'effectivement le writeup n'est pas hyper clair, mais à mon sens pas vraiment important, c'est ce qui est au-dessus qui est le plus important. Que se passe-t'il si tu te logges sous le user tartempion et que tertempion n'est pas déclaré dans /etc/passwd ? crypt() ne fait même pas appel à sha512, il dénie immédiatement l'accès. Sauf que ça permet de savoir si l'utilisateur tartempion existe dans /etc/passwd en mesurant le temps de réponse. Donc au lieu de retourner un déni d'accès immédiatement, en 2016 ils ont décidé de faire tourner sha512 quand même, sur un autre utilisateur existant dans /etc/passwd, comme par ex root. 4) Il s'avère que la distrib alpine n'avait pas d'entrée root dans le fichier jusqu'en 2019. Donc le fix de 3) n'était pas effectif: il était vulnérable à la mesure de temps, mais au moins on ne pouvait pas se loguer avec n'importe quel username. |
|
| Vue Rapide de la discussion |
|---|