
CVE-2026-33693: SSRF über 0.0.0.0-Bypass in activitypub-federation-rust v4_is_invalid() (CVSS 6.5 Mittel)
v4_is_invalid() (CVSS 6.5 Mittel)
Keywords: SSRF, 0.0.0.0, IP-Validierungs-Bypass, activitypub-federation, Lemmy, Rust, ActivityPub
In der Bibliothek activitypub-federation-rust (verwendet von Lemmy und 6+ nachgelagerten Projekten) besteht eine Server-Side-Request-Forgery-Schwachstelle (SSRF), die auf eine unvollständige IP-Adressvalidierung in der Funktion v4_is_invalid() zurückzuführen ist. Die Funktion ruft is_unspecified() nicht auf, sodass ein Angreifer die SSRF-Schutzmaßnahmen umgehen kann, indem er 0.0.0.0 anvisiert — was auf den meisten Systemen auf localhost abgebildet wird.
activitypub_federation (Rust/cargo)Die Funktion v4_is_invalid() in src/utils.rs validiert IPv4-Adressen, um den Zugriff auf interne Netzwerke zu blockieren. Sie prüft Loopback (127.0.0.0/8), private IP-Bereiche (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), Link-Local (169.254.0.0/16) und Broadcast (255.255.255.255), prüft jedoch nicht die unspezifizierte Adresse 0.0.0.0.
Auf den meisten Systemen wird 0.0.0.0 auf das Loopback-Interface aufgelöst und gewährt damit denselben Zugriff wie 127.0.0.1.
Sekundärer Befund: Es besteht außerdem eine DNS-Rebinding-/TOCTOU-Schwachstelle: lookup_host() löst einen Hostnamen auf und validiert die IP, aber ein separater reqwest-Aufruf führt eine zweite DNS-Auflösung durch — wodurch ein Angreifer zuerst eine sichere IP ausliefern und diese bei der zweiten Auflösung auf eine interne IP umbinden kann.
src/utils.rs)fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
// FEHLT: || ip.is_unspecified() <- 0.0.0.0 nicht blockiert
}
fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
|| ip.is_unspecified() // <- Blockiert nun 0.0.0.0
}
+---------------------------------------------------+
| SSRF durch 0.0.0.0-Bypass |
+---------------------------------------------------+
| |
| 1. Angreifer hostet ActivityPub-Objekt mit |
| URL, die auf http://0.0.0.0:<port>/path zeigt |
| |
| 2. Lemmy-Instanz ruft das Objekt über |
| activitypub-federation-rust ab |
| |
| 3. v4_is_invalid() prüft die IP-Adresse: |
| x is_loopback() -> false (nicht 127.x) |
| x is_private() -> false (nicht RFC1918) |
| x is_link_local() -> false (nicht 169.254.x) |
| x is_broadcast() -> false (nicht 255.x) |
| x is_unspecified() -> NICHT GEPRÜFT |
| Ergebnis: 0.0.0.0 besteht die Validierung |
| |
| 4. Anfrage an 0.0.0.0 gesendet -> wird zu |
| localhost aufgelöst -> Zugriff auf interne |
| Dienste |
| |
| 5. Interne Dienstdaten werden an den Angreifer |
| über die ActivityPub-Föderationsantwort |
| zurückgegeben |
| |
+---------------------------------------------------+
Nachgelagerte Projekte: Die Crate activitypub-federation-rust wird von 6+ Projekten im Fediverse-Ökosystem verwendet:
Ein Angreifer kann:
activitypub-federation auf eine Version, die den Fix aus PR #162 enthältDieses Repository wird für Bildungs- und Verteidigungszwecke im Rahmen der verantwortungsvollen Offenlegung von Schwachstellen (Responsible Disclosure) veröffentlicht. Die Schwachstelle wurde über den Private Vulnerability Reporting (PVRT)-Prozess von GitHub gemeldet. Es wurde keine Ausnutzung gegen Produktionssysteme durchgeführt. Alle Tests wurden in isolierten Umgebungen durchgeführt.
Der vollständige Writeup, die Methodik und die zugehörige Forschung zu diesem Projekt finden Sie unter:
https://snailsploit.com/security-research/cves/cve-2026-33693/
Erstellt von Kai Aizen — unabhängiger Offensiv-Sicherheitsforscher.
snailsploit.com · Forschung · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter
Gleicher Angriff. Anderes Substrat.
| Projekt | Sterne | Beschreibung |
|---|
| Lemmy | 13.7K+ | Link-Aggregator für das Fediverse |
| hatsu | -- | ActivityPub-Brücke |
| gill | -- | Git-Hosting mit Föderation |
| ties | -- | Soziales Netzwerk |
| fediscus | -- | Föderierte Diskussionen |
| fediverse-axum | -- | ActivityPub-Framework |
| Metrik | Wert |
|---|
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Keine |
| Scope | Unverändert |
| Vertraulichkeit | Niedrig |
| Integrität | Niedrig |
| Verfügbarkeit | Keine |
| CVSS-Vektor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N |
| Bewertung | 6.5 (Mittel) |
| Datum | Ereignis |
|---|
| 2026-03-11 | Schwachstelle über GitHub PVRT gemeldet |
| 2026-03-13 | Maintainer bestätigte den Befund |
| 2026-03-13 | Fix-PR #162 eingereicht |
| 2026-03-13 | Advisory versehentlich geschlossen |
| 2026-03-16 | Advisory wieder geöffnet |
| 2026-03-23 | CVE-2026-33693 zugewiesen und Advisory veröffentlicht |