← Chrome — 2026-W39

c53fe9e04b2856967d1f2f716b99b0911251e521  [Autofill] Prevent textarea preview from leaking overflow geometry

severity low class InfoDisclosure CVSS 4.3 signal score 4.5 third_party/blink/renderer/core/ AI review CONFIRMED
Structural signals: msg_medium (+2.0), area:third_party/blink/renderer/core/ (+2.5)

The bug at a glance

Before the user accepts an Autofill suggestion, a page could measure the hidden preview text of a through layout side channels (clientWidth shrinking when an auto scrollbar appears, scrollable overflow, and scroll events after setScrollTop). This leaks properties such as length and wrapping of stored Autofill data. The attack needs the user to show a suggestion preview, and it leaks geometry rather than the raw text, so medium.

Autofill preview values are meant to stay unreadable to the page until the user commits them. A malicious form can use a textarea to probe the preview’s geometry and infer stored user data (for example address lines) the user never chose to fill.

Root cause

The textarea Autofill preview is drawn into the UA shadow placeholder div (::-internal-input-suggested). Unlike the input version, its UA style did not clip overflow or cap its size, so long preview text grew the textarea’s scrollable overflow. That caused an auto scrollbar (changing clientWidth/clientHeight) and let setScrollTop/setScrollLeft actually scroll and fire scroll events. The fix adds max-inline-size/max-block-size 100% and overflow:hidden to textarea::-internal-input-suggested so preview content never adds to scrollable overflow.

Key code

UA stylesheet clips the textarea Autofill preview so it cannot change scroll geometry

+textarea::-internal-input-suggested {
+    max-inline-size: 100%;
+    max-block-size: 100%;
+    overflow: hidden;
+}

Patch walkthrough

  • third_party/blink/renderer/core/html/resources/html.css — Adds a UA rule that limits the textarea preview placeholder to the content box with overflow hidden. This removes the geometry and scroll side channels that showed preview text properties to page script.
  • third_party/blink/renderer/core/html/forms/html_text_area_element_test.cc — New test AutofillPreviewScrollSideChannelsLeak sets a long suggested value. It asserts clientWidth, clientHeight and offsetHeight stay unchanged and that setScrollTop/setScrollLeft leave the scroll offset at zero during preview.

Background

Autofill preview (suggested value) — When the user hovers or arrows over an Autofill suggestion, Blink shows the candidate value in a UA shadow element that page script cannot read directly.

::-internal-input-suggested — Internal UA pseudo-element for the shadow placeholder div that renders the suggested (preview) value.

Layout side channel — Script-observable geometry (clientWidth, scroll offsets, scroll events) can encode properties of content the page should not be able to read.

Vulnerability window

  1. Reachability — Ordinary web content in a stock build that has a textarea the browser offers Autofill suggestions for. It needs a user gesture: the user opens and highlights a suggestion so the preview renders.
  2. Trigger — Long preview text overflows the unclipped placeholder, adds an auto scrollbar and scrollable overflow, and changes clientWidth and scroll behavior.
  3. Primitive — The page polls geometry or sets scrollTop and watches for scroll events while the preview is shown, and learns coarse properties (for example length or line count) of the stored value (inferred).
  4. Escalation — Repeated probing across fields or with tuned widths and fonts could narrow down user data the user never submitted (inferred).

Proof of concept

Conceptually: a page with a narrow, auto-overflow textarea that is eligible for Autofill watches clientWidth and scroll events while the user previews a suggestion. A change shows the preview text overflowed, which reveals properties of the hidden value. No code is provided.

Exploitation

  1. Lure — The page gets the user to interact with a form so Autofill suggestions appear and are previewed (inferred).
  2. Measure — Script samples textarea geometry or scroll state during the preview to infer properties of the stored value (inferred).

Detection & hunting

For defenders and detection engineers:

  • grep -n “internal-input-suggested” third_party/blink/renderer/core/html/resources/html.css — Check that every element type that shows a suggested value has clipping (overflow: hidden plus size caps) in the UA stylesheet.
  • Page JS reading clientWidth/scrollTop on form fields in a tight loop or inside focus/keydown handlers — In web-content telemetry, flag pages that probe form-control geometry while Autofill UI is shown.

Audit directions

  • Other SetSuggestedValue / preview render paths (contenteditable, select, date inputs, password manager previews) — Check whether preview text can change script-visible layout (size, scroll, intersection, resize observers) before the user accepts it.
  • ResizeObserver / IntersectionObserver on form controls during preview — Confirm the preview shadow content cannot change observed boxes, which would be a parallel geometry side channel.

Before / after

Loading diff…