|
@@ -97,166 +97,181 @@ updatewithwarnings() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
runtest() {
|
|
runtest() {
|
|
|
|
|
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by' 'Joe Sixpack'
|
|
|
|
|
- testsuccess aptget update
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptold
|
|
installaptold
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Good warm archive signed by' 'Joe Sixpack'
|
|
|
prepare "${PKGFILE}-new"
|
|
prepare "${PKGFILE}-new"
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Good warm archive signed by' 'Joe Sixpack'
|
|
|
|
|
- testsuccess aptget update
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptnew
|
|
installaptnew
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by' 'Rex Expired'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
|
signreleasefiles 'Rex Expired'
|
|
signreleasefiles 'Rex Expired'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by' 'Rex Expired'
|
|
|
|
|
updatewithwarnings '^W: .* KEYEXPIRED'
|
|
updatewithwarnings '^W: .* KEYEXPIRED'
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
failaptold
|
|
failaptold
|
|
|
rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by' 'Marvin Paranoid'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Marvin Paranoid'
|
|
signreleasefiles 'Marvin Paranoid'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by' 'Marvin Paranoid'
|
|
|
|
|
updatewithwarnings '^W: .* NO_PUBKEY'
|
|
updatewithwarnings '^W: .* NO_PUBKEY'
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
failaptold
|
|
failaptold
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Bad warm archive signed by' 'Joe Sixpack'
|
|
|
prepare "${PKGFILE}-new"
|
|
prepare "${PKGFILE}-new"
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Bad warm archive signed by' 'Joe Sixpack'
|
|
|
|
|
- testsuccess aptget update
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptnew
|
|
installaptnew
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by' 'Joe Sixpack'
|
|
|
|
|
- testsuccess aptget update
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptold
|
|
installaptold
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Good warm archive signed by' 'Marvin Paranoid'
|
|
|
prepare "${PKGFILE}-new"
|
|
prepare "${PKGFILE}-new"
|
|
|
signreleasefiles 'Marvin Paranoid'
|
|
signreleasefiles 'Marvin Paranoid'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Good warm archive signed by' 'Marvin Paranoid'
|
|
|
|
|
updatewithwarnings '^W: .* NO_PUBKEY'
|
|
updatewithwarnings '^W: .* NO_PUBKEY'
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptold
|
|
installaptold
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Good warm archive signed by' 'Rex Expired'
|
|
|
prepare "${PKGFILE}-new"
|
|
prepare "${PKGFILE}-new"
|
|
|
cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
|
signreleasefiles 'Rex Expired'
|
|
signreleasefiles 'Rex Expired'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Good warm archive signed by' 'Rex Expired'
|
|
|
|
|
updatewithwarnings '^W: .* KEYEXPIRED'
|
|
updatewithwarnings '^W: .* KEYEXPIRED'
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptold
|
|
installaptold
|
|
|
rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Good warm archive signed by' 'Joe Sixpack'
|
|
|
prepare "${PKGFILE}-new"
|
|
prepare "${PKGFILE}-new"
|
|
|
signreleasefiles
|
|
signreleasefiles
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Good warm archive signed by' 'Joe Sixpack'
|
|
|
|
|
- testsuccess aptget update
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptnew
|
|
installaptnew
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by good keyring' 'Marvin Paranoid'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Marvin Paranoid'
|
|
signreleasefiles 'Marvin Paranoid'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by good keyring' 'Marvin Paranoid'
|
|
|
|
|
local MARVIN="$(readlink -f keys/marvinparanoid.pub)"
|
|
local MARVIN="$(readlink -f keys/marvinparanoid.pub)"
|
|
|
sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
|
|
sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
|
|
|
- testsuccess aptget update -o Debug::pkgAcquire::Worker=1
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptold
|
|
installaptold
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by bad keyring' 'Joe Sixpack'
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by bad keyring' 'Joe Sixpack'
|
|
|
|
|
updatewithwarnings '^W: .* NO_PUBKEY'
|
|
updatewithwarnings '^W: .* NO_PUBKEY'
|
|
|
|
|
|
|
|
sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
|
|
sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
|
|
|
local MARVIN="$(aptkey --keyring $MARVIN finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
|
|
local MARVIN="$(aptkey --keyring $MARVIN finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by good keyid' 'Marvin Paranoid'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Marvin Paranoid'
|
|
signreleasefiles 'Marvin Paranoid'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by good keyid' 'Marvin Paranoid'
|
|
|
|
|
sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
|
|
sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
|
|
|
cp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
|
|
cp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
|
|
|
- testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
testsuccessequal "$(cat "${PKGFILE}")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
installaptold
|
|
installaptold
|
|
|
rm -f rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
|
|
rm -f rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
|
|
|
|
|
|
|
|
|
|
+ msgmsg 'Cold archive signed by bad keyid' 'Joe Sixpack'
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
find aptarchive/ -name "$DELETEFILE" -delete
|
|
|
- msgmsg 'Cold archive signed by bad keyid' 'Joe Sixpack'
|
|
|
|
|
updatewithwarnings '^W: .* be verified because the public key is not available: .*'
|
|
updatewithwarnings '^W: .* be verified because the public key is not available: .*'
|
|
|
|
|
|
|
|
sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
|
|
sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 #" rootdir/etc/apt/sources.list.d/*
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
runtest2() {
|
|
runtest2() {
|
|
|
|
|
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
|
|
|
prepare "${PKGFILE}"
|
|
prepare "${PKGFILE}"
|
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
rm -rf rootdir/var/lib/apt/lists
|
|
|
signreleasefiles 'Joe Sixpack'
|
|
signreleasefiles 'Joe Sixpack'
|
|
|
- msgmsg 'Cold archive signed by' 'Joe Sixpack'
|
|
|
|
|
- testsuccess aptget update
|
|
|
|
|
|
|
+ successfulaptgetupdate
|
|
|
|
|
|
|
|
# New .deb but now an unsigned archive. For example MITM to circumvent
|
|
# New .deb but now an unsigned archive. For example MITM to circumvent
|
|
|
# package verification.
|
|
# package verification.
|
|
|
|
|
+ msgmsg 'Warm archive signed by' 'nobody'
|
|
|
prepare "${PKGFILE}-new"
|
|
prepare "${PKGFILE}-new"
|
|
|
find aptarchive/ -name InRelease -delete
|
|
find aptarchive/ -name InRelease -delete
|
|
|
find aptarchive/ -name Release.gpg -delete
|
|
find aptarchive/ -name Release.gpg -delete
|
|
|
- msgmsg 'Warm archive signed by' 'nobody'
|
|
|
|
|
updatewithwarnings 'W: .* no longer signed.'
|
|
updatewithwarnings 'W: .* no longer signed.'
|
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
failaptnew
|
|
failaptnew
|
|
|
|
|
|
|
|
# Unsigned archive from the beginning must also be detected.
|
|
# Unsigned archive from the beginning must also be detected.
|
|
|
- rm -rf rootdir/var/lib/apt/lists
|
|
|
|
|
msgmsg 'Cold archive signed by' 'nobody'
|
|
msgmsg 'Cold archive signed by' 'nobody'
|
|
|
|
|
+ rm -rf rootdir/var/lib/apt/lists
|
|
|
updatewithwarnings 'W: .* is not signed.'
|
|
updatewithwarnings 'W: .* is not signed.'
|
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
testsuccessequal "$(cat "${PKGFILE}-new")
|
|
|
" aptcache show apt
|
|
" aptcache show apt
|
|
|
failaptnew
|
|
failaptnew
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+runtest3() {
|
|
|
|
|
+ export APT_TESTS_DIGEST_ALGO="$1"
|
|
|
|
|
+ msgmsg "Running base test with digest $1"
|
|
|
|
|
+ runtest2
|
|
|
|
|
+
|
|
|
|
|
+ DELETEFILE="InRelease"
|
|
|
|
|
+ msgmsg "Running test with deletion of $DELETEFILE and digest $1"
|
|
|
|
|
+ runtest
|
|
|
|
|
+
|
|
|
|
|
+ DELETEFILE="Release.gpg"
|
|
|
|
|
+ msgmsg "Running test with deletion of $DELETEFILE and digest $1"
|
|
|
|
|
+ runtest
|
|
|
|
|
+
|
|
|
|
|
+ unset APT_TESTS_DIGEST_ALGO
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
# diable some protection by default and ensure we still do the verification
|
|
# diable some protection by default and ensure we still do the verification
|
|
|
# correctly
|
|
# correctly
|
|
|
cat > rootdir/etc/apt/apt.conf.d/weaken-security <<EOF
|
|
cat > rootdir/etc/apt/apt.conf.d/weaken-security <<EOF
|
|
@@ -264,13 +279,16 @@ Acquire::AllowInsecureRepositories "1";
|
|
|
Acquire::AllowDowngradeToInsecureRepositories "1";
|
|
Acquire::AllowDowngradeToInsecureRepositories "1";
|
|
|
EOF
|
|
EOF
|
|
|
|
|
|
|
|
-msgmsg "Running base test"
|
|
|
|
|
-runtest2
|
|
|
|
|
-
|
|
|
|
|
-DELETEFILE="InRelease"
|
|
|
|
|
-msgmsg "Running test with deletion of $DELETEFILE"
|
|
|
|
|
-runtest
|
|
|
|
|
|
|
+# an all-round good hash
|
|
|
|
|
+successfulaptgetupdate() {
|
|
|
|
|
+ testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
|
|
|
|
|
+}
|
|
|
|
|
+runtest3 'SHA512'
|
|
|
|
|
|
|
|
-DELETEFILE="Release.gpg"
|
|
|
|
|
-msgmsg "Running test with deletion of $DELETEFILE"
|
|
|
|
|
-runtest
|
|
|
|
|
|
|
+# a hash we consider weak and therefore warn about
|
|
|
|
|
+rm -f rootdir/etc/apt/apt.conf.d/no-sha1
|
|
|
|
|
+successfulaptgetupdate() {
|
|
|
|
|
+ testwarning aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
|
|
|
|
|
+ testsuccess grep 'uses weak digest algorithm' rootdir/tmp/testwarning.output
|
|
|
|
|
+}
|
|
|
|
|
+runtest3 'SHA1'
|