<?xml version="1.0" encoding="UTF-8"?>
<cvrfdoc xmlns="http://www.icasi.org/CVRF/schema/cvrf/1.1" xmlns:cvrf="http://www.icasi.org/CVRF/schema/cvrf/1.1">
  <DocumentTitle xml:lang="en">Security update for curl</DocumentTitle>
  <DocumentType>SUSE Patch</DocumentType>
  <DocumentPublisher Type="Vendor">
    <ContactDetails>security@suse.de</ContactDetails>
    <IssuingAuthority>SUSE Security Team</IssuingAuthority>
  </DocumentPublisher>
  <DocumentTracking>
    <Identification>
      <ID>SUSE-SU-2025:20824-1</ID>
    </Identification>
    <Status>Final</Status>
    <Version>1</Version>
    <RevisionHistory>
      <Revision>
        <Number>1</Number>
        <Date>2025-09-25T10:52:04Z</Date>
        <Description>current</Description>
      </Revision>
    </RevisionHistory>
    <InitialReleaseDate>2025-09-25T10:52:04Z</InitialReleaseDate>
    <CurrentReleaseDate>2025-09-25T10:52:04Z</CurrentReleaseDate>
    <Generator>
      <Engine>cve-database/bin/generate-cvrf.pl</Engine>
      <Date>2017-02-24T01:00:00Z</Date>
    </Generator>
  </DocumentTracking>
  <DocumentNotes>
    <Note Title="Topic" Type="Summary" Ordinal="1" xml:lang="en">Security update for curl</Note>
    <Note Title="Details" Type="General" Ordinal="2" xml:lang="en">This update for curl fixes the following issues:

