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)
296 lines
10 KiB
Diff
296 lines
10 KiB
Diff
Index: crypto/openssh/auth.h
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/crypto/openssh/auth.h,v
|
|
retrieving revision 1.13
|
|
diff -u -d -r1.13 auth.h
|
|
--- crypto/openssh/auth.h 20 Apr 2004 09:46:39 -0000 1.13
|
|
+++ crypto/openssh/auth.h 30 Sep 2006 16:38:17 -0000
|
|
@@ -49,6 +49,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:17 -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:17 -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.7
|
|
diff -u -d -r1.1.1.7 defines.h
|
|
--- crypto/openssh/defines.h 20 Apr 2004 09:35:01 -0000 1.1.1.7
|
|
+++ crypto/openssh/defines.h 30 Sep 2006 16:38:17 -0000
|
|
@@ -511,6 +511,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.10
|
|
diff -u -d -r1.1.1.10 log.c
|
|
--- crypto/openssh/log.c 26 Feb 2004 10:38:40 -0000 1.1.1.10
|
|
+++ crypto/openssh/log.c 30 Sep 2006 16:38:17 -0000
|
|
@@ -127,6 +127,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.5
|
|
diff -u -d -r1.5 log.h
|
|
--- crypto/openssh/log.h 26 Feb 2004 10:52:30 -0000 1.5
|
|
+++ crypto/openssh/log.h 30 Sep 2006 16:38:17 -0000
|
|
@@ -64,6 +64,7 @@
|
|
|
|
void fatal(const char *, ...) __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.14
|
|
diff -u -d -r1.1.1.14 packet.c
|
|
--- crypto/openssh/packet.c 26 Feb 2004 10:38:42 -0000 1.1.1.14
|
|
+++ crypto/openssh/packet.c 30 Sep 2006 18:29:32 -0000
|
|
@@ -940,9 +940,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.44
|
|
diff -u -d -r1.44 session.c
|
|
--- crypto/openssh/session.c 20 Apr 2004 09:46:40 -0000 1.44
|
|
+++ crypto/openssh/session.c 30 Sep 2006 16:38:17 -0000
|
|
@@ -2266,7 +2266,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.25.2.1
|
|
diff -u -d -r1.25.2.1 ssh_config
|
|
--- crypto/openssh/ssh_config 1 Mar 2006 14:19:48 -0000 1.25.2.1
|
|
+++ crypto/openssh/ssh_config 30 Sep 2006 16:38:17 -0000
|
|
@@ -36,4 +36,4 @@
|
|
# Cipher 3des
|
|
# Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
|
|
# EscapeChar ~
|
|
-# VersionAddendum FreeBSD-20060123
|
|
+# VersionAddendum FreeBSD-20060930
|
|
Index: crypto/openssh/ssh_config.5
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/crypto/openssh/ssh_config.5,v
|
|
retrieving revision 1.15.2.1
|
|
diff -u -d -r1.15.2.1 ssh_config.5
|
|
--- crypto/openssh/ssh_config.5 1 Mar 2006 14:19:48 -0000 1.15.2.1
|
|
+++ crypto/openssh/ssh_config.5 30 Sep 2006 16:38:17 -0000
|
|
@@ -719,7 +719,7 @@
|
|
Specifies a string to append to the regular version string to identify
|
|
OS- or site-specific modifications.
|
|
The default is
|
|
-.Dq FreeBSD-20060123 .
|
|
+.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.37
|
|
diff -u -d -r1.37 sshd.c
|
|
--- crypto/openssh/sshd.c 20 Apr 2004 09:46:40 -0000 1.37
|
|
+++ crypto/openssh/sshd.c 30 Sep 2006 16:38:17 -0000
|
|
@@ -314,7 +314,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());
|
|
}
|
|
|
|
/*
|
|
@@ -1509,6 +1509,8 @@
|
|
}
|
|
|
|
authenticated:
|
|
+ authctxt->authenticated = 1;
|
|
+
|
|
/*
|
|
* In privilege separation, we fork another child and prepare
|
|
* file descriptor passing.
|
|
Index: crypto/openssh/sshd_config
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/crypto/openssh/sshd_config,v
|
|
retrieving revision 1.40.2.1
|
|
diff -u -d -r1.40.2.1 sshd_config
|
|
--- crypto/openssh/sshd_config 1 Mar 2006 14:19:48 -0000 1.40.2.1
|
|
+++ crypto/openssh/sshd_config 30 Sep 2006 16:38:17 -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-20060123
|
|
+#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.21.2.1
|
|
diff -u -d -r1.21.2.1 sshd_config.5
|
|
--- crypto/openssh/sshd_config.5 1 Mar 2006 14:19:48 -0000 1.21.2.1
|
|
+++ crypto/openssh/sshd_config.5 30 Sep 2006 16:38:17 -0000
|
|
@@ -660,7 +660,7 @@
|
|
Specifies a string to append to the regular version string to identify
|
|
OS- or site-specific modifications.
|
|
The default is
|
|
-.Dq FreeBSD-20060123 .
|
|
+.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.27.2.1
|
|
diff -u -d -r1.27.2.1 version.h
|
|
--- crypto/openssh/version.h 1 Mar 2006 14:19:48 -0000 1.27.2.1
|
|
+++ crypto/openssh/version.h 30 Sep 2006 16:38:17 -0000
|
|
@@ -5,7 +5,7 @@
|
|
|
|
#define SSH_VERSION (ssh_version_get())
|
|
#define SSH_VERSION_BASE "OpenSSH_3.8.1p1"
|
|
-#define SSH_VERSION_ADDENDUM "FreeBSD-20060123"
|
|
+#define SSH_VERSION_ADDENDUM "FreeBSD-20060930"
|
|
|
|
const char *ssh_version_get(void);
|
|
void ssh_version_set_addendum(const char *add);
|