SECURITY UPDATE

This commit is contained in:
liubo0711 2024-11-05 09:41:58 +08:00
parent 21de47cb16
commit 5d243414b4
2 changed files with 42 additions and 6 deletions

8
debian/changelog vendored
View File

@ -1,3 +1,11 @@
wget (1.21.4-ok2) nile; urgency=medium
* SECURITY UPDATE: mishandling of semicolons in userinfo -
debian/patches/CVE-2024-38428.patch: properly re-implement userinfo
parsing in src/url.c. - CVE-2024-38428
-- liubo01 <liubo01@kylinos.cn> Tue, 05 Nov 2024 09:41:58 +0800
wget (1.21.4-ok1) nile; urgency=high
* Build for openKylin.

View File

@ -41,6 +41,7 @@ as that of the covered work. */
#include "url.h"
#include "host.h" /* for is_valid_ipv6_address */
#include "c-strcase.h"
#include "c-ctype.h"
#ifdef HAVE_ICONV
# include <iconv.h>
@ -526,12 +527,39 @@ scheme_leading_string (enum url_scheme scheme)
static const char *
url_skip_credentials (const char *url)
{
/* Look for '@' that comes before terminators, such as '/', '?',
'#', or ';'. */
const char *p = (const char *)strpbrk (url, "@/?#;");
if (!p || *p != '@')
return url;
return p + 1;
/*
* This whole file implements https://www.rfc-editor.org/rfc/rfc2396 .
* RFC 2396 is outdated since 2005 and needs a rewrite or a thorough re-visit.
*
* The RFC says
* server = [ [ userinfo "@" ] hostport ]
* userinfo = *( unreserved | escaped | ";" | ":" | "&" | "=" | "+" | "$" | "," )
* unreserved = alphanum | mark
* mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
*/
static const char *allowed = "-_.!~*'();:&=+$,";
for (const char *p = url; *p; p++)
{
if (c_isalnum(*p))
continue;
if (strchr(allowed, *p))
continue;
if (*p == '%' && c_isxdigit(p[1]) && c_isxdigit(p[2]))
{
p += 2;
continue;
}
if (*p == '@')
return p + 1;
break;
}
return url;
}
/* Parse credentials contained in [BEG, END). The region is expected