[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[SCM] Debian package checker branch, master, updated. 2.5.1-218-g688f92e



The following commit has been merged in the master branch:
commit 765609fc11e93449637ddb1e4668b9242d93078b
Author: Niels Thykier <niels@thykier.net>
Date:   Wed Aug 10 17:13:48 2011 +0200

    Prevent info disclosure via symlinks in c/debian-source-dir
    
    Lintian could be tricked into revealing the presence of one or
    more files on the host system via specially crafted source
    packages.

diff --git a/checks/debian-source-dir b/checks/debian-source-dir
index 87fe65e..b33fbfc 100644
--- a/checks/debian-source-dir
+++ b/checks/debian-source-dir
@@ -39,7 +39,7 @@ my $info = shift;
 
 my $dsrc = $info->debfiles('source');
 
-if (-e "$dsrc/format") {
+if ( ! -l "$dsrc/format" && -e "$dsrc/format") {
     open(FORMAT, '<', "$dsrc/format") or
         fail("cannot read debian/source/format: $!");
     my $format = <FORMAT>;
@@ -49,27 +49,31 @@ if (-e "$dsrc/format") {
     tag 'missing-debian-source-format';
 }
 
-if (-s "$dsrc/git-patches") {
+if ( ! -l "$dsrc/git-patches" && -s "$dsrc/git-patches") {
     open (GITPATCHES, "$dsrc/git-patches")
 	or fail("cannot open debian/source/git-patches: $!");
     if (grep !/^\s*+#|^\s*+$/o, <GITPATCHES>) {
 	my $dpseries = $info->debfiles('patches/series');
-	if (! -r $dpseries ) {
-	    tag 'git-patches-not-exported';
-	} else {
-	    open (DEBSERIES, $dpseries)
-		or fail("cannot open debian/patches/series: $!");
-	    my $comment_line = <DEBSERIES>;
-	    my $count = grep !/^\s*+\#|^\s*+$/o, <DEBSERIES>;
-	    tag 'git-patches-not-exported'
-		unless ($count && ($comment_line =~ m/^\s*\#.*quilt-patches-deb-export-hook/o));
-	    close(DEBSERIES);
+	# gitpkg does not create series as a link, so this is most likely
+	# a traversal attempt.
+	if (! -l $dpseries ) {
+	    if (! -r $dpseries ) {
+		tag 'git-patches-not-exported';
+	    } else {
+		open (DEBSERIES, $dpseries)
+		    or fail("cannot open debian/patches/series: $!");
+		my $comment_line = <DEBSERIES>;
+		my $count = grep !/^\s*+\#|^\s*+$/o, <DEBSERIES>;
+		tag 'git-patches-not-exported'
+		    unless ($count && ($comment_line =~ m/^\s*\#.*quilt-patches-deb-export-hook/o));
+		close(DEBSERIES);
+	    }
 	}
     }
     close(GITPATCHES);
 }
 
-if (-d $dsrc ) {
+if ( ! -l $dsrc && -d $dsrc ) {
     opendir(DEBSRC, $dsrc) or fail("cannot opendir debian/source/: $!");
     my $file;
     while ($file = readdir(DEBSRC)) {
diff --git a/debian/changelog b/debian/changelog
index 4ceb628..2728d09 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -75,9 +75,12 @@ lintian (2.5.2) UNRELEASED; urgency=low
     + [NT] Do not consider "debian/debhelper" a temporary debhelper
       file.  Some packages uses this a directory to store their
       debhelper files.
-  * checks/debian-source-dir.desc:
+  * checks/debian-source-dir{,.desc}:
     + [NT] Added missing word in the tag description for
       git-patches-not-exported.
+    + [NT] Fixed information disclosure issue, where Lintian could
+      be tricked into disclosing the present of files on the host
+      system via specially crafted source packages.
   * checks/duplicate-files:
     + [NT] Exclude  __init__.py files from the check as they are
       required even if they are empty.  Thanks to Daniele Tricoli
diff --git a/t/source/control-field-traversal-3/Makefile b/t/source/debian-source-dir-traversal-1/Makefile
similarity index 74%
copy from t/source/control-field-traversal-3/Makefile
copy to t/source/debian-source-dir-traversal-1/Makefile
index 8bf06c1..284c306 100644
--- a/t/source/control-field-traversal-3/Makefile
+++ b/t/source/debian-source-dir-traversal-1/Makefile
@@ -1,13 +1,19 @@
-name = control-field-traversal-3
+name = debian-source-dir-traversal-1
 dir  = $(name)-1
 
 all:
 	mkdir $(dir)
 	mkdir $(dir)/debian
 	cp changelog copyright control rules $(dir)/debian/
+	# prevent patch-system-but-no-source-readme
+	echo "Hallo World" > $(dir)/debian/README.source
 	echo 7 > $(dir)/debian/compat
 	mkdir $(dir)/debian/source
 	echo 1.0 > $(dir)/debian/source/format
+	# link to index file for the lab entry
+	ln -s ../../index $(dir)/debian/source/git-patches
+	mkdir $(dir)/debian/patches
+	touch $(dir)/debian/patches/series
 	tar cfz $(name)_1.tar.gz $(dir)
 	cp dsc.in $(name)_1.dsc
 	perl -I$(LINTIAN_ROOT)/lib -MUtil -i -pe \
diff --git a/t/source/debian-source-dir-traversal-1/desc b/t/source/debian-source-dir-traversal-1/desc
new file mode 100644
index 0000000..7c1598c
--- /dev/null
+++ b/t/source/debian-source-dir-traversal-1/desc
@@ -0,0 +1,4 @@
+Testname: debian-source-dir-traversal-1
+Sequence: 6000
+Version: 1.0
+Description: Test for information discloure via d/source
diff --git a/t/source/debian-source-dir-traversal-1/dsc.in b/t/source/debian-source-dir-traversal-1/dsc.in
new file mode 100644
index 0000000..8bf7ec8
--- /dev/null
+++ b/t/source/debian-source-dir-traversal-1/dsc.in
@@ -0,0 +1,14 @@
+Format: 1.0
+Source: debian-source-dir-traversal-1
+Binary: debian-source-dir-traversal-1
+Architecture: all
+Version: 1
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Standards-Version: 3.9.2
+Build-Depends: debhelper (>= 7), quilt
+Checksums-Sha1:
+ @SHA1@ @SIZE@ debian-source-dir-traversal-1_1.tar.gz
+Checksums-Sha256:
+ @SHA256@ @SIZE@ debian-source-dir-traversal-1_1.tar.gz
+Files:
+ @MD5@ @SIZE@ debian-source-dir-traversal-1_1.tar.gz
diff --git a/t/debs/deb-format-record-size/tags b/t/source/debian-source-dir-traversal-1/tags
similarity index 100%
copy from t/debs/deb-format-record-size/tags
copy to t/source/debian-source-dir-traversal-1/tags
diff --git a/t/source/control-field-traversal-2/Makefile b/t/source/debian-source-dir-traversal-2/Makefile
similarity index 79%
copy from t/source/control-field-traversal-2/Makefile
copy to t/source/debian-source-dir-traversal-2/Makefile
index 3eff987..10d87d2 100644
--- a/t/source/control-field-traversal-2/Makefile
+++ b/t/source/debian-source-dir-traversal-2/Makefile
@@ -1,13 +1,13 @@
-name = control-field-traversal-2
+name = debian-source-dir-traversal-2
 dir  = $(name)-1
 
 all:
 	mkdir $(dir)
 	mkdir $(dir)/debian
 	cp changelog copyright control rules $(dir)/debian/
-	echo 7 > $(dir)/debian/compat
-	mkdir $(dir)/debian/source
-	echo 1.0 > $(dir)/debian/source/format
+	# Link to the lab entry - should trigger a myriad of
+	# "unknown-file-in-debian-source" tags, if lintian is vulnerable
+	ln -s ../ $(dir)/debian/source
 	tar cfz $(name)_1.tar.gz $(dir)
 	cp dsc.in $(name)_1.dsc
 	perl -I$(LINTIAN_ROOT)/lib -MUtil -i -pe \
diff --git a/t/source/debian-source-dir-traversal-2/desc b/t/source/debian-source-dir-traversal-2/desc
new file mode 100644
index 0000000..5832730
--- /dev/null
+++ b/t/source/debian-source-dir-traversal-2/desc
@@ -0,0 +1,4 @@
+Testname: debian-source-dir-traversal-2
+Sequence: 6000
+Version: 1.0
+Description: Test for information discloure via d/source
diff --git a/t/source/debian-source-dir-traversal-2/dsc.in b/t/source/debian-source-dir-traversal-2/dsc.in
new file mode 100644
index 0000000..5827f4b
--- /dev/null
+++ b/t/source/debian-source-dir-traversal-2/dsc.in
@@ -0,0 +1,14 @@
+Format: 1.0
+Source: debian-source-dir-traversal-2
+Binary: debian-source-dir-traversal-2
+Architecture: all
+Version: 1
+Maintainer: Debian Lintian Maintainers <lintian-maint@debian.org>
+Standards-Version: 3.9.2
+Build-Depends: debhelper (>= 7)
+Checksums-Sha1:
+ @SHA1@ @SIZE@ debian-source-dir-traversal-2_1.tar.gz
+Checksums-Sha256:
+ @SHA256@ @SIZE@ debian-source-dir-traversal-2_1.tar.gz
+Files:
+ @MD5@ @SIZE@ debian-source-dir-traversal-2_1.tar.gz
diff --git a/t/source/debian-source-dir-traversal-2/tags b/t/source/debian-source-dir-traversal-2/tags
new file mode 100644
index 0000000..97fd61a
--- /dev/null
+++ b/t/source/debian-source-dir-traversal-2/tags
@@ -0,0 +1,2 @@
+I: debian-source-dir-traversal-2 source: missing-debian-source-format
+W: debian-source-dir-traversal-2 source: package-uses-deprecated-debhelper-compat-version 1

-- 
Debian package checker


Reply to: