Make sure that clients can't access buffers belonging to other users
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 24 Nov 2013 16:03:34 +0000 (17:03 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 24 Nov 2013 16:05:55 +0000 (17:05 +0100)
A manipulated, but properly authenticated client was able to retrieve
the backlog of other users on the same core in some cases by providing
an appropriate BufferID to the storage engine. Note that proper
authentication was still required, so exploiting this requires
malicious users on your core. This commit fixes this issue by ensuring
that foreign BufferIDs are off-limits.

src/core/SQL/PostgreSQL/16/select_buffer_by_id.sql
src/core/SQL/PostgreSQL/16/update_network.sql
src/core/SQL/SQLite/17/select_buffer_by_id.sql

index 09f202e..cccfa7c 100644 (file)
@@ -1,3 +1,3 @@
 SELECT bufferid, networkid, buffertype, groupid, buffername
 FROM buffer
-WHERE bufferid = :bufferid
+WHERE userid = :userid AND bufferid = :bufferid
index a000f61..d2dea84 100644 (file)
@@ -17,4 +17,5 @@ rejoinchannels = :rejoinchannels,
 usesasl = :usesasl,
 saslaccount = :saslaccount,
 saslpassword = :saslpassword
-WHERE networkid = :networkid
+WHERE userid = :userid AND networkid = :networkid
+
index 09f202e..6bd35f0 100644 (file)
@@ -1,3 +1,3 @@
 SELECT bufferid, networkid, buffertype, groupid, buffername
 FROM buffer
-WHERE bufferid = :bufferid
+WHERE bufferid = :bufferid AND userid = :userid