From 517d2768da4084b78c02dd7f756ccd9640d3a8f6 Mon Sep 17 00:00:00 2001 From: hensm Date: Thu, 8 Sep 2022 20:52:52 +0100 Subject: [PATCH] Limit incoming content messages for untrusted instances --- ext/src/background/castManager.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ext/src/background/castManager.ts b/ext/src/background/castManager.ts index c877c49..493791c 100644 --- a/ext/src/background/castManager.ts +++ b/ext/src/background/castManager.ts @@ -110,6 +110,13 @@ let receiverSelector: Optional; const activeInstances = new Set(); +const allowedContentMessages: Array = [ + "main:initializeCastSdk", + "main:requestSession", + "bridge:sendCastReceiverMessage", + "bridge:sendCastSessionMessage" +]; + /** Keeps track of cast API instances and provides bridge messaging. */ const castManager = new (class { async init() { @@ -356,6 +363,16 @@ const castManager = new (class { instance: CastInstance, message: Message ) { + // Limit untrusted instances to allowed messages subset + if ( + !allowedContentMessages.includes(message.subject) && + !instance.isTrusted + ) { + logger.error(`Forbidden message type! (${message.subject})`); + disconnectContentPort(instance.contentPort); + return; + } + const [destination] = message.subject.split(":"); if (destination === "bridge") { instance.bridgePort.postMessage(message); @@ -383,6 +400,7 @@ const castManager = new (class { logger.error( "Cast instance not trusted to bypass receiver selection!" ); + disconnectContentPort(instance.contentPort); break; }