···24242525 public bool IsValid(HttpRequest rq)
2626 {
2727+ // Mitigate malicious X-Forwarded-Proto values (https://github.com/greenpau/caddy-security/issues/270)
2828+ if (!rq.Scheme.EqualsIgnoreCase("http") && !rq.Scheme.EqualsIgnoreCase("https"))
2929+ {
3030+ logger.LogWarning("Received request with invalid scheme: '{scheme}', please check your reverse proxy configuration",
3131+ rq.Scheme);
3232+ return false;
3333+ }
3434+2735 if (rq.Host.Host == config.Value.WebDomain) return true;
2836 if (config.Value.AdditionalDomainsArray.Contains(rq.Host.Host)) return true;
2937 if (rq.Host.Host == config.Value.AccountDomain && rq.Path.StartsWithSegments("/.well-known"))
+8-5
Iceshrimp.Backend/Startup.cs
···11using System.Diagnostics;
22+using System.Net;
23using Iceshrimp.Backend.Core.Extensions;
34using Iceshrimp.Backend.Core.Helpers;
45using Iceshrimp.Backend.Pages.Shared;
56using Iceshrimp.Backend.SignalR;
67using Iceshrimp.Backend.SignalR.Authentication;
78using Microsoft.AspNetCore.HttpOverrides;
88-99-// Remove below line when the known proxy / known networks configuration has been implemented
1010-// See https://github.com/aspnet/Announcements/issues/517 for more information
1111-AppContext.SetSwitch("Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutFor", true);
99+using IPNetwork = System.Net.IPNetwork;
12101311var options = StartupHelpers.ParseCliArguments(args);
1412var builder = WebApplication.CreateBuilder(options);
···6462app.UseResponseCompression();
6563#endif
66646767-app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedProto });
6565+app.UseForwardedHeaders(new ForwardedHeadersOptions
6666+{
6767+ // The X-Forwarded-Proto value gets validated in RequestVerificationMiddleware so we can trust any proxy
6868+ ForwardedHeaders = ForwardedHeaders.XForwardedProto,
6969+ KnownIPNetworks = { new IPNetwork(IPAddress.Any, 0), new IPNetwork(IPAddress.IPv6Any, 0) }
7070+});
6871app.UseRouting();
6972app.UseOpenApiWithOptions();
7073app.UseCors();