De Grok Build-coderings-CLI van xAI uploadde volledige Git-repository’s, de volledige commit-geschiedenis en zo, naar een Google Cloud Storage-bucket die werd beheerd door xAI, niet alleen de bestanden die een codeertaak nodig had.
Een onderzoeker die publiceert als cereblab, testversie 0.2.93heeft een van die uploads vastgelegd, de git-bundel uit het onderschepte verzoek gekloond en een bestand teruggehaald waarvan de agent in duidelijke bewoordingen was opgedragen deze niet te openen.
De upload reed op een ander kanaal dan het model zelf, en de bytesplitsing is moeilijk te betwisten. Op een repository van 12 GB met bestanden die het model nooit heeft gelezen, wordt er verkeer naar gestuurd /v1/responses kwam uit op ongeveer 192 KB terwijl het opslagkanaal aan /v1/storage verplaatste 5,10 GiB, een kloof van grofweg 27.800x tussen wat het model nodig had en wat de machine verliet.
Die opslagupload bestond uit 73 delen van ongeveer 75 MB, die allemaal HTTP 200 retourneerden, en over de grootte van de onderzoeker werd het volume bijgehouden van de totale repo-grootte. De bestemmingsbak, grok-code-session-traceswordt genoemd in het binaire bestand en in een geënsceneerde versie metadata.json waarvan de paden per bestand verwijzen naar gs://grok-code-session-traces/.
Het ongelezen bestand was src/_probe/never_read_canary.txtbeplant met een unieke marker. Door de vastgelegde bundel te klonen, werd deze woordelijk hersteld, samen met de volledige commitgeschiedenis van de repository, en dezelfde test werd gerepliceerd op een tweede, niet-gerelateerde repository. Wat de opnames tot stand brengen is transmissie, acceptatie en opslag, en niet training.
De demontage beweert niet dat xAI getraind is in de code, dat personeel deze leest, of dat gesignaleerde bestanden altijd worden binnengehaald. Bijgehouden bestanden plus geschiedenis is wat de draad laat zien.
Het geheimenpad is gescheiden en eenvoudiger. Wanneer Grok een bestand leest, gaat de inhoud ervan naar de modelbeurt en wordt het bijgehouden .env ging ongeredigeerd met hen mee, kanarie API_KEY En DB_PASSWORD waarden en al. Dezelfde inhoud belandde ook in een session_state archief bestemd voor opslag. De geplante geheimen waren nep, dus er lekte niets echts tijdens de test. Het gedrag is nog steeds het probleem: een referentiebestand dat de agent tijdens een taak las, ging de deur uit en werd zonder redactie opgeslagen.
De instelling waarnaar de meeste ontwikkelaars zouden streven, deed hier niets. Met “Verbeter het model” uitgeschakeld, uploadde Grok nog steeds de repository en die van de server /v1/settings reactie bleef terugkomen trace_upload_enabled: true. Deze schakelaar bepaalt of uw gegevens het model trainen. Het bepaalt niet of uw code de machine verlaat. Dat zijn twee verschillende bedieningselementen, en slechts één ervan was zichtbaar voor de gebruiker.
Elke cloudcoderingsagent moet een bron naar een extern model sturen om zijn werk te doen, dus het eerste kanaal wordt verwacht. Het verzenden van de volledige bijgehouden repository en de geschiedenis ervan is een bredere grens dan het verzenden van de bestanden die een taak nodig heeft.
Een repository kan bedrijfseigen code, interne URL’s, klantgegevens en inloggegevens bevatten die uit de werkboom zijn verwijderd, maar nog steeds in de commitgeschiedenis aanwezig zijn. In cereblab’s eigen cross-tool-vergelijking stuurden Claude Code en Codex geen repositorybundel; Gemini stuurde er geen in een inactieve test, hoewel de uitvoering van realistische taken werd geblokkeerd voordat deze was afgelopen.
Grok Build was de uitschieter. Dat zijn nog steeds cloudtools die de bestanden die ze openen verzenden, dus ‘alleen lokaal’ is voor elk daarvan het verkeerde mentale model. Maar de grootschalige verzameling van de werkruimte was specifiek voor Grok Build.
xAI’s reactie
Op 13 juli hetzelfde 0.2.93 binary is gestopt met het doen van opslagverzoeken. cereblab testte zes keer opnieuw en zag nul /v1/storage uploads, en de server is nu teruggekeerd disable_codebase_upload: true En trace_upload_enabled: false.
De ontwikkelaar Peter Dedene meldde dat dezelfde vlag voor zijn rekening was teruggekeerd, dus de afsluiting was niet alleen de observatie van cereblab op één machine. De geteste klant bleef aan 0.2.93 terwijl de serverinstellingen veranderden, dus dit was een schakelaar aan de serverzijde en geen oplossing die in een update werd geleverd. xAI heeft niet bevestigd of het elk account bereikt of permanent is.
xAI heeft het probleem tot nu toe op X aangepakt in plaats van via een beveiligingsadvies of een changelog-notitie. Het @SpaceXAI-account zei dat bedrijfsteams die geen gegevens bewaren, nooit code- of traceergegevens hebben opgeslagen, dat het gebruik van API-sleutels ZDR respecteert en dat consumenten die dit niet hebben ingeschakeld, kunnen draaien /privacy in de CLI om het bewaren uit te schakelen en eerder gesynchroniseerde gegevens te verwijderen.
Elon Musk ging verder en zei dat alle gebruikersgegevens die tot nu toe zijn geüpload ‘volledig en volkomen verwijderd’ zouden worden, zonder dat er iets achter zou blijven. ZDR omvat bedrijfsteams en API-gebruik, dus voor individuele abonnees is de /privacy commando is de aangeboden controle.
Voor iedereen die de tool al heeft uitgevoerd: de stap is om niet op xAI te wachten. Roteer alle referenties die Grok had kunnen verzenden: alles wat het las, alles in een bijgehouden bestand en alles in de git-geschiedenis die de bundel bevatte, inclusief een geheim dat je hebt vastgelegd en later hebt verwijderd.
Een bestand dat werd genegeerd en nooit werd vastgelegd, bleef buiten de bundel. Een toegewijde reed mee in de geschiedenis, en het later verwijderen ervan trekt hem niet terug. Uit een afzonderlijke analyse van build 0.2.99 bleek dat de uploadcode nog steeds in het binaire bestand stond, tegengehouden door de servervlag, zodat xAI deze weer kan inschakelen zonder een update.
En er wordt nog steeds niet gezegd waarom volledige opslagplaatsen standaard werden geüpload, hoe lang ze werden bewaard of hoeveel gebruikers erdoor werden getroffen. Een opt-out voor trainingen is geen belofte dat uw code blijft staan, en wat de machine verlaat, is de moeite waard om zelf te controleren.