summaryrefslogtreecommitdiff
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 17:47:08 +0000
commit739bbe0d3bbe06ca9d634498ea5909f35fc5ad84 (patch)
tree7be3db46ffca2240ba392c6ed1e359af53a60b00 /test
parent93701c3399add8af2d4a5d43b6f171d84655a533 (diff)
downloadpleroma-739bbe0d3bbe06ca9d634498ea5909f35fc5ad84.tar.gz
pleroma-739bbe0d3bbe06ca9d634498ea5909f35fc5ad84.zip
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 1beed6236..61cd1b412 100644
--- a/test/object/containment_test.exs
+++ b/test/object/containment_test.exs
@@ -68,4 +68,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