aifeed.skAI Feed
AI produkty5 min čítania

PydanticAI 2.28 priniesol hlasových agentov aj dôležitú opravu lokálneho webového chatu

PydanticAI 2.28 zaviedol obojsmerných hlasových agentov a odstránil zraniteľnosť s hodnotením CVSS 7,6. Škodlivý web mohol cez prehliadač osloviť agenta na localhoste a spustiť jeho nástroje; samotné obmedzenie služby na lokálnu adresu preto nestačilo.

Za text zodpovedá Redakcia AI Feed. Zodpovedný editor: Marek Považský. Ako používame AI.

Typ zdroja
Oficiálny zdroj
Zdroj / autorita
PydanticAI

Ako vznikol tento text

Redakcia spracovala verejné podklady do slovenského kontextu. Za výber, pravidlá kvality a prípadné opravy zodpovedá Marek Považský.

Text je zaradený v sekcii AI produkty a opiera sa o 4 zdroje. Konkrétne odkazy sú uvedené pod článkom; podrobnosti o AI postupe vysvetľuje metodika redakcie.

Dve zmeny s odlišným dosahom

PydanticAI 2.28.0 spojil atraktívnu produktovú novinku s bezpečnostnou opravou, ktorá je pre prax pravdepodobne ešte dôležitejšia. Framework dostal rozhranie Agent.realtime() na živú komunikáciu rečou a podporu prehliadačového WebRTC so serverovým riadiacim kanálom. Súčasne odstránil chybu vo vývojovom webovom chate vytvorenom cez Agent.to_web() alebo príkaz clai web. Tá umožňovala stránke otvorenej v prehliadači vývojára poslať požiadavku lokálnemu agentovi a vyvolať jeho beh vrátane nástrojov. Nešlo teda iba o zobrazenie neželanej správy, ale potenciálne aj o operácie vykonané s oprávneniami lokálneho procesu.

Bezpečnostné upozornenie GHSA-h4xc-3qfq-jf93 spresňuje rozsah problému viac než pôvodné oznámenie vydania. Zasiahnuté boli balíky pydantic-ai aj pydantic-ai-slim: vo vetve 1 verzie od 1.34.0 po verzie staršie než 1.107.4 a vo vetve 2 verzie od 2.0.0b1 po verzie staršie než 2.28.0. GitHub Advisory Database uvádza závažnosť „high“, skóre CVSS 3.1 na úrovni 7,6 a klasifikácie CWE-346 a CWE-352, teda nedostatočné overenie pôvodu komunikácie a cross-site request forgery. Opravenými verziami sú 1.107.4 a 2.28.0 alebo novšie.

Prečo localhost nebol bezpečnostnou hranicou

Podstatou chyby bolo, že chatový endpoint nekontroloval typ obsahu HTTP požiadavky. Cudzia stránka preto mohla vytvoriť jednoduchú cross-origin požiadavku bez CORS preflightu a doručiť jej telo službe počúvajúcej na počítači vývojára. Predvolené naviazanie webového rozhrania na localhost útok nezastavovalo: k loopback adrese síce nemá priamy prístup vzdialený server, ale môže ju osloviť prehliadač používateľa. Podmienkou útoku bolo, aby vývojár súčasne prevádzkoval webový chat a navštívil nedôveryhodnú stránku, preto advisory pri hodnotení počíta s potrebnou interakciou používateľa.

Dôsledok závisel od toho, aké nástroje agent dostal. Agent s prístupom iba k neškodnej demonštračnej funkcii predstavoval menšie riziko než agent schopný čítať súbory, volať interné API, meniť databázu alebo pracovať s cloudovými povereniami. Upozornenie navyše uvádza, že ochranu neposkytovali ani nástroje označené requires_approval=True, pretože endpoint dôveroval rozhodnutiu o schválení sprostredkovanému klientom. To je dôležité spresnenie: formálny krok ľudského schválenia nepomôže, ak útočník ovládne kanál, ktorým sa výsledok schválenia prenáša.

Oprava vyžaduje hlavičku Content-Type: application/json a ostatné požiadavky odmietne ešte pred spracovaním tela a spustením agenta. Prehliadač pri takomto JSON volaní z cudzieho pôvodu štandardne vykoná CORS preflight, čím sa uzatvára konkrétna cesta útoku. Existujúce skripty, ktoré endpoint volajú priamo, však môžu po aktualizácii potrebovať doplniť správnu hlavičku. Ak aktualizácia nie je okamžite možná, odporúčanie projektu je webové rozhranie počas návštevy nedôveryhodných stránok nespúšťať, po použití ho vypnúť a nevystavovať cezň agentov s nástrojmi spôsobujúcimi vedľajšie účinky.

Čo reálne prináša Agent.realtime()

Druhou hlavnou zmenou je dlhšie žijúca obojsmerná relácia pre hlasových agentov. Zvuk používateľa sa priebežne odosiela modelu typu speech-to-speech a hovorená odpoveď sa vracia cez rovnaké spojenie, čo znižuje latenciu a umožňuje prirodzenejšie prerušenia. Nejde pritom len o obal na diktovanie: realtime relácia používa nástroje, závislosti, inštrukcie, históriu správ, limity spotreby a observabilitu zo zvyšku PydanticAI. Agent tak môže počas hovoru overiť objednávku alebo dostupnosť, pričom aplikačná logika ostáva na serveri.

Aktuálna dokumentácia rozlišuje dve základné transportné architektúry. Zvuk môže prechádzať cez backend aplikácie, napríklad pomocou WebSocketu alebo telefónneho mosta, alebo môže prehliadač pri podporovaných službách posielať médiá priamo poskytovateľovi cez WebRTC. V druhom variante server naďalej ovláda nástroje a riadiacu rovinu cez sideband spojenie. Dokumentácia v čase redakčného overenia uvádza spoločné rozhranie pre OpenAI, Azure OpenAI, Google Gemini a xAI, ale ich schopnosti nie sú rovnaké. WebRTC priamo z prehliadača je uvedené pre OpenAI a Azure, zatiaľ čo podpora textového výstupu, asynchrónnych nástrojov či obnovenia stavu sa medzi poskytovateľmi líši.

Realtime režim preto nie je automatickou náhradou bežného textového agenta. Dokumentácia uvádza napríklad chýbajúci vstavaný SIP transport, nemožnosť dynamicky ponúknuť nové nástroje uprostred relácie a obmedzenia pri prenose relácie do iného procesu. Interaktívne schvaľovanie nástrojov človekom tiež nie je podporované rovnakým spôsobom ako pri niektorých odložených textových pracovných tokoch. Pri výpadku spojenia navyše treba testovať, či bol stav skutočne obnovený, aby agent nezopakoval odpoveď alebo akciu. Verzia 2.28.0 práve v tejto oblasti opravila vysporiadanie rozpracovaných operácií a presnejšie hlásenie obnovenia stavu.

Dôsledky pre slovenské a európske tímy

Pre slovenských vývojárov je najpraktickejším krokom inventarizácia projektov, ktoré používajú Agent.to_web(), clai web, pydantic-ai alebo odľahčený balík pydantic-ai-slim. Nestačí skontrolovať produkčné servery, pretože zasiahnuté rozhranie bolo určené najmä na lokálny vývoj. Firemné notebooky pritom často obsahujú prístupové tokeny, klientské dáta a sieťový prístup k interným službám. Aktualizáciu má sprevádzať zrušenie nepotrebných poverení, obmedzenie oprávnení procesu, izolácia nástrojov a kontrola logov, ak citlivý agent bežal počas prehliadania nedôveryhodného webu.

V európskom prostredí môže mať prípadný únik osobných údajov alebo zásah do interného systému aj povinnosti presahujúce samotnú opravu balíka. Konkrétne posúdenie závisí od spracúvaných dát, úlohy organizácie a skutočného dopadu, preto nemožno z existencie zraniteľnej verzie automaticky vyvodiť oznamovaciu povinnosť. Organizácie by však mali vedieť spätne určiť, kde bol balík nasadený, aké nástroje agent ovládal a ku ktorým údajom mal proces prístup. Takáto evidencia je užitočná pre reakciu na incident aj pre širšie európske požiadavky na riadenie rizík digitálnych produktov.

OWASP dlhodobo upozorňuje na „excessive agency“, teda na riziko, keď model dostane priveľa autonómie a oprávnení. Tento incident ukazuje, že problém nemusí vzniknúť iba prompt injection útokom proti samotnému modelu. Nebezpečná môže byť aj obyčajná webová vrstva pred agentom, ak nedostatočne overuje pôvod a formát požiadavky. Rozumnou obranou je preto kombinácia aktualizácie, minimálnych oprávnení, samostatných vývojových poverení, sieťovej izolácie, explicitnej serverovej autorizácie každej citlivej operácie a auditnej stopy nezávislej od klientského rozhrania.

Otvorenou neistotou zostáva praktický rozsah zneužitia. Verejné upozornenie opisuje technicky uskutočniteľnú cestu a možné následky, no neuvádza potvrdené útoky ani počet zasiahnutých inštalácií. Kontrola Content-Type navyše rieši túto konkrétnu cross-origin cestu, nie všeobecnú ochranu pred škodlivými pokynmi, kompromitovaným nástrojom alebo chybným rozhodnutím modelu. Hlasové rozhranie rozširuje počet vstupov, stavov a transportov, ktoré treba zabezpečiť. Najpresnejší záver preto nie je, že verzia 2.28 urobila agentov bezpečnými, ale že odstránila jednu vážnu chybu a súčasne zvýraznila potrebu viacvrstvovej ochrany.

Zdroje

Súvisiace čítanie

Ďalšie články k téme

Viac z kategórie