midzer / eisolzried

Feuerwehr Eisolzried website
https://feuerwehr-eisolzried.de/
7 stars 2 forks source link

XSS Vulnerability in Chat #13

Open Nymokrit opened 4 years ago

Nymokrit commented 4 years ago

Die Eingaben im Chat werden nicht vom backend validiert und XSS Injections sind möglich.

var g = new WebSocket("wss://api.feuerwehr-eisolzried.de/chat");
g.send('<img src="https://x" onerror=alert(1) />')
midzer commented 4 years ago

@Nymokrit Danke für den Hinweis.

Hier werden die HTML tags im Frontend entfernt https://github.com/midzer/eisolzried/blob/a433ae3f1bfeff98829950634025bd5602c5868f/_assets/js/modules/chatbox.js#L10

Anstatt im Backend die Eingaben nochmal zu validieren habe ich mal nen Access-Control header gesetzt https://github.com/midzer/ff-chat/blob/7117370291fbb1b186cfa070964daceda64de8fe/index.js#L5

Magst du nochmal testen ob du von deinem Origin weiter connecten kannst?

Nymokrit commented 4 years ago

Hi,

das ist eine gute Idee! Aber wenn ich den Request direkt über die Dev Console aus einem Browser sende, bzw. den Header selbst setze, dann kann ich trotzdem connecten.

Die Frontend funktion hatte ich gesehen, daher kam ich auf die Idee zu testen, ob das nur im Frontend entfernt wird. Ich vermute, du willst die Tags nicht im Backend entfernen um Bilduploads zu ermöglichen?

Aus meiner Sicht gibt es 2 "einfache" Möglichkeiten: 1.) Validation im Backend 2.) Im Frontend die Nachrichten rein als Text interpretieren und Images gesondert behandeln, bzw. den tag im Frontend zusammenbauen und nicht aus dem Backend übernehmen