CVE-2026-58485
WysokieCVSS 7.1Streszczenie
W mcp-searxng przed wersją 1.7.1 funkcja web_url_read przyjmuje kontrolowany przez wywołującego URL i waliduje jedynie literalną nazwę hosta w assertUrlAllowed() przed wykonaniem rozwiązywania DNS przez undiciFetch(). Publicznie wyglądająca nazwa hosta kontrolowana przez atakującego, która rozwiązuje się do adresu prywatnego, loopback, link-local lub cloud-metadata, przechodzi kontrolę leksykalną i powoduje połączenie serwera MCP z wewnętrznym celem. W domyślnej konfiguracji HTTP nieuwierzytelniony klient sieciowy może odczytywać wewnętrzne usługi, ujawniać poświadczenia lub tokeny oraz enumerować osiągalne hosty wewnętrzne. Problem naprawiono w wersji 1.7.1.
Ocena ryzyka
Nieuwierzytelniony atakujący może wykorzystać podatność SSRF do dostępu do wewnętrznych usług, ujawnienia poświadczeń lub tokenów oraz mapowania infrastruktury wewnętrznej. W środowiskach z dostępem do metadanych chmury może to prowadzić do przejęcia tożsamości lub eskalacji uprawnień.
Rekomendacja
Zaktualizuj mcp-searxng do wersji 1.7.1, która poprawnie waliduje schemat, host i rozwiązany adres IP. Do czasu aktualizacji rozważ wyłączenie lub ograniczenie dostępu do narzędzia web_url_read oraz upewnij się, że MCP_HTTP_ALLOW_PRIVATE_URLS nie jest włączone.
Inne podatności w mcp-searxng
Zobacz wszystkie- CVE-2026-58483Wysokie
W mcp-searxng przed wersją 1.7.1 funkcja web_url_read przekazuje URL dostarczony przez wywołującego do readUrlContent(), gdzie checkContentLength() traktuje brak nagłówka Content-Length jako niekonkluzyjny preflight, a następnie ścieżki normalna i błędów pobierają całe ciało odpowiedzi przez response.text(). Serwer pomijający Content-Length może obejść limit URL_READ_MAX_CONTENT_LENGTH_BYTES i wymusić nieograniczone zużycie pamięci, a wynikowy ciąg jest przetwarzany przez NodeHtmlMarkdown.translate(), zwiększając zużycie CPU. Nieuwierzytelniony klient HTTP może wywołać odmowę usługi. Problem naprawiono w wersji 1.7.1.
- CVE-2026-54689Średnie
mcp-searxng przed wersją 1.2.0 zawiera podatność w polityce URL web_url_read, która może zostać ominięta, gdy włączony jest MCP_HTTP_HARDEN, a MCP_HTTP_ALLOW_PRIVATE_URLS nie jest włączony. Obejście wynika z braku ponownej walidacji celów przekierowań, nieklasyfikowania adresu 0.0.0.0 jako wewnętrznego oraz nierozpoznawania adresów IPv4-mapped IPv6 w formie szesnastkowej. Atakujący może wpłynąć na wywołanie narzędzia, aby serwer MCP pobrał zasoby z pętli zwrotnej lub wewnętrznych adresów HTTP i zwrócił ich zawartość.
- CVE-2026-54688Średnie
mcp-searxng przed wersją 1.2.0 zawiera podatność, w której funkcja web_url_read przekazuje URL dostarczony przez wywołującego do ścieżki pobierania po stronie serwera, a walidacja assertUrlAllowed() jest wykonywana tylko wtedy, gdy włączony jest MCP_HTTP_HARDEN, który domyślnie jest wyłączony. W domyślnej konfiguracji atakujący, który wpływa na URL wybrany przez użytkownika lub agenta AI, może sprawić, że serwer pobierze zasoby z pętli zwrotnej, sieci prywatnej lub punktów końcowych metadanych chmury i zwróci ich zawartość do kontekstu modelu.
Oryginalny opis (angielski, źródło NVD)
mcp-searxng is a Model Context Protocol server that gives AI assistants web search and URL-reading capabilities through SearXNG. Prior to 1.7.1, web_url_read receives its caller-controlled URL through src/index.ts and validates only the literal hostname in assertUrlAllowed() within src/url-reader.ts before undiciFetch() performs operating-system DNS resolution. A public-looking attacker-controlled hostname that resolves to a private, loopback, link-local, or cloud-metadata address therefore passes the lexical check and causes the MCP server to connect to the internal destination. In the default HTTP configuration, an unauthenticated network client can use this path to read internal services, expose credentials or service tokens, and enumerate reachable internal hosts; in STDIO deployments, prompt-influenced tool selection can provide the malicious URL. Direct private IP literals are blocked, and MCP_HTTP_ALLOW_PRIVATE_URLS remains an explicit opt-out. This issue is fixed in version 1.7.1.

