summaryrefslogtreecommitdiff
path: root/dropbear
diff options
context:
space:
mode:
authorFredrik Rinnestam <fredrik@crux.nu>2019-03-25 20:47:19 +0100
committerFredrik Rinnestam <fredrik@crux.nu>2019-03-25 20:47:19 +0100
commit8eedc927362c5f81678a9e2c1d0fdd9a59ba832d (patch)
tree4885fb659fa6a13966a2d073bbaf50c7a5a172cc /dropbear
parent1519d9fc1503db58dbda36e46f596701499ce6e4 (diff)
parent0ac2fe4e48e74226f6d5eb81734c256fdc7665d5 (diff)
downloadopt-8eedc927362c5f81678a9e2c1d0fdd9a59ba832d.tar.gz
opt-8eedc927362c5f81678a9e2c1d0fdd9a59ba832d.tar.xz
Merge branch '3.4' into 3.5
Diffstat (limited to 'dropbear')
-rw-r--r--dropbear/.signature8
-rw-r--r--dropbear/CVE-2018-15599.diff222
-rw-r--r--dropbear/Pkgfile8
-rw-r--r--dropbear/reset-tty-modes.patch51
4 files changed, 59 insertions, 230 deletions
diff --git a/dropbear/.signature b/dropbear/.signature
index 6a75a82b7..d8280e9f7 100644
--- a/dropbear/.signature
+++ b/dropbear/.signature
@@ -1,8 +1,8 @@
untrusted comment: verify with /etc/ports/opt.pub
-RWSE3ohX2g5d/ZwHjbSnatGBORtIE4uG5o+PIXXWF5S+DlHlDX+7Fz3UDD6c3rOvcXIQeoc5loAsc52uNfW5wb3CEwcWtekLdAw=
-SHA256 (Pkgfile) = 0c088019d09c895614d2fe8e449a4ac61b3657ef3b53d5faacf85d6c76aa90e1
+RWSE3ohX2g5d/SiZPq2mZq0J2yOuWeXOPx+APKUMH2OL/7Cb3PcHbsVMPwH1OAE6t7c1TBCABYpMTSTWBKGM2xmDorkGsOcmRgQ=
+SHA256 (Pkgfile) = 5631d02778f15631c1ebdffbc5c615631873e8133382471da75adebb2121731a
SHA256 (.footprint) = 5d47799d69d21b860be70eb9e767298617679bcee2140d245cbc74f4a2a4502e
-SHA256 (dropbear-2018.76.tar.bz2) = f2fb9167eca8cf93456a5fc1d4faf709902a3ab70dd44e352f3acbc3ffdaea65
+SHA256 (dropbear-2019.77.tar.bz2) = d91f78ebe633be1d071fd1b7e5535b9693794048b019e9f4bea257e1992b458d
SHA256 (dropbear.rc) = def8d4ebda5759a3bc55055957235fa47f7e40216badf07830f487f05e7fbd42
+SHA256 (reset-tty-modes.patch) = 2fd8beca361dc5859fa996a28651c4748bd741c763587d828ede0ea634af0ed2
SHA256 (dropbear.pam) = 0c0aff342e586e64f2d2a814ef127a2748b223e746c3efccfccc91a5aadbce4a
-SHA256 (CVE-2018-15599.diff) = 42b5720cf6c888638cfb84fdd862fc0d323b2e023cbe5f9ccdaa2e0c35b6873e
diff --git a/dropbear/CVE-2018-15599.diff b/dropbear/CVE-2018-15599.diff
deleted file mode 100644
index 963ed35bb..000000000
--- a/dropbear/CVE-2018-15599.diff
+++ /dev/null
@@ -1,222 +0,0 @@
-
-# HG changeset patch
-# User Matt Johnston <matt@ucc.asn.au>
-# Date 1535038992 -28800
-# Node ID 5d2d1021ca0006337af58859c861f2349715b73b
-# Parent cd23631dab5c653c66fe697e24f026aefbfcecb3
-Wait to fail invalid usernames
-
-diff -r cd23631dab5c -r 5d2d1021ca00 auth.h
---- a/auth.h Thu Aug 23 22:10:07 2018 +0800
-+++ b/auth.h Thu Aug 23 23:43:12 2018 +0800
-@@ -37,9 +37,9 @@
- void send_msg_userauth_failure(int partial, int incrfail);
- void send_msg_userauth_success(void);
- void send_msg_userauth_banner(const buffer *msg);
--void svr_auth_password(void);
--void svr_auth_pubkey(void);
--void svr_auth_pam(void);
-+void svr_auth_password(int valid_user);
-+void svr_auth_pubkey(int valid_user);
-+void svr_auth_pam(int valid_user);
-
- #if DROPBEAR_SVR_PUBKEY_OPTIONS_BUILT
- int svr_pubkey_allows_agentfwd(void);
-diff -r cd23631dab5c -r 5d2d1021ca00 svr-auth.c
---- a/svr-auth.c Thu Aug 23 22:10:07 2018 +0800
-+++ b/svr-auth.c Thu Aug 23 23:43:12 2018 +0800
-@@ -149,10 +149,8 @@
- if (methodlen == AUTH_METHOD_PASSWORD_LEN &&
- strncmp(methodname, AUTH_METHOD_PASSWORD,
- AUTH_METHOD_PASSWORD_LEN) == 0) {
-- if (valid_user) {
-- svr_auth_password();
-- goto out;
-- }
-+ svr_auth_password(valid_user);
-+ goto out;
- }
- }
- #endif
-@@ -164,10 +162,8 @@
- if (methodlen == AUTH_METHOD_PASSWORD_LEN &&
- strncmp(methodname, AUTH_METHOD_PASSWORD,
- AUTH_METHOD_PASSWORD_LEN) == 0) {
-- if (valid_user) {
-- svr_auth_pam();
-- goto out;
-- }
-+ svr_auth_pam(valid_user);
-+ goto out;
- }
- }
- #endif
-@@ -177,12 +173,7 @@
- if (methodlen == AUTH_METHOD_PUBKEY_LEN &&
- strncmp(methodname, AUTH_METHOD_PUBKEY,
- AUTH_METHOD_PUBKEY_LEN) == 0) {
-- if (valid_user) {
-- svr_auth_pubkey();
-- } else {
-- /* pubkey has no failure delay */
-- send_msg_userauth_failure(0, 0);
-- }
-+ svr_auth_pubkey(valid_user);
- goto out;
- }
- #endif
-diff -r cd23631dab5c -r 5d2d1021ca00 svr-authpam.c
---- a/svr-authpam.c Thu Aug 23 22:10:07 2018 +0800
-+++ b/svr-authpam.c Thu Aug 23 23:43:12 2018 +0800
-@@ -178,13 +178,14 @@
- * Keyboard interactive would be a lot nicer, but since PAM is synchronous, it
- * gets very messy trying to send the interactive challenges, and read the
- * interactive responses, over the network. */
--void svr_auth_pam() {
-+void svr_auth_pam(int valid_user) {
-
- struct UserDataS userData = {NULL, NULL};
- struct pam_conv pamConv = {
- pamConvFunc,
- &userData /* submitted to pamvConvFunc as appdata_ptr */
- };
-+ const char* printable_user = NULL;
-
- pam_handle_t* pamHandlep = NULL;
-
-@@ -204,12 +205,23 @@
-
- password = buf_getstring(ses.payload, &passwordlen);
-
-+ /* We run the PAM conversation regardless of whether the username is valid
-+ in case the conversation function has an inherent delay.
-+ Use ses.authstate.username rather than ses.authstate.pw_name.
-+ After PAM succeeds we then check the valid_user flag too */
-+
- /* used to pass data to the PAM conversation function - don't bother with
- * strdup() etc since these are touched only by our own conversation
- * function (above) which takes care of it */
-- userData.user = ses.authstate.pw_name;
-+ userData.user = ses.authstate.username;
- userData.passwd = password;
-
-+ if (ses.authstate.pw_name) {
-+ printable_user = ses.authstate.pw_name;
-+ } else {
-+ printable_user = "<invalid username>";
-+ }
-+
- /* Init pam */
- if ((rc = pam_start("sshd", NULL, &pamConv, &pamHandlep)) != PAM_SUCCESS) {
- dropbear_log(LOG_WARNING, "pam_start() failed, rc=%d, %s",
-@@ -242,7 +254,7 @@
- rc, pam_strerror(pamHandlep, rc));
- dropbear_log(LOG_WARNING,
- "Bad PAM password attempt for '%s' from %s",
-- ses.authstate.pw_name,
-+ printable_user,
- svr_ses.addrstring);
- send_msg_userauth_failure(0, 1);
- goto cleanup;
-@@ -253,12 +265,18 @@
- rc, pam_strerror(pamHandlep, rc));
- dropbear_log(LOG_WARNING,
- "Bad PAM password attempt for '%s' from %s",
-- ses.authstate.pw_name,
-+ printable_user,
- svr_ses.addrstring);
- send_msg_userauth_failure(0, 1);
- goto cleanup;
- }
-
-+ if (!valid_user) {
-+ /* PAM auth succeeded but the username isn't allowed in for another reason
-+ (checkusername() failed) */
-+ send_msg_userauth_failure(0, 1);
-+ }
-+
- /* successful authentication */
- dropbear_log(LOG_NOTICE, "PAM password auth succeeded for '%s' from %s",
- ses.authstate.pw_name,
-diff -r cd23631dab5c -r 5d2d1021ca00 svr-authpasswd.c
---- a/svr-authpasswd.c Thu Aug 23 22:10:07 2018 +0800
-+++ b/svr-authpasswd.c Thu Aug 23 23:43:12 2018 +0800
-@@ -48,22 +48,14 @@
-
- /* Process a password auth request, sending success or failure messages as
- * appropriate */
--void svr_auth_password() {
-+void svr_auth_password(int valid_user) {
-
- char * passwdcrypt = NULL; /* the crypt from /etc/passwd or /etc/shadow */
- char * testcrypt = NULL; /* crypt generated from the user's password sent */
-- char * password;
-+ char * password = NULL;
- unsigned int passwordlen;
--
- unsigned int changepw;
-
-- passwdcrypt = ses.authstate.pw_passwd;
--
--#ifdef DEBUG_HACKCRYPT
-- /* debugging crypt for non-root testing with shadows */
-- passwdcrypt = DEBUG_HACKCRYPT;
--#endif
--
- /* check if client wants to change password */
- changepw = buf_getbool(ses.payload);
- if (changepw) {
-@@ -73,12 +65,21 @@
- }
-
- password = buf_getstring(ses.payload, &passwordlen);
--
-- /* the first bytes of passwdcrypt are the salt */
-- testcrypt = crypt(password, passwdcrypt);
-+ if (valid_user) {
-+ /* the first bytes of passwdcrypt are the salt */
-+ passwdcrypt = ses.authstate.pw_passwd;
-+ testcrypt = crypt(password, passwdcrypt);
-+ }
- m_burn(password, passwordlen);
- m_free(password);
-
-+ /* After we have got the payload contents we can exit if the username
-+ is invalid. Invalid users have already been logged. */
-+ if (!valid_user) {
-+ send_msg_userauth_failure(0, 1);
-+ return;
-+ }
-+
- if (testcrypt == NULL) {
- /* crypt() with an invalid salt like "!!" */
- dropbear_log(LOG_WARNING, "User account '%s' is locked",
-diff -r cd23631dab5c -r 5d2d1021ca00 svr-authpubkey.c
---- a/svr-authpubkey.c Thu Aug 23 22:10:07 2018 +0800
-+++ b/svr-authpubkey.c Thu Aug 23 23:43:12 2018 +0800
-@@ -79,7 +79,7 @@
-
- /* process a pubkey auth request, sending success or failure message as
- * appropriate */
--void svr_auth_pubkey() {
-+void svr_auth_pubkey(int valid_user) {
-
- unsigned char testkey; /* whether we're just checking if a key is usable */
- char* algo = NULL; /* pubkey algo */
-@@ -102,6 +102,15 @@
- keybloblen = buf_getint(ses.payload);
- keyblob = buf_getptr(ses.payload, keybloblen);
-
-+ if (!valid_user) {
-+ /* Return failure once we have read the contents of the packet
-+ required to validate a public key.
-+ Avoids blind user enumeration though it isn't possible to prevent
-+ testing for user existence if the public key is known */
-+ send_msg_userauth_failure(0, 0);
-+ goto out;
-+ }
-+
- /* check if the key is valid */
- if (checkpubkey(algo, algolen, keyblob, keybloblen) == DROPBEAR_FAILURE) {
- send_msg_userauth_failure(0, 0);
-
diff --git a/dropbear/Pkgfile b/dropbear/Pkgfile
index a8349d886..6b10524b1 100644
--- a/dropbear/Pkgfile
+++ b/dropbear/Pkgfile
@@ -4,15 +4,15 @@
# Depends on: zlib linux-pam
name=dropbear
-version=2018.76
-release=3
+version=2019.77
+release=2
source=(http://matt.ucc.asn.au/$name/releases/$name-$version.tar.bz2 \
- dropbear.rc dropbear.pam CVE-2018-15599.diff)
+ dropbear.rc reset-tty-modes.patch dropbear.pam)
build () {
cd $name-$version
- patch -p1 -i $SRC/CVE-2018-15599.diff
+ patch -p1 -i $SRC/reset-tty-modes.patch
sed '/pam_start/s/sshd/dropbear/' -i svr-authpam.c
echo '#define SFTPSERVER_PATH "/usr/lib/ssh/sftp-server"' > localoptions.h
diff --git a/dropbear/reset-tty-modes.patch b/dropbear/reset-tty-modes.patch
new file mode 100644
index 000000000..cd2f086a5
--- /dev/null
+++ b/dropbear/reset-tty-modes.patch
@@ -0,0 +1,51 @@
+
+# HG changeset patch
+# User Matt Johnston <matt@ucc.asn.au>
+# Date 1553431262 -28800
+# Node ID 4b01f4826a29a2837e971197d4f72b7cb376745a
+# Parent 48c6e54f7281aaf89fbc8b2b99ca4a9cd62969af
+Fix regression where TTY modes weren't reset for client
+
+diff -r 48c6e54f7281 -r 4b01f4826a29 cli-chansession.c
+--- a/cli-chansession.c Sat Mar 23 21:54:23 2019 +0800
++++ b/cli-chansession.c Sun Mar 24 20:41:02 2019 +0800
+@@ -35,7 +35,7 @@
+ #include "chansession.h"
+ #include "agentfwd.h"
+
+-static void cli_cleanupchansess(const struct Channel *channel);
++static void cli_closechansess(const struct Channel *channel);
+ static int cli_initchansess(struct Channel *channel);
+ static void cli_chansessreq(struct Channel *channel);
+ static void send_chansess_pty_req(const struct Channel *channel);
+@@ -51,8 +51,8 @@
+ cli_initchansess, /* inithandler */
+ NULL, /* checkclosehandler */
+ cli_chansessreq, /* reqhandler */
+- NULL, /* closehandler */
+- cli_cleanupchansess, /* cleanup */
++ cli_closechansess, /* closehandler */
++ NULL, /* cleanup */
+ };
+
+ static void cli_chansessreq(struct Channel *channel) {
+@@ -84,7 +84,7 @@
+
+
+ /* If the main session goes, we close it up */
+-static void cli_cleanupchansess(const struct Channel *UNUSED(channel)) {
++static void cli_closechansess(const struct Channel *UNUSED(channel)) {
+ cli_tty_cleanup(); /* Restore tty modes etc */
+
+ /* This channel hasn't gone yet, so we have > 1 */
+@@ -388,8 +388,8 @@
+ cli_init_netcat, /* inithandler */
+ NULL,
+ NULL,
++ cli_closechansess,
+ NULL,
+- cli_cleanupchansess
+ };
+
+ void cli_send_netcat_request() {
+

Generated by cgit