doc/share/security/patches/SA-06:22/openssh6x.patch
Bjoern A. Zeeb 3571e53040 Import FreeBSD Security Advisories and Errata Notices, as well as their
patches for easier mirroring, to eliminate a special copy, to make
www.freebsd.org/security a full copy of security.freebsd.org and be
eventually be the same.

For now files are just sitting there.   The symlinks are missing.

Discussed on:	www (repository location)
Discussed with:	simon (so)
2012-08-15 06:19:40 +00:00

295 lines
10 KiB
Diff

Index: crypto/openssh/auth.h
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/auth.h,v
retrieving revision 1.15.2.1
diff -u -d -r1.15.2.1 auth.h
--- crypto/openssh/auth.h 11 Sep 2005 16:50:34 -0000 1.15.2.1
+++ crypto/openssh/auth.h 30 Sep 2006 16:38:10 -0000
@@ -50,6 +50,7 @@
struct Authctxt {
int success;
+ int authenticated; /* authenticated and alarms cancelled */
int postponed; /* authentication needs another step */
int valid; /* user exists and is allowed to login */
int attempt;
Index: crypto/openssh/deattack.c
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/deattack.c,v
retrieving revision 1.1.1.7
diff -u -d -r1.1.1.7 deattack.c
--- crypto/openssh/deattack.c 7 Jan 2004 11:10:03 -0000 1.1.1.7
+++ crypto/openssh/deattack.c 30 Sep 2006 16:38:10 -0000
@@ -27,6 +27,24 @@
#include "xmalloc.h"
#include "deattack.h"
+/*
+ * CRC attack detection has a worst-case behaviour that is O(N^3) over
+ * the number of identical blocks in a packet. This behaviour can be
+ * exploited to create a limited denial of service attack.
+ *
+ * However, because we are dealing with encrypted data, identical
+ * blocks should only occur every 2^35 maximally-sized packets or so.
+ * Consequently, we can detect this DoS by looking for identical blocks
+ * in a packet.
+ *
+ * The parameter below determines how many identical blocks we will
+ * accept in a single packet, trading off between attack detection and
+ * likelihood of terminating a legitimate connection. A value of 32
+ * corresponds to an average of 2^40 messages before an attack is
+ * misdetected
+ */
+#define MAX_IDENTICAL 32
+
/* SSH Constants */
#define SSH_MAXBLOCKS (32 * 1024)
#define SSH_BLOCKSIZE (8)
@@ -87,7 +105,7 @@
static u_int16_t *h = (u_int16_t *) NULL;
static u_int32_t n = HASH_MINSIZE / HASH_ENTRYSIZE;
u_int32_t i, j;
- u_int32_t l;
+ u_int32_t l, same;
u_char *c;
u_char *d;
@@ -133,7 +151,7 @@
if (IV)
h[HASH(IV) & (n - 1)] = HASH_IV;
- for (c = buf, j = 0; c < (buf + len); c += SSH_BLOCKSIZE, j++) {
+ for (c = buf, same = j = 0; c < (buf + len); c += SSH_BLOCKSIZE, j++) {
for (i = HASH(c) & (n - 1); h[i] != HASH_UNUSED;
i = (i + 1) & (n - 1)) {
if (h[i] == HASH_IV) {
@@ -144,6 +162,8 @@
break;
}
} else if (!CMP(c, buf + h[i] * SSH_BLOCKSIZE)) {
+ if (++same > MAX_IDENTICAL)
+ return (DEATTACK_DOS_DETECTED);
if (check_crc(c, buf, len, IV))
return (DEATTACK_DETECTED);
else
Index: crypto/openssh/deattack.h
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/deattack.h,v
retrieving revision 1.1.1.3
diff -u -d -r1.1.1.3 deattack.h
--- crypto/openssh/deattack.h 18 Mar 2002 09:54:55 -0000 1.1.1.3
+++ crypto/openssh/deattack.h 30 Sep 2006 16:38:10 -0000
@@ -25,6 +25,7 @@
/* Return codes */
#define DEATTACK_OK 0
#define DEATTACK_DETECTED 1
+#define DEATTACK_DOS_DETECTED 2
int detect_attack(u_char *, u_int32_t, u_char[8]);
#endif
Index: crypto/openssh/defines.h
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/defines.h,v
retrieving revision 1.1.1.9.2.1
diff -u -d -r1.1.1.9.2.1 defines.h
--- crypto/openssh/defines.h 11 Sep 2005 16:50:34 -0000 1.1.1.9.2.1
+++ crypto/openssh/defines.h 30 Sep 2006 16:38:10 -0000
@@ -540,6 +540,11 @@
# undef HAVE_UPDWTMPX
#endif
+#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \
+ defined(SYSLOG_R_SAFE_IN_SIGHAND)
+# define DO_LOG_SAFE_IN_SIGHAND
+#endif
+
#if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY)
# define memmove(s1, s2, n) bcopy((s2), (s1), (n))
#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */
Index: crypto/openssh/log.c
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/log.c,v
retrieving revision 1.1.1.13
diff -u -d -r1.1.1.13 log.c
--- crypto/openssh/log.c 5 Jun 2005 15:41:49 -0000 1.1.1.13
+++ crypto/openssh/log.c 30 Sep 2006 16:38:10 -0000
@@ -130,6 +130,20 @@
va_end(args);
}
+void
+sigdie(const char *fmt,...)
+{
+ va_list args;
+
+#ifdef DO_LOG_SAFE_IN_SIGHAND
+ va_start(args, fmt);
+ do_log(SYSLOG_LEVEL_FATAL, fmt, args);
+ va_end(args);
+#endif
+ _exit(1);
+}
+
+
/* Log this message (information that usually should go to the log). */
void
Index: crypto/openssh/log.h
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/log.h,v
retrieving revision 1.6
diff -u -d -r1.6 log.h
--- crypto/openssh/log.h 28 Oct 2004 16:11:28 -0000 1.6
+++ crypto/openssh/log.h 30 Sep 2006 16:38:10 -0000
@@ -64,6 +64,7 @@
void fatal(const char *, ...) __dead __attribute__((format(printf, 1, 2)));
void error(const char *, ...) __attribute__((format(printf, 1, 2)));
+void sigdie(const char *, ...) __attribute__((format(printf, 1, 2)));
void logit(const char *, ...) __attribute__((format(printf, 1, 2)));
void verbose(const char *, ...) __attribute__((format(printf, 1, 2)));
void debug(const char *, ...) __attribute__((format(printf, 1, 2)));
Index: crypto/openssh/packet.c
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/packet.c,v
retrieving revision 1.1.1.16.2.1
diff -u -d -r1.1.1.16.2.1 packet.c
--- crypto/openssh/packet.c 11 Sep 2005 16:50:34 -0000 1.1.1.16.2.1
+++ crypto/openssh/packet.c 30 Sep 2006 18:26:30 -0000
@@ -978,9 +978,16 @@
* (C)1998 CORE-SDI, Buenos Aires Argentina
* Ariel Futoransky(futo@core-sdi.com)
*/
- if (!receive_context.plaintext &&
- detect_attack(buffer_ptr(&input), padded_len, NULL) == DEATTACK_DETECTED)
- packet_disconnect("crc32 compensation attack: network attack detected");
+ if (!receive_context.plaintext) {
+ switch (detect_attack(buffer_ptr(&input), padded_len, NULL)) {
+ case DEATTACK_DETECTED:
+ packet_disconnect("crc32 compensation attack: "
+ "network attack detected");
+ case DEATTACK_DOS_DETECTED:
+ packet_disconnect("deattack denial of "
+ "service detected");
+ }
+ }
/* Decrypt data to incoming_packet. */
buffer_clear(&incoming_packet);
Index: crypto/openssh/session.c
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/session.c,v
retrieving revision 1.46.2.1
diff -u -d -r1.46.2.1 session.c
--- crypto/openssh/session.c 11 Sep 2005 16:50:34 -0000 1.46.2.1
+++ crypto/openssh/session.c 30 Sep 2006 16:38:10 -0000
@@ -2472,7 +2472,7 @@
return;
called = 1;
- if (authctxt == NULL)
+ if (authctxt == NULL || !authctxt->authenticated)
return;
#ifdef KRB5
if (options.kerberos_ticket_cleanup &&
Index: crypto/openssh/ssh_config
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/ssh_config,v
retrieving revision 1.27.2.1
diff -u -d -r1.27.2.1 ssh_config
--- crypto/openssh/ssh_config 11 Sep 2005 16:50:35 -0000 1.27.2.1
+++ crypto/openssh/ssh_config 30 Sep 2006 16:38:10 -0000
@@ -38,4 +38,4 @@
# Cipher 3des
# Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
# EscapeChar ~
-# VersionAddendum FreeBSD-20050903
+# VersionAddendum FreeBSD-20060930
Index: crypto/openssh/ssh_config.5
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/ssh_config.5,v
retrieving revision 1.17.2.1
diff -u -d -r1.17.2.1 ssh_config.5
--- crypto/openssh/ssh_config.5 11 Sep 2005 16:50:35 -0000 1.17.2.1
+++ crypto/openssh/ssh_config.5 30 Sep 2006 16:38:10 -0000
@@ -900,7 +900,7 @@
Specifies a string to append to the regular version string to identify
OS- or site-specific modifications.
The default is
-.Dq FreeBSD-20050903 .
+.Dq FreeBSD-20060930 .
.It Cm XAuthLocation
Specifies the full pathname of the
.Xr xauth 1
Index: crypto/openssh/sshd.c
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/sshd.c,v
retrieving revision 1.39.2.1
diff -u -d -r1.39.2.1 sshd.c
--- crypto/openssh/sshd.c 11 Sep 2005 16:50:35 -0000 1.39.2.1
+++ crypto/openssh/sshd.c 30 Sep 2006 16:38:10 -0000
@@ -317,7 +317,7 @@
kill(pmonitor->m_pid, SIGALRM);
/* Log error and exit. */
- fatal("Timeout before authentication for %s", get_remote_ipaddr());
+ sigdie("Timeout before authentication for %s", get_remote_ipaddr());
}
/*
@@ -1730,6 +1730,7 @@
}
authenticated:
+ authctxt->authenticated = 1;
#ifdef SSH_AUDIT_EVENTS
audit_event(SSH_AUTH_SUCCESS);
#endif
Index: crypto/openssh/sshd_config
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/sshd_config,v
retrieving revision 1.42.2.1
diff -u -d -r1.42.2.1 sshd_config
--- crypto/openssh/sshd_config 11 Sep 2005 16:50:35 -0000 1.42.2.1
+++ crypto/openssh/sshd_config 30 Sep 2006 16:38:10 -0000
@@ -14,7 +14,7 @@
# Note that some of FreeBSD's defaults differ from OpenBSD's, and
# FreeBSD has a few additional options.
-#VersionAddendum FreeBSD-20050903
+#VersionAddendum FreeBSD-20060930
#Port 22
#Protocol 2
Index: crypto/openssh/sshd_config.5
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/sshd_config.5,v
retrieving revision 1.23.2.1
diff -u -d -r1.23.2.1 sshd_config.5
--- crypto/openssh/sshd_config.5 11 Sep 2005 16:50:35 -0000 1.23.2.1
+++ crypto/openssh/sshd_config.5 30 Sep 2006 16:38:10 -0000
@@ -725,7 +725,7 @@
Specifies a string to append to the regular version string to identify
OS- or site-specific modifications.
The default is
-.Dq FreeBSD-20050903 .
+.Dq FreeBSD-20060930 .
.It Cm X11DisplayOffset
Specifies the first display number available for
.Nm sshd Ns 's
Index: crypto/openssh/version.h
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/version.h,v
retrieving revision 1.30.2.1
diff -u -d -r1.30.2.1 version.h
--- crypto/openssh/version.h 11 Sep 2005 16:50:35 -0000 1.30.2.1
+++ crypto/openssh/version.h 30 Sep 2006 16:38:10 -0000
@@ -6,7 +6,7 @@
#define SSH_VERSION (ssh_version_get())
#define SSH_RELEASE (ssh_version_get())
#define SSH_VERSION_BASE "OpenSSH_4.2p1"
-#define SSH_VERSION_ADDENDUM "FreeBSD-20050903"
+#define SSH_VERSION_ADDENDUM "FreeBSD-20060930"
const char *ssh_version_get(void);
void ssh_version_set_addendum(const char *add);