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 <[email protected]> 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 <[email protected]> Reviewed-by: Antonio Sartori <[email protected]> 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