← All issues

[27] PerformanceEventTiming UA-shadow-DOM leak

Severity: Low | Component: WebCore Performance API | 91afa18

Rated Low because the diff fixes a UA-shadow-DOM encapsulation leak in PerformanceEventTiming.target: when no author listener was registered, the entry stored an un-retargeted node from inside <input>'s shadow tree, giving script a reference to internal implementation nodes — information disclosure, no memory primitive.

Source/WebCore/page/LocalDOMWindow.cpp

- entry.target = event.target();
+ if (RefPtr targetNode = dynamicDowncast<Node>(event.target()))
+ entry.target = targetNode->document().retargetToScope(*targetNode).get();
+ else
+ entry.target = event.target();

Failure to apply the spec-required shadow-DOM retargeting step when recording a node reference on a Performance API entry.

🔒

How a Performance API entry can quietly bypass the DOM's normal shadow-boundary sanitization, and what an attacker gains when it does.

Subscribe to read more

🔒

Multiple reusable audit patterns for finding other Performance/observer entry points that capture node references without applying the spec's retargeting step.

Subscribe to read more