diff options
author | Ariadne Conill <ariadne@dereferenced.org> | 2019-07-14 17:47:08 +0000 |
---|---|---|
committer | Ariadne Conill <ariadne@dereferenced.org> | 2019-07-14 19:28:47 +0000 |
commit | 6d715b770298efcc1fb213c15d77e662e81a8843 (patch) | |
tree | 5f587ba6c8c0d7b801055906d51e9f81118ff255 /test | |
parent | 73a3dbe31ee8ac49ad1bd6205f4b3279107c9780 (diff) | |
download | pleroma-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.exs | 30 |
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 |