- CVE-2025-9086: Fixed Out of bounds read for cookie path (bsc#1249191)
- CVE-2025-10148: Predictable WebSocket mask (bsc#1249348)
- Fix the --ftp-pasv option in curl v8.14.1 [bsc#1246197]
- tool_operate: fix return code when --retry is used but not
  triggered [bsc#1249367]

- Updated to 8.14.1: [jsc#PED-13055, jsc#PED-13056]
  * Add _multibuild
  * Bugfixes:
    - asyn-thrdd: fix cleanup when RR fails due to OOM
    - ftp: fix teardown of DATA connection in done
    - http: fail early when rewind of input failed when following redirects
    - multi: fix add_handle resizing
    - tls BIOs: handle BIO_CTRL_EOF correctly
    - tool_getparam: make --no-anyauth not be accepted
    - wolfssl: fix sending of early data
    - ws: handle blocked sends better
    - ws: tests and fixes

- Sync spec file with SLE codestreams: [jsc#PED-13055, jsc#PED-13056]
  
  * Add curl-mini.rpmlintrc to avoid rpmlint shlib-policy-name-error
    when building the curl-mini package in SLE.
  * Add libssh minimum version requirements.
  * Use ldconfig_scriptlets when available.
  * Remove unused option --disable-ntlm-wb.

- Update to 8.14.0:
  
  * Changes:
    - mqtt: send ping at upkeep interval
    - schannel: handle pkcs12 client certificates containing CA certificates
    - TLS: add CURLOPT_SSL_SIGNATURE_ALGORITHMS and --sigalgs
    - vquic: ngtcp2 + openssl support
    - wcurl: import v2025.04.20 script + docs
    - websocket: add option to disable auto-pong reply
  
  * Bugfixes:
    - asny-thrdd: fix detach from running thread
    - async-threaded resolver: use ref counter
    - async: DoH improvements
    - build: enable gcc-12/13+, clang-10+ picky warnings
    - build: enable gcc-15 picky warnings
    - certs: drop unused `default_bits` from `.prm` files
    - cf-https-connect: use the passed in dns struct pointer
    - cf-socket: fix FTP accept connect
    - cfilters: remove assert
    - cmake: fix nghttp3 static linking with `USE_OPENSSL_QUIC=ON`
    - cmake: prefer `COMPILE_OPTIONS` over `CMAKE_C_FLAGS` for custom C options
    - cmake: revert `CURL_LTO` behavior for multi-config generators
    - configure: fix --disable-rt
    - CONTRIBUTE: add project guidelines for AI use
    - cpool/cshutdown: force close connections under pressure
    - curl: fix memory leak when -h is used in config file
    - curl_get_line: handle lines ending on the buffer boundary
    - headers: enforce a max number of response header to accept
    - http: fix HTTP/2 handling of TE request header using "trailers"
    - lib: include files using known path
    - lib: unify conversions to/from hex
    - libssh: add NULL check for Curl_meta_get()
    - libssh: fix memory leak
    - mqtt: use conn/easy meta hash
    - multi: do transfer book keeping using mid
    - multi: init_do(): check result
    - netrc: avoid NULL deref on weird input
    - netrc: avoid strdup NULL
    - netrc: deal with null token better
    - openssl-quic: avoid potential `-Wnull-dereference`, add assert
    - openssl-quic: fix shutdown when stream not open
    - openssl: enable builds for *both* engines and providers
    - openssl: set the cipher string before doing private cert
    - progress: avoid integer overflow when gathering total transfer size
    - rand: update comment on Curl_rand_bytes weak random
    - rustls: make max size of cert and key reasonable
    - smb: avoid integer overflow on weird input date
    - urlapi: redirecting to "" is considered fine

- Update to 8.13.0:
  
  * Changes:
    - curl: add write-out variable 'tls_earlydata'
    - curl: make --url support a file with URLs
    - gnutls: set priority via --ciphers
    - IMAP: add CURLOPT_UPLOAD_FLAGS and --upload-flags
    - lib: add CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY
    - OpenSSL/quictls: add support for TLSv1.3 early data
    - rustls: add support for CERTINFO
    - rustls: add support for SSLKEYLOGFILE
    - rustls: support ECH w/ DoH lookup for config
    - rustls: support native platform verifier
    - var: add a '64dec' function that can base64 decode a string
  
  * Bugfixes:
    - conn: fix connection reuse when SSL is optional
    - hash: use single linked list for entries
    - http2: detect session being closed on ingress handling
    - http2: reset stream on response header error
    - http: remove a HTTP method size restriction
    - http: version negotiation
    - httpsrr: fix port detection
    - libssh: fix freeing of resources in disconnect
    - libssh: fix scp large file upload for 32-bit size_t systems
    - openssl-quic: do not iterate over multi handles
    - openssl: check return value of X509_get0_pubkey
    - openssl: drop support for old OpenSSL/LibreSSL versions
    - openssl: fix crash on missing cert password
    - openssl: fix pkcs11 URI checking for key files.
    - openssl: remove bad `goto`s into other scope
    - setopt: illegal CURLOPT_SOCKS5_AUTH should return error
    - setopt: setting PROXYUSERPWD after PROXYUSERNAME/PASSWORD is fine
    - sshserver.pl: adjust `AuthorizedKeysFile2` cutoff version
    - sshserver: fix excluding obsolete client config lines
    - SSLCERTS: list support for SSL_CERT_FILE and SSL_CERT_DIR
    - tftpd: prefix TFTP protocol error `E*` constants with `TFTP_`
    - tool_operate: fail SSH transfers without server auth
    - url: call protocol handler's disconnect in Curl_conn_free
    - urlapi: remove percent encoded dot sequences from the URL path
    - urldata: remove 'hostname' from struct Curl_async

- Update to 8.12.1:
  
  * Bugfixes:
    - asyn-thread: fix build with 'CURL_DISABLE_SOCKETPAIR'
    - asyn-thread: fix HTTPS RR crash
    - asyn-thread: fix the returned bitmask from Curl_resolver_getsock
    - asyn-thread: survive a c-ares channel set to NULL
    - cmake: always reference OpenSSL and ZLIB via imported targets
    - cmake: respect 'GNUTLS_CFLAGS' when detected via 'pkg-config'
    - cmake: respect 'GNUTLS_LIBRARY_DIRS' in 'libcurl.pc' and 'curl-config'
    - content_encoding: #error on too old zlib
    - imap: TLS upgrade fix
    - ldap: drop support for legacy Novell LDAP SDK
    - libssh2: comparison is always true because rc &lt;= -1
    - libssh2: raise lowest supported version to 1.2.8
    - libssh: drop support for libssh older than 0.9.0
    - openssl-quic: ignore ciphers for h3
    - pop3: TLS upgrade fix
    - runtests: fix the disabling of the memory tracking
    - runtests: quote commands to support paths with spaces
    - scache: add magic checks
    - smb: silence '-Warray-bounds' with gcc 13+
    - smtp: TLS upgrade fix
    - tool_cfgable: sort struct fields by size, use bitfields for booleans
    - tool_getparam: add "TLS required" flag for each such option
    - vtls: fix multissl-init
    - wakeup_write: make sure the eventfd write sends eight bytes

- Update to 8.12.0:
  
  * Changes:
    - curl: add byte range support to --variable reading from file
    - curl: make --etag-save acknowledge --create-dirs
    - getinfo: fix CURLINFO_QUEUE_TIME_T and add 'time_queue' var
    - getinfo: provide info which auth was used for HTTP and proxy
    - hyper: drop support
    - openssl: add support to use keys and certificates from PKCS#11 provider
    - QUIC: 0RTT for gnutls via CURLSSLOPT_EARLYDATA
    - vtls: feature ssls-export for SSL session im-/export
  
  * Bugfixes:
    - altsvc: avoid integer overflow in expire calculation
    - asyn-ares: acknowledge CURLOPT_DNS_SERVERS set to NULL
    - asyn-ares: fix memory leak
    - asyn-ares: initial HTTPS resolve support
    - asyn-thread: use c-ares to resolve HTTPS RR
    - async-thread: avoid closing eventfd twice
    - cd2nroff: do not insist on quoted &lt;&gt; within backticks
    - cd2nroff: support "none" as a TLS backend
    - conncache: count shutdowns against host and max limits
    - content_encoding: drop support for zlib before 1.2.0.4
    - content_encoding: namespace GZIP flag constants
    - content_encoding: put the decomp buffers into the writer structs
    - content_encoding: support use of custom libzstd memory functions
    - cookie: cap expire times to 400 days
    - cookie: parse only the exact expire date
    - curl: return error if etag options are used with multiple URLs
    - curl_multi_fdset: include the shutdown connections in the set
    - curl_sha512_256: rename symbols to the curl namespace
    - curl_url_set.md: adjust the added-in to 7.62.0
    - doh: send HTTPS RR requests for all HTTP(S) transfers
    - easy: allow connect-only handle reuse with easy_perform
    - easy: make curl_easy_perform() return error if connection still there
    - easy_lock: use Sleep(1) for thread yield on old Windows
    - ECH: update APIs to those agreed with OpenSSL maintainers
    - GnuTLS: fix 'time_appconnect' for early data
    - HTTP/2: strip TE request header
    - http2: fix data_pending check
    - http2: fix value stored to 'result' is never read
    - http: ignore invalid Retry-After times
    - http_aws_sigv4: Fix invalid compare function handling zero-length pairs
    - https-connect: start next immediately on failure
    - lib: redirect handling by protocol handler
    - multi: fix curl_multi_waitfds reporting of fd_count
    - netrc: 'default' with no credentials is not a match
    - netrc: fix password-only entries
    - netrc: restore _netrc fallback logic
    - ngtcp2: fix memory leak on connect failure
    - openssl: define `HAVE_KEYLOG_CALLBACK` before use
    - openssl: fix ECH logic
    - osslq: use SSL_poll to determine writeability of QUIC streams
    - sectransp: free certificate on error
    - select: avoid a NULL deref in cwfds_add_sock
    - src: omit hugehelp and ca-embed from libcurltool
    - ssl session cache: change cache dimensions
    - system.h: add 64-bit curl_off_t definitions for NonStop
    - telnet: handle single-byte input option
    - TLS: check connection for SSL use, not handler
    - tool_formparse.c: make curlx_uztoso a static in here
    - tool_formparse: accept digits in --form type= strings
    - tool_getparam: ECH param parsing refix
    - tool_getparam: fail --hostpubsha256 if libssh2 is not used
    - tool_getparam: fix "Ignored Return Value"
    - tool_getparam: fix memory leak on error in parse_ech
    - tool_getparam: fix the ECH parser
    - tool_operate: make --etag-compare always accept a non-existing file
    - transfer: fix CURLOPT_CURLU override logic
    - urlapi: fix redirect to a new fragment or query (only)
    - vquic: make vquic_send_packets not return without setting psent
    - vtls: fix default SSL backend as a fallback
    - vtls: only remember the expiry timestamp in session cache
    - websocket: fix message send corruption
    - x509asn1: add parse recursion limit
</Note>
    <Note Title="Terms of Use" Type="Legal Disclaimer" Ordinal="3" xml:lang="en">The CVRF data is provided by SUSE under the Creative Commons License 4.0 with Attribution (CC-BY-4.0).</Note>
    <Note Title="Patchnames" Type="Details" Ordinal="4" xml:lang="en">SUSE-SLE-Micro-6.0-477</Note>
  </DocumentNotes>
  <DocumentDistribution xml:lang="en">Copyright SUSE LLC under the Creative Commons License 4.0 with Attribution (CC-BY-4.0)</DocumentDistribution>
  <DocumentReferences>
    <Reference Type="Self">
      <URL>https://www.suse.com/support/update/announcement/2025/suse-su-202520824-1/</URL>
      <Description>Link for SUSE-SU-2025:20824-1</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://lists.suse.com/pipermail/sle-updates/2025-October/042161.html</URL>
      <Description>E-Mail link for SUSE-SU-2025:20824-1</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://www.suse.com/support/security/rating/</URL>
      <Description>SUSE Security Ratings</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://bugzilla.suse.com/1246197</URL>
      <Description>SUSE Bug 1246197</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://bugzilla.suse.com/1249191</URL>
      <Description>SUSE Bug 1249191</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://bugzilla.suse.com/1249348</URL>
      <Description>SUSE Bug 1249348</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://bugzilla.suse.com/1249367</URL>
      <Description>SUSE Bug 1249367</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://www.suse.com/security/cve/CVE-2025-10148/</URL>
      <Description>SUSE CVE CVE-2025-10148 page</Description>
    </Reference>
    <Reference Type="Self">
      <URL>https://www.suse.com/security/cve/CVE-2025-9086/</URL>
      <Description>SUSE CVE CVE-2025-9086 page</Description>
    </Reference>
  </DocumentReferences>
  <ProductTree xmlns="http://www.icasi.org/CVRF/schema/prod/1.1">
    <Branch Type="Product Family" Name="SUSE Linux Micro 6.0">
      <Branch Type="Product Name" Name="SUSE Linux Micro 6.0">
        <FullProductName ProductID="SUSE Linux Micro 6.0" CPE="cpe:/o:suse:sl-micro:6.0">SUSE Linux Micro 6.0</FullProductName>
      </Branch>
    </Branch>
    <Branch Type="Product Version" Name="curl-8.14.1-1.1">
      <FullProductName ProductID="curl-8.14.1-1.1">curl-8.14.1-1.1</FullProductName>
    </Branch>
    <Branch Type="Product Version" Name="libcurl4-8.14.1-1.1">
      <FullProductName ProductID="libcurl4-8.14.1-1.1">libcurl4-8.14.1-1.1</FullProductName>
    </Branch>
    <Relationship ProductReference="curl-8.14.1-1.1" RelationType="Default Component Of" RelatesToProductReference="SUSE Linux Micro 6.0">
      <FullProductName ProductID="SUSE Linux Micro 6.0:curl-8.14.1-1.1">curl-8.14.1-1.1 as a component of SUSE Linux Micro 6.0</FullProductName>
    </Relationship>
    <Relationship ProductReference="libcurl4-8.14.1-1.1" RelationType="Default Component Of" RelatesToProductReference="SUSE Linux Micro 6.0">
      <FullProductName ProductID="SUSE Linux Micro 6.0:libcurl4-8.14.1-1.1">libcurl4-8.14.1-1.1 as a component of SUSE Linux Micro 6.0</FullProductName>
    </Relationship>
  </ProductTree>
  <Vulnerability xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1" Ordinal="1">
    <Notes>
      <Note Title="Vulnerability Description" Type="General" Ordinal="1" xml:lang="en">curl's websocket code did not update the 32 bit mask pattern for each new
 outgoing frame as the specification says. Instead it used a fixed mask that
persisted and was used throughout the entire connection.

A predictable mask pattern allows for a malicious server to induce traffic
between the two communicating parties that could be interpreted by an involved
proxy (configured or transparent) as genuine, real, HTTP traffic with content
and thereby poison its cache. That cached poisoned content could then be
served to all users of that proxy.</Note>
    </Notes>
    <CVE>CVE-2025-10148</CVE>
    <ProductStatuses>
      <Status Type="Fixed">
        <ProductID>SUSE Linux Micro 6.0:curl-8.14.1-1.1</ProductID>
        <ProductID>SUSE Linux Micro 6.0:libcurl4-8.14.1-1.1</ProductID>
      </Status>
    </ProductStatuses>
    <Threats>
      <Threat Type="Impact">
        <Description>moderate</Description>
      </Threat>
    </Threats>
    <Remediations>
      <Remediation Type="Vendor Fix">
        <Description xml:lang="en">To install this SUSE Security Update use the SUSE recommended installation methods like YaST online_update or "zypper patch".
</Description>
        <URL>https://www.suse.com/support/update/announcement/2025/suse-su-202520824-1/</URL>
      </Remediation>
    </Remediations>
    <References>
      <Reference>
        <URL>https://www.suse.com/security/cve/CVE-2025-10148.html</URL>
        <Description>CVE-2025-10148</Description>
      </Reference>
      <Reference>
        <URL>https://bugzilla.suse.com/1249348</URL>
        <Description>SUSE Bug 1249348</Description>
      </Reference>
    </References>
  </Vulnerability>
  <Vulnerability xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1" Ordinal="2">
    <Notes>
      <Note Title="Vulnerability Description" Type="General" Ordinal="1" xml:lang="en">1. A cookie is set using the `secure` keyword for `https://target`
2. curl is redirected to or otherwise made to speak with `http://target` (same
   hostname, but using clear text HTTP) using the same cookie set
3. The same cookie name is set - but with just a slash as path (`path='/'`).
   Since this site is not secure, the cookie *should* just be ignored.
4. A bug in the path comparison logic makes curl read outside a heap buffer
   boundary

The bug either causes a crash or it potentially makes the comparison come to
the wrong conclusion and lets the clear-text site override the contents of the
secure cookie, contrary to expectations and depending on the memory contents
immediately following the single-byte allocation that holds the path.

The presumed and correct behavior would be to plainly ignore the second set of
the cookie since it was already set as secure on a secure host so overriding
it on an insecure host should not be okay.</Note>
    </Notes>
    <CVE>CVE-2025-9086</CVE>
    <ProductStatuses>
      <Status Type="Fixed">
        <ProductID>SUSE Linux Micro 6.0:curl-8.14.1-1.1</ProductID>
        <ProductID>SUSE Linux Micro 6.0:libcurl4-8.14.1-1.1</ProductID>
      </Status>
    </ProductStatuses>
    <Threats>
      <Threat Type="Impact">
        <Description>important</Description>
      </Threat>
    </Threats>
    <Remediations>
      <Remediation Type="Vendor Fix">
        <Description xml:lang="en">To install this SUSE Security Update use the SUSE recommended installation methods like YaST online_update or "zypper patch".
</Description>
        <URL>https://www.suse.com/support/update/announcement/2025/suse-su-202520824-1/</URL>
      </Remediation>
    </Remediations>
    <References>
      <Reference>
        <URL>https://www.suse.com/security/cve/CVE-2025-9086.html</URL>
        <Description>CVE-2025-9086</Description>
      </Reference>
      <Reference>
        <URL>https://bugzilla.suse.com/1249191</URL>
        <Description>SUSE Bug 1249191</Description>
      </Reference>
    </References>
  </Vulnerability>
</cvrfdoc>
