CVE-2026-79747
WysokieCVSS 7.1Streszczenie
MCPHub przed wersją 1.0.32 pozwala uwierzytelnionemu użytkownikowi niebędącemu administratorem zarejestrować serwer wskazujący na dowolny URL i wysyłać do niego żądania serwerowe bez filtrowania ruchu wychodzącego (brak blokady loopback, RFC1918, link-local). Przez proxy OpenAPI odpowiedź jest zwracana do wywołującego (pełny SSRF), a przez SSE/streamable-http żądanie jest wysyłane na ślepo.
Ocena ryzyka
Organizacja jest narażona na ataki SSRF, które mogą umożliwić dostęp do wewnętrznych zasobów, takich jak usługi w chmurze, bazy danych czy systemy zarządzania. Może to prowadzić do wycieku danych i naruszenia bezpieczeństwa.
Rekomendacja
Zaleca się aktualizację MCPHub do wersji 1.0.32 lub nowszej, która zawiera poprawkę. Należy również wdrożyć filtrowanie ruchu wychodzącego i ograniczyć możliwość rejestrowania serwerów tylko do zaufanych URL-i.
Inne podatności w MCPHub
Zobacz wszystkie- CVE-2026-79750Wysokie
MCPHub przed wersją 1.0.30 nie egzekwuje ograniczeń własności w API wykonywania narzędzi. Każdy uwierzytelniony użytkownik niebędący administratorem może wywoływać narzędzia na serwerach MCP należących do innych użytkowników, nawet jeśli nie widzi tych serwerów w GET /api/servers. Może to prowadzić do odczytu plików (np. /etc/passwd) i SSRF.
- CVE-2026-79749Wysokie
MCPHub przed wersją 1.0.32 ma lukę w zabezpieczeniu SSRF w src/utils/ssrf.ts. Funkcja isBlockedIpv6 sprawdza tylko adresy loopback, link-local, unique-local, IPv4-mapped i IPv4-compatible, ale nie sprawdza adresów przejściowych IPv6 (NAT64, 6to4, Teredo). Atakujący może zakodować prywatny adres IPv4 w tych formach IPv6, aby ominąć zabezpieczenie i dotrzeć do wewnętrznej infrastruktury.
- CVE-2026-79746Wysokie
MCPHub przed wersją 1.0.31 ma lukę w autoryzacji dla kluczy bearer z accessType 'servers' lub 'custom' używanych w trasach grupowych. Funkcja isBearerKeyAllowedForRequest przyznaje dostęp do całej grupy, jeśli jakikolwiek serwer w grupie znajduje się na liście allowedServers klucza, bez ponownego sprawdzania po autoryzacji. Klucz ograniczony do jednego serwera daje dostęp do wszystkich serwerów w grupie.
- CVE-2026-79745Wysokie
MCPHub przed wersją 1.0.32 nie sprawdza ról w wbudowanych kontrolerach promptów i zasobów. Trasy POST/PUT /api/prompts* i /api/resources* są dołączone do uwierzytelnionego routera bez bramki administratora, a handlery nie czytają req.user. Nie-admin może tworzyć, nadpisywać i cieniować globalne szablony promptów i zasobów, które są serwowane wszystkim użytkownikom.
- CVE-2026-79744Wysokie
MCPHub przed wersją 1.0.29 ma lukę w punkcie końcowym PUT /api/system-config (handler updateSystemConfig), który nie wykonuje żadnej kontroli autoryzacji. Jest chroniony tylko przez middleware uwierzytelniający i ogranicznik szybkości, ale nie sprawdza req.user.isAdmin.
- CVE-2026-79743Średnie
MCPHub przed wersją 0.12.13 zawiera podatność w obsłudze plików MCPB. Podczas ekstrakcji pliku ZIP, pole 'name' w manifeście jest bezpośrednio łączone ze ścieżką pliku bez sanityzacji, co pozwala na zapis plików w dowolnej lokalizacji (path traversal). Funkcja cleanupOldMcpbServer również używa niesanityzowanej nazwy, co może umożliwić usunięcie dowolnych katalogów. Problem został naprawiony w wersji 0.12.13.
- CVE-2026-79748Krytyczne
MCPHub przed wersją 0.12.15 nie sprawdza uprawnień administratora przy tworzeniu lub aktualizacji konfiguracji serwerów MCP, a także nie filtruje pól command i args. Każdy uwierzytelniony użytkownik niebędący administratorem może uruchomić dowolny proces jako użytkownik systemowy MCPHub, często root.
Oryginalny opis (angielski, źródło NVD)
MCPHub is a unified hub for centrally managing and dynamically orchestrating multiple MCP servers/APIs into separate endpoints with flexible routing strategies. Prior to version 1.0.32, an authenticated non-admin user can register a server pointing at an arbitrary URL and make the hub issue server-side requests to it, with no egress filtering (no block of loopback / RFC1918 / link-local 169.254.0.0/16). Via the OpenAPI proxy path the response body is returned to the caller (full, reflected SSRF); via the SSE/streamable-http transport the request is sent blind. This issue has been patched in version 1.0.32.

