Index: chrome/browser/chrome_content_browser_client.cc |
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc |
index 18dd4c317acea99346143bccf39206e1b75a18cc..635a59ce479d20aa601d709df3dffcc0d0b6ffbf 100644 |
--- a/chrome/browser/chrome_content_browser_client.cc |
+++ b/chrome/browser/chrome_content_browser_client.cc |
@@ -1150,6 +1150,17 @@ bool ChromeContentBrowserClient::ShouldAllowOpenURL( |
extension, url.path())) |
return false; |
} |
+ |
+ // Do not allow chrome://chrome-signin navigate to other chrome:// URLs, since |
+ // the signin page may host untrusted web content. |
+ if (from_url.GetOrigin().spec() == chrome::kChromeUIChromeSigninURL && |
+ url.SchemeIs(content::kChromeUIScheme) && |
+ url.host() != chrome::kChromeUIChromeSigninHost) { |
+ VLOG(1) << "Blocked navigation to " << url.spec() << " from " |
+ << chrome::kChromeUIChromeSigninURL; |
+ return false; |
+ } |
+ |
return true; |
} |