浏览代码

Merge pull request from GHSA-9p5f-5x8v-x65m

Throw exception on path traversal in WriteDocumentAsync
Joshua M. Boniface 2 年之前
父节点
当前提交
82ad2633fd
共有 1 个文件被更改,包括 5 次插入0 次删除
  1. 5 0
      MediaBrowser.Controller/ClientEvent/ClientEventLogger.cs

+ 5 - 0
MediaBrowser.Controller/ClientEvent/ClientEventLogger.cs

@@ -23,6 +23,11 @@ namespace MediaBrowser.Controller.ClientEvent
         {
         {
             var fileName = $"upload_{clientName}_{clientVersion}_{DateTime.UtcNow:yyyyMMddHHmmss}_{Guid.NewGuid():N}.log";
             var fileName = $"upload_{clientName}_{clientVersion}_{DateTime.UtcNow:yyyyMMddHHmmss}_{Guid.NewGuid():N}.log";
             var logFilePath = Path.Combine(_applicationPaths.LogDirectoryPath, fileName);
             var logFilePath = Path.Combine(_applicationPaths.LogDirectoryPath, fileName);
+            if (!Path.GetFullPath(logFilePath).StartsWith(_applicationPaths.LogDirectoryPath, StringComparison.Ordinal))
+            {
+                throw new ArgumentException("Path resolved to filename not in log directory");
+            }
+
             await using var fileStream = new FileStream(logFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.None);
             await using var fileStream = new FileStream(logFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.None);
             await fileContents.CopyToAsync(fileStream).ConfigureAwait(false);
             await fileContents.CopyToAsync(fileStream).ConfigureAwait(false);
             return fileName;
             return fileName;