Chrome · FileSystem
CVE-2026-79206
OOB in FileSystem
Overview
Low
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Files Changed
chrome/browser/file_system_access/chrome_file_system_access_permission_context.ccchrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
Patch
From f57f211284300f47f7834a902d89e8ff493424e3 Mon Sep 17 00:00:00 2001
From: Etienne Bergeron <etienneb@google.com>
Date: Wed, 22 Jul 2026 07:47:33 -0700
Subject: [PATCH] Block base::DIR_CACHE in File System Access API on Linux/ChromeOS
Add base::DIR_CACHE (~/.cache) to the File System Access blocklist
on Linux and ChromeOS platforms in addition to Android, preventing web
content from gaining write access to user cache directories.
Also add unit tests in fontconfig_util_unittest and
chrome_file_system_access_permission_context_unittest.
Bug: 513361380
Change-Id: I085954d4cc09a126e916e2fe0053fe5c1f0fd1aa
Fixed: 513361380
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8126779
Commit-Queue: Etienne Bergeron <etienneb@chromium.org>
Reviewed-by: Antonio Sartori <antoniosartori@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1666284}
---
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
index aa7ec45..d16db9f9 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
@@ -478,11 +478,13 @@
// a website can do with access to that directory and its contents.
BlockPath::CreateRelative(base::DIR_HOME, FILE_PATH_LITERAL(".dbus"),
BlockType::kBlockAllChildren),
+ // And block all of ~/.cache, matching the similar restrictions on mac
+ // and windows.
+ BlockPath::CreateRelative(base::DIR_CACHE, BlockType::kBlockAllChildren),
#endif
#if BUILDFLAG(IS_ANDROID)
BlockPath::CreateRelative(base::DIR_ANDROID_APP_DATA,
BlockType::kBlockAllChildren),
- BlockPath::CreateRelative(base::DIR_CACHE, BlockType::kBlockAllChildren),
#endif
// TODO(crbug.com/40095723): Refine this list, for example add
// XDG_CONFIG_HOME when it is not set ~/.config?
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
index 93dd451..50d7a6d9 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
@@ -684,20 +684,22 @@
EXPECT_TRUE(IsOpenAbort(app_data_dir.AppendASCII("foo"), HandleType::kFile));
EXPECT_TRUE(
IsOpenAbort(app_data_dir.AppendASCII("foo"), HandleType::kDirectory));
+#endif // BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
base::FilePath cache_dir = temp_dir_.GetPath().AppendASCII("cache");
base::ScopedPathOverride cache_override(base::DIR_CACHE, cache_dir, true,
true);
ResetBlockPath();
- // The android cache directory, its parent and paths inside should not be
+ // The cache directory, its parent and paths inside should not be
// allowed.
EXPECT_TRUE(IsOpenAbort(cache_dir, HandleType::kDirectory));
EXPECT_TRUE(IsOpenAbort(temp_dir_.GetPath(), HandleType::kDirectory));
EXPECT_TRUE(IsOpenAbort(cache_dir.AppendASCII("foo"), HandleType::kFile));
EXPECT_TRUE(
IsOpenAbort(cache_dir.AppendASCII("foo"), HandleType::kDirectory));
-
-#endif // BUILDFLAG(IS_ANDROID)
+#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) ||
+ // BUILDFLAG(IS_ANDROID)
}
// TODO(crbug.com/432011571): Flaky test.
Loading diff…
Regression Test / PoC
shipped with the fix
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
index 93dd451..50d7a6d9 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
@@ -684,20 +684,22 @@
EXPECT_TRUE(IsOpenAbort(app_data_dir.AppendASCII("foo"), HandleType::kFile));
EXPECT_TRUE(
IsOpenAbort(app_data_dir.AppendASCII("foo"), HandleType::kDirectory));
+#endif // BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
base::FilePath cache_dir = temp_dir_.GetPath().AppendASCII("cache");
base::ScopedPathOverride cache_override(base::DIR_CACHE, cache_dir, true,
true);
ResetBlockPath();
- // The android cache directory, its parent and paths inside should not be
+ // The cache directory, its parent and paths inside should not be
// allowed.
EXPECT_TRUE(IsOpenAbort(cache_dir, HandleType::kDirectory));
EXPECT_TRUE(IsOpenAbort(temp_dir_.GetPath(), HandleType::kDirectory));
EXPECT_TRUE(IsOpenAbort(cache_dir.AppendASCII("foo"), HandleType::kFile));
EXPECT_TRUE(
IsOpenAbort(cache_dir.AppendASCII("foo"), HandleType::kDirectory));
-
-#endif // BUILDFLAG(IS_ANDROID)
+#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) ||
+ // BUILDFLAG(IS_ANDROID)
}
// TODO(crbug.com/432011571): Flaky test.
Loading diff…
Original Bug Report
The reporter's bug is still restricted on the tracker. Chrome de-restricts security bugs ~30–90 days after the fix ships; a later run will backfill it here.
References
On This Page