summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2016-09-28 22:04:07 +0000
committerEd Maste <emaste@FreeBSD.org>2016-09-28 22:04:07 +0000
commit0a66c4b08aa3b8f8070936d44c3f874e2b6a3d5d (patch)
treee7f4d84698365e0ea7b1803fb9871a32bac31597
parent336408d8fb8655e374326771dcd3211744216900 (diff)
MFS r306418: portsnap: only move expected snapshot contents from snap/ to files/
Previously it was possible to smuggle in addional files that would be used by later portsnap runs. Now we only move those files expected to be in the snapshot into files/ and require that there are no unexpected files. This was used by portsnap attacks 2, 3, and 4 in the "non-cryptanalytic attacks against FreeBSD update components" anonymous gist. Approved by: re (gjb)
Notes
svn path=/releng/11.0/; revision=306419
-rw-r--r--usr.sbin/portsnap/portsnap/portsnap.sh7
1 files changed, 7 insertions, 0 deletions
diff --git a/usr.sbin/portsnap/portsnap/portsnap.sh b/usr.sbin/portsnap/portsnap/portsnap.sh
index 3dcf618ab53a..501c530acd60 100644
--- a/usr.sbin/portsnap/portsnap/portsnap.sh
+++ b/usr.sbin/portsnap/portsnap/portsnap.sh
@@ -691,6 +691,13 @@ fetch_snapshot() {
fetch_index_sanity || return 1
# Verify the snapshot contents
cut -f 2 -d '|' INDEX.new | fetch_snapshot_verify || return 1
+ cut -f 2 -d '|' tINDEX.new INDEX.new | sort -u > files.expected
+ find snap -mindepth 1 | sed -E 's^snap/(.*)\.gz^\1^' | sort > files.snap
+ if ! cmp -s files.expected files.snap; then
+ echo "unexpected files in snapshot."
+ return 1
+ fi
+ rm files.expected files.snap
echo "done."
# Move files into their proper locations