#1720 closed defect (fixed)

privacy leak because web.static does not exist

Reported by: jg71 Owned by: davidsarah
Priority: normal Milestone: 1.12.0
Component: code-frontend-web Version: 1.9.1
Keywords: privacy anonymity easy Cc:
Launchpad Bug:

Description (last modified by warner)

when a client/node is created, in tahoe.cfg "web.static = public_html" is enabled by default, but public_html is not created. Thus, surfing to http://localhost:3456/static/ leaks

a) the absolute path of where web.static is expected to be b) the python version used c) maybe which OS is used

solution: don't enable web.static by default, or create public_html directory during client/node creation

Change History (7)

comment:1 Changed at 2012-04-14T21:19:15Z by nejucomo

This issue is relevant when an operator wishes to provide web gateway access to untrusted users will limiting their own risk. This is not a use case that the web gateway was designed for, but several users have requested this use case.

comment:3 Changed at 2012-04-15T01:24:08Z by davidsarah

  • Component changed from unknown to code-frontend-web
  • Keywords changed from privacy,easy to privacy easy

This is a special case of #1008 (although the expected path of public_html would be leaked even if the exception report only showed the message and not the detailed traceback).

comment:4 Changed at 2012-04-15T01:26:36Z by davidsarah

  • Keywords anonymity added

comment:5 Changed at 2015-06-18T17:40:55Z by warner

  • Description modified (diff)
  • Summary changed from privacy leak to privacy leak because web.static does not exist

comment:6 Changed at 2016-04-28T07:44:18Z by Brian Warner <warner@…>

  • Resolution set to fixed
  • Status changed from new to closed

In 5a5ba64/trunk:

use twisted.web.static, not nevow.static, for public_html/

This avoids a privacy leak when the web.static= directory is configured
but doesn't exist (which is almost always, since we set `web.static =
public_html` in the default config file, but nothing automatically
creates it). The nevow.static.File class tries to os.stat() the
directory before doing anything else, which causes an exception, which
renders the traceback to the HTTP client as a 500 Internal Server Error,
and the traceback includes the full path of the missing public_html
directory, which reveals the node's basedir.

Plain twisted.web.static.File doesn't do this check, and a missing
web.static directory just results in a plain old 404.

Closes ticket:1720.

comment:7 Changed at 2016-04-28T07:44:45Z by warner

  • Milestone changed from undecided to 1.12.0
Note: See TracTickets for help on using tickets.