diff options
author | TBK <tbk@jjtc.eu> | 2019-04-12 06:55:27 +0200 |
---|---|---|
committer | Leonardo Arena <rnalrd@alpinelinux.org> | 2019-04-12 09:56:58 +0000 |
commit | ee43ff043bbe380b1070603146e8da09b08b6116 (patch) | |
tree | 177062b93a63bb4921a7498a00a2c77c34f7fee0 | |
parent | 6b9690b74d52d6ca6defd00a06a897e862757dc7 (diff) | |
download | aports-ee43ff043bbe380b1070603146e8da09b08b6116.tar.bz2 aports-ee43ff043bbe380b1070603146e8da09b08b6116.tar.xz |
main/dropbear: upgrade to 2019.78
-rw-r--r-- | main/dropbear/APKBUILD | 15 | ||||
-rw-r--r-- | main/dropbear/CVE-2018-15599.patch | 222 | ||||
-rw-r--r-- | main/dropbear/dropbear-0.53.1-static_build_fix.patch | 2 | ||||
-rw-r--r-- | main/dropbear/dropbear-options_sftp-server_path.patch | 2 |
4 files changed, 8 insertions, 233 deletions
diff --git a/main/dropbear/APKBUILD b/main/dropbear/APKBUILD index 570be69730..4666957895 100644 --- a/main/dropbear/APKBUILD +++ b/main/dropbear/APKBUILD @@ -2,27 +2,25 @@ # Contributor: Carlo Landmeter <clandmeter@gmail.com> # Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=dropbear -pkgver=2018.76 -pkgrel=2 +pkgver=2019.78 +pkgrel=0 pkgdesc="small SSH 2 client/server designed for small memory environments" url="http://matt.ucc.asn.au/dropbear/dropbear.html" arch="all" license="MIT" -depends="" options="!check" makedepends="zlib-dev linux-headers" subpackages="$pkgname-doc $pkgname-openrc $pkgname-convert:_convert $pkgname-dbclient:_dbclient - $pkgname-ssh:_ssh + $pkgname-ssh:_ssh:noarch $pkgname-scp:_scp" source="https://matt.ucc.asn.au/dropbear/releases/${pkgname}-${pkgver}.tar.bz2 dropbear.initd dropbear.confd dropbear-0.53.1-static_build_fix.patch dropbear-options_sftp-server_path.patch - CVE-2018-15599.patch " # secfixes: @@ -84,9 +82,8 @@ _ssh() { ln -s /usr/bin/dbclient "$subpkgdir"/usr/bin/ssh } -sha512sums="82323279f7e78c366ba1ea07ff242259132b2576122429f54326518dd6092aba8ae5de4a0b8a3cef7efc3507015741abe2ac23376c03b40b247527da7a88120e dropbear-2018.76.tar.bz2 +sha512sums="f667ba8dae17ea89c118642b566f2c134c71bfd0b8bacea5cf7ec87d75ac79bd7cd1864a8788367a89d30ee35427d389ef6416375adff6e83caae30ff3e0549f dropbear-2019.78.tar.bz2 9c55ab3d8b61955cde1ccc1b8acbd3d2ef123feb9489e92737304c35315d07b7f85fad8a12ac7b0ec2c1dcee3d76b8bc4aa18518f4ddd963917805db33e48826 dropbear.initd 83f2c1eaf7687917a4b2bae7d599d4378c4bd64f9126ba42fc5d235f2b3c9a474d1b3168d70ed64bb4101cc251d30bc9ae20604da9b5d819fcd635ee4d0ebb0f dropbear.confd -c9b0f28eb9653de21da4e8646fc27870a156112bce3d8a13baa6154ebf4baada3dee4f75bd5fdf5b6cd24a43fb80fb009e917d139d9e65d35118b082de0ebfbf dropbear-0.53.1-static_build_fix.patch -e11456ec3bc7e1265727c8921a6eb6151712a9a498c7768e2d4b7f9043256099457cebf29b2d47dd61eb260746d97f4b19e9429443bda1c3e441ea50ced79b48 dropbear-options_sftp-server_path.patch -f204c2ee5aea8c0962573c4c49479ac17e9f6a9ab9ce21060a252b449323be841c1e64460f0e191fc72c6e213ffe829544418715d120a8f6c40de7b6374428e0 CVE-2018-15599.patch" +413cef467db35ddc430a773af943ff650d51bdb6fb262dcabc625eb6c9f4170b5711998df5577dd05c60e21e0a9771bff022adc8273083b85a18f4d5659ffd50 dropbear-0.53.1-static_build_fix.patch +9b078548c6850c9b45e9b68a8ebd746a4a0648607c8ad0cf4106f09f7a63768c83a3e4e4fbec38b665ae283503fd3cdd054775aa3c9afe02567be3e775aef50b dropbear-options_sftp-server_path.patch" diff --git a/main/dropbear/CVE-2018-15599.patch b/main/dropbear/CVE-2018-15599.patch deleted file mode 100644 index 963ed35bb9..0000000000 --- a/main/dropbear/CVE-2018-15599.patch +++ /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/main/dropbear/dropbear-0.53.1-static_build_fix.patch b/main/dropbear/dropbear-0.53.1-static_build_fix.patch index 0e0a91a27e..6f13101bbe 100644 --- a/main/dropbear/dropbear-0.53.1-static_build_fix.patch +++ b/main/dropbear/dropbear-0.53.1-static_build_fix.patch @@ -15,7 +15,7 @@ Index: b/Makefile.in =================================================================== --- a/Makefile.in +++ b/Makefile.in -@@ -77,7 +77,7 @@ STRIP=@STRIP@ +@@ -99,7 +99,7 @@ STRIP=@STRIP@ INSTALL=@INSTALL@ CPPFLAGS=@CPPFLAGS@ CFLAGS+=-I. -I$(srcdir) $(CPPFLAGS) @CFLAGS@ diff --git a/main/dropbear/dropbear-options_sftp-server_path.patch b/main/dropbear/dropbear-options_sftp-server_path.patch index 9eee8d4436..c16466e3e8 100644 --- a/main/dropbear/dropbear-options_sftp-server_path.patch +++ b/main/dropbear/dropbear-options_sftp-server_path.patch @@ -1,6 +1,6 @@ --- a/default_options.h +++ b/default_options.h -@@ -250,7 +250,7 @@ +@@ -255,7 +255,7 @@ * OpenSSH), set the path below and set DROPBEAR_SFTPSERVER. * The sftp-server program is not provided by Dropbear itself */ #define DROPBEAR_SFTPSERVER 1 |