summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2019-01-12 18:47:36 +0000
committerColin Watson <cjwatson@debian.org>2019-01-12 18:48:52 +0000
commit7e34cc252e1c42369aaaa8e1c379699ccf8c9e0e (patch)
tree642e1d00319b5f4abafeea0887c29d7904f873ed
parenta604dd3f234ebbb2823e6af39d58966d4c7d7282 (diff)
parentdee21e97428e69d30e2d15c71f3e7cc08bf8e4f8 (diff)
scp: disallow empty incoming filename or "."
Closes: #919101
-rw-r--r--debian/.git-dpm4
-rw-r--r--debian/changelog2
-rw-r--r--debian/patches/scp-disallow-dot-or-empty-filename.patch32
-rw-r--r--debian/patches/series1
-rw-r--r--scp.c3
5 files changed, 39 insertions, 3 deletions
diff --git a/debian/.git-dpm b/debian/.git-dpm
index f6384e17d..10491782a 100644
--- a/debian/.git-dpm
+++ b/debian/.git-dpm
@@ -1,6 +1,6 @@
1# see git-dpm(1) from git-dpm package 1# see git-dpm(1) from git-dpm package
21d2a55436d4b556269f42ad5f7e16608b5a8ed74 2dee21e97428e69d30e2d15c71f3e7cc08bf8e4f8
31d2a55436d4b556269f42ad5f7e16608b5a8ed74 3dee21e97428e69d30e2d15c71f3e7cc08bf8e4f8
43d246f10429fc9a37b98eabef94fe8dc7c61002b 43d246f10429fc9a37b98eabef94fe8dc7c61002b
53d246f10429fc9a37b98eabef94fe8dc7c61002b 53d246f10429fc9a37b98eabef94fe8dc7c61002b
6openssh_7.9p1.orig.tar.gz 6openssh_7.9p1.orig.tar.gz
diff --git a/debian/changelog b/debian/changelog
index aee8f7b88..864e7b689 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,8 @@ openssh (1:7.9p1-5) UNRELEASED; urgency=medium
4 only used by sshd (closes: #858050). 4 only used by sshd (closes: #858050).
5 * Drop obsolete alternate build-dependency on libssl1.0-dev (closes: 5 * Drop obsolete alternate build-dependency on libssl1.0-dev (closes:
6 #917342). 6 #917342).
7 * CVE-2018-20685: Apply upstream scp patch to disallow empty incoming
8 filename or ones that refer to the current directory (closes: #919101).
7 9
8 -- Colin Watson <cjwatson@debian.org> Thu, 06 Dec 2018 18:16:30 +0000 10 -- Colin Watson <cjwatson@debian.org> Thu, 06 Dec 2018 18:16:30 +0000
9 11
diff --git a/debian/patches/scp-disallow-dot-or-empty-filename.patch b/debian/patches/scp-disallow-dot-or-empty-filename.patch
new file mode 100644
index 000000000..716f2ffa8
--- /dev/null
+++ b/debian/patches/scp-disallow-dot-or-empty-filename.patch
@@ -0,0 +1,32 @@
1From dee21e97428e69d30e2d15c71f3e7cc08bf8e4f8 Mon Sep 17 00:00:00 2001
2From: "djm@openbsd.org" <djm@openbsd.org>
3Date: Fri, 16 Nov 2018 03:03:10 +0000
4Subject: upstream: disallow empty incoming filename or ones that refer to the
5
6current directory; based on report/patch from Harry Sintonen
7
8OpenBSD-Commit-ID: f27651b30eaee2df49540ab68d030865c04f6de9
9
10Origin: upstream, https://anongit.mindrot.org/openssh.git/commit/?id=6010c0303a422a9c5fa8860c061bf7105eb7f8b2
11Bug-Debian: https://bugs.debian.org/919101
12Last-Update: 2019-01-12
13
14Patch-Name: scp-disallow-dot-or-empty-filename.patch
15---
16 scp.c | 3 ++-
17 1 file changed, 2 insertions(+), 1 deletion(-)
18
19diff --git a/scp.c b/scp.c
20index ed2864250..7163d33dc 100644
21--- a/scp.c
22+++ b/scp.c
23@@ -1114,7 +1114,8 @@ sink(int argc, char **argv)
24 SCREWUP("size out of range");
25 size = (off_t)ull;
26
27- if ((strchr(cp, '/') != NULL) || (strcmp(cp, "..") == 0)) {
28+ if (*cp == '\0' || strchr(cp, '/') != NULL ||
29+ strcmp(cp, ".") == 0 || strcmp(cp, "..") == 0) {
30 run_err("error: unexpected filename: %s", cp);
31 exit(1);
32 }
diff --git a/debian/patches/series b/debian/patches/series
index a248f086a..a6fc19449 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -24,3 +24,4 @@ restore-authorized_keys2.patch
24seccomp-s390-flock-ipc.patch 24seccomp-s390-flock-ipc.patch
25seccomp-s390-ioctl-ep11-crypto.patch 25seccomp-s390-ioctl-ep11-crypto.patch
26conch-old-privkey-format.patch 26conch-old-privkey-format.patch
27scp-disallow-dot-or-empty-filename.patch
diff --git a/scp.c b/scp.c
index ed2864250..7163d33dc 100644
--- a/scp.c
+++ b/scp.c
@@ -1114,7 +1114,8 @@ sink(int argc, char **argv)
1114 SCREWUP("size out of range"); 1114 SCREWUP("size out of range");
1115 size = (off_t)ull; 1115 size = (off_t)ull;
1116 1116
1117 if ((strchr(cp, '/') != NULL) || (strcmp(cp, "..") == 0)) { 1117 if (*cp == '\0' || strchr(cp, '/') != NULL ||
1118 strcmp(cp, ".") == 0 || strcmp(cp, "..") == 0) {
1118 run_err("error: unexpected filename: %s", cp); 1119 run_err("error: unexpected filename: %s", cp);
1119 exit(1); 1120 exit(1);
1120 } 1121 }