Wysoka

Fedify has an LD-Signature Bypass via JSON-LD Named-Graph Restructuring

  • Ujawniono: 26.05.2026
  • Aktualizacja: 11.10.2026 10:22

As told on Discord earlier, multiple projects are affected, and we would like to coordinate. For now, we are aiming at a May 6th release date, but this is not set in stone yet.

Summary

An attacker can make use of JSON-LD features to restructure a JSON-LD document that would change how Fedify interprets it without changing its Linked Data Signature, allowing them to alter a third-party signed activity they have received.

Details

The vulnerability essentially boils down to the signature being on the canonical RDF graph representation of the JSON-LD document, and JSON-LD offering many ways to represent the same graph.

One of the issues is that by taking a signed Activity with an embedded object, an attacker can move the top-level Activity to a @graph property and move the activity's object to the top-level. Such a transformation preserves the signature and changes how the payload is interpreted by pretty much all ActivityPub implementations, making them process the object and ignore the formely-top-level activity. This can be used when the graph contains an embedded activity. In Mastodon, that is the case of { "type": "Undo", "object": { "type": "Announce" } }, but other implementations may sign other activities that can be exploited in the same way.

The @reverse keyword can also be used to change the shape of a JSON-LD document without changing the underlying graph, and could be used in a similar way to reverse an Activity and its object.

Another problematic feature is @included, which can be used to “move” properties outside of the normal tree, effectively making them invisible to most ActivityPub implementations, while, again, preserving the signature. This allows removing statuses or actor properties once a signed Create or Update activity is received.

Given that we have seen no use of @graph, @included or @reverse in ActivityPub payloads and that they are very complex to handle correctly (the only JSON-LD API functions that “normalize” @included and @reverse are flattening and framing, which both lose the root node), we have decided to reject them, and recommend you do so as well.

Detection of @graph, @included and @reverse should happen after compacting the incoming activity to your context, as aliases can be used for those keywords.

Additionally, after a quick scan of Fedify's source code, I could not verify that JSON-LD documents with a verified Linked Data Signature were compacted against your local JSON-LD context. Not doing that allows an attacker to rename aliases to non-standard names and use non-mapped aliases to replace existing values, while still leaving the signature intact. This allows an attacker to essentially replace arbitrary portions of any signed JSON-LD document and completely forge any activity while still passing verification. A similar issue was fixed in Mastodon a few years ago: https://github.com/mastodon/mastodon/pull/17426.

Impact

The impact is difficult to assess as this depends on the types of activities that are actually signed and processed in the wild.

The @included keyword allows “removing” arbitrary attributes, thus allowing replaying Create and Update activities while stripping away any attribute, such as content or metadata, which can lead to integrity and availability issues, although confidentiality issues are unlikely.

The @graph and @reverse keywords allow changing the root activity, which in the case of Mastodon allows sending an Announce from a Undo { Announce }, but might have wider consequences depending on what various servers sign.

The lack of compacting can allow rewriting any activity arbitrarily, thus leading to major integrity, availability, and possibly confidentiality issues (e.g. by replacing an actor's inbox).

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka npm @fedify/fedify >= 2.2.0, < 2.2.3, >= 2.1.0, < 2.1.14, >= 2.0.0, < 2.0.18, >= 1.10.0, < 1.10.10, < 1.9.11 2.2.3, 2.1.14, 2.0.18, 1.10.10, 1.9.11

Odnośniki

Ocena CVSS 7/10
Wektor CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:L
Słabość (CWE)
CWE-1289, CWE-180, CWE-347, CWE-436
Platforma
npm
Paczka
@fedify/fedify
Ujawniono
26.05.2026
Aktualizacja
11.10.2026 10:22

Źródła i licencje

OSV / GitHub Advisory Database - GHSA-9rfg-v8g9-9367 - CC BY 4.0

Historia podatności: @fedify/fedify

Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkich wpisów
7
Pierwsza → ostatnia
07.2024 07.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Wysoka 5
  • Średnia 2

Ujawnienia w latach

  1. 2024: 1
  2. 2025: 3
  3. 2026: 3
  1. Wysoka · 8.6 CVE-2026-50131 >= 0.11.2, < 1.9.12, >= 1.10.0, < 1.10.11, >= 2.0.0, < 2.0.19, >= 2.1.0, < 2.1.15, >= 2.2.0, < 2.2.4 1.9.12, 1.10.11, 2.0.19, 2.1.15, 2.2.4
  2. Fedify has an LD-Signature Bypass via JSON-LD Named-Graph Restructuring ten wpis
    Wysoka · 7.0 CVE-2026-42462 >= 2.2.0, < 2.2.3, >= 2.1.0, < 2.1.14, >= 2.0.0, < 2.0.18, >= 1.10.0, < 1.10.10, < 1.9.11 2.2.3, 2.1.14, 2.0.18, 1.10.10, 1.9.11
  3. Wysoka · 7.5 CVE-2026-34148 < 1.9.6, >= 1.10.0, < 1.10.5, >= 2.0.0, < 2.0.8, >= 2.1.0, < 2.1.1 1.9.6, 1.10.5, 2.0.8, 2.1.1
  4. Wysoka · 7.5 CVE-2025-68475 < 1.6.13, >= 1.7.0, < 1.7.14, >= 1.8.0, < 1.8.15, >= 1.9.0, < 1.9.2 1.6.13, 1.7.14, 1.8.15, 1.9.2
  5. Wysoka CVE-2025-54888 < 1.3.20, >= 1.4.0-dev.585, < 1.4.13, >= 1.5.0-dev.636, < 1.5.5, >= 1.6.0-dev.754, < 1.6.8, >= 1.7.0-pr.251.885, < 1.7.9, >= 1.8.0-dev.909, < 1.8.5 1.3.20, 1.4.13, 1.5.5, 1.6.8, 1.7.9, 1.8.5
  6. Średnia · 5.4 CVE-2025-23221 >= 1.0.13, < 1.0.14, >= 1.1.10, < 1.1.11, >= 1.2.10, < 1.2.11, >= 1.3.3, < 1.3.4 1.0.14, 1.1.11, 1.2.11, 1.3.4
  7. Średnia · 7.2 CVE-2024-39687 < 0.9.2, >= 0.10.0, < 0.10.2, >= 0.11.0, < 0.11.2 0.9.2, 0.10.2, 0.11.2

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.