
CVE-2026-33693: SSRF via 0.0.0.0 Bypass in activitypub-federation-rust v4_is_invalid() (CVSS 6.5 Moderate)
v4_is_invalid() (CVSS 6.5 Moderado)
Palavras-chave: SSRF, 0.0.0.0, bypass de validação de IP, activitypub-federation, Lemmy, Rust, ActivityPub
Uma vulnerabilidade de Server-Side Request Forgery (SSRF) existe na biblioteca activitypub-federation-rust (usada pelo Lemmy e mais de 6 projetos downstream) devido a uma verificação incompleta de validação de endereço IP na função v4_is_invalid(). A função não chama is_unspecified(), permitindo que um atacante ignore as proteções de SSRF ao segmentar 0.0.0.0 — que mapeia para localhost na maioria dos sistemas.
activitypub_federation (Rust/cargo)A função v4_is_invalid() em src/utils.rs valida endereços IPv4 para bloquear acesso à rede interna. Ela verifica loopback (127.0.0.0/8), faixas privadas (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), link-local (169.254.0.0/16) e broadcast (255.255.255.255), mas não verifica o endereço não especificado 0.0.0.0.
Na maioria dos sistemas, 0.0.0.0 resolve para a interface de loopback, concedendo o mesmo acesso que 127.0.0.1.
Descoberta Secundária: Também existe uma vulnerabilidade de DNS Rebinding / TOCTOU onde lookup_host() resolve um nome de host e valida o IP, mas uma chamada separada reqwest realiza uma segunda resolução DNS — permitindo que um atacante sirva um IP seguro primeiro e depois rebind para um IP interno na segunda resolução.
src/utils.rs)fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
// FALTANDO: || ip.is_unspecified() <- 0.0.0.0 não bloqueado
}
fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
|| ip.is_unspecified() // <- Agora bloqueia 0.0.0.0
}
+---------------------------------------------------+
| SSRF via 0.0.0.0 Bypass |
+---------------------------------------------------+
| |
| 1. Atacante hospeda objeto ActivityPub com |
| URL apontando para http://0.0.0.0:<port>/path |
| |
| 2. Instância Lemmy busca o objeto através de |
| activitypub-federation-rust |
| |
| 3. v4_is_invalid() verifica o endereço IP: |
| x is_loopback() -> falso (não 127.x) |
| x is_private() -> falso (não RFC1918) |
| x is_link_local() -> falso (não 169.254.x) |
| x is_broadcast() -> falso (não 255.x) |
| x is_unspecified() -> NÃO VERIFICADO |
| Resultado: 0.0.0.0 PASSA na validação |
| |
| 4. Requisição enviada para 0.0.0.0 -> resolve |
| para localhost -> acessa serviços internos |
| |
| 5. Dados de serviço interno retornados ao |
| atacante via resposta de federação ActivityPub |
| |
+---------------------------------------------------+
Exposição Downstream: O crate activitypub-federation-rust é usado por mais de 6 projetos no ecossistema do Fediverso:
Um atacante pode:
activitypub-federation para uma versão que contenha a correção do PR #162Este repositório é publicado para fins educacionais e defensivos como parte da divulgação responsável de vulnerabilidades. A vulnerabilidade foi reportada através do processo de Relatório Privado de Vulnerabilidade (PVRT) do GitHub. Nenhuma exploração foi realizada em sistemas de produção. Todos os testes foram conduzidos em ambientes isolados.
O writeup completo, metodologia e pesquisa relacionada deste projeto está disponível em:
https://snailsploit.com/security-research/cves/cve-2026-33693/
Criado por Kai Aizen — pesquisador independente de segurança ofensiva.
snailsploit.com · Research · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter
Mesmo ataque. Substrato diferente.
| Projeto | Estrelas | Descrição |
|---|
| Lemmy | 13.7K+ | Agregador de links para o Fediverso |
| hatsu | -- | Ponte ActivityPub |
| gill | -- | Hospedagem Git com federação |
| ties | -- | Rede social |
| fediscus | -- | Discussões federadas |
| fediverse-axum | -- | Framework ActivityPub |
| Métrica | Valor |
|---|
| Vetor de Ataque | Rede |
| Complexidade do Ataque | Baixa |
| Privilégios Necessários | Nenhum |
| Interação do Usuário | Nenhuma |
| Escopo | Inalterado |
| Confidencialidade | Baixa |
| Integridade | Baixa |
| Disponibilidade | Nenhuma |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N |
| Pontuação | 6.5 (Moderado) |
| Data | Evento |
|---|
| 2026-03-11 | Vulnerabilidade reportada via GitHub PVRT |
| 2026-03-13 | Mantenedor confirmou a descoberta |
| 2026-03-13 | PR de correção #162 submetido |
| 2026-03-13 | Aviso acidentalmente fechado |
| 2026-03-16 | Aviso reaberto |
| 2026-03-23 | CVE-2026-33693 atribuído e aviso publicado |