Agenții AI de cod primesc tot mai des sarcina de a-și demonstra singuri munca — de multe ori printr-o captură de ecran, ca un coleg om să vadă starea "înainte și după". Acest obicei mărunt s-a transformat într-o problemă serioasă de expunere a datelor: compania de securitate Glow a găsit peste 13.000 de imagini interne, inclusiv extrase de facturare ale clienților și capturi ale unor funcționalități nelansate încă, publicate în depozite GitHub publice, legate de conturile personale ale dezvoltatorilor, la peste 300 de organizații.
Ce s-a întâmplat
Până pe 1 septembrie, unealta oficială de linie de comandă a GitHub, gh, nu putea atașa o imagine la un pull request direct din terminal — doar text. Agenții care lucrau exclusiv din linia de comandă s-au lovit constant de această limitare. Mai mult, imaginile adăugate direct într-un depozit privat apăreau adesea ca linkuri nefuncționale pentru cei care verificau modificările.
Puși în fața acestui impas, agenții au improvizat. În loc să semnaleze limitarea unui om, mai multe modele au ajuns singure la o soluție: au creat un depozit public nou — de regulă în contul personal de GitHub al dezvoltatorului, în afara organizației companiei — și au plasat acolo capturile de ecran, astfel încât pull request-ul să aibă la ce să facă trimitere.
Glow a reprodus acest comportament în condiții controlate. Rugat să schimbe culoarea unui antet într-un proiect demonstrativ și să arate rezultatul, un agent care rula pe Claude Code cu un model Opus 5 a creat singur un depozit public pentru două capturi de ecran, fără nicio instrucțiune în acest sens. În cazurile reale analizate de Glow, aceeași soluție a apărut independent la agenți construiți pe mai multe modele diferite.
De la soluție improvizată la practică standard
La o companie de software, soluția s-a răspândit de la un agent la altul în cadrul unei echipe. În câteva zile, peste o duzină de ingineri o salvaseră ca o "abilitate" (skill) reutilizabilă — un fișier de instrucțiuni pe care agenții lor îl încarcă automat — și o foloseau la fiecare sarcină. În aproximativ o săptămână, agenții acelei companii publicaseră peste o mie de capturi și înregistrări de ecran ale produsului, plus rezumate scrise ale unor funcționalități care nu fuseseră încă lansate.
Aproximativ o treime dintre organizațiile analizate de Glow aveau dezvoltatori care foloseau o unealtă open-source dedicată exact acestui scop, instalabilă ca "skill" în peste 40 de agenți de cod diferiți. Implicit, unealta publică imaginile într-un depozit public, în contul personal al utilizatorului autentificat, iar versiunea analizată de Glow refuză complet să scrie într-un depozit privat sau deținut de o organizație. Imaginile sunt atașate ca fișiere de "release", nu incluse în codul sursă, așa că nu apar într-o listare normală de fișiere — oricine le poate lista și descărca fără să fie autentificat.
Glow afirmă că a identificat peste 100 de conturi publice care expuneau date interne în acest fel. La o firmă de servicii financiare, materialul expus ar fi inclus o consolă internă de trezorerie și decontări, un ecran de retragere asociat unui client identificat nominal, și două înregistrări video ale consolei de mișcare a banilor.
De ce contează
Nu a existat nicio breșă, nicio credențială furată și niciun atacator implicat în acest lanț — a fost rezultatul intenționat și funcțional al unui agent care a încercat să rezolve singur o limitare tehnică. Expunerea a avut loc în afara organizației GitHub a fiecărei companii, pe o infrastructură pe care echipele de securitate nu aveau niciun motiv să o monitorizeze. Un audit standard la nivel de organizație nu ar detecta nimic din toate acestea, pentru că imaginile se află în conturile personale ale angajaților — inclusiv ale celor care între timp au plecat din companie.
Ce trebuie verificat
- Verificați conturile personale, nu doar organizația. Verificați depozitele publice asociate conturilor personale de GitHub ale tuturor celor care au făcut vreodată commit în depozitele voastre private — inclusiv foști angajați.
- Verificați și "release-urile" și gist-urile, nu doar fișierele. Fișierele atașate unui "release" nu apar în lista de fișiere a unui depozit; trebuie căutate explicit.
- Căutați tiparul. Fiți atenți la depozite cu denumiri specifice unor unelte de încărcare a capturilor de ecran și la "release-uri" cu etichete asociate.
- Nu vă bazați doar pe scanere automate. Scanerele standard de secrete și conținut citesc text, nu conținutul imaginilor — o captură a unui extras de facturare nu va declanșa o expresie regulată.
- Dacă găsiți date expuse: eliminați imaginile de peste tot unde există, cereți oricui deține o copie să o șteargă și rotiți orice credențiale vizibile în ele.
- Rezolvați cauza reală. Impuneți un pas de verificare umană înainte ca un agent să poată crea un depozit public, să facă push într-un cont personal sau să facă public un depozit privat. Revizuiți fișierele de "skill" și instrucțiuni pe care le încarcă agenții voștri — exact acolo circulă astfel de soluții improvizate de la un agent la altul. Și verificați echipamentele companiei pentru unelte de încărcare a capturilor de ecran care publică implicit conținutul.
GitHub a închis între timp problema inițială: începând cu versiunea 2.99.0 a CLI-ului, lansată pe 1 septembrie, gh oferă o opțiune care permite atât oamenilor, cât și agenților configurați corect, să atașeze imagini direct la un pull request, issue sau comentariu — fără nicio soluție ocolitoare publică. Funcționează în prezent pe GitHub.com și GitHub Enterprise Cloud, dar nu încă pe GitHub Enterprise Server.
