All three containers currently used by sandboxed-tor-browser (tor, firefox, and the updater) currently mount /proc. Once it's been verified that relevant versions of the software shipped do not require such, this mount should be removed to reduce fingerprinting and to close an attack vector.
In the mean time, stopgap solutions such as AppArmor could be investigated as well, though that is not a good long term solution as it is not ubiquitous.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items ...
Show closed items
Linked items 0
Link issues together to show that they're related.
Learn more.
As far as I can tell, the tor process container can do without /proc. It's clear cut for the no PT case since tor appears to only use /proc/meminfo to derive MaxMemInQueues which is irrelevant for this use case.
obfs4proxy appears to read from /proc as well upon cursory examination via strings, but it doesn't appear to crash and I can browse the web in a container sans procfs. However before I disable mounting it in the container, I'd like to see what exactly it's doing.
I need to strace tor + obfs4proxy anyway when I decide to tackle #20782 (closed)...
In the mean time while I fret over obfs4proxy behavior that will probably end up being harmless, I went ahead and disabled mounting /proc in the tor container when Bridges aren't in use. Half a container down, 2.5 containers to go.
Related, sysinfo() probably should be killed by seccomp, and enough of it stubbed out to make firefox happy, since the information is also not great for firefox to have.
One thing that I could do, but would rather not is to do something like lxcfs and have the container "/proc" be serviced by a FUSE process in the host system.
This would work, but I'm inclined to reject this due to:
Yet another dependency, that needs to be SUID root.
It would be a lot of code.
Patching firefox to not fall over seems easier than "not-invented-here-ing" a filesystem.
One thing that I could do, but would rather not is to do something like lxcfs and have the container "/proc" be serviced by a FUSE process in the host system.
This would work, but I'm inclined to reject this due to:
Yet another dependency, that needs to be SUID root.
It would be a lot of code.
Patching firefox to not fall over seems easier than "not-invented-here-ing" a filesystem.
Please don't do this. FUSE is a mess, and SUID root just makes it almost worse than downright allowing access to /proc. Just don't mount it.
The only place that has /proc mounted is the updater container, which while also important is not nearly as scary as firefox having access to /proc, as the updater ostensibly only is fed signed/trusted inputs, and doesn't have any sort of network access at all.
Firefox is still moderately unhappy about the lack of /proc and will warn:
2017/07/03 17:26:21 firefox: Sandbox: unexpected multithreading found; this prevents using namespace sandboxing. (If you're LD_PRELOAD'ing nVidia GL: that's not necessary for Gecko.)
But nested namespaces are asking for a world of hurt, so it's unlikely that it worked prior to this to begin with.