diff options
author | kaniini <nenolod@gmail.com> | 2018-09-01 23:48:55 +0000 |
---|---|---|
committer | kaniini <nenolod@gmail.com> | 2018-09-01 23:48:55 +0000 |
commit | 3c7280934e3bdca8d5a870dc932406ccd9915d64 (patch) | |
tree | 35c7f885e4003bb09de30f42afda05abbfcabc2d /lib | |
parent | e4079abab8245c5b5a0987fbce9ab7cfd724f2d5 (diff) | |
parent | 03e92977cb95ccc81b92c927049a3e4421917cd2 (diff) | |
download | pleroma-3c7280934e3bdca8d5a870dc932406ccd9915d64.tar.gz |
Merge branch 'security/activitypub-spoofing' into 'develop'
security: activitypub spoofing
See merge request pleroma/pleroma!321
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 1 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 14 |
2 files changed, 15 insertions, 0 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index e6c2dc9cf..81c11dd76 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -747,6 +747,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do "actor" => data["attributedTo"], "object" => data }, + :ok <- Transmogrifier.contain_origin(id, params), {:ok, activity} <- Transmogrifier.handle_incoming(params) do {:ok, Object.normalize(activity.data["object"])} else diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 1367bc7e3..4a3a82195 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -31,6 +31,20 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do end @doc """ + Checks that an imported AP object's actor matches the domain it came from. + """ + def contain_origin(id, %{"actor" => actor} = params) do + id_uri = URI.parse(id) + actor_uri = URI.parse(get_actor(params)) + + if id_uri.host == actor_uri.host do + :ok + else + :error + end + end + + @doc """ Modifies an incoming AP object (mastodon format) to our internal format. """ def fix_object(object) do |