20 vistas
[Sécurité - CSRF/Replay] Possibilité de spammer le chat & envoyer un messag
Raf

1 sujeto , 1 respuesta

Mensaje no leído
Hello,

Tout d'abord je voulais vous féliciter pour NeoFrag, bien que je ne l'utilise pas et que je ne suis plus un grand fan de PHP, il rempli un manque dans le domaine (CMS pour gamers/teams) et est bien complet.

Passons au sujet principal :) Il y a une faille CSRF/Replay sur le chat. Je ne sais pas si elle a déjà été signalée car elle est assez flagrante. Il est possible de simplement rejouer la requête POST sur /ajax/talks/add_message.html et d'ainsi spammer le chat ou avec une attaque un peu plus élaborée d'envoyer un message en tant qu'un autre utilisateur.

Le fix est relativement simple. Il suffit de générer un token pour le chat et l'envoyer à l'utilisateur lorsqu'il le charge. Dès que l'utilisateur envoie un message, le token est vérifié et si il est valide, le message est posté puis un nouveau token est généré et retourné dans la réponse de la requête AJAX afin qu'il puisse poster un message suivant.

++
Raf
3 participantes
3 respuestas
FoxLey

25 sujetos, 573 respuestas

Mensaje no leído
Salut @Raf

Merci pour ton analyse
On va voir pour corriger ça rapidement

Par contre je ne vois pas comment on pourrait envoyer un message à la place d'un autre... (a part en ayant voler la session d'un membre connecté)
GitHub
crazy

60 sujetos, 474 respuestas

Mensaje no leído
Yo @Raf tu es ici
Debout les morts !
Raf

1 sujeto , 1 respuesta

Mensaje no leído
@FoxLey Merci pour ta réponse rapide. Poster un message en tant que quelqu'un d'autre peut se faire via un formulaire POST qui peut être hébergé n'importe où (voir PoC ci-dessous) et en invitant l'utilisateur à le soumettre. Ou bien en exploitant une faille XSS autre part sur le site (je n'ai pas vérifié si il y'en avait mais même en étant prudent ça arrive d'en avoir).

Formulaire post:
<html>
<head>
<title>NeoFrag Chat CSRF PoC</title>
</head>
<body>
<form action="[URL]/ajax/talks/add_message.html" method="POST">
<input name="talk_id" type="hidden" value="2" />
<input name="message" type="text" />
<input type="submit" />
</form>
</body>
</html>

@Crazy Coucou :-)