Source: evince Version: 3.2.1-1+b1 Severity: wishlist Tags: patch User: [email protected] Usertags: new-profile thanks
Please include AppArmor profile for evince. Since it handles untrusted data, and has been affected by a number of potential security issues in past years relating to its handling of those, it seems like an ideal candidate for confining: https://wiki.debian.org/AppArmor I have been testing evince for a few months, on a Debian sid system, with the AppArmor profile shipped by Ubuntu's evince (3.3.5-0ubuntu1 and 3.4.0-0ubuntu1). I have not run into any single problem with it. Attached is a patch that adds this AppArmor support to evince. Please consider applying it. Note that enforcing AppArmor profiles is currently opt-in: applying the attached does not change anything for users unless they enable AppArmor system-wide themselves.
diff -Naur evince-3.2.1-1.orig/debian/apparmor-profile evince-3.2.1/debian/apparmor-profile --- evince-3.2.1-1.orig/debian/apparmor-profile 1970-01-01 01:00:00.000000000 +0100 +++ evince-3.2.1/debian/apparmor-profile 2012-04-08 09:05:20.240673780 +0200 @@ -0,0 +1,147 @@ +# vim:syntax=apparmor +# Author: Kees Cook <[email protected]> +# Jamie Strandboge <[email protected]> + +#include <tunables/global> + +/usr/bin/evince { + #include <abstractions/audio> + #include <abstractions/bash> + #include <abstractions/cups-client> + #include <abstractions/dbus-session> + #include <abstractions/evince> + #include <abstractions/ibus> + #include <abstractions/nameservice> + #include <abstractions/launchpad-integration> + + #include <abstractions/ubuntu-browsers> + #include <abstractions/ubuntu-console-browsers> + #include <abstractions/ubuntu-email> + #include <abstractions/ubuntu-console-email> + #include <abstractions/ubuntu-media-players> + + # Terminals for using console applications. These abstractions should ideally + # have 'ix' to restrict access to what only evince is allowed to do + #include <abstractions/ubuntu-gnome-terminal> + + # By default, we won't support launching a terminal program in Xterm or + # KDE's konsole. It opens up too many unnecessary files for most users. + # People who need this functionality can uncomment the following: + ##include <abstractions/ubuntu-xterm> + ##include <abstractions/ubuntu-konsole> + + /usr/bin/evince rmPx, + /usr/bin/evince-previewer Px, + /usr/bin/yelp Cx -> sanitized_helper, + /usr/bin/bug-buddy px, + /usr/bin/nautilus Cx -> sanitized_helper, + + # For text attachments + /usr/bin/gedit ixr, + + # For Send to + /usr/bin/nautilus-sendto Cx -> sanitized_helper, + + # allow directory listings (ie 'r' on directories) so browsing via the file + # dialog works + / r, + /**/ r, + + @{HOME}/ r, + + # This is need for saving files in your home directory without an extension. + # Changing this to '@{HOME}/** r' makes it require an extension and more + # secure (but with 'rw', we still have abstractions/private-files-strict in + # effect). + @{HOME}/** rw, + @{HOME}/.local/share/gvfs-metadata/** l, + + @{HOME}/.gnome2/evince/* rwl, + @{HOME}/.gnome2/accels/ rw, + @{HOME}/.gnome2/accelsevince rw, + @{HOME}/.gnome2/accels/evince rw, + + # from http://live.gnome.org/Evince/SupportedDocumentFormats. Allow + # read and write for all supported file formats + /**.[bB][mM][pP] rw, + /**.[dD][jJ][vV][uU] rw, + /**.[dD][vV][iI] rw, + /**.[gG][iI][fF] rw, + /**.[jJ][pP][gG] rw, + /**.[jJ][pP][eE][gG] rw, + /**.[oO][dD][pP] rw, + /**.[fFpP][dD][fF] rw, + /**.[pP][nN][mM] rw, + /**.[pP][nN][gG] rw, + /**.[pP][sS] rw, + /**.[eE][pP][sS] rw, + /**.[tT][iI][fF] rw, + /**.[tT][iI][fF][fF] rw, + /**.[xX][pP][mM] rw, + /**.[gG][zZ] rw, + /**.[bB][zZ]2 rw, + /**.[cC][bB][rRzZ7] rw, + + # evince creates a temporary stream file like '.goutputstream-XXXXXX' in the + # directory a file is saved. This allows that behavior. + owner /**/.goutputstream-* w, +} + +/usr/bin/evince-previewer { + #include <abstractions/audio> + #include <abstractions/bash> + #include <abstractions/cups-client> + #include <abstractions/dbus-session> + #include <abstractions/evince> + #include <abstractions/ibus> + #include <abstractions/nameservice> + #include <abstractions/launchpad-integration> + + #include <abstractions/ubuntu-browsers> + #include <abstractions/ubuntu-console-browsers> + #include <abstractions/ubuntu-email> + #include <abstractions/ubuntu-console-email> + #include <abstractions/ubuntu-media-players> + + # Terminals for using console applications. These abstractions should ideally + # have 'ix' to restrict access to what only evince is allowed to do + #include <abstractions/ubuntu-gnome-terminal> + + # By default, we won't support launching a terminal program in Xterm or + # KDE's konsole. It opens up too many unnecessary files for most users. + # People who need this functionality can uncomment the following: + ##include <abstractions/ubuntu-xterm> + + /usr/bin/evince-previewer mr, + /usr/bin/yelp Cx -> sanitized_helper, + /usr/bin/bug-buddy px, + + # Lenient, but remember we still have abstractions/private-files-strict in + # effect). + @{HOME}/ r, + @{HOME}/** r, +} + +/usr/bin/evince-thumbnailer { + #include <abstractions/evince> + + # The thumbnailer doesn't need access to everything in the nameservice + # abstraction. Allow reading of /etc/passwd and /etc/group, but suppress + # logging denial of nsswitch.conf. + /etc/passwd r, + /etc/group r, + deny /etc/nsswitch.conf r, + + # TCP/UDP network access for NFS + network inet stream, + network inet6 stream, + network inet dgram, + network inet6 dgram, + + /usr/bin/evince-thumbnailer mr, + + # Lenient, but remember we still have abstractions/private-files-strict in + # effect). + @{HOME}/ r, + @{HOME}/** rw, +} diff -Naur evince-3.2.1-1.orig/debian/apparmor-profile.abstraction evince-3.2.1/debian/apparmor-profile.abstraction --- evince-3.2.1-1.orig/debian/apparmor-profile.abstraction 1970-01-01 01:00:00.000000000 +0100 +++ evince-3.2.1/debian/apparmor-profile.abstraction 2012-04-08 09:05:42.808930386 +0200 @@ -0,0 +1,112 @@ +# vim:syntax=apparmor +# +# abstraction used by evince binaries +# + + #include <abstractions/gnome> + #include <abstractions/p11-kit> + #include <abstractions/ubuntu-helpers> + + @{PROC}/[0-9]*/fd/ r, + @{PROC}/[0-9]*/mountinfo r, + owner @{PROC}/[0-9]*/auxv r, + owner @{PROC}/[0-9]*/status r, + + # Doesn't seem to be required, but noisy. Maybe allow 'r' for 'b*' if needed. + # Possibly move to an abstraction if anything else needs it. + deny /run/udev/data/** r, + + # move out to the gnome abstraction if anyone else needs these + /dev/.udev/{data,db}/* r, + /etc/udev/udev.conf r, + /sys/devices/**/block/**/uevent r, + + # apport + /etc/default/apport r, + + # evince specific + /etc/ r, + /etc/fstab r, + /etc/texmf/ r, + /etc/texmf/** r, + /etc/xpdf/* r, + + /usr/bin/gs-esp ixr, + /usr/bin/mktexpk Cx -> sanitized_helper, + /usr/bin/mktextfm Cx -> sanitized_helper, + /usr/bin/dvipdfm Cx -> sanitized_helper, + /usr/bin/dvipdfmx Cx -> sanitized_helper, + + # supported archivers + /bin/gzip ixr, + /bin/bzip2 ixr, + /usr/bin/unrar* ixr, + /usr/bin/unzip ixr, + /usr/bin/7zr ixr, + /usr/lib/p7zip/7zr ixr, + /usr/bin/7za ixr, + /usr/lib/p7zip/7za ixr, + /usr/bin/zipnote ixr, + /bin/tar ixr, + + # allow read access to anything in /usr/share, for plugins and input methods + /usr/local/share/** r, + /usr/share/** r, + /usr/lib/ghostscript/** mr, + /var/lib/ghostscript/** r, + /var/lib/texmf/** r, + + # from http://live.gnome.org/Evince/SupportedDocumentFormats. Allow + # read for all supported file formats + /**.[bB][mM][pP] r, + /**.[dD][jJ][vV][uU] r, + /**.[dD][vV][iI] r, + /**.[gG][iI][fF] r, + /**.[jJ][pP][gG] r, + /**.[jJ][pP][eE][gG] r, + /**.[oO][dD][pP] r, + /**.[fFpP][dD][fF] r, + /**.[pP][nN][mM] r, + /**.[pP][nN][gG] r, + /**.[pP][sS] r, + /**.[eE][pP][sS] r, + /**.[tT][iI][fF] r, + /**.[tT][iI][fF][fF] r, + /**.[xX][pP][mM] r, + /**.[gG][zZ] r, + /**.[bB][zZ]2 r, + /**.[cC][bB][rRzZ7] r, + + # Use abstractions/private-files instead of abstractions/private-files-strict + # and add the sensitive files manually to work around LP: #451422. The goal + # is to disallow access to the .mozilla folder in general, but to allow + # access to the Cache directory, which the browser may tell evince to open + # from directly. + + #include <abstractions/private-files> + audit deny @{HOME}/.gnupg/** mrwkl, + audit deny @{HOME}/.ssh/** mrwkl, + audit deny @{HOME}/.gnome2_private/** mrwkl, + audit deny @{HOME}/.kde/share/apps/kwallet/** mrwkl, + audit deny @{HOME}/.pki/nssdb/** w, + + audit deny @{HOME}/.mozilla/*/*/* mrwkl, + audit deny @{HOME}/.mozilla/**/bookmarkbackups/** mrwkl, + audit deny @{HOME}/.mozilla/**/chrome/** mrwkl, + audit deny @{HOME}/.mozilla/**/extensions/** mrwkl, + audit deny @{HOME}/.mozilla/**/gm_scripts/** mrwkl, + + audit deny @{HOME}/.config/chromium/** mrwkl, + audit deny @{HOME}/.evolution/** mrwkl, + audit deny @{HOME}/.config/evolution/** mrwkl, + audit deny @{HOME}/.kde/share/config/** mrwkl, + audit deny @{HOME}/.kde/share/apps/kmail/** mrwkl, + audit deny @{HOME}/.{,mozilla-}thunderbird/*/* mrwkl, + audit deny @{HOME}/.{,mozilla-}thunderbird/*/[^C][^a][^c][^h][^e]*/** mrwkl, + + # When LP: #451422 is fixed, change the above to simply be: + ##include <abstractions/private-files-strict> + #owner @{HOME}/.mozilla/**/*Cache/* r, + + # Site-specific additions and overrides. See local/README for details. + #include <local/usr.bin.evince> diff -Naur evince-3.2.1-1.orig/debian/control evince-3.2.1/debian/control --- evince-3.2.1-1.orig/debian/control 2011-10-18 00:43:44.000000000 +0200 +++ evince-3.2.1/debian/control 2012-04-08 10:24:32.986983300 +0200 @@ -10,6 +10,7 @@ Uploaders: Emilio Pozuelo Monfort <[email protected]>, Frederic Peters <[email protected]>, Michael Biebl <[email protected]> Build-Depends: cdbs (>= 0.4.90), debhelper (>= 8), + dh-apparmor, dh-autoreconf, intltool (>= 0.35.0), gnome-pkg-tools (>= 0.10), @@ -58,7 +59,7 @@ Provides: pdf-viewer, postscript-viewer, djvu-viewer -Suggests: unrar, poppler-data, nautilus +Suggests: unrar, poppler-data, nautilus, apparmor Description: Document (PostScript, PDF) viewer Evince is a simple multi-page document viewer. It can display and print PostScript (PS), Encapsulated PostScript (EPS), DJVU, DVI and Portable @@ -99,7 +100,7 @@ Provides: pdf-viewer, postscript-viewer, djvu-viewer -Suggests: gvfs, unrar, poppler-data, nautilus +Suggests: gvfs, unrar, poppler-data, nautilus, apparmor Description: Document (PostScript, PDF) viewer (GTK+ version) Evince is a simple multi-page document viewer. It can display and print PostScript (PS), Encapsulated PostScript (EPS), DJVU, DVI and Portable diff -Naur evince-3.2.1-1.orig/debian/control.in evince-3.2.1/debian/control.in --- evince-3.2.1-1.orig/debian/control.in 2011-10-14 23:01:18.000000000 +0200 +++ evince-3.2.1/debian/control.in 2012-04-08 09:26:04.276114918 +0200 @@ -5,6 +5,7 @@ Uploaders: @GNOME_TEAM@ Build-Depends: cdbs (>= 0.4.90), debhelper (>= 8), + dh-apparmor, dh-autoreconf, intltool (>= 0.35.0), gnome-pkg-tools (>= 0.10), @@ -53,7 +54,7 @@ Provides: pdf-viewer, postscript-viewer, djvu-viewer -Suggests: unrar, poppler-data, nautilus +Suggests: unrar, poppler-data, nautilus, apparmor Description: Document (PostScript, PDF) viewer Evince is a simple multi-page document viewer. It can display and print PostScript (PS), Encapsulated PostScript (EPS), DJVU, DVI and Portable @@ -94,7 +95,7 @@ Provides: pdf-viewer, postscript-viewer, djvu-viewer -Suggests: gvfs, unrar, poppler-data, nautilus +Suggests: gvfs, unrar, poppler-data, nautilus, apparmor Description: Document (PostScript, PDF) viewer (GTK+ version) Evince is a simple multi-page document viewer. It can display and print PostScript (PS), Encapsulated PostScript (EPS), DJVU, DVI and Portable diff -Naur evince-3.2.1-1.orig/debian/evince-common.dirs evince-3.2.1/debian/evince-common.dirs --- evince-3.2.1-1.orig/debian/evince-common.dirs 1970-01-01 01:00:00.000000000 +0100 +++ evince-3.2.1/debian/evince-common.dirs 2012-04-08 09:07:05.461868527 +0200 @@ -0,0 +1 @@ +etc/apparmor.d/abstractions diff -Naur evince-3.2.1-1.orig/debian/rules evince-3.2.1/debian/rules --- evince-3.2.1-1.orig/debian/rules 2011-10-12 22:20:39.000000000 +0200 +++ evince-3.2.1/debian/rules 2012-04-08 09:07:54.138419828 +0200 @@ -57,3 +57,6 @@ binary-install/evince-common:: rm -rf debian/evince-common/usr/share/gtk-doc + cp debian/apparmor-profile debian/evince-common/etc/apparmor.d/usr.bin.evince + cp debian/apparmor-profile.abstraction debian/evince-common/etc/apparmor.d/abstractions/evince + dh_apparmor --profile-name=usr.bin.evince -pevince-common

