Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions SPECS/libsoup/CVE-2025-4969.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
From f2a7c306e4e912fbf02b1e93c1a798fa0febe354 Mon Sep 17 00:00:00 2001
From: Milan Crha <[email protected]>
Date: Mon, 19 May 2025 17:48:27 +0200
Subject: [PATCH] soup-multipart: Verify array bounds before accessing its
members

The boundary could be at a place which, calculated, pointed
before the beginning of the array. Check the bounds, to avoid
read out of the array bounds.

Closes https://gitlab.gnome.org/GNOME/libsoup/-/issues/447

Signed-off-by: Azure Linux Security Servicing Account <[email protected]>
Upstream-reference: https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/467.patch
---
libsoup/soup-multipart.c | 2 +-
tests/multipart-test.c | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/libsoup/soup-multipart.c b/libsoup/soup-multipart.c
index 7bfb82c..df1f339 100644
--- a/libsoup/soup-multipart.c
+++ b/libsoup/soup-multipart.c
@@ -110,7 +110,7 @@ find_boundary (const char *start, const char *end,
continue;

/* Check that it's at start of line */
- if (!(b == start || (b[-1] == '\n' && b[-2] == '\r')))
+ if (!(b == start || (b - start >= 2 && b[-1] == '\n' && b[-2] == '\r')))
continue;

/* Check for "--" or "\r\n" after boundary */
diff --git a/tests/multipart-test.c b/tests/multipart-test.c
index 4cc8a76..d05000f 100644
--- a/tests/multipart-test.c
+++ b/tests/multipart-test.c
@@ -529,6 +529,27 @@ test_multipart_bounds_bad (void)
g_bytes_unref (bytes);
}

+static void
+test_multipart_bounds_bad_2 (void)
+{
+ SoupMultipart *multipart;
+ SoupMessageHeaders *headers;
+ GBytes *bytes;
+ const char *raw_data = "\n--123\r\nline\r\n--123--\r";
+
+ headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_MULTIPART);
+ soup_message_headers_append (headers, "Content-Type", "multipart/mixed; boundary=\"123\"");
+
+ bytes = g_bytes_new (raw_data, strlen (raw_data));
+
+ multipart = soup_multipart_new_from_message (headers, bytes);
+ g_assert_nonnull (multipart);
+
+ soup_multipart_free (multipart);
+ soup_message_headers_unref (headers);
+ g_bytes_unref (bytes);
+}
+
static void
test_multipart_too_large (void)
{
@@ -597,6 +618,7 @@ main (int argc, char **argv)
g_test_add_data_func ("/multipart/async-small-reads", GINT_TO_POINTER (ASYNC_MULTIPART_SMALL_READS), test_multipart);
g_test_add_func ("/multipart/bounds-good", test_multipart_bounds_good);
g_test_add_func ("/multipart/bounds-bad", test_multipart_bounds_bad);
+ g_test_add_func ("/multipart/bounds-bad-2", test_multipart_bounds_bad_2);
g_test_add_func ("/multipart/too-large", test_multipart_too_large);

ret = g_test_run ();
--
2.45.4

6 changes: 5 additions & 1 deletion SPECS/libsoup/libsoup.spec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Summary: libsoup HTTP client/server library
Name: libsoup
Version: %{BaseVersion}.4
Release: 8%{?dist}
Release: 9%{?dist}
License: GPLv2
Vendor: Microsoft Corporation
Distribution: Mariner
Expand Down Expand Up @@ -34,6 +34,7 @@ Patch15: CVE-2025-32910.patch
Patch16: CVE-2025-32912.patch
Patch17: CVE-2025-4476.patch
Patch18: CVE-2025-4948.patch
Patch19: CVE-2025-4969.patch


BuildRequires: meson
Expand Down Expand Up @@ -146,6 +147,9 @@ find %{buildroot} -type f -name "*.la" -delete -print
%defattr(-,root,root)

%changelog
* Tue Aug 12 2025 Azure Linux Security Servicing Account <[email protected]> - 3.0.4-9
- Patch for CVE-2025-4969

* Tue Jul 29 2025 Azure Linux Security Servicing Account <[email protected]> - 3.0.4-8
- Patch for CVE-2025-4948

Expand Down
Loading