Tuesday, March 17, 2026

Prípadová štúdia: Ako sme s Claude Code hľadali zraniteľnosti v aplikácii Autogram (a prečo AI stále potrebuje kontext)

Umelá inteligencia je dnes bežnou súčasťou vývoja, a tak sme sa rozhodli otestovať schopnosti nástroja Claude Code pri bezpečnostnom audite (security review). Našou cieľovou aplikáciou bol Autogram vo verzii 2.7.1 – desktopová aplikácia (JavaFX) s integrovaným lokálnym HTTP serverom, ktorá slúži na elektronické podpisovanie.

Výsledok? Ukážka toho, ako AI dokáže rýchlo analyzovať kód, ale aj toho, prečo by sme sa bez znalosti reálneho threat modelu utopili vo falošných poplachoch.

Prvý dojem: Hrozivý report 🚨

Po zadaní príkazu na preskúmanie repozitára, Claude Code model Opus4.6 analyzoval desiatky súborov (70k+ tokenov) za necelé 3 minúty. Pôvodný report vyzeral hrozivo. Claude identifikovalo 17 zraniteľností:

  • 4 Critical (napr. Wildcard CORS na všetkých endpointoch, chýbajúca autentifikácia, hardcodované TLS heslo)

  • 4 High (napr. riziko DoS pre neobmedzenú veľkosť requestu, ...)

  • 4 Medium a 5 Low (XSLT injection, resource leaky, logovanie citlivých dát, ...)

Ak by sme tento report zobrali bez rozmyslu, aplikácia by pôsobila ako deravé rešeto.

Kontext je kráľ: Ako sme škrtali falošné poplachy ✂️

Tu prišiel na rad ľudský faktor. Začali sme s Claude diskutovať a vysvetľovať mu architektúru aplikácie. Autogram nie je bežný webový server vystavený do internetu; avšak beží ako aplikácia na počítači (localhoste) používateľa, ktorý volajú webové portály tretích strán.

Postupne sme "hrozby" eliminovali:

  1. "Kritický" CORS a chýbajúca autentifikácia: Ide o zámerný dizajn. Autogram musia vedieť zavolať rôzne portály. Skutočnou bezpečnostnou hranicou nie je HTTP vrstva, ale samotný používateľ, ktorý musí v GUI aplikácie vizuálne skontrolovať dokument a zadať PIN. Výsledok: Vyškrtnuté.

  2. Hardcodované TLS heslo: Certifikát je self-signed a slúži len na lokálne šifrovanie. Ak má útočník prístup k súborom na disku, už dávno ovládol počítač. Výsledok: Vyškrtnuté.

  3. Teoretické DoS útoky a prístupy k internej JDK: Neobmedzená veľkosť pre HTTP body znie zle, ale zneužiť to cez webový prehliadač znemožnia tvrdé pamäťové limity samotného browsera – gigabajty dát ním jednoducho nepretlačíte. A ak by útočník chcel poslať takýto obrovský payload inou cestou, znamená to, že už musí mať prístup k danému stroju a možnosť spúšťať na ňom vlastný kód. Zvyšné Medium a Low nálezy sme preklasifikovali na bežný technický dlh. Výsledok: Vyškrtnuté.

Jediný skutočne závažný nález: Ihla v kope sena 🪡

Po zhodnotení reálneho prostredia desktopovej aplikácie uznal chybu aj samotný Claude Code. Z pôvodných 17 nálezov zostal presne jeden skutočne relevantný, s Vysokým rizikom:

  • Neúplná mitigácia XXE (XML External Entity): Pri spracovaní XML (súbor XMLUtils.java) bola vypnutá len jedna funkcia (external-general-entities). Chýbalo však zakázanie parameter entít a externých DTD. Pôvodný report to označil za kritickú chybu, no závažnosť sme nakoniec upravili na Vysokú. Dôvodom je, že na úspešný útok musí obeť najprv navštíviť útočníkovu webovú stránku a útočník zároveň musí poznať presný názov a cestu k súboru, ktorý chce exfiltrovať. Napriek týmto prekážkam išlo o reálnu zraniteľnosť – úspešnú exploitáciu a exfiltráciu lokálneho súboru z počítača obete sme prakticky potvrdili.

Zodpovedné nahlásenie a CVE-2026-3511 🛡️

Keď sme túto zraniteľnosť s pomocou AI potvrdili, postupovali sme štandardnou cestou zodpovedného zverejňovania (responsible disclosure). Nález sme oficiálne nahlásili prostredníctvom Národného bezpečnostného úradu (NBÚ).

Tu musíme vyzdvihnúť prístup vývojárov zo Slovensko.Digital, ktorí zareagovali absolútne ukážkovo. Zraniteľnosť bola z ich strany vyriešená promptne a extrémne rýchlo vydali aj novú verziu 2.7.2. 

Pre tento konkrétny prípad bolo zároveň rezervované označenie CVE-2026-3511.

Záver

Použitie Claude Code na rýchle skenovanie bola vynikajúca skúsenosť. Nástroj dokázal okamžite nájsť zložité patterny a potenciálne zraniteľnosti (ako napríklad spomínané XXE), ktoré by sa pri manuálnom code review hľadali ťažšie, nakoľko existovala čiastočná ochrana.

Je však dôležité zdôrazniť, že tento náš experiment sa v žiadnom prípade nedá pokladať za komplexný bezpečnostný audit kódu (comprehensive security code audit) alebo plnohodnotný penetračný test. Išlo o cielenú ukážku možností AI asistenta.

Zároveň sa ukázalo, že AI zatiaľ nedokáže plne pochopiť aplikačný kontext bez pomoci človeka. Bez inžiniera, ktorý vie, že „tento server beží len lokálne a autorizuje sa klikom v UI a následným zadaním PINu“, by bol výstupom len dlhý zoznam falošných poplachov (false positives). LLM sú dnes už nepostrádateľný nástroj, no kapitánom lode prezatiaľ musí ostať človek. Výsledkom tejto rýchlej spolupráce je nakoniec bezpečnejší softvér pre všetkých.

Mimochodom, tento krátky experiment len potvrdzuje neformálnu metodológiu pre hľadanie zraniteľností pomocou LLM, ktorú spísal researcher Devansh na svojom blogu. Určite to stojí za prečítanie!

No comments: