summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2024-05-22 12:45:24 +0000
committerlain <lain@soykaf.club>2024-05-22 12:45:24 +0000
commitc8e5a1f6b04721ff965e79448a7bed460f26135f (patch)
treed909324eedc85e03eb8d6fe1b69b4f80fbf1b21f /lib
parent7fca5982686e9da2ef449af65b6ec2602a3c9f69 (diff)
parent84bb854056e406d5235dd442c28127891a8a8a86 (diff)
downloadpleroma-c8e5a1f6b04721ff965e79448a7bed460f26135f.tar.gz
pleroma-c8e5a1f6b04721ff965e79448a7bed460f26135f.zip
Merge branch 'fix-webfinger-spoofing' into 'develop'
Fix webfinger spoofing See merge request pleroma/pleroma!4114
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/web_finger.ex16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/pleroma/web/web_finger.ex b/lib/pleroma/web/web_finger.ex
index 26fb8af84..e149d9247 100644
--- a/lib/pleroma/web/web_finger.ex
+++ b/lib/pleroma/web/web_finger.ex
@@ -216,10 +216,26 @@ defmodule Pleroma.Web.WebFinger do
_ ->
{:error, {:content_type, nil}}
end
+ |> case do
+ {:ok, data} -> validate_webfinger(address, data)
+ error -> error
+ end
else
error ->
Logger.debug("Couldn't finger #{account}: #{inspect(error)}")
error
end
end
+
+ defp validate_webfinger(url, %{"subject" => "acct:" <> acct} = data) do
+ with %URI{host: request_host} <- URI.parse(url),
+ [_name, acct_host] <- String.split(acct, "@"),
+ {_, true} <- {:hosts_match_or_subdomain, String.ends_with?(request_host, acct_host)} do
+ {:ok, data}
+ else
+ _ -> {:error, {:webfinger_invalid, url, data}}
+ end
+ end
+
+ defp validate_webfinger(url, data), do: {:error, {:webfinger_invalid, url, data}}
end