
CVE-2026-33693: SSRF через обход 0.0.0.0 в activitypub-federation-rust v4_is_invalid() (CVSS 6.5 Средний)
v4_is_invalid() (CVSS 6.5 Средний)
Ключевые слова: SSRF, 0.0.0.0, обход проверки IP, activitypub-federation, Lemmy, Rust, ActivityPub
В библиотеке activitypub-federation-rust (используется Lemmy и более чем 6 дочерними проектами) существует уязвимость подделки серверных запросов (SSRF), вызванная неполной проверкой IP-адреса в функции v4_is_invalid(). Функция не вызывает is_unspecified(), что позволяет атакующему обойти защиту от SSRF, указав адрес 0.0.0.0, который в большинстве систем соответствует localhost.
activitypub_federation (Rust/cargo)Функция v4_is_invalid() в src/utils.rs проверяет IPv4-адреса, чтобы блокировать доступ к внутренней сети. Она проверяет loopback (127.0.0.0/8), частные диапазоны (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), link-local (169.254.0.0/16) и broadcast (255.255.255.255), но не проверяет неопределённый адрес 0.0.0.0.
На большинстве систем 0.0.0.0 резолвится в интерфейс loopback, предоставляя тот же доступ, что и 127.0.0.1.
Дополнительная находка: Также существует уязвимость DNS Rebinding / TOCTOU, когда lookup_host() резолвит имя хоста и проверяет IP, но отдельный вызов reqwest выполняет второе DNS-разрешение, что позволяет атакующему сначала отдать безопасный IP, а затем перепривязать домен на внутренний IP при втором разрешении.
src/utils.rs)fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
// MISSING: || ip.is_unspecified() <- 0.0.0.0 not blocked
}
fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
|| ip.is_unspecified() // <- Now blocks 0.0.0.0
}
+---------------------------------------------------+
| SSRF via 0.0.0.0 Bypass |
+---------------------------------------------------+
| |
| 1. Attacker hosts ActivityPub object with |
| URL pointing to http://0.0.0.0:<port>/path |
| |
| 2. Lemmy instance fetches the object via |
| activitypub-federation-rust |
| |
| 3. v4_is_invalid() checks IP address: |
| x is_loopback() -> false (not 127.x) |
| x is_private() -> false (not RFC1918) |
| x is_link_local() -> false (not 169.254.x) |
| x is_broadcast() -> false (not 255.x) |
| x is_unspecified() -> NOT CHECKED |
| Result: 0.0.0.0 PASSES validation |
| |
| 4. Request sent to 0.0.0.0 -> resolves to |
| localhost -> accesses internal services |
| |
| 5. Internal service data returned to attacker |
| via ActivityPub federation response |
| |
+---------------------------------------------------+
Влияние на зависимые проекты: Крейт activitypub-federation-rust используется в более чем 6 проектах экосистемы Fediverse:
Атакующий может:
activitypub-federation до версии, содержащей исправление из PR #162Этот репозиторий опубликован в образовательных и защитных целях в рамках ответственного раскрытия уязвимости. Уязвимость была сообщена через процесс Private Vulnerability Reporting (PVRT) на GitHub. Эксплуатация против производственных систем не проводилась. Все тесты выполнялись в изолированных средах.
Полное описание этого проекта, методология и связанные исследования находятся по адресу:
https://snailsploit.com/security-research/cves/cve-2026-33693/
Автор: Kai Aizen — независимый исследователь в области offensive security.
snailsploit.com · Исследования · Фреймворки · GitHub · LinkedIn · ResearchGate · X/Twitter
Та же атака. Другой субстрат.
| Проект | Звёзды | Описание |
|---|
| Lemmy | 13.7K+ | Агрегатор ссылок для Fediverse |
| hatsu | -- | Мост для ActivityPub |
| gill | -- | Git-хостинг с федерацией |
| ties | -- | Социальная сеть |
| fediscus | -- | Федеративные обсуждения |
| fediverse-axum | -- | Фреймворк для ActivityPub |
| Метрика | Значение |
|---|
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Необходимые привилегии | Отсутствуют |
| Взаимодействие с пользователем | Отсутствует |
| Область действия (Scope) | Без изменений |
| Конфиденциальность | Низкая |
| Целостность | Низкая |
| Доступность | Отсутствует |
| Вектор CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N |
| Оценка | 6.5 (средний) |
| Дата | Событие |
|---|
| 2026-03-11 | Уязвимость сообщена через GitHub PVRT |
| 2026-03-13 | Мейнтейнер подтвердил находку |
| 2026-03-13 | Отправлен исправляющий PR #162 |
| 2026-03-13 | Консультация случайно закрыта |
| 2026-03-16 | Консультация повторно открыта |
| 2026-03-23 | Назначен CVE-2026-33693, консультация опубликована |