Package: duplicity
Version: 0.8.04-2ubuntu1
Severity: normal

Dear Maintainer,

Many years ago, duplicity had a bug that allowed you to resume a backup with a 
different
password than the one with which you started the backup. This left your backup 
chain
in an unrecoverable state, since duplicity doesn't know how to restore from a 
chain like
that.

It was fixed upstream. But the fix didn't properly handle using a gpg 
encryption key
(rather than a symmetric password). So Debian added the patch 01-reverify that 
disabled
the fix upstream.

But then duplicity fixed the issue with gpg encryption keys and Debian never 
dropped its
patch. Which left the original password-swap bug in place.

Can Debian drop 01-reverify please? I've attached two scripts that demonstrate 
each bug
and you can test that both work after dropping the patch.

You can run switchpass.sh to test the original password-swap bug. And run 
gpgkey.sh to
test the gpg encryption key issue (this one needs you to specify both KEY and 
PASSPHRASE
environment variables -- your gpg key id and passphrase respectively).

Both should report "Everything worked!" at the end if the bugs are fixed.
Or "Bug exists! :(" if the bug is present.

Upstream password-swap bug: https://bugs.launchpad.net/duplicity/+bug/878964
Upstream gpg-key bug: https://bugs.launchpad.net/duplicity/+bug/946988

Thanks!

-- System Information:
Debian Release: buster/sid
  APT prefers eoan-updates
  APT policy: (500, 'eoan-updates'), (500, 'eoan-security'), (500, 'eoan')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.3.0-19-generic (SMP w/4 CPU cores)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages duplicity depends on:
ii  gnupg              2.2.12-1ubuntu3
ii  gnupg1             1.4.23-1
ii  libc6              2.30-0ubuntu2
ii  librsync2          2.0.2-1ubuntu1
ii  python3            3.7.5-1
ii  python3-fasteners  0.12.0-5
ii  python3-future     0.16.0-1
ii  python3-lockfile   1:0.12.2-2ubuntu1

Versions of packages duplicity recommends:
ii  python3-oauthlib  2.1.0-1
ii  python3-paramiko  2.6.0-1
ii  python3-pexpect   4.6.0-1
ii  python3-urllib3   1.24.1-1ubuntu1
ii  rsync             3.1.3-6

Versions of packages duplicity suggests:
pn  lftp                 <none>
pn  ncftp                <none>
ii  par2                 0.8.0-1
pn  python3-boto         <none>
ii  python3-pip          18.1-5
pn  python3-swiftclient  <none>
pn  tahoe-lafs           <none>

-- no debconf information
#!/bin/sh

rm -rf /tmp/dupbadpass /tmp/dupbadrestore

echo "Making first, interrupted backup"
PASSPHRASE=testpass duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass 
--volsize 1 --fail-on-volume 2 --verbosity 1

echo "Finishing that backup with the wrong password"
PASSPHRASE=badpass duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass 
--volsize 1 --fail-on-volume 3 --verbosity 1

echo -n "Now, is vol1 encrypted with right pass?  "
if gpg --decrypt --passphrase testpass --pinentry-mode=loopback 
/tmp/dupbadpass/duplicity-full*.vol1.difftar.gpg >/dev/null 2>&1; then
  echo "Yes!"
else
  echo "Nope...? Something is deeply wrong"
fi

echo -n "And vol3 with the wrong one?  "
if [ -z "$(ls /tmp/dupbadpass/duplicity-full*.vol3.difftar.gpg 2>/dev/null)" ]; 
then
  echo "No vol3 exists"
  echo "Everything worked!"
elif gpg --decrypt --passphrase badpass --pinentry-mode=loopback 
/tmp/dupbadpass/duplicity-full*.vol3.difftar.gpg >/dev/null 2>&1; then
  echo "Yes!"
  echo "Bug exists! :("
else
  echo "Nope...? Something is deeply wrong"
fi


#!/bin/sh

killall gpg-agent
rm -rf ~/.cache/duplicity/dupbadpass /tmp/dupbadpass /tmp/dupbadrestore

echo "Making first, interrupted backup"
duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass --volsize 1 
--fail-on-volume 2 --encrypt-key $KEY

echo "Finishing that backup"
duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass --volsize 1 
--fail-on-volume 3 --encrypt-key $KEY

if [ -n "$(ls /tmp/dupbadpass/duplicity-full*.vol3.difftar.gpg 2>/dev/null)" ]; 
then
  echo "Everything worked!"
else
  echo "Bug exists! :("
fi

Reply via email to