diff --git a/lib/MatterbridgeManager.php b/lib/MatterbridgeManager.php index ad1f1eec82..3c497fa66a 100644 --- a/lib/MatterbridgeManager.php +++ b/lib/MatterbridgeManager.php @@ -128,7 +128,7 @@ class MatterbridgeManager { $newBridge = [ 'enabled' => $enabled, 'pid' => $currentBridge['pid'] ?? 0, - 'parts' => $parts, + 'parts' => $this->validateParts($parts), ]; $this->notify($room, $userId, $currentBridge, $newBridge); @@ -351,6 +351,7 @@ class MatterbridgeManager { private function generateConfig(array $bridge): string { $content = ''; foreach ($bridge['parts'] as $k => $part) { + $k = (int)$k; $type = $part['type']; if ($type === 'nctalk') { @@ -507,6 +508,22 @@ class MatterbridgeManager { return $content; } + protected function validateParts(array $parts): array { + foreach ($parts as $k => $part) { + if (!is_numeric($k)) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + foreach ($part as $key => $value) { + if (preg_match('/["\n]/', $key) || preg_match('/["\n]/', $value)) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + } + } + return $parts; + } + /** * Remove the scheme from an URL and add port *