[21] postMessage extends user gesture token lifetime
Severity: Medium / Medium | Component: WebCore LocalDOMWindow | 4f82ed3, 2050ddd
Medium으로 평가됩니다. diff는 LocalDOMWindow::processPostMessage 내 UserGestureToken::hasExpired에 존재하던 TOCTOU를 수정합니다. 만료 확인과 gesture 소비 지점이 분리되어 있어, 두 시점 사이에 실제 시간이 경과할 수 있었습니다. 그 결과 1초를 방금 넘긴 token이 MessageEvent dispatch 중 UserGestureIndicator에 설치되는 상황이 가능했고, 이는 popup-blocker bypass로 이어질 수 있는 문제입니다.
두 commit은 동일한 수정을 각기 다른 브랜치에 반영한 것으로, 하나는 다른 쪽의 신속한 backport입니다. processPostMessage에서는 UserGestureIndicator 생성 직전에 userGestureToForward->hasExpired(maximumIntervalForUserGestureForwarding) 검사가 추가되어 재확인하도록 수정되었습니다.
Source/WebCore/page/LocalDOMWindow.cpp
if (userGestureToForward && userGestureToForward->hasExpired(UserGestureToken::maximumIntervalForUserGestureForwarding))
userGestureToForward = nullptr;
+ if (userGestureToForward && userGestureToForward->hasExpired(UserGestureToken::maximumIntervalForUserGestureForwarding))
+ userGestureToForward = nullptr;
+
UserGestureIndicator userGestureIndicator(userGestureToForward);
시간 기반 freshness predicate에 대한 TOCTOU: user-gesture 만료 확인 지점과 gesture 소비 지점이 분리되어 있었고, 그 사이에 실제 시간이 경과하는 것이 가능했습니다.
HTML/WebKit 정책상 전달된 gesture는 원래 상호작용으로부터 maximumIntervalForUserGestureForwarding(1초) 이내에서만 유효합니다. 패치 이전에는 검사가 소비 지점을 감싸지 않았기 때문에, 이 제한이 조용히 초과될 수 있었습니다. 이번 패치는 검사를 그대로 중복 추가하는 최소한의 수정입니다. 보다 근본적인 해결책은 해당 검사를 UserGestureIndicator의 constructor 안으로 이동시키는 것입니다.
Aa Aaaaaa Aa Aa Aaa Aaa Aa Aaa Aa Aaa Aaa Aaa Aaaaaaa Aaaaaa Aaaa Aa a Aa Aa Aaaaa Aaaaaaaaaaaaa Aaaa Aaaaa Aaaaa Aaaaaaaaaaaaa Aaaaa Aa Aaaaaaaa a Aaaaaaaaaaaaa Aaaa Aa Aaaaaa Aaaa Aa Aaa a Aa Aaaa Aaaaa
a Aaaaaaaaaaaaaa Aaa Aa Aaaa Aaaa Aaaaaaaaaaaa Aaaaa Aaaaaaaaa Aaaaaaa
🔒How a one-line duplicated check restores the user-gesture forwarding cap, and the broader policy-bypass primitives at stake.
더 확인하려면 구독해 주세요
Audit directions
a Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aa Aaa Aa Aaa Aa Aaa Aaaaa Aaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaa Aaa Aaaa Aaa Aaaaaa Aaaaa Aaaaaaaaaa Aaaaaaa Aaaaaaaaaa Aaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaa Aaa Aaaa Aaa a Aaaaa
a Aaaaa Aaa Aa Aaaa Aaaaaaaaaa Aaaaaaaa Aaaaaaaaaaaa Aaaaaaaaaaaaaaaaa Aaaaaaaaaaaaa Aaaaaaaaaaaaaaa Aaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaa Aa Aaa Aaa Aaaaaa
a Aaaaaaaaaaaa Aaaaa Aa Aaaaaa Aa Aaaa Aaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaa Aaaaaaaaaaaaa Aaaaaaaaaaaa Aaa Aaaaa Aa Aaa Aaaaaa Aaaa Aaa Aa Aaa Aaaaaa
a Aaaa Aaaaaaaaaaa Aaaaaa a a a a a Aaa Aaaa Aaa Aaa Aaa Aa Aaa Aaa Aa Aa Aa Aaaaaaaaaaaaaa Aaaa Aaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaa Aa Aaa Aa Aaaaa Aaaaa Aaaaaaa
🔒Multiple audit patterns identified for time-based capability tokens and RAII gesture helpers across WebKit, with concrete starting points for variant discovery.
더 확인하려면 구독해 주세요