Chrome · Storage
CVE-2026-14082
Race in Storage
Overview
Low
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
ifstorage/common/quota/padding_key.cc |
modified |
Files Changed
storage/common/quota/padding_key.cc
Patch
From 4cad1ff60165c909a864d23b385f83a7e2c339ea Mon Sep 17 00:00:00 2001
From: Andrew Paseltiner <apaseltiner@chromium.org>
Date: Fri, 29 May 2026 06:00:49 -0700
Subject: [PATCH] Fix data race in stable response padding key initialization
The global HMAC key used for stable response padding was being lazily
initialized using a non-atomic boolean guard and POD statics. On
weakly-ordered architectures (like ARM64), this could allow a concurrent
thread to observe the key as zero-initialized, leading to predictable
padding and potential size disclosure.
Additionally, the lack of synchronization meant multiple threads could
race to initialize the key, potentially resulting in inconsistent
padding values across threads during the race window.
This CL replaces the racy initialization, which was introduced in
crrev.com/c/6052616, with a thread-safe static const initialization
using crypto::RandBytesAsArray.
Fixed: 513049578
Change-Id: I9effaa7e50e3becd96714cad37e4d05960118f13
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7849753
Reviewed-by: Mingyu Lei <leimy@chromium.org>
Commit-Queue: Andrew Paseltiner <apaseltiner@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1638424}
---
diff --git a/storage/common/quota/padding_key.cc b/storage/common/quota/padding_key.cc
index 93b753c..64cbd8a5 100644
--- a/storage/common/quota/padding_key.cc
+++ b/storage/common/quota/padding_key.cc
@@ -45,15 +45,10 @@
const base::Time& response_time,
const std::string& request_method,
int64_t side_data_size) {
- static std::array<uint8_t, 16> s_padding_key;
- static bool s_padding_key_generated = false;
-
- if (!s_padding_key_generated) {
- // This just needs to be consistent within a single browser session, so we
- // generate it the first time we need it.
- crypto::RandBytes(s_padding_key);
- s_padding_key_generated = true;
- }
+ // This just needs to be consistent within a single browser session, so we
+ // generate it the first time we need it.
+ static const std::array<uint8_t, 16> s_padding_key =
+ crypto::RandBytesAsArray<16>();
DCHECK(!response_url.empty());
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