It looks like we build without metalink anyway ... so is this CVE
applicable to us?

Thanks,

Anuj

On Tue, 2021-10-26 at 14:36 +0800, Yu, Mingli wrote:
> From: Mingli Yu <mingli...@windriver.com>
> 
> Backport patch to remove metalink [1] to fix below CVEs:
>  - CVE-2021-22922 [2]
>  - CVE-2021-22923 [3]
> 
> [1]
> https://github.com/curl/curl/commit/265b14d6b37c4298bd5556fabcbc37d36f911693
> [2] https://curl.se/docs/CVE-2021-22922.html
> [3] https://curl.se/docs/CVE-2021-22923.html
> 
> Signed-off-by: Mingli Yu <mingli...@windriver.com>
> ---
>  .../curl/curl/0001-metalink-remove.patch      | 194
> ++++++++++++++++++
>  meta/recipes-support/curl/curl_7.75.0.bb      |   2 +-
>  2 files changed, 195 insertions(+), 1 deletion(-)
>  create mode 100644 meta/recipes-support/curl/curl/0001-metalink-
> remove.patch
> 
> diff --git a/meta/recipes-support/curl/curl/0001-metalink-
> remove.patch b/meta/recipes-support/curl/curl/0001-metalink-
> remove.patch
> new file mode 100644
> index 0000000000..a76e720215
> --- /dev/null
> +++ b/meta/recipes-support/curl/curl/0001-metalink-remove.patch
> @@ -0,0 +1,194 @@
> +From ef339d19b688e0d4c9b6ff2bd5b5cd54af9e1dbf Mon Sep 17 00:00:00
> 2001
> +From: Daniel Stenberg <dan...@haxx.se>
> +Date: Tue, 26 Oct 2021 11:10:31 +0800
> +Subject: [PATCH] metalink: remove
> +
> +Warning: this will make existing curl command lines that use
> metalink to
> +stop working.
> +
> +Reasons for removal:
> +
> +1. We've found several security problems and issues involving the
> +   metalink support in curl. The issues are not detailed here. When
> +   working on those, it become apparent to the team that several of
> the
> +   problems are due to the system design, metalink library API and
> what
> +   the metalink RFC says. They are very hard to fix on the curl side
> +   only.
> +
> +2. The metalink usage with curl was only very briefly documented and
> was
> +   not following the "normal" curl usage pattern in several ways,
> making
> +   it surprising and non-intuitive which could lead to further
> security
> +   issues.
> +
> +3. The metalink library was last updated 6 years ago and wasn't so
> +   active the years before that either. An unmaintained library
> means
> +   there's a security problem waiting to happen. This is probably
> reason
> +   enough.
> +
> +4. Metalink requires an XML parsing library, which is complex code
> (even
> +   the smaller alternatives) and to this day often gets security
> +   updates.
> +
> +5. Metalink is not a widely used curl feature. In the 2020 curl user
> +   survey, only 1.4% of the responders said that they'd are using
> it. In
> +   2021 that number was 1.2%. Searching the web also show very few
> +   traces of it being used, even with other tools.
> +
> +6. The torrent format and associated technology clearly won for
> +   downloading large files from multiple sources in parallel.
> +
> +Cloes #7176
> +
> +CVE: CVE-2021-22922 CVE-2021-22923
> +
> +Upstream-Status: Backport
> [https://github.com/curl/curl/commit/265b14d6b37c4298bd5556fabcbc37d36f911693
> ]
> +
> +Signed-off-by: Mingli Yu <mingli...@windriver.com>
> +---
> + configure.ac    | 96 ++--------------------------------------------
> ---
> + src/Makefile.am |  9 ++---
> + 2 files changed, 5 insertions(+), 100 deletions(-)
> +
> +diff --git a/configure.ac b/configure.ac
> +index 816f044..715fe26 100755
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -162,7 +162,6 @@ curl_verbose_msg="enabled (--disable-verbose)"
> +   curl_ldaps_msg="no      (--enable-ldaps)"
> +    curl_rtsp_msg="no      (--enable-rtsp)"
> +    curl_rtmp_msg="no      (--with-librtmp)"
> +-  curl_mtlnk_msg="no      (--with-libmetalink)"
> +     curl_psl_msg="no      (--with-libpsl)"
> +  curl_altsvc_msg="enabled";
> +     ssl_backends=
> +@@ -2895,99 +2894,8 @@ if test $with_libpsl != "no"; then
> + fi
> + AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "enabled"])
> + 
> +-dnl
> *********************************************************************
> *
> +-dnl Check for libmetalink
> +-dnl
> *********************************************************************
> *
> +-
> +-OPT_LIBMETALINK=no
> +-
> +-AC_ARG_WITH(libmetalink,dnl
> +-AC_HELP_STRING([--with-libmetalink=PATH],[where to look for
> libmetalink, PATH points to the installation root])
> +-AC_HELP_STRING([--without-libmetalink], [disable libmetalink
> detection]),
> +-  OPT_LIBMETALINK=$withval)
> +-
> +-if test X"$OPT_LIBMETALINK" != Xno; then
> +-
> +-  addld=""
> +-  addlib=""
> +-  addcflags=""
> +-  version=""
> +-  libmetalinklib=""
> +-
> +-  PKGTEST="no"
> +-  if test "x$OPT_LIBMETALINK" = "xyes"; then
> +-    dnl this is with no partiular path given
> +-    PKGTEST="yes"
> +-    CURL_CHECK_PKGCONFIG(libmetalink)
> +-  else
> +-    dnl When particular path is given, set PKG_CONFIG_LIBDIR using
> the path.
> +-    LIBMETALINK_PCDIR="$OPT_LIBMETALINK/lib/pkgconfig"
> +-    AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to
> "$LIBMETALINK_PCDIR"])
> +-    if test -f "$LIBMETALINK_PCDIR/libmetalink.pc"; then
> +-      PKGTEST="yes"
> +-    fi
> +-    if test "$PKGTEST" = "yes"; then
> +-      CURL_CHECK_PKGCONFIG(libmetalink, [$LIBMETALINK_PCDIR])
> +-    fi
> +-  fi
> +-  if test "$PKGTEST" = "yes" && test "$PKGCONFIG" != "no"; then
> +-    addlib=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
> +-      $PKGCONFIG --libs-only-l libmetalink`
> +-    addld=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
> +-      $PKGCONFIG --libs-only-L libmetalink`
> +-    addcflags=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
> +-      $PKGCONFIG --cflags-only-I libmetalink`
> +-    version=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
> +-      $PKGCONFIG --modversion libmetalink`
> +-    libmetalinklib=`echo $addld | $SED -e 's/^-L//'`
> +-  fi
> +-  if test -n "$addlib"; then
> +-
> +-    clean_CPPFLAGS="$CPPFLAGS"
> +-    clean_LDFLAGS="$LDFLAGS"
> +-    clean_LIBS="$LIBS"
> +-    CPPFLAGS="$clean_CPPFLAGS $addcflags"
> +-    LDFLAGS="$clean_LDFLAGS $addld"
> +-    LIBS="$addlib $clean_LIBS"
> +-    AC_MSG_CHECKING([if libmetalink is recent enough])
> +-    AC_LINK_IFELSE([
> +-      AC_LANG_PROGRAM([[
> +-#       include <metalink/metalink.h>
> +-      ]],[[
> +-        if(0 != metalink_strerror(0)) /* added in 0.1.0 */
> +-          return 1;
> +-      ]])
> +-    ],[
> +-      AC_MSG_RESULT([yes ($version)])
> +-      want_metalink="yes"
> +-    ],[
> +-      AC_MSG_RESULT([no ($version)])
> +-      AC_MSG_NOTICE([libmetalink library defective or too old])
> +-      want_metalink="no"
> +-    ])
> +-    if test "x$OPENSSL_ENABLED" != "x1" -a "x$USE_WINDOWS_SSPI" !=
> "x1" \
> +-        -a "x$GNUTLS_ENABLED" != "x1" -a "x$NSS_ENABLED" != "x1" \
> +-        -a "x$SECURETRANSPORT_ENABLED" != "x1"; then
> +-      AC_MSG_WARN([metalink support requires a compatible SSL/TLS
> backend])
> +-      want_metalink="no"
> +-    fi
> +-    CPPFLAGS="$clean_CPPFLAGS"
> +-    LDFLAGS="$clean_LDFLAGS"
> +-    LIBS="$clean_LIBS"
> +-    if test "$want_metalink" = "yes"; then
> +-      dnl finally libmetalink will be used
> +-      AC_DEFINE(USE_METALINK, 1, [Define to enable metalink
> support])
> +-      LIBMETALINK_LIBS=$addlib
> +-      LIBMETALINK_LDFLAGS=$addld
> +-      LIBMETALINK_CPPFLAGS=$addcflags
> +-      AC_SUBST([LIBMETALINK_LIBS])
> +-      AC_SUBST([LIBMETALINK_LDFLAGS])
> +-      AC_SUBST([LIBMETALINK_CPPFLAGS])
> +-      curl_mtlnk_msg="enabled"
> +-    fi
> +-
> +-  fi
> +-fi
> ++AC_ARG_WITH(libmetalink,,
> ++  AC_MSG_ERROR([--with-libmetalink no longer works!]))
> + 
> + dnl
> *********************************************************************
> *
> + dnl Check for the presence of LIBSSH2 libraries and headers
> +diff --git a/src/Makefile.am b/src/Makefile.am
> +index dff248f..6b7547f 100644
> +--- a/src/Makefile.am
> ++++ b/src/Makefile.am
> +@@ -61,18 +61,15 @@ CFLAGS += @CURL_CFLAG_EXTRAS@
> + LIBS = $(BLANK_AT_MAKETIME)
> + 
> + if USE_EXPLICIT_LIB_DEPS
> +-curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@
> @LIBCURL_LIBS@
> ++curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
> + else
> +-curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@
> @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
> ++curl_LDADD = $(top_builddir)/lib/libcurl.la @NSS_LIBS@ @SSL_LIBS@
> @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
> + endif
> + 
> +-curl_LDFLAGS = @LIBMETALINK_LDFLAGS@
> +-curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
> +-
> + # if unit tests are enabled, build a static library to link them
> with
> + if BUILD_UNITTESTS
> + noinst_LTLIBRARIES = libcurltool.la
> +-libcurltool_la_CPPFLAGS = $(LIBMETALINK_CPPFLAGS) $(AM_CPPFLAGS) \
> ++libcurltool_la_CPPFLAGS = $(AM_CPPFLAGS) \
> +                           -DCURL_STATICLIB -DUNITTESTS
> + libcurltool_la_CFLAGS =
> + libcurltool_la_LDFLAGS = -static $(LINKFLAGS)
> +-- 
> +2.17.1
> +
> diff --git a/meta/recipes-support/curl/curl_7.75.0.bb b/meta/recipes-
> support/curl/curl_7.75.0.bb
> index d9818b6f07..10e44f2709 100644
> --- a/meta/recipes-support/curl/curl_7.75.0.bb
> +++ b/meta/recipes-support/curl/curl_7.75.0.bb
> @@ -24,6 +24,7 @@ SRC_URI =
> "https://curl.haxx.se/download/curl-${PV}.tar.bz2 \
>             file://CVE-2021-22945.patch \
>             file://CVE-2021-22946.patch \
>             file://CVE-2021-22947.patch \
> +           file://0001-metalink-remove.patch \
>  "
>  
>  SRC_URI[sha256sum] =
> "50552d4501c178e4cc68baaecc487f466a3d6d19bbf4e50a01869effb316d026"
> @@ -73,7 +74,6 @@ EXTRA_OECONF = " \
>      --disable-ntlm-wb \
>      --enable-crypto-auth \
>      --with-ca-bundle=${sysconfdir}/ssl/certs/ca-certificates.crt \
> -    --without-libmetalink \
>      --without-libpsl \
>      --enable-debug \
>      --enable-optimize \
> 
> 
> 

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#157465): 
https://lists.openembedded.org/g/openembedded-core/message/157465
Mute This Topic: https://lists.openembedded.org/mt/86597181/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to