public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/rabbitmq-server] f43: Fix CVEs
@ 2026-07-30 15:09 Peter Lemenkov
0 siblings, 0 replies; only message in thread
From: Peter Lemenkov @ 2026-07-30 15:09 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/rabbitmq-server
Branch : f43
Commit : 108bbf62423f5af79ebae4f2c6c0b909fddcc60a
Author : Peter Lemenkov <lemenkov@gmail.com>
Date : 2026-07-30T16:45:51+02:00
Stats : +623/-1 in 13 file(s)
URL : https://src.fedoraproject.org/rpms/rabbitmq-server/c/108bbf62423f5af79ebae4f2c6c0b909fddcc60a?branch=f43
Log:
Fix CVEs
57212, 57213, 57215, 57217, 57219, 57221
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
---
diff --git a/rabbitmq-server-0001-Use-default-EPMD-socket.patch b/rabbitmq-server-0001-Use-default-EPMD-socket.patch
index e1c0352..21962d8 100644
--- a/rabbitmq-server-0001-Use-default-EPMD-socket.patch
+++ b/rabbitmq-server-0001-Use-default-EPMD-socket.patch
@@ -1,3 +1,4 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov@gmail.com>
Date: Tue, 1 Sep 2020 12:29:25 +0200
Subject: [PATCH] Use default EPMD socket
diff --git a/rabbitmq-server-0002-Use-proto_dist-from-command-line.patch b/rabbitmq-server-0002-Use-proto_dist-from-command-line.patch
index b41b623..3b3c253 100644
--- a/rabbitmq-server-0002-Use-proto_dist-from-command-line.patch
+++ b/rabbitmq-server-0002-Use-proto_dist-from-command-line.patch
@@ -1,3 +1,4 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Peter Lemenkov <lemenkov@redhat.com>
Date: Fri, 15 Jul 2016 16:01:08 +0200
Subject: [PATCH] Use proto_dist from command line
diff --git a/rabbitmq-server-0003-force-python3.patch b/rabbitmq-server-0003-force-python3.patch
index dca1556..3688369 100644
--- a/rabbitmq-server-0003-force-python3.patch
+++ b/rabbitmq-server-0003-force-python3.patch
@@ -1,3 +1,4 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Lon Hohberger <lhh@redhat.com>
Date: Tue, 29 Jan 2019 11:36:11 -0500
Subject: [PATCH] force python3
diff --git a/rabbitmq-server-0004-Greatly-simplified-wrapper-script-which-works-proper.patch b/rabbitmq-server-0004-Greatly-simplified-wrapper-script-which-works-proper.patch
index 1fd32da..00ddf58 100644
--- a/rabbitmq-server-0004-Greatly-simplified-wrapper-script-which-works-proper.patch
+++ b/rabbitmq-server-0004-Greatly-simplified-wrapper-script-which-works-proper.patch
@@ -1,3 +1,4 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tuomo Soini <tis@foobar.fi>
Date: Wed, 21 Oct 2015 15:11:40 +0000
Subject: [PATCH] Greatly simplified wrapper script which works properly for
diff --git a/rabbitmq-server-0005-Allow-Elixir-1.19.patch b/rabbitmq-server-0005-Allow-Elixir-1.19.patch
index 01ca0be..02c513e 100644
--- a/rabbitmq-server-0005-Allow-Elixir-1.19.patch
+++ b/rabbitmq-server-0005-Allow-Elixir-1.19.patch
@@ -1,3 +1,4 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Michal Kuratczyk <michal.kuratczyk@broadcom.com>
Date: Thu, 6 Nov 2025 22:16:56 +0100
Subject: [PATCH] Allow Elixir 1.19
diff --git a/rabbitmq-server-0007-Federation-management-Use-fmt_string-1-in-one-more-p.patch b/rabbitmq-server-0007-Federation-management-Use-fmt_string-1-in-one-more-p.patch
new file mode 100644
index 0000000..18bfa5c
--- /dev/null
+++ b/rabbitmq-server-0007-Federation-management-Use-fmt_string-1-in-one-more-p.patch
@@ -0,0 +1,20 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Michael Klishin <michaelklishin@icloud.com>
+Date: Wed, 11 Mar 2026 14:29:26 -0700
+Subject: [PATCH] Federation management: Use fmt_string/1 in one more place
+
+(cherry picked from commit c2d0d69edf01efbd6e87dfb250c373a32da957f8)
+
+diff --git a/deps/rabbitmq_federation_management/priv/www/js/tmpl/federation.ejs b/deps/rabbitmq_federation_management/priv/www/js/tmpl/federation.ejs
+index e47f697544..06e3f62643 100644
+--- a/deps/rabbitmq_federation_management/priv/www/js/tmpl/federation.ejs
++++ b/deps/rabbitmq_federation_management/priv/www/js/tmpl/federation.ejs
+@@ -82,7 +82,7 @@
+ </td>
+ <td><%= link.timestamp %></td>
+ <td><%= link.id %></td>
+- <td><%= link.consumer_tag %></td>
++ <td><%= fmt_string(link.consumer_tag) %></td>
+ <td>
+ <form action="#/federation-restart-link" method="delete" class="confirm">
+ <input type="hidden" name="id" value="<%= link.id %>"/>
diff --git a/rabbitmq-server-0008-Reject-bindings-to-Direct-Reply-to-virtual-queues.patch b/rabbitmq-server-0008-Reject-bindings-to-Direct-Reply-to-virtual-queues.patch
new file mode 100644
index 0000000..627abc8
--- /dev/null
+++ b/rabbitmq-server-0008-Reject-bindings-to-Direct-Reply-to-virtual-queues.patch
@@ -0,0 +1,81 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Michael Klishin <michaelklishin@icloud.com>
+Date: Sun, 5 Apr 2026 16:00:44 -0700
+Subject: [PATCH] Reject bindings to Direct Reply-to virtual "queues"
+
+(cherry picked from commit 9055500d10ca7629dd2b051c6dc7a4b0bb8f6734)
+(cherry picked from commit 7971061dba915cc67dcd11e7503395c1e68c2f9a)
+
+diff --git a/deps/rabbit/src/rabbit_amqp_session.erl b/deps/rabbit/src/rabbit_amqp_session.erl
+index 29d6b33401..5b8a4a65d5 100644
+--- a/deps/rabbit/src/rabbit_amqp_session.erl
++++ b/deps/rabbit/src/rabbit_amqp_session.erl
+@@ -2592,19 +2592,24 @@ ensure_source_v1(Address,
+ XNameBin = unicode:characters_to_binary(XNameList),
+ XName = exchange_resource(Vhost, XNameBin),
+ QName = queue_resource(Vhost, QNameBin),
+- Binding = #binding{source = XName,
+- destination = QName,
+- key = RoutingKey},
+- PermCache2 = check_resource_access(QName, write, User, PermCache1),
+- PermCache = check_resource_access(XName, read, User, PermCache2),
+- {ok, X} = rabbit_exchange:lookup(XName),
+- TopicPermCache = check_read_permitted_on_topic(
+- X, User, RoutingKey, TopicPermCache0),
+- case rabbit_binding:add(Binding, Username) of
+- ok ->
+- {ok, QName, PermCache, TopicPermCache};
+- {error, _} = Err ->
+- Err
++ case QNameBin of
++ <<"amq.rabbitmq.reply-to.", _/binary>> ->
++ {error, {volatile_queue_not_bindable, QNameBin}};
++ _ when is_binary (QNameBin) ->
++ Binding = #binding{source = XName,
++ destination = QName,
++ key = RoutingKey},
++ PermCache2 = check_resource_access(QName, write, User, PermCache1),
++ PermCache = check_resource_access(XName, read, User, PermCache2),
++ {ok, X} = rabbit_exchange:lookup(XName),
++ TopicPermCache = check_read_permitted_on_topic(
++ X, User, RoutingKey, TopicPermCache0),
++ case rabbit_binding:add(Binding, Username) of
++ ok ->
++ {ok, QName, PermCache, TopicPermCache};
++ {error, _} = Err ->
++ Err
++ end
+ end
+ end;
+ {error, _} = Err ->
+diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl
+index d136c92db3..04ce3e5283 100644
+--- a/deps/rabbit/src/rabbit_channel.erl
++++ b/deps/rabbit/src/rabbit_channel.erl
+@@ -1062,6 +1062,18 @@ check_exchange_deletion(XName = #resource{name = <<"amq.", _/binary>>,
+ check_exchange_deletion(_) ->
+ ok.
+
++reject_volatile_queue_as_binding_target(queue, DestinationNameBin) ->
++ case DestinationNameBin of
++ <<"amq.rabbitmq.reply-to.", _/binary>> ->
++ rabbit_misc:protocol_error(
++ access_refused,
++ "cannot bind or unbind to a volatile (direct reply-to) queue", []);
++ _ when is_binary (DestinationNameBin) ->
++ ok
++ end;
++reject_volatile_queue_as_binding_target(_, _) ->
++ ok.
++
+ %% check that an exchange/queue name does not contain the reserved
+ %% "amq." prefix.
+ %%
+@@ -1794,6 +1806,7 @@ binding_action_with_checks(
+ #user{username = Username} = User) ->
+ ExchangeNameBin = strip_cr_lf(SourceNameBin0),
+ DestinationNameBin = strip_cr_lf(DestinationNameBin0),
++ reject_volatile_queue_as_binding_target(DestinationType, DestinationNameBin),
+ DestinationName = name_to_resource(DestinationType, DestinationNameBin, VHostPath),
+ check_write_permitted(DestinationName, User, AuthzContext),
+ ExchangeName = rabbit_misc:r(VHostPath, exchange, ExchangeNameBin),
diff --git a/rabbitmq-server-0009-Fix-error-popup-text-display.patch b/rabbitmq-server-0009-Fix-error-popup-text-display.patch
new file mode 100644
index 0000000..f6966e4
--- /dev/null
+++ b/rabbitmq-server-0009-Fix-error-popup-text-display.patch
@@ -0,0 +1,207 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Luke Bakken <lrbakken@amazon.com>
+Date: Wed, 23 Jul 2025 22:44:17 -0700
+Subject: [PATCH] Fix error popup text display
+
+When validation fails for a policy parameter, the resulting popup can't
+be read due to one extra binary encoding as well as code that escapes
+HTML entites. Since the EJS template uses `<%= >` for the popup, it will
+display the text as-is, and not render any HTML.
+
+diff --git a/deps/rabbit/src/rabbit_definitions.erl b/deps/rabbit/src/rabbit_definitions.erl
+index 0f69b3ddf4..3b052b0495 100644
+--- a/deps/rabbit/src/rabbit_definitions.erl
++++ b/deps/rabbit/src/rabbit_definitions.erl
+@@ -709,6 +709,8 @@ format({shutdown, _} = Error) ->
+ rabbit_log:debug("Metadata store is unavailable: ~p", [Error]),
+ rabbit_data_coercion:to_binary(
+ rabbit_misc:format("Metadata store is unavailable. Please try again.", []));
++format(E) when is_binary(E) ->
++ E;
+ format(E) ->
+ rabbit_data_coercion:to_binary(rabbit_misc:format("~tp", [E])).
+
+@@ -732,8 +734,8 @@ add_parameter(VHost, Param, Username) ->
+ case Result of
+ ok -> ok;
+ {error_string, E} ->
+- S = rabbit_misc:format(" (~ts/~ts/~ts)", [VHost, Comp, Key]),
+- exit(rabbit_data_coercion:to_binary(rabbit_misc:escape_html_tags(E ++ S)))
++ S = rabbit_misc:format(" (vhost: \"~ts\" / component: \"~ts\" / key: \"~ts\")", [VHost, Comp, Key]),
++ exit(rabbit_data_coercion:to_utf8_binary(E ++ S))
+ end.
+
+ add_global_parameter(Param, Username) ->
+@@ -769,8 +771,8 @@ add_policy(VHost, Param, Username) ->
+ maps:get('apply-to', Param, <<"all">>),
+ Username) of
+ ok -> ok;
+- {error_string, E} -> S = rabbit_misc:format(" (~ts/~ts)", [VHost, Key]),
+- exit(rabbit_data_coercion:to_binary(rabbit_misc:escape_html_tags(E ++ S)))
++ {error_string, E} -> S = rabbit_misc:format(" (vhost: \"~ts\" key: \"~ts\")", [VHost, Key]),
++ exit(rabbit_data_coercion:to_utf8_binary(E ++ S))
+ end.
+
+ -spec add_vhost(map(), rabbit_types:username()) -> ok | no_return().
+diff --git a/deps/rabbit_common/src/rabbit_misc.erl b/deps/rabbit_common/src/rabbit_misc.erl
+index 09ff33a8ca..a5408ceecb 100644
+--- a/deps/rabbit_common/src/rabbit_misc.erl
++++ b/deps/rabbit_common/src/rabbit_misc.erl
+@@ -68,7 +68,7 @@
+ -export([get_parent/0]).
+ -export([store_proc_name/1, store_proc_name/2, get_proc_name/0]).
+ -export([moving_average/4]).
+--export([escape_html_tags/1, b64decode_or_throw/1]).
++-export([b64decode_or_throw/1]).
+ -export([get_env/3]).
+ -export([get_channel_operation_timeout/0]).
+ -export([random/1]).
+@@ -1181,25 +1181,6 @@ moving_average(Time, HalfLife, Next, Current) ->
+ random(N) ->
+ rand:uniform(N).
+
+--spec escape_html_tags(string()) -> binary().
+-
+-escape_html_tags(S) ->
+- escape_html_tags(rabbit_data_coercion:to_list(S), []).
+-
+-
+--spec escape_html_tags(string(), string()) -> binary().
+-
+-escape_html_tags([], Acc) ->
+- rabbit_data_coercion:to_binary(lists:reverse(Acc));
+-escape_html_tags("<" ++ Rest, Acc) ->
+- escape_html_tags(Rest, lists:reverse("<", Acc));
+-escape_html_tags(">" ++ Rest, Acc) ->
+- escape_html_tags(Rest, lists:reverse(">", Acc));
+-escape_html_tags("&" ++ Rest, Acc) ->
+- escape_html_tags(Rest, lists:reverse("&", Acc));
+-escape_html_tags([C | Rest], Acc) ->
+- escape_html_tags(Rest, [C | Acc]).
+-
+ %% If the server we are talking to has non-standard net_ticktime, and
+ %% our connection lasts a while, we could get disconnected because of
+ %% a timeout unless we set our ticktime to be the same. So let's do
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_util.erl b/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
+index 88946e6943..63fc68b7c8 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
+@@ -876,8 +876,7 @@ with_vhost_and_props(Fun, ReqData, Context) ->
+ bad_request(Error, ReqData1, Context)
+ end;
+ {error, Reason} ->
+- bad_request(rabbit_mgmt_format:escape_html_tags(Reason),
+- ReqData1, Context)
++ bad_request(Reason, ReqData1, Context)
+ end
+ end.
+
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl
+index fe52f4a7aa..e9f46daed9 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_healthchecks.erl
+@@ -48,8 +48,7 @@ to_json(ReqData, Context) ->
+ {badrpc, Err} ->
+ failure(rabbit_mgmt_format:print("~tp", Err), ReqData, Context);
+ {error_string, Err} ->
+- S = rabbit_mgmt_format:escape_html_tags(
+- rabbit_data_coercion:to_list(rabbit_mgmt_format:print(Err))),
++ S = rabbit_mgmt_format:print(Err),
+ failure(S, ReqData, Context)
+ end.
+
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl
+index 3b277bef79..71ca1ba43b 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_parameter.erl
+@@ -61,10 +61,7 @@ accept_content(ReqData0, Context = #context{user = User}) ->
+ ok ->
+ {true, ReqData, Context};
+ {error_string, Reason} ->
+- S = rabbit_mgmt_format:escape_html_tags(
+- rabbit_data_coercion:to_list(Reason)),
+- rabbit_mgmt_util:bad_request(
+- rabbit_data_coercion:to_binary(S), ReqData, Context)
++ rabbit_mgmt_util:bad_request(Reason, ReqData, Context)
+ end
+ end)
+ end.
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl
+index a91e5b1a55..df1960c6de 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_policy.erl
+@@ -60,8 +60,7 @@ accept_content(ReqData0, Context = #context{user = #user{username = Username}})
+ ok ->
+ {true, ReqData, Context};
+ {error_string, Reason} ->
+- rabbit_mgmt_util:bad_request(
+- rabbit_mgmt_format:escape_html_tags(Reason), ReqData, Context)
++ rabbit_mgmt_util:bad_request(Reason, ReqData, Context)
+ end
+ end)
+ end.
+diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl
+index 9c5d4bd7bf..45960a19e9 100644
+--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl
++++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl
+@@ -15,7 +15,7 @@
+ -export([to_amqp_table/1, listener/1, web_context/1, properties/1, basic_properties/1]).
+ -export([record/2, to_basic_properties/1]).
+ -export([addr/1, port/1]).
+--export([format_nulls/1, escape_html_tags/1]).
++-export([format_nulls/1]).
+ -export([print/2, print/1]).
+
+ -export([format_queue_stats/1, format_queue_basic_stats/1,
+@@ -533,27 +533,6 @@ format_null_item([{_K, _V} | _T] = L) ->
+ format_null_item(Value) ->
+ Value.
+
+-
+--spec escape_html_tags(string()) -> binary().
+-
+-escape_html_tags(S) ->
+- escape_html_tags(rabbit_data_coercion:to_list(S), []).
+-
+-
+--spec escape_html_tags(string(), string()) -> binary().
+-
+-escape_html_tags([], Acc) ->
+- rabbit_data_coercion:to_binary(lists:reverse(Acc));
+-escape_html_tags("<" ++ Rest, Acc) ->
+- escape_html_tags(Rest, lists:reverse("<", Acc));
+-escape_html_tags(">" ++ Rest, Acc) ->
+- escape_html_tags(Rest, lists:reverse(">", Acc));
+-escape_html_tags("&" ++ Rest, Acc) ->
+- escape_html_tags(Rest, lists:reverse("&", Acc));
+-escape_html_tags([C | Rest], Acc) ->
+- escape_html_tags(Rest, [C | Acc]).
+-
+-
+ -spec clean_consumer_details(proplists:proplist()) -> proplists:proplist().
+ clean_consumer_details(Obj) ->
+ case pget(consumer_details, Obj) of
+diff --git a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_access_control.erl b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_access_control.erl
+index c4561c27d4..86c5d6550d 100644
+--- a/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_access_control.erl
++++ b/deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_access_control.erl
+@@ -273,8 +273,8 @@ not_authorised(Reason, ReqData, Context) ->
+
+ halt_response(Code, Type, Reason, ReqData, Context) ->
+ ReasonFormatted = format_reason(Reason),
+- Json = #{<<"error">> => Type,
+- <<"reason">> => ReasonFormatted},
++ Json = #{error => Type,
++ reason => ReasonFormatted},
+ ReqData1 = cowboy_req:reply(Code,
+ #{<<"content-type">> => <<"application/json">>},
+ rabbit_json:encode(Json), ReqData),
+@@ -286,7 +286,7 @@ not_authenticated(Reason, ReqData, Context, _AuthConfig) ->
+ format_reason(Tuple) when is_tuple(Tuple) ->
+ tuple(Tuple);
+ format_reason(Binary) when is_binary(Binary) ->
+- Binary;
++ unicode:characters_to_binary(Binary);
+ format_reason(Other) ->
+ case is_string(Other) of
+ true -> print("~ts", [Other]);
diff --git a/rabbitmq-server-0010-HTTP-API-refactor-read_complete_body-1.patch b/rabbitmq-server-0010-HTTP-API-refactor-read_complete_body-1.patch
new file mode 100644
index 0000000..9c15a02
--- /dev/null
+++ b/rabbitmq-server-0010-HTTP-API-refactor-read_complete_body-1.patch
@@ -0,0 +1,87 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Michael Klishin <michaelklishin@icloud.com>
+Date: Wed, 11 Mar 2026 16:26:14 -0700
+Subject: [PATCH] HTTP API: refactor `read_complete_body/1`
+
+(cherry picked from commit b8fc2ef7c50a2797d15e1ea7cf34f290032303bb)
+
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_util.erl b/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
+index 63fc68b7c8..467e1b1c4a 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_util.erl
+@@ -723,8 +723,22 @@ read_complete_body(Req0, Acc, BodySizeLimit) ->
+ {error, http_body_limit_exceeded, BodySizeLimit, N};
+ false ->
+ case cowboy_req:read_body(Req0) of
+- {ok, Data, Req} -> {ok, <<Acc/binary, Data/binary>>, Req};
+- {more, Data, Req} -> read_complete_body(Req, <<Acc/binary, Data/binary>>)
++ {ok, Data, Req} ->
++ Total = <<Acc/binary, Data/binary>>,
++ case byte_size(Total) > BodySizeLimit of
++ true ->
++ {error, http_body_limit_exceeded, BodySizeLimit, byte_size(Total)};
++ false ->
++ {ok, Total, Req}
++ end;
++ {more, Data, Req} ->
++ Total = <<Acc/binary, Data/binary>>,
++ case byte_size(Total) > BodySizeLimit of
++ true ->
++ {error, http_body_limit_exceeded, BodySizeLimit, byte_size(Total)};
++ false ->
++ read_complete_body(Req, Total, BodySizeLimit)
++ end
+ end
+ end.
+
+@@ -748,8 +762,16 @@ do_read_complete_body_with_limit(Req0, Acc, BodySizeLimit) ->
+ {error, http_body_limit_exceeded, BodySizeLimit, N};
+ false ->
+ case cowboy_req:read_body(Req0, #{length => BodySizeLimit, period => 30000}) of
+- {ok, Data, Req} -> {ok, <<Acc/binary, Data/binary>>, Req};
+- {more, Data, Req} -> do_read_complete_body_with_limit(Req, <<Acc/binary, Data/binary>>, BodySizeLimit)
++ {ok, Data, Req} ->
++ Total = <<Acc/binary, Data/binary>>,
++ case byte_size(Total) > BodySizeLimit of
++ true ->
++ {error, http_body_limit_exceeded, BodySizeLimit, byte_size(Total)};
++ false ->
++ {ok, Total, Req}
++ end;
++ {more, Data, Req} ->
++ do_read_complete_body_with_limit(Req, <<Acc/binary, Data/binary>>, BodySizeLimit)
+ end
+ end.
+
+@@ -867,16 +889,21 @@ with_vhost_and_props(Fun, ReqData, Context) ->
+ not_found(rabbit_data_coercion:to_binary("vhost_not_found"),
+ ReqData, Context);
+ VHost ->
+- {ok, Body, ReqData1} = read_complete_body(ReqData),
+- case decode(Body) of
+- {ok, Props} ->
+- try
+- Fun(VHost, Props, ReqData1)
+- catch {error, Error} ->
+- bad_request(Error, ReqData1, Context)
+- end;
+- {error, Reason} ->
+- bad_request(Reason, ReqData1, Context)
++ case read_complete_body(ReqData) of
++ {error, http_body_limit_exceeded, LimitApplied, BytesRead} ->
++ rabbit_log:warning("HTTP API: request exceeded maximum allowed payload size (limit: ~tp bytes, payload size: ~tp bytes)", [LimitApplied, BytesRead]),
++ bad_request("Exceeded HTTP request body size limit", ReqData, Context);
++ {ok, Body, ReqData1} ->
++ case decode(Body) of
++ {ok, Props} ->
++ try
++ Fun(VHost, Props, ReqData1)
++ catch {error, Error} ->
++ bad_request(Error, ReqData1, Context)
++ end;
++ {error, Reason} ->
++ bad_request(Reason, ReqData1, Context)
++ end
+ end
+ end.
+
diff --git a/rabbitmq-server-0011-Remove-deprecated-endpoint.patch b/rabbitmq-server-0011-Remove-deprecated-endpoint.patch
new file mode 100644
index 0000000..d7ef969
--- /dev/null
+++ b/rabbitmq-server-0011-Remove-deprecated-endpoint.patch
@@ -0,0 +1,84 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Marcial Rosales <marcial.rosales@broadcom.com>
+Date: Tue, 14 Apr 2026 18:16:15 +0200
+Subject: [PATCH] Remove deprecated endpoint
+
+This api/auth endpoint is not used since
+bootstrap.js endpoint was introduced back in 2023.
+
+diff --git a/deps/rabbitmq_management/priv/www/api/index.html b/deps/rabbitmq_management/priv/www/api/index.html
+index 27c6e1ea59..1654081cb8 100644
+--- a/deps/rabbitmq_management/priv/www/api/index.html
++++ b/deps/rabbitmq_management/priv/www/api/index.html
+@@ -1275,17 +1275,6 @@ or:
+ </p>
+ </td>
+ </tr>
+- <tr>
+- <td>X</td>
+- <td></td>
+- <td></td>
+- <td></td>
+- <td class="path">/api/auth</td>
+- <td>
+- Details about the OAuth2 configuration. It will return HTTP
+- status 200 with body: <pre>{"oauth_enabled":"boolean", "oauth_client_id":"string", "oauth_provider_url":"string"}</pre>
+- </td>
+- </tr>
+ <tr>
+ <td></td>
+ <td></td>
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl b/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl
+index 06e2756739..fb7bfa6eca 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl
+@@ -205,7 +205,6 @@ dispatcher() ->
+ {"/reset", rabbit_mgmt_wm_reset, []},
+ {"/reset/:node", rabbit_mgmt_wm_reset, []},
+ {"/rebalance/queues", rabbit_mgmt_wm_rebalance_queues, [{queues, all}]},
+- {"/auth", rabbit_mgmt_wm_auth, []},
+ {"/auth/attempts/:node", rabbit_mgmt_wm_auth_attempts, [all]},
+ {"/auth/attempts/:node/source", rabbit_mgmt_wm_auth_attempts, [by_source]},
+ {"/login", rabbit_mgmt_wm_login, []},
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
+index 3e5a078dca..5e54ae381e 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
+@@ -7,8 +7,6 @@
+
+ -module(rabbit_mgmt_wm_auth).
+
+--export([init/2, to_json/2, content_types_provided/2, is_authorized/2]).
+--export([variances/2]).
+ -export([authSettings/0]). %% for testing only
+
+ -include_lib("rabbitmq_management_agent/include/rabbit_mgmt_records.hrl").
+@@ -16,15 +14,6 @@
+
+ %%--------------------------------------------------------------------
+
+-init(Req, _State) ->
+- {cowboy_rest, rabbit_mgmt_headers:set_common_permission_headers(Req, ?MODULE), #context{}}.
+-
+-variances(Req, Context) ->
+- {[<<"accept-encoding">>, <<"origin">>], Req, Context}.
+-
+-content_types_provided(ReqData, Context) ->
+- {rabbit_mgmt_util:responder_map(to_json), ReqData, Context}.
+-
+ merge_oauth_provider_info(OAuthResourceServer, MgtResourceServer, ManagementProps) ->
+ OAuthProviderResult = case proplists:get_value(oauth_provider_id, OAuthResourceServer) of
+ undefined -> oauth2_client:get_oauth_provider([issuer]);
+@@ -143,12 +132,6 @@ filter_empty_properties(ListOfProperties) ->
+
+ to_binary(Value) -> rabbit_data_coercion:to_binary(Value).
+
+-to_json(ReqData, Context) ->
+- rabbit_mgmt_util:reply(authSettings(), ReqData, Context).
+-
+-is_authorized(ReqData, Context) ->
+- {true, ReqData, Context}.
+-
+ is_invalid(List) ->
+ lists:any(fun(V) -> case V of
+ "" -> true;
diff --git a/rabbitmq-server-0012-Remove-deprecated-endpoint.patch b/rabbitmq-server-0012-Remove-deprecated-endpoint.patch
new file mode 100644
index 0000000..0d22da9
--- /dev/null
+++ b/rabbitmq-server-0012-Remove-deprecated-endpoint.patch
@@ -0,0 +1,68 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Marcial Rosales <marcial.rosales@broadcom.com>
+Date: Tue, 14 Apr 2026 18:16:15 +0200
+Subject: [PATCH] Remove deprecated endpoint
+
+This api/auth endpoint is not used since
+bootstrap.js endpoint was introduced back in 2023.
+
+(cherry picked from commit aa387c4451e7b674df3e3ba89df86a99d697cc7f)
+(cherry picked from commit 0d77d6eb518a5bb2fab253f4e377c2dbd6719063)
+
+diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
+index 5e54ae381e..6603f1abf7 100644
+--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
++++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl
+@@ -14,21 +14,37 @@
+
+ %%--------------------------------------------------------------------
+
+-merge_oauth_provider_info(OAuthResourceServer, MgtResourceServer, ManagementProps) ->
+- OAuthProviderResult = case proplists:get_value(oauth_provider_id, OAuthResourceServer) of
+- undefined -> oauth2_client:get_oauth_provider([issuer]);
+- OauthProviderId -> oauth2_client:get_oauth_provider(OauthProviderId, [issuer])
+- end,
+- OAuthProviderInfo0 = case OAuthProviderResult of
+- {ok, OAuthProvider} -> oauth_provider_to_map(OAuthProvider);
+- {error, _} -> #{}
+- end,
+- OAuthProviderInfo1 = maps:merge(OAuthProviderInfo0,
+- case proplists:get_value(oauth_provider_url, ManagementProps) of
+- undefined -> #{};
+- V1 -> #{oauth_provider_url => V1}
+- end),
+- maps:merge(OAuthProviderInfo1, proplists:to_map(MgtResourceServer)).
++merge_property(Key, List, MapIn) ->
++ case proplists:get_value(Key, List) of
++ undefined -> MapIn;
++ V0 -> MapIn#{Key => V0}
++ end.
++
++extract_oauth_provider_info_props_as_map(ManagementProps) ->
++ lists:foldl(fun(K, Acc) ->
++ merge_property(K, ManagementProps, Acc) end, #{},
++ [oauth_provider_url,
++ oauth_metadata_url,
++ oauth_authorization_endpoint_params,
++ oauth_token_endpoint_params]).
++
++merge_oauth_provider_info(OAuthResourceServer, MgtResourceServer,
++ ManagementProps) ->
++ OAuthProviderResult =
++ case proplists:get_value(oauth_provider_id, OAuthResourceServer) of
++ undefined ->
++ oauth2_client:get_oauth_provider([issuer]);
++ OauthProviderId ->
++ oauth2_client:get_oauth_provider(OauthProviderId, [issuer])
++ end,
++ OAuthProviderInfo0 =
++ case OAuthProviderResult of
++ {ok, OAuthProvider} -> oauth_provider_to_map(OAuthProvider);
++ {error, _} -> #{}
++ end,
++ OAuthProviderInfo1 = maps:merge(OAuthProviderInfo0,
++ extract_oauth_provider_info_props_as_map(ManagementProps)),
++ maps:merge(OAuthProviderInfo1, proplists:to_map(MgtResourceServer)).
+
+ oauth_provider_to_map(OAuthProvider) ->
+ % only include issuer and end_session_endpoint for now. The other endpoints are resolved by oidc-client library
diff --git a/rabbitmq-server-0013-AMQP-0-9-1-apply-configure-checks-to-passive-queue-e.patch b/rabbitmq-server-0013-AMQP-0-9-1-apply-configure-checks-to-passive-queue-e.patch
new file mode 100644
index 0000000..3849056
--- /dev/null
+++ b/rabbitmq-server-0013-AMQP-0-9-1-apply-configure-checks-to-passive-queue-e.patch
@@ -0,0 +1,59 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Michael Klishin <michaelklishin@icloud.com>
+Date: Tue, 14 Apr 2026 11:36:04 -0700
+Subject: [PATCH] AMQP 0-9-1: apply `configure` checks to passive queue,
+ exchange declaration
+
+Just like we do for regular declarations.
+
+(cherry picked from commit 709a14e49e06c138a8cd672c9809ca34a2767962)
+(cherry picked from commit 72523af903702a710e3a922dd7b173df41e69c47)
+
+diff --git a/deps/rabbit/src/rabbit_amqp_management.erl b/deps/rabbit/src/rabbit_amqp_management.erl
+index bcc993b132..e60c967fe7 100644
+--- a/deps/rabbit/src/rabbit_amqp_management.erl
++++ b/deps/rabbit/src/rabbit_amqp_management.erl
+@@ -77,11 +77,13 @@ handle_http_req(<<"GET">>,
+ _Query,
+ null,
+ Vhost,
+- _User,
++ User,
+ _ConnPid,
+- PermCaches) ->
++ {PermCache0, TopicPermCache}) ->
+ QNameBin = rabbit_uri:urldecode(QNameBinQuoted),
+ QName = queue_resource(Vhost, QNameBin),
++ PermCache = check_resource_access(QName, configure, User, PermCache0),
++ PermCaches = {PermCache, TopicPermCache},
+ case rabbit_amqqueue:with(
+ QName,
+ fun(Q) ->
+diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl
+index 04ce3e5283..74fa89e2fd 100644
+--- a/deps/rabbit/src/rabbit_channel.erl
++++ b/deps/rabbit/src/rabbit_channel.erl
+@@ -2509,9 +2509,10 @@ handle_method(#'queue.declare'{queue = QueueNameBin,
+ handle_method(#'queue.declare'{queue = QueueNameBin,
+ nowait = NoWait,
+ passive = true},
+- ConnPid, _AuthzContext, _CollectorPid, VHostPath, _User) ->
++ ConnPid, AuthzContext, _CollectorPid, VHostPath, User) ->
+ StrippedQueueNameBin = strip_cr_lf(QueueNameBin),
+ QueueName = rabbit_misc:r(VHostPath, queue, StrippedQueueNameBin),
++ check_configure_permitted(QueueName, User, AuthzContext),
+ Fun = fun (Q0) ->
+ QStat = maybe_stat(NoWait, Q0),
+ {QStat, Q0}
+@@ -2617,9 +2618,10 @@ handle_method(#'exchange.declare'{exchange = XNameBin,
+ AutoDelete, Internal, Args);
+ handle_method(#'exchange.declare'{exchange = ExchangeNameBin,
+ passive = true},
+- _ConnPid, _AuthzContext, _CollectorPid, VHostPath, _User) ->
++ _ConnPid, AuthzContext, _CollectorPid, VHostPath, User) ->
+ ExchangeName = rabbit_misc:r(VHostPath, exchange, strip_cr_lf(ExchangeNameBin)),
+ check_not_default_exchange(ExchangeName),
++ check_configure_permitted(ExchangeName, User, AuthzContext),
+ _ = rabbit_exchange:lookup_or_die(ExchangeName).
+
+ handle_deliver(CTag, Ack, Msgs, State) when is_list(Msgs) ->
diff --git a/rabbitmq-server.spec b/rabbitmq-server.spec
index 1d78241..b98fbb4 100644
--- a/rabbitmq-server.spec
+++ b/rabbitmq-server.spec
@@ -7,7 +7,7 @@
Name: rabbitmq-server
Version: 4.0.9
-Release: 4%{?dist}
+Release: 5%{?dist}
License: MPL-2.0
Source0: https://github.com/rabbitmq/rabbitmq-server/releases/download/v%{version}/%{name}_%{version}.orig.tar.xz
Source1: https://github.com/rabbitmq/rabbitmq-server/releases/download/v%{version}/%{name}_%{version}.orig.tar.xz.asc
@@ -23,6 +23,13 @@ Patch3: rabbitmq-server-0003-force-python3.patch
Patch4: rabbitmq-server-0004-Greatly-simplified-wrapper-script-which-works-proper.patch
Patch5: rabbitmq-server-0005-Allow-Elixir-1.19.patch
Patch6: rabbitmq-server-0006-management-Sanitize-vhost-names-in-restart-forms.patch
+Patch7: rabbitmq-server-0007-Federation-management-Use-fmt_string-1-in-one-more-p.patch
+Patch8: rabbitmq-server-0008-Reject-bindings-to-Direct-Reply-to-virtual-queues.patch
+Patch9: rabbitmq-server-0009-Fix-error-popup-text-display.patch
+Patch10: rabbitmq-server-0010-HTTP-API-refactor-read_complete_body-1.patch
+Patch11: rabbitmq-server-0011-Remove-deprecated-endpoint.patch
+Patch12: rabbitmq-server-0012-Remove-deprecated-endpoint.patch
+Patch13: rabbitmq-server-0013-AMQP-0-9-1-apply-configure-checks-to-passive-queue-e.patch
URL: https://www.rabbitmq.com/
BuildRequires: elixir
@@ -180,6 +187,10 @@ rm -f %{_rabbit_libdir}/lib/rabbitmq_server-%{version}/ebin/rabbit.{rel,script,b
%changelog
+* Thu Jul 30 2026 Peter Lemenkov <lemenkov@gmail.com> - 4.0.9-5
+- Fixed CVE-2026-57212, CVE-2026-57213, CVE-2026-57215, CVE-2026-57217,
+ CVE-2026-57219, CVE-2026-57221
+
* Thu Jul 23 2026 Peter Lemenkov <lemenkov@gmail.com> - 4.0.9-4
- Fixed CVE-2026-44839
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-30 15:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-30 15:09 [rpms/rabbitmq-server] f43: Fix CVEs Peter Lemenkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox