Přeskočit na obsah
Bezpečnost 4 min čtení

Ruby SDK protokolu MCP dostalo pět CVE. Opravy vyšly o tři týdny dřív než hlášení

Databáze bezpečnostních hlášení GitHubu přidala 30. července 2026 k oficiální rubyové knihovně protokolu MCP pět záznamů najednou, dva s vysokou závažností. Všechny opravuje verze 0.23.0, jenže ta vyšla už 7. července. U nejzávažnějšího z nich je navíc oprava jen volitelný hák, který si musí zapnout provozovatel serveru.

Foyer konference RubyConf 2016 s lidmi mezi přednáškami
Přestávka na konferenci RubyConf v roce 2016. Knihovna, o kterou tady jde, je oficiální rubyová implementace protokolu MCP. Foto: Sorah Fukumori, Wikimedia Commons (CC BY 3.0)

Model Context Protocol, zkráceně MCP, je domluva, podle které si jazykový model sáhne na cizí nástroj – na databázi, na souborový systém, na evidenci chyb. Server, který ten nástroj nabízí, běží typicky na vývojářském počítači. Pro Ruby k protokolu existuje oficiální knihovna, gem mcp. Databáze bezpečnostních hlášení GitHubu k ní 30. července 2026 přidala pět záznamů najednou; v registru CVE nesou datum o den dřívější.

Pět záznamů, jedna opravená verze

  • CVE-2026-67431 – vysoká, CVSS 4.0 8,3: kdo získá cizí identifikátor relace, může na ni posílat volání nástrojů. Odpověď přijde původnímu klientovi, takže si toho nemusí všimnout.
  • CVE-2026-67432 – vysoká, CVSS 3.1 7,5: přenos přečte celé tělo požadavku JSON-RPC do paměti bez horní meze.
  • CVE-2026-67430 – střední: relace ve výchozím nastavení nikdy nevypršely.
  • CVE-2026-63119 – střední: čtení rámce přes standardní vstup nemělo limit délky řádku.
  • CVE-2026-63118 – střední, CVSS 4.0 6,9: přenos vůbec nekontroloval hlavičky HostOrigin.

Zasažený rozsah je u všech pěti stejný: verze 0.22.0 a starší. Opravená je 0.23.0.

Opravy byly venku o tři týdny dřív než hlášení

Verze 0.23.0 vyšla 7. července 2026 – shodně to uvádí stránka vydání na GitHubu i záznam na RubyGems. Mezi ní a zveřejněním hlášení stihly vyjít další tři verze, poslední z nich 1.0.0 z 24. července. Poznámky k vydání 0.23.0 opravy vyjmenovávají a u tří z pěti říkají i to, čemu brání; čísla CVE v nich nejsou, protože v té době ještě nebyla přidělená. Táž verze mimochodem označila za odložené funkce Roots, Sampling a Logging.

Nejvážnější nález je v téhle knihovně druhý svého druhu

Rubyové SDK mělo obdobné hlášení už v březnu: CVE-2026-33946 z 27. března popisovalo únos datového proudu SSE zopakovaným identifikátorem relace a opravila ho verze 0.9.2. Proč to nestačilo, stojí v zprávě u nové opravy: dřívější záplata hlídá místo pro čtecí proud, ale s cestou zápisu přes POST nedělá nic.

Nová oprava je hák, ne výchozí chování. Popis knihovny to říká natvrdo: bez validátoru přenos vlastnictví relace nevynucuje. Sám ho vynutit neumí, protože žádnou ověřenou totožnost nedostane – svázat relaci s uživatelem je podle téhož textu věcí nasazované aplikace a specifikace MCP to formuluje jako doporučení, ne příkaz. Knihovna k tomu přidala parametr session_request_validator; volá se u každého požadavku na existující relaci a při nesouhlasu vrátí stav 403. Zapnout si ho musí provozovatel serveru. Náhradní pojistkou je porovnání hlavičky Origin proti té, která u relace padla na začátku – jenže funguje jen tehdy, když ji obě strany posílají, takže klienta mimo prohlížeč nezastaví.

Kontrolu hlaviček měly Python i TypeScript o osm měsíců dřív

CVE-2026-63118 popisuje útok přes přesměrování jména (DNS rebinding): škodlivá stránka v prohlížeči přepíše vlastní doménu na smyčkovou adresu a pak mluví s lokálním serverem MCP jako s vlastní. Server, který nekontroluje, odkud požadavek přišel, jí vypíše seznam nástrojů a spustí je.

Tutéž vadu měly sesterské knihovny dávno: CVE-2025-66414 pro TypeScript a CVE-2025-66416 pro Python vyšly obě 2. prosince 2025. V Ruby je to o necelých osm měsíců později. Samotná záplata je přitom starší než hlášení – commit s kontrolou hlaviček má autorské datum 30. dubna 2026 a do hlavní větve se dostal 28. června. Ve verzi 1.0.0 kontrola běží ve výchozím nastavení, cizí hodnota dostane 403 a povolené jsou smyčkové adresy. Kdo server provozuje za reverzní proxy nebo mimo smyčku, musí seznamy allowed_hostsallowed_origins rozšířit sám, jinak si odřízne vlastní klienty.

Tři zbylé nálezy míří na paměť

U CVE-2026-67432 je podstatné, že sporná cesta běží dřív, než se ověří relace – je tedy dostupná bez hlavičky s identifikátorem a bez jakéhokoli přihlášení. U CVE-2026-67430 byl jedinou cestou, jak relaci zrušit, výslovný požadavek DELETE od klienta; ve zprávě u opravy stojí měření hlásícího, který z jediného klienta vytvořil a držel 50 000 relací za 26,6 sekundy. CVE-2026-63119 se týká spojení přes standardní vstup a výstup, a tam je dopad menší: druhá strana je běžně rodičovský proces se stejnými právy jako server, takže si škodí sama.

Verze 1.0.0 má k tomu nová výchozí čísla: relace vyprší po 1 800 s nečinnosti, souběžných je nejvýš 10 000 a jeden rámec smí mít 4 MiB. Při zaplnění vrátí server na nové založení relace stav 503 a stávající relace nevyhazuje.

Kolika serverů se to týká, se z veřejných čísel nedozvíte

RubyGems vykazoval 1. srpna 2026 u gemu mcp 8 162 926 stažení celkem, z toho 7 883 337 na verzích 0.22.0 a starších – tedy 96,6 %. Ten podíl jsme si dopočítali z výpisu verzí a jako odhad zasažených instalací neplatí: je to součet za celou historii balíčku, ve kterém jsou hlavně sestavení v průběžné integraci a verze, které dnes nikdo nepoužívá.

Použitelnější vodítko je způsob nasazení. Čtyři z pěti nálezů se týkají přenosu po HTTP; kdo server pouští jen jako podproces přes standardní vstup a výstup, potká z té pětice ten poslední. Hlášení k CVE-2026-67432 ale dodává, že táž příčina má druhý výskyt i ve spojení přes standardní vstup.

Pětka není osamocená

Ve výpisu hlášení GitHubu za 28. července až 1. srpna 2026 jsme napočítali u implementací MCP ještě pět dalších záznamů: čtyři k serveru @dynatrace-oss/dynatrace-mcp-server a jeden k serveru gemini-bridge, kde nástroj četl libovolný soubor mimo pracovní adresář a jeho obsah posílal v odpovědi dál (CVE-2026-54785). S rubyovou pěticí je to deset záznamů u jednoho protokolu za čtyři dny.

Společný jmenovatel většiny z nich je, že server MCP počítá s důvěryhodným okolím – s klientem, který sedí na témže počítači, a s modelem, který posílá jen to, co mu řekl uživatel. Ani jedno dnes neplatí. Rubyová knihovna to u vlastnictví relace řeší tím, že odpovědnost výslovně předá aplikaci nad sebou; kolik serverů ji opravdu převzalo, se zvenčí nezjistí.

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

  1. Bezpečnost

    Claude při testech napadl tři skutečné organizace a vydal škodlivý balíček na PyPI

    Anthropic prošel zpětně 141 006 testovacích běhů a našel šest, ve kterých se model dostal z uzavřeného prostředí na internet a napadl provozní systémy tří organizací.…

  2. Bezpečnost

    Langflow je v katalogu CISA popáté, federální úřady dostaly tři dny

    CISA zařadila 21. července do katalogu zneužívaných zranitelností chybu CVE-2026-0770 v Langflow, nástroji na skládání agentů nad jazykovými modely. Dovoluje spustit kód…

  3. Bezpečnost

    Útok podvrhne agentovi fakta místo pokynů. V testu neodolal Claude Code ani Codex

    Šest autorů popsalo třídu útoků, která agentovi nepodstrčí skrytý příkaz, ale zfalšuje údaje, kterým bez ptaní věří – jméno odesílatele, identifikátor tlačítka, záznam o…