New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 600182 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: Apr 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 1
Type: Bug-Security



Sign in to add a comment

Security: Universal XSS using deferred history loads

Reported by marius.mlynski@gmail.com, Apr 3 2016

Issue description

VULNERABILITY DETAILS
When a ScopedPageLoadDeferrer is destroyed, the deferring state is updated on the associated pages and loaders. If any history load was set aside during the event loop the deferrer has been protecting, it's processed during the update without checking if navigation is allowed on the frame:

----------------
void FrameLoader::setDefersLoading(bool defers)
{
(...)
    if (!defers) {
        if (m_deferredHistoryLoad) {
            load(FrameLoadRequest(nullptr, m_deferredHistoryLoad->m_request),
                m_deferredHistoryLoad->m_loadType, m_deferredHistoryLoad->m_item.get(),
                m_deferredHistoryLoad->m_historyLoadType);
            m_deferredHistoryLoad.clear();
        }
        m_frame->navigationScheduler().startTimer();
        scheduleCheckCompleted();
    }
}
----------------

This opens an avenue for an attacker to bypass the FrameNavigationDisabler.

VERSION
Chrome 49.0.2623.110 (Stable)
Chrome 50.0.2661.57 (Beta)
Chrome 51.0.2693.2 (Dev)
Chromium 51.0.2698.0 + Pepper Flash (Release build compiled today)
 
exploit.zip
4.8 KB Download
Cc: nasko@chromium.org dcheng@chromium.org
Components: UI>Browser>Navigation Blink>Loader
Labels: Security_Severity-High Security_Impact-Stable M-49 OS-All
Owner: creis@chromium.org
Status: Assigned (was: Unconfirmed)
Cc: -dcheng@chromium.org creis@chromium.org japhet@chromium.org
Owner: dcheng@chromium.org
japhet@, what do you think about just moving the FrameNavigationDisabler check into FrameLoader::load()? We're just playing whack-a-mole here.
Labels: Pri-1
I'm willing to try it. Does it pass tests?
I have no idea if it passes tests, but the only places we instantiate the scoper are before firing XHR abort events when committing a provisional load and inside Document::detach. Both definitely seem like places where we never want to load something.
Cc: kinuko@chromium.org clamy@chromium.org
Status: Started (was: Assigned)
Project Member

Comment 7 by bugdroid1@chromium.org, Apr 5 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/73563fee12defb21a8f955993b68907169e1ea6d

commit 73563fee12defb21a8f955993b68907169e1ea6d
Author: dcheng <dcheng@chromium.org>
Date: Tue Apr 05 22:39:27 2016

Move isNavigationAllowed() check to main entry point for loads.

Also document the difference between the two types of navigation
disablers and how they should be used.

BUG= 600182 

Review URL: https://codereview.chromium.org/1858833003

Cr-Commit-Position: refs/heads/master@{#385306}

[modify] https://crrev.com/73563fee12defb21a8f955993b68907169e1ea6d/third_party/WebKit/Source/core/frame/LocalFrame.cpp
[modify] https://crrev.com/73563fee12defb21a8f955993b68907169e1ea6d/third_party/WebKit/Source/core/loader/FrameLoader.cpp
[modify] https://crrev.com/73563fee12defb21a8f955993b68907169e1ea6d/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp

Labels: Merge-Request-49
Status: Fixed (was: Started)
We should probably merge this, but I know there's some concerns due to the fix just landing today. I'll apply the merge request labels anyway and let people figure it out.
timwillis@, what would you like to do about this merge? I leave this one up to you, since you understand the issue better than me. Please let govind@ know so she can trigger a RC.
Cc: timwillis@chromium.org
Adding timwillis@ to the bug.
Labels: -Merge-Request-49 Merge-Request-50
OK, I just talked with timwillis@. We'll just merge this to M50. Merging this to M49 is too uncomfortably exciting.
Thank you dcheng@ and timwillis@.
Project Member

Comment 13 by ClusterFuzz, Apr 6 2016

Labels: -Restrict-View-SecurityTeam Restrict-View-SecurityNotify

Comment 14 by tin...@google.com, Apr 6 2016

Labels: -Merge-Request-50 Merge-Review-50 Hotlist-Merge-Review
[Automated comment] Less than 2 weeks to go before stable on M50, manual review required.

Comment 15 by tin...@google.com, Apr 7 2016

Labels: -Merge-Review-50 Merge-Approved-50
Merge approved for M50 (branch 2661). Pls go ahead merge.
Please merge your change to M50 branch 2661 by 5:00 PM PST on April 8th,Friday to make into the desktop Stable final build cut. Thank you.
Project Member

Comment 17 by bugdroid1@chromium.org, Apr 7 2016

Labels: -merge-approved-50 merge-merged-2661
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a3a744f56382c972e1627fe9ee03fbcab4923582

commit a3a744f56382c972e1627fe9ee03fbcab4923582
Author: Daniel Cheng <dcheng@chromium.org>
Date: Thu Apr 07 22:50:15 2016

Move isNavigationAllowed() check to main entry point for loads.

Also document the difference between the two types of navigation
disablers and how they should be used.

BUG= 600182 

Review URL: https://codereview.chromium.org/1858833003

Cr-Commit-Position: refs/heads/master@{#385306}
(cherry picked from commit 73563fee12defb21a8f955993b68907169e1ea6d)

Review URL: https://codereview.chromium.org/1873583002 .

Cr-Commit-Position: refs/branch-heads/2661@{#514}
Cr-Branched-From: ef6f6ae5e4c96622286b563658d5cd62a6cf1197-refs/heads/master@{#378081}

[modify] https://crrev.com/a3a744f56382c972e1627fe9ee03fbcab4923582/third_party/WebKit/Source/core/frame/LocalFrame.cpp
[modify] https://crrev.com/a3a744f56382c972e1627fe9ee03fbcab4923582/third_party/WebKit/Source/core/loader/FrameLoader.cpp
[modify] https://crrev.com/a3a744f56382c972e1627fe9ee03fbcab4923582/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp

Labels: reward-topanel Release-0-M51
Labels: -reward-topanel reward-unpaid CVE-2016-1675 reward-7500
I feel a little like Captain Obvious, so why not let him explain it? 
https://media.giphy.com/media/3o7abGogJwT2eHXDKE/giphy.gif

I'll add it to your tab :)
Labels: reward-inprocess
Labels: -reward-unpaid
Project Member

Comment 22 by sheriffbot@chromium.org, Jul 13 2016

Labels: -Restrict-View-SecurityNotify
This bug has been closed for more than 14 weeks. Removing security view restrictions.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Project Member

Comment 23 by sheriffbot@chromium.org, Oct 1 2016

This bug has been closed for more than 14 weeks. Removing security view restrictions.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Project Member

Comment 24 by sheriffbot@chromium.org, Oct 2 2016

This bug has been closed for more than 14 weeks. Removing security view restrictions.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Labels: allpublic
Labels: CVE_description-submitted

Sign in to add a comment