Closed
Bug 13871
Opened 25 years ago
Closed 24 years ago
Frame spoofing using loading two frames
Categories
(Core :: Security, defect, P1)
Core
Security
Tracking
()
VERIFIED
FIXED
People
(Reporter: joro, Assigned: pollmann)
References
()
Details
(Whiteboard: [rtm++][nsbeta3-][pdtp1] fix in hand)
Attachments
(7 files)
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review |
Build 1999091409 allows frames spoofing using two frames. The idea is: Load the first frame (with TARGET from <A> or <FORM>) with the spoofed location. The location bar changes and it is OK yet. Then load the second frame with its original location - at this moment the location bar changes with that of the original frame and the first frame is spoofed. Advice: Make it as it is in NC 4.61 when TARGET is used another window is opened instead of overwriting an existing frame. The code is: <SCRIPT> a=window.open("http://www.citybank.com"); setTimeout("document.forms[0].submit()",30000); setTimeout("document.forms[1].submit()",35000); </SCRIPT> <FORM ACTION="http://www.mozilla.org/" TARGET="main"> <INPUT TYPE=SUBMIT VALUE="First"> </FORM> <FORM ACTION="http://www.citybank.com/sideThing.htm" TARGET="thing"> <INPUT TYPE=SUBMIT VALUE="Second"> </FORM>
Updated•25 years ago
|
Status: NEW → ASSIGNED
Target Milestone: M14
Updated•25 years ago
|
Summary: Frame spoofing using loading two frames → [Feature] Frame spoofing using loading two frames
Updated•25 years ago
|
Target Milestone: M14 → M16
Bulk moving all Browser Security bugs to new Security: General component. The previous Security component for Browser will be deleted.
Component: Security → Security: General
Updated•25 years ago
|
Summary: [Feature] Frame spoofing using loading two frames → Frame spoofing using loading two frames
Target Milestone: M16 → M17
Comment 4•25 years ago
|
||
Bulk reassigning most of norris's bugs to mstoltz.
Assignee: norris → mstoltz
Status: ASSIGNED → NEW
Comment 7•25 years ago
|
||
Confirmed. Georgi's testcase no longer works; use the above URL instead. I agree that we should open a new window in this case. Nominating nsbeta2.
Comment 8•25 years ago
|
||
Recommend we take Georgi's advice: when a frame which is loaded from a different host as the frameset that contains it does a load with a TARGET attribute, where the target is another frame, we should load in a new window rather than overwriting the frame. This is the behavior 4.x follows. Reassigning to Layout; maybe layout folks know how to do this easier than I.
Assignee: mstoltz → clayton
Status: ASSIGNED → NEW
Component: Security: General → Layout
QA Contact: czhang → petersen
Assignee | ||
Comment 11•25 years ago
|
||
May be a docshell issue because both <A> and <FORMS> generate a link click event, and webshell deals with that, afaik. CC'ing Adam to get his opinion.
Assignee | ||
Comment 12•25 years ago
|
||
Mitchell, per your 2000-06-19 16:37 post, would it be okay to instead of opening up a new window for such a frame, begin searching for the named target frame at children of the highest frame in the hierarchy that is from that host? i.e. Say nyse.com is a frameset website with two frame, "left" and "right" (any similarities between this and existing attacks is purely coincidental ;) ) Say that citibank has links in the frame "left" that target the frame "right". With your scheme, these links will pop open a new window. Instead, if we could target the correct frame "right" we would not need to do that We want citibank to work rationally in this site: INNOCENT SITE mysite.com mysite.com/index.html | ----------------------------- | | "navbar" mysite.com/nav.html "main" citibank.com/index.html | ------------------------------------- | | "left" citibank.com/left.html "right" citibank.com/login.html But not allow this site to grab loads targeted at citibank's "right" frame: MALICIOUS SITE mysite.com mysite.com/index.html | ----------------------------- ------------------------ | | | "navbar" mysite.com/nav.html "main" citibank.com/index.html "right"(hidden) | ------------------------------------- | | "left" citibank.com/left.html "right" citibank.com/login.html One way would be change the way a targetted link in "left" is handled. Instead of beginning the search at the top (mysite.com), travel up the heirarchy from "left" until we hit a frame that has a parent from a different host (we hit "main" in this example). Begin searching for the named target with the children of this frame (children of "main" above). I don't know if this is feasible, but seems to solve the same problem without popping up as many windows. Would this work?
Assignee | ||
Comment 13•25 years ago
|
||
Note that this fix (or any security fix for frame spoofing) is a break with the method recommended in the HTML 4 spec: http://www.w3.org/TR/REC-html40/appendix/notes.html#notes-frames But we have to do it anyway. ;)
Comment 14•25 years ago
|
||
Eric, you're right about us violating the HTML 4 spec, but if this problem is exploied, people will blame us and not the W3C. Your proposal sounds fine to me. In the case of the testcase in the URL field above, the attempt to spoof would still cause a new window to be opened, right?
Assignee | ||
Comment 15•25 years ago
|
||
Do you mean the test case here? http://warp.mcom.com/u/mstoltz/bugs/13871a.html This opens up one new window with a window.open, but when the form is submitted, a new window won't be opened. But then, neither do IE 5 or Nav 4.73 :) I think that's the right behaviour. From what I understand: It's okay to submit a form targetted to a frame that you created, regardless of the URL the form is submitted to - this is equivalent to setting the document.location of that frame to something. As long as the frame was created by your host, it should be able to be changed by your host. Again, from what I understand, what wouldn't be okay is for one site to submit a form to a frame that another site created (target=othersitesframename). It also isn't okay for a site (A) to be able to create a frame that captures form submits that another site (B) intended to go to one of it's own (B) frames. Is that right? CC'ing danm because he has worked with the logic that resolves frame names.
Comment 16•25 years ago
|
||
Eric, When you say, "a frame that another site created," are you including the case where site A does a window.open("site B"), and site B is a frameset containing multiple frames? A should not be able to change the location of one of B's frames in this case, even though A opened the window.
Assignee | ||
Comment 17•25 years ago
|
||
Yes. That's included in what I meant by "a frame that another site created" This is a little different from http://warp.mcom.com/u/mstoltz/bugs/13871a.html because http://warp.mcom.com/u/mstoltz/bugs/13871a.html opens up a window containing a document that is also on warp.mcom.com. If it contained a document on another host, then I agree that http://warp.mcom.com/u/mstoltz/bugs/13871a.html should not be able to update the frames inside of it, including via form submission. It seems that a summary is that when searching for a named frame, we should not cross host-change boundaries in walking upwards to the root frame, or searching downwards from the root frame for the named frame. And as usual, if the named frame is not found, we should open up a new window. Sound right?
Comment 19•25 years ago
|
||
Whoops, my mistake. The target page for 13871a.html is now on a different server. Your explanatiopn sounds right, Eric. Can we implement it that way?
Comment 20•25 years ago
|
||
Putting on [nsbeta2-] radar. Not critical to beta2.
Whiteboard: [nsbeta2-]
Assignee | ||
Comment 21•24 years ago
|
||
This bug has been marked "future" because the original netscape engineer working on this is over-burdened. If you feel this is an error, that you or another known resource will be working on this bug,or if it blocks your work in some way -- please attach your concern to the bug for reconsideration.
Target Milestone: M17 → Future
Comment 22•24 years ago
|
||
Nominating nsbeta3 - please reconsider this bug. This is a security exploit by which a malicious site could replace a frame on another site with a "spoofed" frome from the malicious site, potentially inducing a user to give up a password or other sensitive data. Netscape's exposure on this issue could be significant.
Assignee | ||
Comment 23•24 years ago
|
||
Removing from Future list per above recommendation
Target Milestone: Future → M19
Assignee | ||
Comment 28•24 years ago
|
||
This may already be fixed. I've found 'the' frame spoofing bug that caused Nav 4.51 to go out: http://home13.inet.tele.dk/kruse/frame_spoofing.htm Unfortunately, Citibank's site no longer uses framesets, so this bug can not be demonstrated there. I recreated the old test case here: http://blueviper.mcom.com/frames/spoof.html When we try to do the illegal frame updating, we get this on the console: JavaScript error: line 0: uncaught exception: [Exception... "Access to property denied" code: "1010" nsresult: "0x805303f2 (NS_ERROR_DOM_PROP_ACCESS_DENIED)" location: "http://blueviper.mcom.com/frames/spoof.html Line: 14"] I'll look around to find other spoofing exploits we may be susceptible to.
Status: NEW → ASSIGNED
Whiteboard: [nsbeta3+][pdtp1] → [nsbeta3+][pdtp1] may be worksforme
Assignee | ||
Comment 29•24 years ago
|
||
Oh, yeah - the site in the URL above is still getting spoofed. :) This may only be a problem for the form submit/link click case and not through dom access to the frames[] array.
Whiteboard: [nsbeta3+][pdtp1] may be worksforme → [nsbeta3+][pdtp1]
Assignee | ||
Comment 30•24 years ago
|
||
See the following bugsplat bugs for more info on the fix for 4.5/4.51: https://scopus.mcom.com/bugsplat/show_bug.cgi?id=338737 https://scopus.mcom.com/bugsplat/show_bug.cgi?id=336170 One thing I've learned from looking these over is that the fix went in and was revised several times because it broke existing sites. The sites were broken because the original fix was too restrictive. The fix was relaxed to allow different hosts from the same domain to update each others frames. I've also pinned down Nav's exact behaviour with some test cases, and narrowed down the location where the security check should probably occur. On the way to a fix...
Comment 31•24 years ago
|
||
PDT marking nsbeta3-, nominating for rtm
Keywords: rtm
Whiteboard: [nsbeta3+][pdtp1] → [nsbeta3-][pdtp1]
Comment 32•24 years ago
|
||
Just want to point out that if this is implemented such that different hosts form the same domain can access each other's frames, this behavior is inconsistent with that of cross-frame DOM access, which is granted only to pages from the same host, unless both pages set document.domain to their common factor. Eric, how do you determine "domain?" Are two hosts in .co.uk or mountainview.ca.us considered to be in the same domain?
Assignee | ||
Comment 33•24 years ago
|
||
Mitch, that's exactly what I was wondering! Here's strange, but somehow reasonable logic from XP_ValidateDomain() (Nova branch, internal lxr): http://lxr/nova/source/lib/xp/xp_cntxt.c#269 (origin_host is the full origin host name, e.g. "bugzilla.mozilla.org") ... host_len = strlen(origin_host); // e.g. 20 ... (target_domain is the full target host name, e.g. "mozilla.org") ... int domain_len = strlen(target_domain); // e.g. 11 if((host_len > domain_len) && !(XP_STRCASECMP((origin_host+host_len-domain_len), target_domain)) && (origin_host[host_len-domain_len-1] == '.' || origin_host[host_len-domain_len-1] == '/')){ If I'm reading this right, domain A can change frames in domain B if it is a proper subdomain of B, i.e., bugzilla.mozilla.org can change frames owned by mozilla.org, but NOT vice versa, and bugzilla.mozilla.org can not change frames owned by tinderbox.mozilla.org. Also, that very last line above seems unnecessary: origin_host[host_len-domain_len-1] == '/')){ Seems to say that http://mozilla.org can change frames owned by http://mozilla.org - should be taken care of by the direct comparison above it AND the XP_ValidateOrigin call that preceeds XP_ValidateDomain... There's also extra logic in this routine to allow access if both URL's are file: URL's, and otherwise disallow access unless they are the same protocol. Also, to allow access if EITHER the target frame OR the target frame's parent matches exactly, or matches as the same domain of the origin frame. Does this sound reasonable? I'm not sure exactly what web sites out there we would be breaking if we just turned off access to other hosts period versus this somewhat more relaxed check.
Assignee | ||
Comment 34•24 years ago
|
||
FWIW, I'm not too sure I like this fix from a security standpoint - but I also don't have all the info that the people in 4.5x did when spinning above bugfixes. For example, this means that subdomain providers can still be spoofed: http://spoofer.dyndns.org Can still spoof: http://dyndns.org Mitch, from what you've seen, do you think setting document.domain is widely known enough to put this fix in without the "domain" relaxation above and not break too many sites? I can't think of an easy way to scan the web to see how many sites try to update other named frames as targets of links/form submits where the target and origin are not from the same host... :S
Comment 35•24 years ago
|
||
The logic you quoted above has a flaw: I think it will see "server.britishbank.co.uk" and "server.hackersite.co.uk" as being in the same domain. There's no way to determine what portion of an address constitutes a domain name under the control of a single entity. That's why we restrict access to a single host, with the document.domain exception that requires the cooperation of both pages. Document.domain won't work in this case, becuase setting that property changes the document's principal but not the document's URL. You'd have to do this access check based on principals, not URLs, which may be easier anyway because you can just call principal.Equals() to do the origin comparison. As for your last question, I'm not sure how widely used document.domain is, or whether it's ever been applied to this particular issue. I'm not sure how many sites would break by using a strict same-origin policy either. Vidur may have some idea.
Assignee | ||
Comment 36•24 years ago
|
||
> The logic you quoted above has a flaw: I think it will see > "server.britishbank.co.uk" and "server.hackersite.co.uk" as being in the same > domain. There's no way to determine what portion of an address constitutes a > domain name under the control of a single entity. That's why we restrict I agree completely that there is no way to determine what portion of an address constitutes... :) Just a minor nit though - server.hackersite.co.uk and server.britishbank.co.uk will not be able to modify each other's domain names using the logic in: http://lxr/nova/source/lib/xp/xp_cntxt.c#269 Though server.hackersite.co.uk is a longer string by one character than server.britishbank.co.uk, when we do a strcmp starting at the second character of server.hackersite.co.uk there will not be a match. Also, the first extra character is not a dot. An example that demonstrantes the relaxation is: foo.server.britishbank.co.uk ---- can target ----> server.britishbank.co.uk It's important to note that foo.server.britishbank.co.uk is a longer hostname than server.britishbank.co.uk, and has "something dot" before server.britishbank.co.uk, which is what the logic there checks for.
Comment 37•24 years ago
|
||
So, If I'm understanding you, my.netscape.com could reload a frame owned by netscape.com, and vice versa perhaps, but my.netscape.com cannot reload a frame oned by webmail.netscape.com? One is not a subdomain of the other. Is this what you're intending? It seems like an incomplete solution.
Assignee | ||
Comment 38•24 years ago
|
||
That's right. my.netscape.com can reload a frame owned by netscape.com, but not vice versa. Sorry if my wording indicates that this is what we *should* do for Netscape 6 - that's not what I meant to say. :) I was just investigating and stating what Netscape 4.5x+ does. I defer to folks with a broader view on security to what the correct behavoiur of Netscape 6 should be. (And it sounds like you lean towards a strict host comparison, right?)
Comment 39•24 years ago
|
||
Eric, Yes, but I'm paranoid. Breaking a lot of sites is not going to help our competitiveness. I think we need another opinion. The "subdomain" solution seems like it should be secure, but maybe overly restrictive - home.netscape.com would be denied access to webmail.netscape.com, for example. But then again, since we can't really determine what part of the URL constitutes the 'domain,' maybe this is reasonable. I'd be okay with the subdomain solution.
Comment 41•24 years ago
|
||
Marking [rtm need info] Waiting for patch to be attached, review + super-review.
Whiteboard: [rtm+][nsbeta3-][pdtp1] → [rtm need info][nsbeta3-][pdtp1]
Assignee | ||
Comment 42•24 years ago
|
||
Assignee | ||
Comment 43•24 years ago
|
||
CC'ing Rick because the spoofing fix is entirely in the URI loader (possibly the validate origin calls will be in the security manager). I've attached a really rough outline of what I plan to do above. I'll need to implement the validateOrigin routine, but it will be a near cut and paste of the one in the 4.x codebase (allowing subdomains to target frames from this domain.)
Component: Layout → Security: General
OS: Windows 95 → All
Hardware: PC → All
Assignee | ||
Comment 44•24 years ago
|
||
Assignee | ||
Comment 45•24 years ago
|
||
Okay, I implemented a patch and did a bit of testing - it turns out that Nav's behaviour is not what I had gotten from reading the source code for the Nova codebase. I sat there and ran the two browsers side by side (4.x versus 6 with this patch), and lo and behold... Mitch, you were right all along, Nav actually only allows one frame to update another if there is the two hosts are an exact match. :) I implemented this behaviour. (Tried the more complex 'subdomain' stuff - it was all wrong) This patch is controllable by a pref and off by default, to turn it on, you must add this line to your prefs.js: user_pref("browser.frame.validate_origin", true); This is identical to the pref in 4.x. (I think, again, I got this from reading source in the 4.x base...) I did lots of testing with frames nested inside of frames, popping open windows, submitting forms, setting timers, file: urls. I have not yet tested document.domain and other protocols (https, ftp, javascript, ...) At this point, I'd love any comments, suggestions, testing, and if you like the patch, reviews, super reviews, approvals. It's not that big of a change - about 120 lines (many are comments) that break down to two new static methods in nsURILoader, changes in nsURILoader::GetTarget, and very minor changes in OpenURLVia and the constructor. (compare with the length of my ramblings on this bug report) ;)
Assignee | ||
Updated•24 years ago
|
Whiteboard: [rtm need info][nsbeta3-][pdtp1] → [rtm need info][nsbeta3-][pdtp1] fix in hand
Assignee | ||
Comment 46•24 years ago
|
||
Rick Potts was kind enough to give me a review and an r= for this patch.
Assignee | ||
Comment 47•24 years ago
|
||
Assignee | ||
Comment 48•24 years ago
|
||
Sometime while sleeping last night, I realized that the way I was comparing hosts yesterday (PL_strcmp of the hostname) was not only adding needless complexity, but also was not as correct as just calling Equals() on the principal. This new patch fixes a bug with my previous patch, and makes it simpler at the same time. The bug was that if one frame comes from https on host foo.bar.com and tries to update a frame from http on foo.bar.com, Nav 4.x does *not* allow the update but we did with patch 1. patch2 fixes this problem. The only thing I still need to test is document.domain setting to make sure that works.
Assignee | ||
Comment 49•24 years ago
|
||
Here's more info on the fix - I attempted to retract my post to the newsgroup, but at any rate, here it is: Summary: In a targetted load <a target=foo>, we already do a search for the frame or window that has that name. Now, once we've found it: - Compare the principals of the origin and target frames. - If they are not the same, send the load to a new window. - This fix is controllable by a pref (same as in Nav 4.x). - I defaulted the pref to false (insecure, like IE) but Nav defaults to true (secure). This is to minimize risk, but can be easily changed. Details: 1) Preference checking: Add member variable ValidateOrigin to URILoader This is a boolean variable that will represent the state of the pref "browser.frame.validate_origin" This is a pref with no UI, so it must be manually set by editing prefs.js. It is the same pref that Nav 4.x uses to turn on and off this behaviour (I have verified this with 4.73) Initialize the member variable in the URILoader constructor. My patch currently defaults to false, so if either the prefs service can not be obtained, or this pref is not manually set in the prefs.js file, we will default to insecure behaviour. This is easy to change (one line) to default to secure if that is preferred. I chose to default to false because there is some risk associated with this fix. It is possible that some sites are relying on the insecure default behaviour of Internet Explorer to load pages into frames that are owned by a sister site. With this fix turned on by default, we would not be breaking these sites, but forcing the insecure loads into a new window. This is possibly unexpected behaviour for a user of Internet Explorer, but does not limit functionality and is the same as the behaviour as Nav 4.x 2) Doing the security check: Add an extra security check to URILoader::GetTarget() In GetTarget, if we find a target frame with given name, and the pref is set, we will now do an additional security check. If we pass the check we allow the load to continue normally. If we fail the check, we change the target to "_blank" to send the load to a new window. The check is straight forward: Compare principals of origin and target frames? Same: check passed. Different: get parent of target frame? No parent found: target is toplevel frame, check passed. Parent found: Compare principals of origin and target parent frame? Same: check passed. Different: check failed. If the check succeeds, we allow the load to proceed into the target frame as usual. If the check fails, we return the window context of the origin frame. Next, we set the target name to "_blank". These two changes cause the load to be treated exactly as if it had been originally targeted a "_blank" and it will go to a new window, just as Nav 4.x does. When getting the parent of the target frame, I call GetSameTypeParent to avoid going up into chrome. 4) Allowing the load to be retargetted at a new window: Changed the arguments to GetTarget to allow modification of the target name Before my change, in OpenURIVia a const char* was passed to GetTarget. GetTarget would then set the window context as appropriate. OpenURIVia would then send this same const char* to the loader's Open method, along with the found window context. After my change, we pass an nsCAutoString into GetTarget. GetTarget can then modify the string as described above, to load "_blank". OpenURIVia passes this possibly modified string to the loader's Open method, along with the found window context. 5) Two new static helper functions in nsURILoader.cpp: Bool ValidateOrigin(DocShellTreeItem origin, DocShellTreeItem target) originPrincipal = GetPrincipal(origin) targetPrincipal = GetPrincipal(taret) return targetPrincipal->Equals(originPrincipal); GetPrincipalFromTreeItem(DocShellTreeItem treeItem, Principal principal) DOMdocument = treeItem->GetInterface(nsIDOMDocument) document = DOMdocument->QueryInterface(nsIDocument) document->GetPrincipal(principal) Testing: I've nearly completed some exhaustive testing, which I'll send an email about later. If you'd like to check out the various test cases, they can be found at: http://302easyst.net/~pollmann/bugs/spoof To enable leveraging of the testcases there, I mapped *.302easyst.net and dsl.pollmann.net to the same IP address, and am also running an https server on that machine, so you can try many permutations on the test cases coming from various hosts, domains, subdomains, and protocols. For far all testing has been successful. With the pref false we act as we did before (same as IE), and with the pref true, we act the same as Nav 4.x.
Assignee | ||
Comment 50•24 years ago
|
||
> The only thing I still need to test is document.domain setting to make sure
> that works.
I just found one difference between Nav 6 with the patch and Nav 4.x
Specifically, if we have this:
Origin host is bar.foo.com
Target host is baz.foo.com, document.domain='foo.com'
Nav will allow origin host to change target host in this case - this is where
the "subdomain" stuff I found in the 4.x codebase comes in - it is only used if
you set document.domain, hmmm...
This means with the patch we are more strict in the way we handle an explicitly
set document.domain than Nav 4.x is. Since I don't know why Nav chose to do
this, I can only guess it is because some sites required it. I'll look into a
fix.
Assignee | ||
Comment 51•24 years ago
|
||
Assignee | ||
Comment 52•24 years ago
|
||
Updated patch includes one change. Before, in GetTarget, if the two document principals were not equal, we would force the load into a new window. Now, we check to see if document.domain is set in the target. If it is, we check to see if the origin document comes from a subdomain of that domain. If it does we allow the load. If it is not from a subdomain, we still force the load into a new window. This makes us behave like Nav 4.x in the above mentioned case. I've also retested all of the other cases (well most of them, there are hundreds if testing all permutations) and we're still the same as Nav 4.x in those as well.
Comment 53•24 years ago
|
||
Patch looks good to me. r=mstoltz. Hope it isn't too late to get this into rtm, considering all the work eric put into it. It it is too late, let's make sure this gets into the trunk.
Assignee | ||
Comment 54•24 years ago
|
||
Mitch, per your review, would you recommend the default for this pref be false (insecure, as it is now, like IE), or true (secure, like nav)?
Comment 55•24 years ago
|
||
Eric, Since they pay me to be paranoid, I would recommend the check be turned on by default. I guess it really depends on how many sites we break, and whether that breakage is worse than the potential for spoofing. Do you have any idea about this? Do any top sites depend on this behavior? I'll take a look myself.
Assignee | ||
Comment 56•24 years ago
|
||
Well, if they work in Nav they *should* work in NS 6 with the fix. Every test case I came up with works just like Nav with the fix turned on.
Comment 57•24 years ago
|
||
Right - so if we're reimplementing 4.x behavior with the pref turned on, then why don't we turn it on by default?
Comment 58•24 years ago
|
||
Couple random comments, one of which I asked in email form already: 1) You added some special case code for imap and mailbox urls. Do we need to include a case for news urls as well? 2) Chrome urls --> chrome urls run through the uriloader too. Will changing GetTarget to now perform this validate origin check be triggered for every chrome url? If so, is there a way (and is it okay) to circumvent this code for local chrome? I'm thinking of the things like the throbber icon image which get loaded over and over again.
Comment 59•24 years ago
|
||
Eric, can you send me the diffs (-u) directly? For some reason, saving the attachment to my drive and applying the patch keeps failing. I'm not sure why yet.
Assignee | ||
Comment 60•24 years ago
|
||
> 1) You added some special case code for imap and mailbox urls. Do we need to
> include a case for news urls as well?
From my email reply:
Good question - I'm not familiar with the reasons behind that check. I think
Mitch might be able to answer your question. If we do decide to add "news"
urls, we should add them to both places. Really, that would be orthogonal to
the spoofing bugfix...
Assignee | ||
Comment 61•24 years ago
|
||
> 2) Chrome urls --> chrome urls run through the uriloader too. Will changing
> GetTarget to now perform this validate origin check be triggered for every
> chrome url? If so, is there a way (and is it okay) to circumvent this code for
> local chrome? I'm thinking of the things like the throbber icon image which
> get loaded over and over again.
I set a breakpoint in GetTarget and loaded a few pages. I never see it being
called until I click on a <A HREF TARGET="foo">. I can't tell you for certain
that there are no targetted links in Chrome, but I haven't seen any - they seem
to be unusual.
Comment 62•24 years ago
|
||
The imap/mailbox check is explained by the comment on the following line: Unlike http URLs, each mail message should be considered a distinct trust domain, so instead of checking only scheme://host:port we need to check the whole url. Yes, this should apply to news as well.
Comment 63•24 years ago
|
||
I'm going to go ahead and give the sr for this change. I've been running with Eric's diffs and I'm not seeing any regressions caused by them. Mail still behaves okay and so does the browser for normal stuff. Eric, can you add a check for "news:" as well? mstoltz, I wasn't able to trigger this new code path at all for mail. What can I do to test that path out? I guess I don't see any mail urls that retarget to another window.
Assignee | ||
Comment 64•24 years ago
|
||
Oh, didn't see this was already sr'd. Thanks, Scott! I'll add the "news:" check (per Scott's review) and turn on by default (per Mitch's recommendation). I'll attach a final cvs diff -u in a moment...
Whiteboard: [rtm need info][nsbeta3-][pdtp1] fix in hand → [rtm+][nsbeta3-][pdtp1] fix in hand
Assignee | ||
Comment 65•24 years ago
|
||
Assignee | ||
Comment 66•24 years ago
|
||
Drat, just found a problem with that patch... We are being too strict if the *origin frame* set it's document.domain :S I am working on a fix. Sorry all...
Assignee | ||
Updated•24 years ago
|
Whiteboard: [rtm+][nsbeta3-][pdtp1] fix in hand → [rtm need info][nsbeta3-][pdtp1] fix in hand
Comment 67•24 years ago
|
||
Try loading the testcase page above, mailing it to yourself using "Send Page," and reading the mail message. That should test the mail case.
Assignee | ||
Comment 68•24 years ago
|
||
Assignee | ||
Comment 70•24 years ago
|
||
Patch 4 addresses 2 additional edge cases to reduce chances of regressions: 1) Origin frame sets document.domain We were comparing the origin frame's principal URI with the target frame's principal URI. We now instead compare the origin frame's document URI with the target frame's principal URI. This is what Nav does and prevents, e.g. myhost.netscape.com from being able to target a frame from http://netscape.com just by setting document.domain to netscape.com 2) Target document sets document.domain to same host as the target document This is what Nav does and allows, e.g. target document http://netscape.com to set document.domain="netscape.com" to allow myhost.netscape.com to target it's frame (before I was comparing principalURI with documentURI, which would see they were the same and not do the subdomain check)
Assignee | ||
Comment 72•24 years ago
|
||
Thanks for the r= and sr=. I'm marking it rtm+ now so PDT can decide if this will go into the branch.
Whiteboard: [rtm need info][nsbeta3-][pdtp1] fix in hand → [rtm+][nsbeta3-][pdtp1] fix in hand
Comment 73•24 years ago
|
||
This patch is pretty big to land on the branch directly. If you think it's *really critical*, maybe you could try it on the trunk and then do some serious testing. Marking [rtm need info] until trunk test results are available.
Whiteboard: [rtm+][nsbeta3-][pdtp1] fix in hand → [rtm need info][nsbeta3-][pdtp1] fix in hand
Assignee | ||
Comment 75•24 years ago
|
||
This has been cooking on the trunk for a few days with no reported adverse effects. Resubmitting to PDT for consideration. A simplified, equivalent fix is also available, which I will attach (removes DOM changes, reviewed by Johnny and Vidur)
Whiteboard: [rtm need info][nsbeta3-][pdtp1] fix in hand → [rtm+][nsbeta3-][pdtp1] fix in hand
Assignee | ||
Comment 76•24 years ago
|
||
Comment 77•24 years ago
|
||
rtm++ for the simplified patch
Whiteboard: [rtm+][nsbeta3-][pdtp1] fix in hand → [rtm++][nsbeta3-][pdtp1] fix in hand
Assignee | ||
Comment 78•24 years ago
|
||
Fix checked into the branch and trunk. To verify, go to the above test case or: http://302easyst.net/~pollmann/bugs/spoof/6 A new window will open up. If you click on either of the buttons in the original window (any of the top four on 302easyst), the load should open up an additional new window instead of going to the existing window that popped up. Clicking on the fourth button at 302easyst.net should load into the window that popped up. There are more test cases here: http://302easyst.net/~pollmann/bugs/spoof/ https://302easyst.net/~pollmann/bugs/spoof/ http://media.302easyst.net/~pollmann/bugs/spoof/ http://big.media.302easyst.net/~pollmann/bugs/spoof/ http://server.302easyst.net/~pollmann/bugs/spoof/ http://dsl.pollmann.net/~pollmann/bugs/spoof/ Basically, walking through each of these test cases should do the same thing in Mozilla as it does in 4.75, if you view the pages in both browsers side by side. The one exception I noticed was loading a file: URL from an http: URL does nothing in Mozilla, which is also the case in builds that don't include the change.
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
Comment 80•24 years ago
|
||
Verified on the 11/27 Mac, Linux and Win32 trunk builds.
Status: RESOLVED → VERIFIED
Updated•24 years ago
|
Group: netscapeconfidential?
You need to log in
before you can comment on or make changes to this bug.
Description
•