aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAriadne Conill <ariadne@dereferenced.org>2019-07-14 17:47:08 +0000
committerAriadne Conill <ariadne@dereferenced.org>2019-07-14 19:28:47 +0000
commit6d715b770298efcc1fb213c15d77e662e81a8843 (patch)
tree5f587ba6c8c0d7b801055906d51e9f81118ff255 /test
parent73a3dbe31ee8ac49ad1bd6205f4b3279107c9780 (diff)
downloadpleroma-6d715b770298efcc1fb213c15d77e662e81a8843.tar.gz
security: detect object containment violations at the IR level
It is more efficient to check for object containment violations at the IR level instead of in the protocol handlers. OStatus containment is especially a tricky situation, as the containment rules don't match those of IR and ActivityPub. Accordingly, we just always do a final containment check at the IR level before the object is added to the IR object graph.
Diffstat (limited to 'test')
-rw-r--r--test/object/containment_test.exs30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/object/containment_test.exs b/test/object/containment_test.exs
index a860355b8..455415fcd 100644
--- a/test/object/containment_test.exs
+++ b/test/object/containment_test.exs
@@ -64,4 +64,34 @@ defmodule Pleroma.Object.ContainmentTest do
"[error] Could not decode user at fetch https://n1u.moe/users/rye, {:error, :error}"
end
end
+
+ describe "containment of children" do
+ test "contain_child() catches spoofing attempts" do
+ data = %{
+ "id" => "http://example.com/whatever",
+ "type" => "Create",
+ "object" => %{
+ "id" => "http://example.net/~alyssa/activities/1234",
+ "attributedTo" => "http://example.org/~alyssa"
+ },
+ "actor" => "http://example.com/~bob"
+ }
+
+ :error = Containment.contain_child(data)
+ end
+
+ test "contain_child() allows correct origins" do
+ data = %{
+ "id" => "http://example.org/~alyssa/activities/5678",
+ "type" => "Create",
+ "object" => %{
+ "id" => "http://example.org/~alyssa/activities/1234",
+ "attributedTo" => "http://example.org/~alyssa"
+ },
+ "actor" => "http://example.org/~alyssa"
+ }
+
+ :ok = Containment.contain_child(data)
+ end
+ end
end