Opened at 2009-10-28T04:03:18Z
Last modified at 2013-09-14T17:39:49Z
#821 assigned defect
A script in a file viewed through the WUI can obtain the file's read cap
Reported by: | davidsarah | Owned by: | davidsarah |
---|---|---|---|
Priority: | major | Milestone: | soon |
Component: | code-frontend-web | Version: | 1.5.0 |
Keywords: | newcaps newurls confidentiality capleak websec | Cc: | |
Launchpad Bug: |
Description (last modified by zooko)
http://allmydata.org/trac/tahoe/ticket/98#comment:22
A script (such as JavaScript) in an [X]HTML file viewed through the WUI can obtain the read cap for that file. For an immutable file, this is not much of a problem because the script can read the contents of the file anyway. However, for a mutable file, it can also read any future version, which is a violation of the Principle of Least Authority.
Change History (13)
comment:1 Changed at 2009-10-28T04:36:19Z by davidsarah
comment:2 Changed at 2009-10-28T05:03:18Z by zooko
- Resolution set to duplicate
- Status changed from new to closed
This is a duplicate of #615 (Can JavaScript loaded from Tahoe access all your content which is loaded from Tahoe?). Perhaps David-Sarah, who is an expert on such things, could retitle #615 and copy in their comments from this ticket.
comment:3 Changed at 2009-10-28T06:08:49Z by davidsarah
- Resolution duplicate deleted
- Status changed from closed to reopened
It's not really a duplicate, because #615 is about scripts from one page having access to other pages. If #615 were fixed, this issue would remain, since it isn't dependent on the same-origin policy. That is, even if we were to put every page in a different origin, a script would still be able to access its own URL -- and therefore future versions of its file if this bug is not fixed.
In a sense, #615 masks this bug, because it allows an attack that is a superset of this one. So I think we should leave this ticket open and reference it from #615.
comment:4 Changed at 2009-10-28T06:38:38Z by davidsarah
If you like this bug, you might also like #127, about cap leakage via the HTTP Referer header.
comment:5 Changed at 2009-10-28T06:49:32Z by davidsarah
http://allmydata.org/pipermail/tahoe-dev/2007-September/000134.html
After the cap-talk meeting, Brian and I agreed -- I thought -- not to bother making the URL field read-only, and instead to document the fact that sharing a URL will (by default) share write access to your directory as well as read access.. Apparently Brian remains interested in a JavaScript hack to read-only-ify URLs after loading them.
When using the WUI, is it only for directories that the URL will represent a write cap? (Directory listings do not contain untrusted scripts, so this bug shouldn't be a problem in the directory case.)
comment:6 Changed at 2009-10-28T07:29:08Z by davidsarah
- Keywords newurls added
comment:7 Changed at 2009-12-04T04:27:45Z by davidsarah
- Keywords confidentiality added
comment:8 Changed at 2010-01-17T14:57:00Z by davidsarah
- Keywords capleak added; security removed
comment:9 Changed at 2010-03-09T22:15:25Z by davidsarah
- Milestone changed from undecided to 2.0.0
comment:10 Changed at 2010-04-12T19:17:53Z by davidsarah
- Milestone changed from 2.0.0 to 1.8.0
- Owner set to davidsarah
- Status changed from reopened to new
comment:11 Changed at 2010-04-12T19:18:06Z by davidsarah
- Cc david-sarah@… removed
- Status changed from new to assigned
comment:12 Changed at 2010-08-08T05:32:09Z by davidsarah
- Milestone changed from 1.8.0 to soon
comment:13 Changed at 2013-09-14T17:39:49Z by zooko
- Description modified (diff)
- Keywords websec added
I believe this issue also applies to other scriptable file formats such as PDF and Flash.
Possible solution:
If the NewCapDesign implements versioned read caps (i.e. read caps that only give access to a specific version of a mutable file), then that would allow versioned read URLs to be used by default by the WUI.
That would also have the side effect that cutting-and-pasting an URL from the address bar would only give access to a single file version by default (and the versioned URLs could also provide collision resistance). I'm not sure whether that is what users would expect, but it is a safer default.
I think this would have to work by having the gateway perform an HTTP redirect from the unversioned read URL to the versioned one (probably conditional on a parameter in the URL). The parent directory listing cannot directly link to the versioned URLs because that would require reading every file in the listing, which would be too inefficient.