(Ne)bezpečnosť umelej inteligencie / 5. časť
Hneď v úvode si pripomeňme, že veľké jazykové modely (LLM) a nástroje vibecoding nepopierateľne transformovali softvérové inžinierstvo a vývoj používateľských rozhraní (UI). Medzi najprogresívnejšie nástroje v tejto oblasti určite patrí Vercel v0 – generatívny systém poháňaný AI, ktorý umožňuje vývojárom vytvárať frontendové (React, Tailwind, shadcn) komponenty na základe textových inštrukcií (promptov). Schopnosť v0 premeniť textový prompt na plnofunkčné UI prináša nepopierateľnú efektivitu, dramaticky skracuje čas potrebný na prototypovanie a nasadenie aplikácií, ale s narastajúcou adopciou tohto typu vývoja vznikajú otázky týkajúce sa bezpečnosti vygenerovaného zdrojového kódu.
Platforma Vercel v0
v0 funguje na princípe iteratívneho generovania kódu. Používateľ zadá opis požadovaného rozhrania a v0 vygeneruje produkčne pripravený kód s využitím knižnice React. Systém optimalizuje kód na okamžité nasadenie, pričom využíva framework Tailwind CSS na zabezpečenie responzivity a vizuálnej konzistencie. Hlavný prínos je abstrakcia ručného písania programového kódu.
Z pohľadu softvérovej architektúry v0 nevytvára kód s využitím striktných syntaktických a bezpečnostných pravidiel, ale štatistickej pravdepodobnosti výskytu textových reťazcov v trénovacích údajoch. Jednoducho kompiluje = spája reťazce, ktoré boli vstupom pri učení jeho LLM. Práve to je dôvod možnej infiltrácie bezpečnostných problémov. Model generuje kód, ktorého výstup spĺňa vizuálne požiadavky vývojára, no pretože nebol napísaný príkaz po príkaze (riadok po riadku), môže obsahovať skryté logické chyby alebo bezpečnostné zraniteľnosti. Ide o tzv. halucinácie = prevzatie nekorektných vzorov pri trénovaní LLM.
Efektivita verzus bezpečnosť
Hlavné riziko pri integrácii kódu z v0 do produkčných systémov je kognitívne skreslenie vývojárov. Keďže vygenerované komponenty vyzerajú profesionálne a vizuálne fungujú presne podľa očakávaní, programátori majú tendenciu vynechať dôkladnú revíziu kódu (napr. pomocou spomínaných nástrojov Vibe-Eval či Code Review). AI generovanie programového kódu však obchádza tradičné mechanizmy statickej analýzy, pokiaľ nie sú priamo implementované v konkrétnom generátore alebo v externom kontrolnom nástroji.
Konkrétny príklad zraniteľnosti – Client-Side URL Injection v komponente
Opíšeme jednoduchý, no mimoriadne frekventovaný príklad zraniteľnosti, ktorý môže viesť napr. k spusteniu škodlivého skriptu. Vývojár zadá prompt: „Vytvor moderné tlačidlo pre profil používateľa, ktoré obsahuje odkaz na jeho osobnú webovú stránku, pričom tento odkaz bude možné upravovať.“ Model vygeneruje štandardný HTML tag a prepojí jeho atribút href s údajmi, ktoré môže používateľ meniť, pričom môže, ale aj nemusí kontrolovať ich obsah. Model logicky splní úlohu – tlačidlo funguje, obsah odkazu sa dá upravovať a po kliknutí naň sa otvorí požadovaná stránka. Z hľadiska bezpečnosti tu však môže dôjsť ku kritickému zlyhaniu. Predstavme si napr. vygenerovanú funkciu:
{user.name}
{user.bio}

Obr. 1 Komponent UI vygenerovaný pomocou Vercel v0
Vývojár sa spolieha na to, že používateľ zadá do poľa websiteURL korektnú URL adresu, napr. https://softengine.sk. Generátor však môže na validáciu v komponente „zabudnúť“ a môže očakávať, že vstupné údaje budú vždy správne a bezpečné – takto sa to predsa naučil pri svojom tréningu.
Ak útočník zmení hodnotu websiteURL na špeciálne upravený reťazec, napr. na výkonný systémový príkaz či skript, môže úplne obísť zamýšľanú funkcionalitu odkazu na webovú stránku. V momente, keď obeť klikne na odkaz, prehliadač namiesto otvorenia novej stránky vykoná podhodený kód. V reálnom scenári útočník určite nepoužije neškodnú výstrahu. Otvára sa mu široká škála skrytých útokov, ktorých aktiváciu si zabezpečí prostredníctvom banálneho kliknutia na odkaz.
Kde sa stala chyba?
Ak generátor splní zadanie „povrchne“, teda prepojí objekt user.websiteURL s atribútom href bez validácie vstupu, pretože uvažuje iba v kontexte kompilácie vzorových textov, implementuje najjednoduchšiu, no nebezpečnú cestu. Vygenerovaný komponent bude automaticky dôverovať akémukoľvek reťazcu, ktorý dostane na vstupe. Vývojár, ktorý by tento kód skopíroval do produkcie, by síce získal pekné a funkčné tlačidlo, no prehliadol by banálnu chybu.
Obrana proti tomuto typu útoku je pritom mimoriadne jednoduchá. Stačí overiť, či sa URL adresa začína štandardným webovým protokolom (napr. http:// alebo https://). Ak podmienku nespĺňa, odkaz sa znefunkční alebo nahradí bezpečnou alternatívou:
{user.name}
{user.bio}

Obr. 2 Programový kód UI komponentu vygenerovaný pomocou Vercel v0
Na obr. 2 vidíme, že v našom prípade Vercel v0 vytvoril správny kód, v ktorom automaticky implementoval validáciu vstupného reťazca. Po zmene obsahu editovateľného poľa websiteURL kód skontroluje, či sa zadaný text začína štandardnými webovými protokolmi. Sme si však stopercentne istí, že generátor vždy vygeneruje kód obsahujúci túto banálnu kontrolu?
Tento príklad demonštruje, že aj ten najjednoduchší HTML tag môže predstavovať vážne bezpečnostné riziko, ak je vygenerovaný bez kontextuálnej kontroly bezpečnosti. Pri používaní AI generátorov teda platí jedno základné pravidlo: Každý vygenerovaný kód musí pred nasadením prejsť revíziou so zameraním na to, či spĺňa aspoň tie najjednoduchšie bezpečnostné pravidlá.
Zobrazit Galériu