]> glassweightruler.freedombox.rocks Git - waydroid.git/commitdiff
security: Verify session user_id against DBus connection
authorAlessandro Astone <ales.astone@gmail.com>
Sat, 21 Jan 2023 23:08:45 +0000 (00:08 +0100)
committerAlessandro Astone <ales.astone@gmail.com>
Sat, 21 Jan 2023 23:10:29 +0000 (00:10 +0100)
tools/actions/container_manager.py

index 7321c148dcf5e3f991347d9df2170516fd9e28a6..38b0040b92e07eee15a14b1af18545b1f7173c2f 100644 (file)
@@ -22,8 +22,13 @@ class DbusContainerManager(dbus.service.Object):
         self.looper = looper
         dbus.service.Object.__init__(self, bus, object_path)
 
         self.looper = looper
         dbus.service.Object.__init__(self, bus, object_path)
 
-    @dbus.service.method("id.waydro.ContainerManager", in_signature='a{ss}', out_signature='')
-    def Start(self, session):
+    @dbus.service.method("id.waydro.ContainerManager", in_signature='a{ss}', out_signature='', sender_keyword="sender", connection_keyword="conn")
+    def Start(self, session, sender, conn):
+        if session["user_id"] != "0":
+            dbus_info = dbus.Interface(conn.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus/Bus", False), "org.freedesktop.DBus")
+            uid = dbus_info.GetConnectionUnixUser(sender)
+            if str(uid) != session["user_id"]:
+                raise RuntimeError("Cannot start a session on behalf of another user")
         do_start(self.args, session)
 
     @dbus.service.method("id.waydro.ContainerManager", in_signature='b', out_signature='')
         do_start(self.args, session)
 
     @dbus.service.method("id.waydro.ContainerManager", in_signature='b', out_signature='')