Bubblewrap y Firefox
Si hay algo que está presente en todos los ordenadores personales es el navegador. Un programa normalmente gigantesco, lleno de fallos, que recibe y ejecuta código igualmente grande y no auditado. ¿Hacen falta mas razones para ejecutarlo en un entorno lo mas reducido posible?
$ bwrap [OPTION...] [COMMAND]
Importante, las opciones se interpretan de izquierda a derecha!
Ejecutar Firefox en la sandbox es tan sencillo como:
- Crear bind mounts como read-only a los binarios, librerias…etc
1
2
3
--ro-bind /usr /usr
--ro-bind /bin /bin
--ro-bind /lib64 /lib64
- Crear bind mounts como read-only a la configuración DNS, fuentes y la cache de ld.
1
2
3
--ro-bind /etc/resolv.conf /etc/resolv.conf
--ro-bind /etc/fonts /etc/fonts
--ro-bind /etc/ld.so.cache /etc/ld.so.cache
- Crear bind mounts al profile existente y al directorio Downloads.
1
2
3
--bind ~/.cache/mozilla ~/.cache/mozilla
--bind ~/.mozilla ~/.mozilla
--bind ~/Downloads ~/Downloads
- PulseAudio
1
2
3
--ro-bind ~/.config/pulse ~/.config/pulse
--bind /run/user/$UID/pulse /run/user/$UID/pulse
--setenv XDG_RUNTIME_DIR "/run/user/$UID"
- Montar procfs, un nuevo devtmpfs y un tmpfs en
/tmp
.
1
2
3
--proc /proc
--dev /dev
--tmpfs /tmp
- Crear nuevos namespaces y mantener unicamente el de red.
1
2
--unshare-all
--share-net
- CVE-2017-5226 1
1
--new-session
xdg-open
La extensión perl-matcher de urxvt (y otros programas que usen XDG) no funciona a no ser que tengamos un MIME registrado. Lo primero es crear un script para abrir Firefox.
Copiamos el fichero firefox.desktop a ~/.local/share/applications
y modificamos Exec= para que apunte al script anterior.
Añadimos sandfox.desktop como navegador por defecto.2