1 | .. -*- coding: utf-8-with-signature -*- |
---|
2 | |
---|
3 | See also :doc:`cautions.rst<cautions>`. |
---|
4 | |
---|
5 | ============ |
---|
6 | Known Issues |
---|
7 | ============ |
---|
8 | |
---|
9 | Below is a list of known issues in recent releases of Tahoe-LAFS, and how to |
---|
10 | manage them. The current version of this file can be found at |
---|
11 | https://github.com/tahoe-lafs/tahoe-lafs/blob/master/docs/known_issues.rst . |
---|
12 | |
---|
13 | If you've been using Tahoe-LAFS since v1.1 (released 2008-06-11) or if you're |
---|
14 | just curious about what sort of mistakes we've made in the past, then you |
---|
15 | might want to read the "historical known issues" document in |
---|
16 | ``docs/historical/historical_known_issues.txt``. |
---|
17 | |
---|
18 | |
---|
19 | Known Issues in Tahoe-LAFS v1.10.3, released 30-Mar-2016 |
---|
20 | ======================================================== |
---|
21 | |
---|
22 | * `Unauthorized access by JavaScript in unrelated files`_ |
---|
23 | * `Disclosure of file through embedded hyperlinks or JavaScript in that file`_ |
---|
24 | * `Command-line arguments are leaked to other local users`_ |
---|
25 | * `Capabilities may be leaked to web browser phishing filter / "safe browsing" servers`_ |
---|
26 | * `Known issues in the SFTP frontend`_ |
---|
27 | * `Traffic analysis based on sizes of files/directories, storage indices, and timing`_ |
---|
28 | * `Privacy leak via Google Chart API link in map-update timing web page`_ |
---|
29 | |
---|
30 | ---- |
---|
31 | |
---|
32 | Unauthorized access by JavaScript in unrelated files |
---|
33 | ---------------------------------------------------- |
---|
34 | |
---|
35 | If you view a file stored in Tahoe-LAFS through a web user interface, |
---|
36 | JavaScript embedded in that file can, in some circumstances, access other |
---|
37 | files or directories stored in Tahoe-LAFS that you view through the same |
---|
38 | web user interface. Such a script would be able to send the contents of |
---|
39 | those other files or directories to the author of the script, and if you |
---|
40 | have the ability to modify the contents of those files or directories, |
---|
41 | then that script could modify or delete those files or directories. |
---|
42 | |
---|
43 | This attack is known to be possible when an attacking tab or window could |
---|
44 | reach a tab or window containing a Tahoe URI by navigating back or forward |
---|
45 | in the history, either from itself or from any frame with a known name (as |
---|
46 | specified by the "target" attribute of an HTML link). It might be possible |
---|
47 | in other cases depending on the browser. |
---|
48 | |
---|
49 | *how to manage it* |
---|
50 | |
---|
51 | For future versions of Tahoe-LAFS, we are considering ways to close off |
---|
52 | this leakage of authority while preserving ease of use -- the discussion |
---|
53 | of this issue is ticket `#615`_. |
---|
54 | |
---|
55 | For the present, either do not view files stored in Tahoe-LAFS through a |
---|
56 | web user interface, or turn off JavaScript in your web browser before |
---|
57 | doing so, or limit your viewing to files which you know don't contain |
---|
58 | malicious JavaScript. |
---|
59 | |
---|
60 | .. _#615: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/615 |
---|
61 | |
---|
62 | |
---|
63 | ---- |
---|
64 | |
---|
65 | Disclosure of file through embedded hyperlinks or JavaScript in that file |
---|
66 | ------------------------------------------------------------------------- |
---|
67 | |
---|
68 | If there is a file stored on a Tahoe-LAFS storage grid, and that file |
---|
69 | gets downloaded and displayed in a web browser, then JavaScript or |
---|
70 | hyperlinks within that file can leak the capability to that file to a |
---|
71 | third party, which means that third party gets access to the file. |
---|
72 | |
---|
73 | If there is JavaScript in the file, then it could deliberately leak |
---|
74 | the capability to the file out to some remote listener. |
---|
75 | |
---|
76 | If there are hyperlinks in the file, and they get followed, then |
---|
77 | whichever server they point to receives the capability to the |
---|
78 | file. Note that IMG tags are typically followed automatically by web |
---|
79 | browsers, so being careful which hyperlinks you click on is not |
---|
80 | sufficient to prevent this from happening. |
---|
81 | |
---|
82 | *how to manage it* |
---|
83 | |
---|
84 | For future versions of Tahoe-LAFS, we are considering ways to close off |
---|
85 | this leakage of authority while preserving ease of use -- the discussion |
---|
86 | of this issue is ticket `#127`_. |
---|
87 | |
---|
88 | For the present, a good work-around is that if you want to store and |
---|
89 | view a file on Tahoe-LAFS and you want that file to remain private, then |
---|
90 | remove from that file any hyperlinks pointing to other people's servers |
---|
91 | and remove any JavaScript unless you are sure that the JavaScript is not |
---|
92 | written to maliciously leak access. |
---|
93 | |
---|
94 | .. _#127: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/127 |
---|
95 | |
---|
96 | |
---|
97 | ---- |
---|
98 | |
---|
99 | Command-line arguments are leaked to other local users |
---|
100 | ------------------------------------------------------ |
---|
101 | |
---|
102 | Remember that command-line arguments are visible to other users (through |
---|
103 | the 'ps' command, or the windows Process Explorer tool), so if you are |
---|
104 | using a Tahoe-LAFS node on a shared host, other users on that host will |
---|
105 | be able to see (and copy) any caps that you pass as command-line |
---|
106 | arguments. This includes directory caps that you set up with the "tahoe |
---|
107 | add-alias" command. |
---|
108 | |
---|
109 | *how to manage it* |
---|
110 | |
---|
111 | As of Tahoe-LAFS v1.3.0 there is a "tahoe create-alias" command that does |
---|
112 | the following technique for you. |
---|
113 | |
---|
114 | Bypass add-alias and edit the NODEDIR/private/aliases file directly, by |
---|
115 | adding a line like this: |
---|
116 | |
---|
117 | fun: URI:DIR2:ovjy4yhylqlfoqg2vcze36dhde:4d4f47qko2xm5g7osgo2yyidi5m4muyo2vjjy53q4vjju2u55mfa |
---|
118 | |
---|
119 | By entering the dircap through the editor, the command-line arguments |
---|
120 | are bypassed, and other users will not be able to see them. Once you've |
---|
121 | added the alias, if you use that alias instead of a cap itself on the |
---|
122 | command-line, then no secrets are passed through the command line. Then |
---|
123 | other processes on the system can still see your filenames and other |
---|
124 | arguments you type there, but not the caps that Tahoe-LAFS uses to permit |
---|
125 | access to your files and directories. |
---|
126 | |
---|
127 | |
---|
128 | ---- |
---|
129 | |
---|
130 | Capabilities may be leaked to web browser phishing filter / "safe browsing" servers |
---|
131 | ----------------------------------------------------------------------------------- |
---|
132 | |
---|
133 | Firefox, Internet Explorer, and Chrome include a "phishing filter" or |
---|
134 | "safe browing" component, which is turned on by default, and which sends |
---|
135 | any URLs that it deems suspicious to a central server. |
---|
136 | |
---|
137 | Microsoft gives `a brief description of their filter's operation`_. Firefox |
---|
138 | and Chrome both use Google's `"safe browsing API"`_ (`specification`_). |
---|
139 | |
---|
140 | This of course has implications for the privacy of general web browsing |
---|
141 | (especially in the cases of Firefox and Chrome, which send your main |
---|
142 | personally identifying Google cookie along with these requests without your |
---|
143 | explicit consent, as described in `Firefox bugzilla ticket #368255`_. |
---|
144 | |
---|
145 | The reason for documenting this issue here, though, is that when using the |
---|
146 | Tahoe-LAFS web user interface, it could also affect confidentiality and integrity |
---|
147 | by leaking capabilities to the filter server. |
---|
148 | |
---|
149 | Since IE's filter sends URLs by SSL/TLS, the exposure of caps is limited to |
---|
150 | the filter server operators (or anyone able to hack the filter server) rather |
---|
151 | than to network eavesdroppers. The "safe browsing API" protocol used by |
---|
152 | Firefox and Chrome, on the other hand, is *not* encrypted, although the |
---|
153 | URL components are normally hashed. |
---|
154 | |
---|
155 | Opera also has a similar facility that is disabled by default. A previous |
---|
156 | version of this file stated that Firefox had abandoned their phishing |
---|
157 | filter; this was incorrect. |
---|
158 | |
---|
159 | .. _a brief description of their filter's operation: https://blogs.msdn.com/ie/archive/2005/09/09/463204.aspx |
---|
160 | .. _"safe browsing API": https://code.google.com/apis/safebrowsing/ |
---|
161 | .. _specification: https://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec |
---|
162 | .. _Firefox bugzilla ticket #368255: https://bugzilla.mozilla.org/show_bug.cgi?id=368255 |
---|
163 | |
---|
164 | |
---|
165 | *how to manage it* |
---|
166 | |
---|
167 | If you use any phishing filter or "safe browsing" feature, consider either |
---|
168 | disabling it, or not using the WUI via that browser. Phishing filters have |
---|
169 | `very limited effectiveness`_ , and phishing or malware attackers have learnt |
---|
170 | how to bypass them. |
---|
171 | |
---|
172 | .. _very limited effectiveness: http://lorrie.cranor.org/pubs/ndss-phish-tools-final.pdf |
---|
173 | |
---|
174 | To disable the filter in IE7 or IE8: |
---|
175 | ++++++++++++++++++++++++++++++++++++ |
---|
176 | |
---|
177 | - Click Internet Options from the Tools menu. |
---|
178 | |
---|
179 | - Click the Advanced tab. |
---|
180 | |
---|
181 | - If an "Enable SmartScreen Filter" option is present, uncheck it. |
---|
182 | If a "Use Phishing Filter" or "Phishing Filter" option is present, |
---|
183 | set it to Disable. |
---|
184 | |
---|
185 | - Confirm (click OK or Yes) out of all dialogs. |
---|
186 | |
---|
187 | If you have a version of IE that splits the settings between security |
---|
188 | zones, do this for all zones. |
---|
189 | |
---|
190 | To disable the filter in Firefox: |
---|
191 | +++++++++++++++++++++++++++++++++ |
---|
192 | |
---|
193 | - Click Options from the Tools menu. |
---|
194 | |
---|
195 | - Click the Security tab. |
---|
196 | |
---|
197 | - Uncheck both the "Block reported attack sites" and "Block reported |
---|
198 | web forgeries" options. |
---|
199 | |
---|
200 | - Click OK. |
---|
201 | |
---|
202 | To disable the filter in Chrome: |
---|
203 | ++++++++++++++++++++++++++++++++ |
---|
204 | |
---|
205 | - Click Options from the Tools menu. |
---|
206 | |
---|
207 | - Click the "Under the Hood" tab and find the "Privacy" section. |
---|
208 | |
---|
209 | - Uncheck the "Enable phishing and malware protection" option. |
---|
210 | |
---|
211 | - Click Close. |
---|
212 | |
---|
213 | |
---|
214 | ---- |
---|
215 | |
---|
216 | Known issues in the SFTP frontend |
---|
217 | --------------------------------- |
---|
218 | |
---|
219 | These are documented in :doc:`frontends/FTP-and-SFTP` and on `the |
---|
220 | SftpFrontend page`_ on the wiki. |
---|
221 | |
---|
222 | .. _the SftpFrontend page: https://tahoe-lafs.org/trac/tahoe-lafs/wiki/SftpFrontend |
---|
223 | |
---|
224 | |
---|
225 | ---- |
---|
226 | |
---|
227 | Traffic analysis based on sizes of files/directories, storage indices, and timing |
---|
228 | --------------------------------------------------------------------------------- |
---|
229 | |
---|
230 | Files and directories stored by Tahoe-LAFS are encrypted, but the ciphertext |
---|
231 | reveals the exact size of the original file or directory representation. |
---|
232 | This information is available to passive eavesdroppers and to server operators. |
---|
233 | |
---|
234 | For example, a large data set with known file sizes could probably be |
---|
235 | identified with a high degree of confidence. |
---|
236 | |
---|
237 | Uploads and downloads of the same file or directory can be linked by server |
---|
238 | operators, even without making assumptions based on file size. Anyone who |
---|
239 | knows the introducer furl for a grid may be able to act as a server operator. |
---|
240 | This implies that if such an attacker knows which file/directory is being |
---|
241 | accessed in a particular request (by some other form of surveillance, say), |
---|
242 | then they can identify later or earlier accesses of the same file/directory. |
---|
243 | |
---|
244 | Observing requests during a directory traversal (such as a deep-check |
---|
245 | operation) could reveal information about the directory structure, i.e. |
---|
246 | which files and subdirectories are linked from a given directory. |
---|
247 | |
---|
248 | Attackers can combine the above information with inferences based on timing |
---|
249 | correlations. For instance, two files that are accessed close together in |
---|
250 | time are likely to be related even if they are not linked in the directory |
---|
251 | structure. Also, users that access the same files may be related to each other. |
---|
252 | |
---|
253 | |
---|
254 | ---- |
---|
255 | |
---|
256 | Privacy leak via Google Chart API link in map-update timing web page |
---|
257 | -------------------------------------------------------------------- |
---|
258 | |
---|
259 | The Tahoe web-based user interface includes a diagnostic page known as the |
---|
260 | "map-update timing page". It is reached through the "Recent and Active |
---|
261 | Operations" link on the front welcome page, then through the "Status" column |
---|
262 | for "map-update" operations (which occur when mutable files, including |
---|
263 | directories, are read or written). This page contains per-server response |
---|
264 | times, as lines of text, and includes an image which displays the response |
---|
265 | times in graphical form. The image is generated by constructing a URL for |
---|
266 | the `Google Chart API`_, which is then served by the `chart.apis.google.com` |
---|
267 | internet server. |
---|
268 | |
---|
269 | .. _Google Chart API: https://developers.google.com/chart/image/ |
---|
270 | |
---|
271 | When you view this page, several parties may learn information about your |
---|
272 | Tahoe activities. The request will typically include a "Referer" header, |
---|
273 | revealing the URL of the mapupdate status page (which is typically something |
---|
274 | like "http://127.0.0.1:3456/status/mapupdate-123") to network observers and |
---|
275 | the Google API server. The image returned by this server is typically a PNG |
---|
276 | file, but either the server or a MitM attacker could replace it with |
---|
277 | something malicious that attempts to exploit a browser rendering bug or |
---|
278 | buffer overflow. (Note that browsers do not execute scripts inside IMG tags, |
---|
279 | even for SVG images). |
---|
280 | |
---|
281 | In addition, if your Tahoe node connects to its grid over Tor or i2p, but the |
---|
282 | web browser you use to access your node does not, then this image link may |
---|
283 | reveal your use of Tahoe (and that grid) to the outside world. It is not |
---|
284 | recommended to use a browser in this way, because other links in Tahoe-stored |
---|
285 | content would reveal even more information (e.g. an attacker could store an |
---|
286 | HTML file with unique CSS references into a shared Tahoe grid, then send your |
---|
287 | pseudonym a message with its URI, then observe your browser loading that CSS |
---|
288 | file, and thus link the source IP address of your web client to that |
---|
289 | pseudonym). |
---|
290 | |
---|
291 | A future version of Tahoe will probably replace the Google Chart API link |
---|
292 | (which was deprecated by Google in April 2012) with client-side javascript |
---|
293 | using d3.js, removing the information leak but requiring JS to see the chart. |
---|
294 | See ticket `#1942`_ for details. |
---|
295 | |
---|
296 | .. _#1942: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1942 |
---|
297 | |
---|
298 | ---- |
---|
299 | |
---|
300 | Known Issues in Tahoe-LAFS v1.9.0, released 31-Oct-2011 |
---|
301 | ======================================================= |
---|
302 | |
---|
303 | |
---|
304 | Integrity Failure during Mutable Downloads |
---|
305 | ------------------------------------------ |
---|
306 | |
---|
307 | Under certain circumstances, the integrity-verification code of the mutable |
---|
308 | downloader could be bypassed. Clients who receive carefully crafted shares |
---|
309 | (from attackers) will emit incorrect file contents, and the usual |
---|
310 | share-corruption errors would not be raised. This only affects mutable files |
---|
311 | (not immutable), and only affects downloads that use doctored shares. It is |
---|
312 | not persistent: the threat is resolved once you upgrade your client to a |
---|
313 | version without the bug. However, read-modify-write operations (such as |
---|
314 | directory manipulations) performed by vulnerable clients could cause the |
---|
315 | attacker's modifications to be written back out to the mutable file, making |
---|
316 | the corruption permanent. |
---|
317 | |
---|
318 | The attacker's ability to manipulate the file contents is limited. They can |
---|
319 | modify FEC-encoded ciphertext in all but one share. This gives them the |
---|
320 | ability to blindly flip bits in roughly 2/3rds of the file (for the default |
---|
321 | k=3 encoding parameter). Confidentiality remains intact, unless the attacker |
---|
322 | can deduce the file's contents by observing your reactions to corrupted |
---|
323 | downloads. |
---|
324 | |
---|
325 | This bug was introduced in 1.9.0, as part of the MDMF-capable downloader, and |
---|
326 | affects both SDMF and MDMF files. It was not present in 1.8.3. |
---|
327 | |
---|
328 | *how to manage it* |
---|
329 | |
---|
330 | There are three options: |
---|
331 | |
---|
332 | * Upgrade to 1.9.1, which fixes the bug |
---|
333 | * Downgrade to 1.8.3, which does not contain the bug |
---|
334 | * If using 1.9.0, do not trust the contents of mutable files (whether SDMF or |
---|
335 | MDMF) that the 1.9.0 client emits, and do not modify directories (which |
---|
336 | could write the corrupted data back into place, making the damage |
---|
337 | persistent) |
---|
338 | |
---|
339 | ---- |
---|
340 | |
---|
341 | Known Issues in Tahoe-LAFS v1.8.2, released 30-Jan-2011 |
---|
342 | ======================================================= |
---|
343 | |
---|
344 | |
---|
345 | Unauthorized deletion of an immutable file by its storage index |
---|
346 | --------------------------------------------------------------- |
---|
347 | |
---|
348 | Due to a flaw in the Tahoe-LAFS storage server software in v1.3.0 through |
---|
349 | v1.8.2, a person who knows the "storage index" that identifies an immutable |
---|
350 | file can cause the server to delete its shares of that file. |
---|
351 | |
---|
352 | If an attacker can cause enough shares to be deleted from enough storage |
---|
353 | servers, this deletes the file. |
---|
354 | |
---|
355 | This vulnerability does not enable anyone to read file contents without |
---|
356 | authorization (confidentiality), nor to change the contents of a file |
---|
357 | (integrity). |
---|
358 | |
---|
359 | A person could learn the storage index of a file in several ways: |
---|
360 | |
---|
361 | 1. By being granted the authority to read the immutable file: i.e. by being |
---|
362 | granted a read capability to the file. They can determine the file's |
---|
363 | storage index from its read capability. |
---|
364 | |
---|
365 | 2. By being granted a verify capability to the file. They can determine the |
---|
366 | file's storage index from its verify capability. This case probably |
---|
367 | doesn't happen often because users typically don't share verify caps. |
---|
368 | |
---|
369 | 3. By operating a storage server, and receiving a request from a client that |
---|
370 | has a read cap or a verify cap. If the client attempts to upload, |
---|
371 | download, or verify the file with their storage server, even if it doesn't |
---|
372 | actually have the file, then they can learn the storage index of the file. |
---|
373 | |
---|
374 | 4. By gaining read access to an existing storage server's local filesystem, |
---|
375 | and inspecting the directory structure that it stores its shares in. They |
---|
376 | can thus learn the storage indexes of all files that the server is holding |
---|
377 | at least one share of. Normally only the operator of an existing storage |
---|
378 | server would be able to inspect its local filesystem, so this requires |
---|
379 | either being such an operator of an existing storage server, or somehow |
---|
380 | gaining the ability to inspect the local filesystem of an existing storage |
---|
381 | server. |
---|
382 | |
---|
383 | *how to manage it* |
---|
384 | |
---|
385 | Tahoe-LAFS version v1.8.3 or newer (except v1.9a1) no longer has this flaw; |
---|
386 | if you upgrade a storage server to a fixed release then that server is no |
---|
387 | longer vulnerable to this problem. |
---|
388 | |
---|
389 | Note that the issue is local to each storage server independently of other |
---|
390 | storage servers: when you upgrade a storage server then that particular |
---|
391 | storage server can no longer be tricked into deleting its shares of the |
---|
392 | target file. |
---|
393 | |
---|
394 | If you can't immediately upgrade your storage server to a version of |
---|
395 | Tahoe-LAFS that eliminates this vulnerability, then you could temporarily |
---|
396 | shut down your storage server. This would of course negatively impact |
---|
397 | availability -- clients would not be able to upload or download shares to |
---|
398 | that particular storage server while it was shut down -- but it would protect |
---|
399 | the shares already stored on that server from being deleted as long as the |
---|
400 | server is shut down. |
---|
401 | |
---|
402 | If the servers that store shares of your file are running a version of |
---|
403 | Tahoe-LAFS with this vulnerability, then you should think about whether |
---|
404 | someone can learn the storage indexes of your files by one of the methods |
---|
405 | described above. A person can not exploit this vulnerability unless they have |
---|
406 | received a read cap or verify cap, or they control a storage server that has |
---|
407 | been queried about this file by a client that has a read cap or a verify cap. |
---|
408 | |
---|
409 | Tahoe-LAFS does not currently have a mechanism to limit which storage servers |
---|
410 | can connect to your grid, but it does have a way to see which storage servers |
---|
411 | have been connected to the grid. The Introducer's front page in the Web User |
---|
412 | Interface has a list of all storage servers that the Introducer has ever seen |
---|
413 | and the first time and the most recent time that it saw them. Each Tahoe-LAFS |
---|
414 | gateway maintains a similar list on its front page in its Web User Interface, |
---|
415 | showing all of the storage servers that it learned about from the Introducer, |
---|
416 | when it first connected to that storage server, and when it most recently |
---|
417 | connected to that storage server. These lists are stored in memory and are |
---|
418 | reset to empty when the process is restarted. |
---|
419 | |
---|
420 | See ticket `#1528`_ for technical details. |
---|
421 | |
---|
422 | .. _#1528: https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1528 |
---|