At Tue, 06 Mar 2012 02:29:25 +0100, Simon Ruderich wrote: > > [1 <text/plain; us-ascii (7bit)>] > Package: pbuilder > Version: 0.206 > Tags: patch > Followup-For: Bug #579028 > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > Dear Maintainer, > > The attached patch changes the defaults to always enforce signed > repositories and aborts if an untrusted/manipulated package is > installed. It adds the new option --keyring (APTKEYRINGS) to add > additional keyrings, which are then used to verify the (local) > signed repositories. This way no untrusted packages can be > installed.
I don't share the opinion that this should be a grave bug to change the default, and in order to change the default you need to deprecate a command-line option and introduce two new command-line options when you could have just changed the default shipping pbuilderrc. > To still allow untrusted/unsigned repositories - they are a very > bad idea and allow remote attackers performing a MITM to take > over the system, including all built packages - the new option > - --allow-untrusted (ALLOWUNTRUSTED) was added. I don't care what you think is a bad idea. > > I tested it with the official Debian repository, signed and > unsigned local repositories and it works fine for me. But I'm > only a "normal" pbuilder user, so I might have missed something. > Please test the patch. > > I haven't tested it with cdebootstrap, but it should work as > well. > > The old PBUILDERSATISFYDEPENDSOPT --check-key option was > deprecated and is no longer used (it emits a warning now) as > validation is the default now. > > The patch also contains documentation updates for the new > options/variables and updates for the NEWS file describing the > necessary changes to continue using untrusted packages (but > please don't do that - especially as a Debian developer). > > Please have a look and include the patch as soon as possible to > fix this security issue. Although I don't agree with most of the things you have stated in the mail, your patch looks reasonably well written and I don't object to applying it first and see who suffers; I suppose cowbuilder / qemubuilder people will, because they don't yet support the new option. > > Regards, > Simon > > - -- System Information: > Debian Release: wheezy/sid > APT prefers unstable > APT policy: (500, 'unstable') > Architecture: amd64 (x86_64) > > Kernel: Linux 3.2.0-1-amd64 (SMP w/8 CPU cores) > Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) > Shell: /bin/sh linked to /bin/dash > > Versions of packages pbuilder depends on: > ii cdebootstrap 0.5.8+b1 > ii coreutils 8.13-3 > ii debconf [debconf-2.0] 1.5.41 > ii debianutils 4.2.1 > ii debootstrap 1.0.38 > ii dpkg-dev 1.16.1.2 > ii wget 1.13.4-2 > > Versions of packages pbuilder recommends: > pn devscripts 2.11.4 > pn fakeroot 1.18.2-1 > pn sudo <none> > > Versions of packages pbuilder suggests: > pn cowdancer <none> > pn gdebi-core <none> > pn pbuilder-uml <none> > > - -- debconf information excluded > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.12 (GNU/Linux) > > iQIcBAEBCAAGBQJPVWhvAAoJEJL+/bfkTDL5ivAP/iayE8NRQnyk2HW8R+NiRXU3 > uavLilwwpmEZyuciu8GxMQIAhT9HYd/DlkhF9I+yBSd30TO3fl0xW7YV9SaIZ+bv > IPwnZbHri4KfeV9Zob/gd2jrT9A2QCoFRW0ny4XNCK3NvtWH5KuH+TG2Mq5CQqdN > j4VJ3+76oJcbQbU7AUYXfvKDAsEb7gX+VwTEFLS4GrPkni/FIQJ8HHJhlTscyuCD > gQANCoRFZHVSMaas3xqi9KYFKgVS4BZ5Z/9FZuLeY5kWBfcbnIhQloVOWTQZIMRI > PhnqP1g62XlPu71K3a/Y2RMAcy3Gs6sUbW4OianIr2iskCndejih/MCb+3LmBFCg > Ekxi/CcJGrc7a0pV57Qs8Iwkm1siRZZUxcp4xdD3mo9iayoOt4sfFyrvBCYryilQ > 7JKpQc3iNoV3EQql6KBu5G+GmFFWHmokpLvVY27n8LgkV2YSb2wrgxqXPfxcYHj7 > 0j/y2MFw+HOX/d5YSESMLxn9aiZBi7CkMtlMemzqizxlNlL/+OOZiDsi4vdH8L/j > Y0c2i9efjNeooc0/B9wASu/Ck8SWV8wW1EcfTag0p9Rp0avy4hoQUmG+MtgQsV0l > MQuWWysyxeJFX4Z8ooau82L6sIGC0L073JH6Y/C7uTOz9gKt+e5tV3fnU+pkWpqH > oF3CcmlykKX4SYzhUI/e > =6EPj > -----END PGP SIGNATURE----- > [2 0001-Enforce-valid-signed-repositories-by-default.patch <text/x-diff; > us-ascii (7bit)>] > >From cadc48fb599d436577a6efedc7f25e175652a3a1 Mon Sep 17 00:00:00 2001 > Message-Id: > <cadc48fb599d436577a6efedc7f25e175652a3a1.1330997290.git.si...@ruderich.org> > From: Simon Ruderich <si...@ruderich.org> > Date: Tue, 6 Mar 2012 02:00:48 +0100 > Subject: [PATCH] Enforce valid signed repositories by default. > > --- > debian/NEWS | 19 ++++++++++++++++++ > debian/pbuilder-test/00_prepinstall | 2 +- > pbuilder-checkparams | 18 +++++++++++++++++ > pbuilder-createbuildenv | 5 ++++ > pbuilder-satisfydepends-aptitude | 2 +- > pbuilder-satisfydepends-checkparams | 19 +++++++++-------- > pbuilder-updatebuildenv | 6 +++++ > pbuilder.8 | 20 ++++++++++++++++++- > pbuilderrc | 23 +++++++++++++++++---- > pbuilderrc.5 | 36 ++++++++++++++++++++++++++-------- > 10 files changed, 124 insertions(+), 26 deletions(-) > > diff --git a/debian/NEWS b/debian/NEWS > index 6d144b9..80d36e9 100644 > --- a/debian/NEWS > +++ b/debian/NEWS > @@ -1,3 +1,22 @@ > +pbuilder (0.207) unstable; urgency=low > + > + The default configuration will now only install trusted packages. This > + prevents building packages with manipulated sources or a system compromise > + due to a man-in-the-middle attack. > + > + However this also prevents installing packages from unsigned repositories > by > + default. > + > + If you really want to continue using unsigned repositories, you have to set > + ALLOWUNTRUSTED=yes in your .pbuilderrc or use the --allow-untrusted option. > + But if possible use a signed repository and set the used keys with the new > + --keyring option (can be passed multiple times). > + > + Due to this change the PBUILDERSATISFYDEPENDSOPT option --check-key is no > + longer necessary and thus deprecated. > + > + -- Simon Ruderich <si...@ruderich.org> Tue, 06 Mar 2012 02:02:38 +0100 > + > pbuilder (0.197) unstable; urgency=low > > The default configuration will now enable ccache. To disable installation > diff --git a/debian/pbuilder-test/00_prepinstall > b/debian/pbuilder-test/00_prepinstall > index 0c1d44c..1769cdd 100755 > --- a/debian/pbuilder-test/00_prepinstall > +++ b/debian/pbuilder-test/00_prepinstall > @@ -1,4 +1,4 @@ > #!/bin/bash > # Prepare and install packages used in the tests. > > -apt-get install -y --force-yes sudo > +apt-get install -y sudo > diff --git a/pbuilder-checkparams b/pbuilder-checkparams > index c031f18..3cdc48e 100755 > --- a/pbuilder-checkparams > +++ b/pbuilder-checkparams > @@ -207,6 +207,14 @@ while [ -n "$1" ]; do > DEBOOTSTRAP="$2"; > shift; shift; > ;; > + --allow-untrusted) > + ALLOWUNTRUSTED=yes; > + shift; > + ;; > + --keyring) > + APTKEYRINGS[${#APTKEYRINGS[@]}]="$2"; > + shift; shift; > + ;; > --save-after-login|--save-after-exec) > SAVE_AFTER_LOGIN=yes; > shift; > @@ -312,3 +320,13 @@ fi > > # sort BINDMOUNTS to ensure that deeper directories are mounted last > BINDMOUNTS="$(for i in $BINDMOUNTS; do echo $i; done | sort -u)" > + > +if [ "$ALLOWUNTRUSTED" = "yes" ]; then > + > PBUILDERSATISFYDEPENDSOPT[${#PBUILDERSATISFYDEPENDSOPT[@]}]='--allow-untrusted' > + # Also duplicated in pbuilder-satisfydepends-checkparams! > + # apt flag to accept untrusted packages > + APTGETOPT[${#APTGETOPT[@]}]='--force-yes' > + # aptitude flag to accept untrusted packages > + APTITUDEOPT[${#APTITUDEOPT[@]}]='-o' > + > APTITUDEOPT[${#APTITUDEOPT[@]}]='Aptitude::CmdLine::Ignore-Trust-Violations=true' > +fi > diff --git a/pbuilder-createbuildenv b/pbuilder-createbuildenv > index 6c69f98..b23c343 100755 > --- a/pbuilder-createbuildenv > +++ b/pbuilder-createbuildenv > @@ -78,6 +78,11 @@ mkdir -p "$BUILDPLACE/tmp/buildd" > > copy_local_configuration > installaptlines > +# To support package verification inside the repository we may have to import > +# additional keys. > +for KEY in "${APTKEYRINGS[@]}"; do > + $CHROOTEXEC /usr/bin/apt-key add - < "${KEY}" > /dev/null > +done > > executehooks "G" > > diff --git a/pbuilder-satisfydepends-aptitude > b/pbuilder-satisfydepends-aptitude > index 6ea6cb0..35a8374 100755 > --- a/pbuilder-satisfydepends-aptitude > +++ b/pbuilder-satisfydepends-aptitude > @@ -89,7 +89,7 @@ EOF > $CHROOTEXEC sh -c "cat \"$BUILD_DEP_DEB_CONTROL\"" > $CHROOTEXEC sh -c "dpkg-deb -b > \"$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy\"" > $CHROOTEXEC dpkg --force-depends --force-conflicts -i > "$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy.deb" || true > - $CHROOTEXEC aptitude -y --without-recommends -o > APT::Install-Recommends=false "${PBUILDER_APTITUDE_CHECK_OPTS[@]}" -o > Aptitude::ProblemResolver::StepScore=100 -o > "Aptitude::ProblemResolver::Hints::KeepDummy=reject > pbuilder-satisfydepends-dummy :UNINST" -o > Aptitude::ProblemResolver::Keep-All-Level=55000 -o > Aptitude::ProblemResolver::Remove-Essential-Level=maximum install > pbuilder-satisfydepends-dummy > + $CHROOTEXEC aptitude -y --without-recommends -o > APT::Install-Recommends=false "${APTITUDEOPT[@]}" -o > Aptitude::ProblemResolver::StepScore=100 -o > "Aptitude::ProblemResolver::Hints::KeepDummy=reject > pbuilder-satisfydepends-dummy :UNINST" -o > Aptitude::ProblemResolver::Keep-All-Level=55000 -o > Aptitude::ProblemResolver::Remove-Essential-Level=maximum install > pbuilder-satisfydepends-dummy > # check whether the aptitude's resolver kept the package > if ! $CHROOTEXEC dpkg -l pbuilder-satisfydepends-dummy 2>/dev/null | > grep -q ^ii; then > echo "Aptitude couldn't satisfy the build dependencies" > diff --git a/pbuilder-satisfydepends-checkparams > b/pbuilder-satisfydepends-checkparams > index 249b67e..b81c765 100755 > --- a/pbuilder-satisfydepends-checkparams > +++ b/pbuilder-satisfydepends-checkparams > @@ -27,13 +27,6 @@ FORCEVERSION="" > CONTINUE_FAIL="no" > CHROOTEXEC_AFTER_INTERNAL_CHROOTEXEC=no > > -# aptitude flag to ignore key verification > -PBUILDER_APTITUDE_CHECK_OPTS=( > - '-o' > - 'Aptitude::CmdLine::Ignore-Trust-Violations=true' ) > -# apt flag to ignore key verification > -PBUILDER_APT_GET_CHECK_OPTS="--force-yes" > - > while [ -n "$1" ]; do > case "$1" in > --control|-c) > @@ -80,8 +73,16 @@ while [ -n "$1" ]; do > shift; > ;; > --check-key) > - unset PBUILDER_APTITUDE_CHECK_OPTS > - unset PBUILDER_APT_GET_CHECK_OPTS > + log 'W: --check-key is now enabled by default and thus deprecated.' > + shift; > + ;; > + --allow-untrusted) > + # Also duplicated in pbuilder-checkparams! > + # apt flag to accept untrusted packages > + APTGETOPT[${#APTGETOPT[@]}]='--force-yes' > + # aptitude flag to accept untrusted packages > + APTITUDEOPT[${#APTITUDEOPT[@]}]='-o' > + > APTITUDEOPT[${#APTITUDEOPT[@]}]='Aptitude::CmdLine::Ignore-Trust-Violations=true' > shift; > ;; > --help|-h|*) > diff --git a/pbuilder-updatebuildenv b/pbuilder-updatebuildenv > index cdcc22c..737f53d 100755 > --- a/pbuilder-updatebuildenv > +++ b/pbuilder-updatebuildenv > @@ -72,6 +72,12 @@ $CHROOTEXEC /usr/bin/apt-get -q -y "${APTGETOPT[@]}" > autoremove || true > $CHROOTEXEC /usr/bin/apt-get -q -y "${APTGETOPT[@]}" install build-essential > dpkg-dev $EXTRAPACKAGES > save_aptcache > > +# To support package verification inside the repository we may have to import > +# additional keys. > +for KEY in "${APTKEYRINGS[@]}"; do > + $CHROOTEXEC /usr/bin/apt-key add - < "${KEY}" > /dev/null > +done > + > # optionally auto-clean apt-cache > if [ "${AUTOCLEANAPTCACHE}" = "yes" -a -n "$APTCACHE" ]; then > log "I: Cleaning the cached apt archive" > diff --git a/pbuilder.8 b/pbuilder.8 > index 478be40..a2f37c3 100644 > --- a/pbuilder.8 > +++ b/pbuilder.8 > @@ -361,7 +361,7 @@ specified in a space-delimited manner, surrounded in > double quotations, like: > .B """/srv /somedir /someotherdir""" > > .TP > -.BI "\-\-debootstrapopts " "\-\-variant=buildd" > +.BI "\-\-debootstrapopts " "\-\-variant=buildd" " " "\-\-keyring" " " > "/usr/share/keyrings/debian\-archive\-keyring.gpg" > Add extra command-line options to debootstrap. > > Specify multiple options through multiple instance of this > @@ -380,6 +380,24 @@ and default is to use > .B debootstrap. > > .TP > +.BI "\-\-allow\-untrusted " > +Allow untrusted (no key installed) and unsigned repositories. > +.BI Warning: > +Enabling this option may allow remote attackers to compromise the system. > +Better use signed repositories and > +.B "\-\-keyring" > +to add the key(s). > + > +.TP > +.BI "\-\-keyring " "path/to/keyring" > +Additional keyrings to use for package verification with apt, not used for > +debootstrap (use > +.B "\-\-debootstrapopts" > +). Use this to add (local) signed repositories. By default the > +debian-archive-keyring package inside the chroot is used. Can be specified > +multiple times. > + > +.TP > .BI "\-\-save\-after\-login " > .TP > .BI "\-\-save\-after\-exec " > diff --git a/pbuilderrc b/pbuilderrc > index 2ee51e6..b9f1b95 100644 > --- a/pbuilderrc > +++ b/pbuilderrc > @@ -53,11 +53,19 @@ PBUILDERROOTCMD="sudo -E" > # not support unsigned APT repositories > PBUILDERSATISFYDEPENDSCMD="/usr/lib/pbuilder/pbuilder-satisfydepends" > > -# You can optionally make pbuilder check key by setting the following flags > -# PBUILDERSATISFYDEPENDSOPT=('--check-key') > -# unset PBUILDERSATISFYDEPENDSOPT > -# option to pass to apt-get always. > -export APTGETOPT=('--force-yes') > +# Arguments for $PBUILDERSATISFYDEPENDSCMD. > +# PBUILDERSATISFYDEPENDSOPT=() > + > +# You can optionally make pbuilder accept untrusted repositories by setting > +# this option to yes, but this may allow remote attackers to compromise the > +# system. Better set a valid key for the signed (local) repository with > +# $APTKEYRINGS (see below). > +ALLOWUNTRUSTED=no > + > +# Option to pass to apt-get always. > +export APTGETOPT=() > +# Option to pass to aptitude always. > +export APTITUDEOPT=() > > #Command-line option passed on to dpkg-buildpackage. > #DEBBUILDOPTS="-IXXX -iXXX" > @@ -82,6 +90,11 @@ DEBOOTSTRAPOPTS=( > # or unset it to make it not a buildd type. > # unset DEBOOTSTRAPOPTS > > +# Keyrings to use for package verification with apt, not used for debootstrap > +# (use DEBOOTSTRAPOPTS). By default the debian-archive-keyring package inside > +# the chroot is used. > +APTKEYRINGS=() > + > # Set the PATH I am going to use inside pbuilder: default is > "/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" > export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" > > diff --git a/pbuilderrc.5 b/pbuilderrc.5 > index 14fde73..40fc8bb 100644 > --- a/pbuilderrc.5 > +++ b/pbuilderrc.5 > @@ -178,17 +178,25 @@ may also be used to reset the list of options. > > The default value is to build source and binary package. > .TP > -.BI "DEBOOTSTRAPOPTS=" "( '\-\-variant=buildd' )" > +.BI "DEBOOTSTRAPOPTS=" "( '\-\-variant=buildd' '\-\-keyring' > '/usr/share/keyrings/debian\-archive\-keyring.gpg' )" > When this option is set to > .B "\-\-variant=buildd" > .B "pbuilder" > will invoke > .B "$DEBOOTSTRAP" > -with "\-\-variant=buildd" > +with > +.B "\-\-variant=buildd" > option, which results in debootstrap creating a minimal chroot for > buildd instead of trying to create a minimal installation chroot. > -.B "DEBOOTSTRAP" > -is another directive in this file. > +.B "\-\-keyring" > +is used to specify a keyring for debootstrap. > +.TP > +.BI "APTKEYRINGS=" "()" > +Additional keyrings to use for package verification with apt, not used for > +debootstrap (use > +.B "$DEBOOTSTRAPOPTS" > +). Use this to add (local) signed repositories. By default the > +debian-archive-keyring package inside the chroot is used. > .TP > .BI "DEBOOTSTRAP=" "debootstrap" > Use this option to switch the implementation of > @@ -329,15 +337,25 @@ used until 0.172. > > The default is now "aptitude". > .TP > -.BI "PBUILDERSATISFYDEPENDSOPT=" "('\-\-check\-key')" > +.BI "PBUILDERSATISFYDEPENDSOPT=" "()" > Array of flags to give to pbuilder\-satisfydepends. > -Specifying \-\-check\-key here will try to verify key signatures. > > .TP > -.BI "APTGETOPT=" "('\-\-force\-yes')" > +.BI "ALLOWUNTRUSTED=" "no" > +Allow untrusted (no key installed) and unsigned repositories. > +.BI Warning: > +Enabling this option may allow remote attackers to compromise the system. > +Better use signed repositories and > +.B "$APTKEYRINGS" > +to add the key(s). > + > +.TP > +.BI "APTGETOPT=" "()" > Extra flags to give to apt\-get. > -Default is \-\-force\-yes, which will skip key verification of packages > -to be installed. Unset if you want to enable key verification. > + > +.TP > +.BI "APTITUDEGETOPT=" "()" > +Extra flags to give to aptitude. > > .TP > .BI "REMOVEPACKAGES=" "lilo" > -- > 1.7.9.1 > > [3 0001-Enforce-valid-signed-repositories-by-default.patch.asc > <application/pgp-signature (base64)>] > > [4 <text/plain; us-ascii (7bit)>] > _______________________________________________ > Pbuilder-maint mailing list > pbuilder-ma...@lists.alioth.debian.org > http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pbuilder-maint -- To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org