<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Question re: Origin Based Security Model (FEP-fe34)]]></title><description><![CDATA[<p dir="auto">I received a security vulnerability report regarding NodeBB's handling of <code>Update</code> and <code>Delete</code> activities.</p>
<p dir="auto"><strong>tl;dr</strong></p>
<ul>
<li>NodeBB implementes FEP fe34, and treats <code>Update</code> and <code>Delete</code> activities as valid if the activity's <code>actor</code> and the object's <code>attributedTo</code> differ <strong>but the origins are identical</strong>.</li>
<li>e.g. <code>@alice@example.org</code> is allowed to federate <code>Delete(Note)</code> on <code>@bob@example.org</code>'s <code>Note</code>.</li>
<li>The origin-based security model allows for moderator-style actions (third-party post editing and deletions) in the absence of explicit moderator claims.</li>
<li>The reporter disagrees that this should be allowed.</li>
</ul>
<p dir="auto">Are they right?</p>
<p dir="auto">I responded that FEP fe34 allows for this behaviour because we do not have ready access to an instance's admin or moderator list. By conducting same-origin checks and allowing <code>Update</code> and <code>Delete</code> through for same-origin (but different identifier), we allow for moderators to federate their actions across instances.</p>
<p dir="auto">Their response:</p>
<p dir="auto">&gt; I respectfully disagree that FEP-fe34 permits this behavior. Below are direct quotes from the specification that contradict your assessment.<br />
&gt;<br />
&gt;  1. ActivityPub spec (quoted in FEP-fe34 Rationale, Section 7.3 Update Activity):<br />
&gt;<br />
&gt;  ▎ "The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin."<br />
&gt;<br />
&gt;  Note: "at minimum" means same-origin is the floor, not the ceiling. Authorization must still be verified.<br />
&gt;2. FEP-fe34 — Authorization &gt; Ownership:<br />
&gt;<br />
&gt;  ▎ "The actor that creates an object MUST be its owner."<br />
&gt;  ▎ "The owner of an object is permitted to modify and delete it."<br />
&gt;  ▎ "Update and Delete activities, and objects indicated by their object property are expected to have the same owner."<br />
&gt;<br />
&gt;  "Same owner" means the same specific actor — not any actor on the same domain.</p>
<p dir="auto">I responded back with the following:</p>
<p dir="auto">&gt;     "The actor that creates an object MUST be its owner."<br />
&gt;<br />
&gt;<br />
&gt; Correct, the creator must be an owner, no impersonation allowed.<br />
&gt;<br />
&gt;<br />
&gt;     "The owner of an object is permitted to modify and delete it."<br />
&gt;<br />
&gt;<br />
&gt; A strict reading of this does not preclude the ability of a same-origin moderator to modify and delete the object. This is my argument.<br />
&gt;<br />
&gt;<br />
&gt;     "Update and Delete activities, and objects indicated by their object property are expected to have the same owner."<br />
&gt;<br />
&gt;<br />
&gt; Again, "expected to" does not rise to the level of MUST.<br />
&gt;<br />
&gt; I agree out of principle that the security implications exist, but if you follow through with the exploit, it requires a non-compliant server to allow users to publish Update and Delete for other users on the same instance, and even then the exposure is limited to users of that origin only (e.g. your server cannot arbitrarily delete my posts). This is the foundation of the Origin-based security model.</p>
<p dir="auto">So we are at an impasse as to whether my strict reading of the FEP is adherent to the spirit of the FEP itself. Here's where you come in... do you agree with me, or the reporter?</p>
<p dir="auto">Directly tagging <a href="https://activitypub.space/user/silverpill%40mitra.social" rel="nofollow ugc">@silverpill@mitra.social</a> (as FEP author), <a href="https://activitypub.space/user/trwnh%40mastodon.social" rel="nofollow ugc">@trwnh@mastodon.social</a> and <a href="https://activitypub.space/user/evan%40cosocial.ca" rel="nofollow ugc">@evan@cosocial.ca</a> (both subject matter experts) for their thoughts.</p>
]]></description><link>https://board.circlewithadot.net/topic/1a495a11-2da4-42a9-b384-ebf573ac81d3/question-re-origin-based-security-model-fep-fe34</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 10:24:28 GMT</lastBuildDate><atom:link href="https://board.circlewithadot.net/topic/1a495a11-2da4-42a9-b384-ebf573ac81d3.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 May 2026 18:58:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Mon, 25 May 2026 13:01:20 GMT]]></title><description><![CDATA[<p dir="auto">We use the moderator collection. But if that fails we check if the mod is from the same instance as the community or the post/comment being removed. If thats true we also allow the action.</p>
]]></description><link>https://board.circlewithadot.net/post/https://lemmy.ml/comment/25861437</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://lemmy.ml/comment/25861437</guid><dc:creator><![CDATA[nutomic@lemmy.ml]]></dc:creator><pubDate>Mon, 25 May 2026 13:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Fri, 22 May 2026 14:53:35 GMT]]></title><description><![CDATA[<p dir="auto">&gt; <a href="https://activitypub.space/user/nutomic%40lemmy.ml" rel="nofollow ugc">@nutomic@lemmy.ml</a> <a href="https://activitypub.space/post/https%3A%2F%2Flemmy.ml%2Fcomment%2F25815344" rel="nofollow ugc">said</a>:<br />
&gt;<br />
&gt; but rejecting mod actions based on that could cause problems as I mentioned in my previous comment.</p>
<p dir="auto">So to confirm then, you serve the moderator collection but you don't use it to determine whether an actor is able to modify/delete content on that instance, is that right?</p>
<p dir="auto">Curious to know what those problems are.</p>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1941</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1941</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Fri, 22 May 2026 14:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Fri, 22 May 2026 14:29:50 GMT]]></title><description><![CDATA[<p dir="auto">Yes exactly that FEP. Federating admin status would make sense for informational purposes, but rejecting mod actions based on that could cause problems as I mentioned in my previous comment.</p>
]]></description><link>https://board.circlewithadot.net/post/https://lemmy.ml/comment/25815344</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://lemmy.ml/comment/25815344</guid><dc:creator><![CDATA[nutomic@lemmy.ml]]></dc:creator><pubDate>Fri, 22 May 2026 14:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Fri, 22 May 2026 14:14:34 GMT]]></title><description><![CDATA[<p dir="auto">Right, that's the "Group Moderation" section of FEP 1b12, right?</p>
<p dir="auto">It may be a good idea to extend this concept to the instance/application actor as well. There's no urgent need to implement and consume, but it would be fairly simple thing to serve on our respective softwares I think.</p>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1939</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1939</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Fri, 22 May 2026 14:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Fri, 22 May 2026 12:29:14 GMT]]></title><description><![CDATA[<p dir="auto">Looks like this, only IDs: <a href="https://github.com/LemmyNet/lemmy/blob/main/crates/apub/apub/assets/lemmy/collections/group_moderators.json" rel="nofollow ugc">https://github.com/LemmyNet/lemmy/blob/main/crates/apub/apub/assets/lemmy/collections/group_moderators.json</a></p>
]]></description><link>https://board.circlewithadot.net/post/https://lemmy.ml/comment/25813532</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://lemmy.ml/comment/25813532</guid><dc:creator><![CDATA[nutomic@lemmy.ml]]></dc:creator><pubDate>Fri, 22 May 2026 12:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Fri, 22 May 2026 12:27:53 GMT]]></title><description><![CDATA[<p dir="auto">Lemmy doesnt even federate admin status in any way, instead we trust that actions which are coming from the same instance as the community or post are valid. So essentially origin-based security model.</p>
]]></description><link>https://board.circlewithadot.net/post/https://lemmy.ml/comment/25813515</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://lemmy.ml/comment/25813515</guid><dc:creator><![CDATA[nutomic@lemmy.ml]]></dc:creator><pubDate>Fri, 22 May 2026 12:27:53 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 23:27:12 GMT]]></title><description><![CDATA[<p dir="auto">It's fine, I've already adjusted the code at my end. I don't know about Lemmy though.</p>
]]></description><link>https://board.circlewithadot.net/post/https://piefed.social/comment/11431681</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://piefed.social/comment/11431681</guid><dc:creator><![CDATA[rimu@piefed.social]]></dc:creator><pubDate>Thu, 21 May 2026 23:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 23:24:48 GMT]]></title><description><![CDATA[<p dir="auto">&gt; <a href="https://activitypub.space/user/rimu%40piefed.social" rel="nofollow ugc">@rimu@piefed.social</a> <a href="https://activitypub.space/post/https%3A%2F%2Fpiefed.social%2Fcomment%2F11431449" rel="nofollow ugc">said</a>:<br />
&gt;<br />
&gt; I think NodeBB has an array of actor objects though</p>
<p dir="auto">Is this causing problems for you? I can send just the IDs instead.</p>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1938</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1938</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Thu, 21 May 2026 23:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 23:00:19 GMT]]></title><description><![CDATA[<p dir="auto">That sounds fine to me.</p>
<p dir="auto">On communities the moderators are just an array of strings which are the activitypub actor IDs of the mods. I think NodeBB has an array of actor objects though?</p>
<p dir="auto">Anyway whatever it is, consistency with how the communities do it would be nice.</p>
]]></description><link>https://board.circlewithadot.net/post/https://piefed.social/comment/11431449</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://piefed.social/comment/11431449</guid><dc:creator><![CDATA[rimu@piefed.social]]></dc:creator><pubDate>Thu, 21 May 2026 23:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 22:54:49 GMT]]></title><description><![CDATA[<p dir="auto">&gt; <a href="https://activitypub.space/user/rimu%40piefed.social" rel="nofollow ugc">@rimu@piefed.social</a> <a href="https://activitypub.space/post/https%3A%2F%2Fpiefed.social%2Fcomment%2F11431248" rel="nofollow ugc">said</a>:<br />
&gt;<br />
&gt; Getting a list of instance admins requires calling the Lemmy API, unfortunately.</p>
<p dir="auto">Wait, why don't we write a mini FEP to extend this? <code>attributedTo</code> on the instance/application actor?</p>
<ul>
<li><a href="https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md" rel="nofollow ugc">https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md</a></li>
<li>extending 1b12</li>
</ul>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1936</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1936</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Thu, 21 May 2026 22:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 22:41:56 GMT]]></title><description><![CDATA[<p dir="auto">Yes.</p>
<p dir="auto">This is easy in FEP 1b12-land because each community has a list of moderators so receiving instances know who to allow.</p>
<p dir="auto">Getting a list of instance admins requires calling the Lemmy API, unfortunately. So PieFed has a cron job that does that once per day for all instances. Admins rarely change.</p>
]]></description><link>https://board.circlewithadot.net/post/https://piefed.social/comment/11431248</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://piefed.social/comment/11431248</guid><dc:creator><![CDATA[rimu@piefed.social]]></dc:creator><pubDate>Thu, 21 May 2026 22:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 22:34:23 GMT]]></title><description><![CDATA[<p dir="auto"><a href="https://activitypub.space/user/nutomic%40lemmy.ml" rel="nofollow ugc">@nutomic@lemmy.ml</a> <a href="https://activitypub.space/user/rimu%40piefed.social" rel="nofollow ugc">@rimu@piefed.social</a> <a href="https://activitypub.space/user/bent0_b0x%40norden.social" rel="nofollow ugc">@bent0_b0x@norden.social</a> — do y'all send <code>Delete</code> activities with the moderator actor?</p>
<p dir="auto">(Announce wrapping aside.)</p>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1935</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1935</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Thu, 21 May 2026 22:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 22:32:58 GMT]]></title><description><![CDATA[<p dir="auto"><a href="/user/thisismissem%40activitypub.space">@thisismissem</a> hmm, I believe Lemmy and Piefed send cross actor Deletes, but they <em>might</em> be Announces by the group actor.</p>
<p dir="auto">They (and I) don't use <code>moderatedBy</code> but rather the group actor's <code>attributedTo</code></p>
<p dir="auto">Just want to make sure you're aware of that existing prior art.</p>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1934</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1934</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Thu, 21 May 2026 22:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 21:16:26 GMT]]></title><description><![CDATA[<p dir="auto">Well, yeah, that's why I linked what T&amp;S is doing here to fix the moderator use case. At present I don't know of anyone sending cross-actor delete/update actions, so we'd be adding capability with the <code>moderatedBy</code></p>
]]></description><link>https://board.circlewithadot.net/post/https://activitypub.space/post/1933</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://activitypub.space/post/1933</guid><dc:creator><![CDATA[thisismissem@activitypub.space]]></dc:creator><pubDate>Thu, 21 May 2026 21:16:26 GMT</pubDate></item><item><title><![CDATA[Reply to Question re: Origin Based Security Model (FEP-fe34) on Thu, 21 May 2026 09:38:38 GMT]]></title><description><![CDATA[<p dir="auto">We also got the same type of vulnerability reports. Good that you bring it up, because I wasnt aware of the FEP.</p>
<p dir="auto">To answer your question we can look at it the other way. Imagine we implement a way to federate admin/moderator status and then check it for every incoming mod action. First of all we get problems with older platforms which dont implement this feature yet, it means all their mod actions will be rejected and we end up with spam. Or we add a way to bypass the check, then the whole security feature becomes pointless.</p>
<p dir="auto">Even if we assume that all platforms correctly federate the admin/mod status, there would still be problems. Federation is not perfect, sometimes things get lost. Or someone gets appointed as admin and immediately removes some spam. At this point the admin status is not federated yet (if its part of the user profile and only updated every 24h). Then again valid mod actions are rejected and we end up with spam that is not deleted.</p>
<p dir="auto">On the other hand, whats exactly is the exploit here? Some platform lets a normal user (no admin/mod rights) send Update or Delete activites for another user <strong>on the same instance</strong>. That is clearly not our problem, but its a problem of the remote platform which allows such actions. Besides it cannot affect users from other instances so the impact would be very limited.</p>
<p dir="auto">Overall, adding such stricter checks would create more problems than it solves.</p>
]]></description><link>https://board.circlewithadot.net/post/https://lemmy.ml/comment/25794301</link><guid isPermaLink="true">https://board.circlewithadot.net/post/https://lemmy.ml/comment/25794301</guid><dc:creator><![CDATA[nutomic@lemmy.ml]]></dc:creator><pubDate>Thu, 21 May 2026 09:38:38 GMT</pubDate></item></channel></rss>