Page MenuHomePhabricator

Allow XHProf to be publicly viewable
ClosedPublic

Authored by chad on Jul 22 2015, 4:51 AM.
Tags
None
Referenced Files
Unknown Object (File)
Fri, May 3, 6:20 AM
Unknown Object (File)
Sun, Apr 28, 1:11 PM
Unknown Object (File)
Thu, Apr 25, 1:07 AM
Unknown Object (File)
Mon, Apr 22, 8:24 AM
Unknown Object (File)
Mon, Apr 22, 8:24 AM
Unknown Object (File)
Mon, Apr 22, 8:24 AM
Unknown Object (File)
Thu, Apr 18, 3:32 PM
Unknown Object (File)
Fri, Apr 12, 12:50 PM
Subscribers

Details

Summary

I guess... because PHP? Ref T4830

Test Plan

Log out, see pages.

Diff Detail

Repository
rP Phabricator
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

chad retitled this revision from to Allow XHProf to be publicly viewable.
chad updated this object.
chad edited the test plan for this revision. (Show Details)
chad added reviewers: epriestley, btrahan.
epriestley edited edge metadata.

This information is hypothetically semi-sensitive, but I can't really conjure up any scenario where it reveals anything especially useful or meaningful, especially with default options.

The best attack I can come up with is that this essentially allows you to execute an enhanced timing attack: when viewing a list of query results, you can estimate how many results are filtered out by how long the page takes to generate. By executing a bunch of queries, you could potentially learn information about objects you can't see.

For example, suppose you want to know about T123, but don't have permission to see it. You can execute a bunch of queries with "id=123" and other qualifiers (assigned to X, has project Y). The queries which don't match will get 0 results back (filtering the row in MySQL), while the queries which match will get 1 result back and then filter it out in the application. The latter does more work, so it will always be slightly slower: you'll see the same page, but one page will take, say, an average of 350ms, and the other will take an average of 351ms. By executing thousands of queries, you could guess whether a task you could not see was assigned to a specific user or not.

With access to the profiler, you could get this information directly by seeing how many calls we made to policy filtering code.

Making the profiler results public doesn't really impact this one way or the other, though.

This revision is now accepted and ready to land.Jul 22 2015, 2:04 PM
This revision was automatically updated to reflect the committed changes.