JSFuck-obfuskering fikk Manus-agenten til å kjøre ondsinnet kode fra én e-post

Sikkerhetsforskere i Salt Labs klarte å omgå prompt-injection-forsvaret i AI-agenten Manus ved å gjemme et ondsinnet prompt i en e-post kodet med JavaScript-obfuskeringsteknikken JSFuck.

En åpnet konvolutt der tanglede ståltråd spirer ut, med én rød tråd som skiller seg ut — illustrasjon av skjult ondsinnet kode i en e-post.
Illustrasjon
Gi artikkelen

JSFuck-obfuskering fikk Manus-agenten til å kjøre ondsinnet kode fra én e-post

Sikkerhetsforskere i Salt Labs klarte å omgå prompt-injection-forsvaret i AI-agenten Manus ved å gjemme et ondsinnet prompt i en e-post kodet med JavaScript-obfuskeringsteknikken JSFuck. Agenten dekodet og kjørte koden i sitt server-side-miljø – og guardrailen slo først alarm etter at koden allerede var kjørt. Forskerne etablerte deretter en reverse shell i miljøet og fant legitimasjon og tokens for brukerens tilkoblede tredjepartstjenester. Sårbarheten er ifølge forskerne lukket, men saken viser hvorfor guardrails alene ikke er et forsvar for autonome agenter.

Hva som skjedde

I begynnelsen av oktober 2026 publiserte flere sikkerhetsmedier omtaler av Salt Labs' forskning: Sikkerhetsavdelingen til Salt Security hadde funnet en måte å omgå guardrailene i Manus, en agentplattform som kan koble seg til brukerens e-post, skylagring og andre tjenester (Cyber Security Intelligence, TechRadar via MSN, SC Media).

Ifølge Cyber Security Intelligence, som gjengir Salt Securitys egen fremstilling, gjennomførte forskerne studien tidligere i år. De meldte først saken til Manus, uten å få svar. Deretter sendte de den inn gjennom Metas bug bounty-program, der Meta ifølge rapporteringen bekreftet og rettet opp saken. Salt Labs sier ifølge TechRadar-artikkelens gjengivelse at problemet «har siden blitt løst og er ikke lenger utnyttbart». Det er verdt å merke seg at alt dette bygger på forskernes egen fremstilling – Manus selv har ikke bekreftet detaljene i noen av de dekkende kildene.

Den spesifikke sårbarheten er altså tettet, men hendelsen viser, som SC Media peker på, en vesentlig lærdom for virksomheter som distribuerer AI-agenter med bred tilgang til tredjepartstjenester.

Angrepet, steg for steg

Først det som faktisk fungerer i Manus' forsvar: Ifølge TechRadar-beskrivelsen kan agenten oppdage når et prompt er gjemt i data som skal analyseres. Men den ignorerer ikke promptene helt – den varsler eieren når den finner et ondsinnet.

Forskerne erfarte dette selv. Da de sendte en testbruker en e-post med en eksplisitt kommando, fanget Manus' guardrail opp og flagget den åpenbart ondsinnede instruksen, skriver Cyber Security Intelligence.

Neste steg var obfuskering. Forskerne kodet om kommandoen med JSFuck, en JavaScript-obfuskeringsteknikk som ifølge forskerne, sitert via TechRadar/MSN, bruker et begrenset tegnsett og derfor er en «uvanlig JavaScript-obfuskeringsteknikk» som er «sjelden brukt i moderne miljøer». Poenget med denne typen obfuskering er at koden fremstår som en meningsløs tegnrekke fremfor kjørbar logikk.

Nå konkluderte ikke agenten lenger med at innholdet var et ondsinnet prompt. Den tolket det ifølge forskerne som noe som skulle dekodes og rendres. Men som Salt Labs-forskerne sa, i TechRadars gjengivelse: «Intenten så ut til å være innholdsdekoding og rendering. Imidlertid kjørte dette effektivt vilkårlig JavaScript-kode i et server-side-miljø!»

Det er kjernefeilen: Oppgaven «dekod dette» og handlingen «kjør dette» smeltet sammen. Obfuskeringen fjernet de signalene guardrailen stole på for å gjenkjenne onsinnet, mens agenten fortsatt var i stand til å behandle – og i dette tilfellet kjøre – innholdet. Og varslingen til eieren kom først etter at koden var kjørt, ifølge TechRadar-artikkelens fremstilling av hendelsesforløpet.

Fra kodekjøring til eksponerte tokens

Kodekjøring i agentens server-side-miljø er ikke bare et teknisk brudd på en sikkerhetsgrense – det gir fotfeste. Ifølge Cyber Security Intelligence etablerte forskerne deretter en reverse shell i miljøet, altså en forbindelse ut av miljøet som gir kontroll fra utsiden, og identifiserte legitimasjon og tokens knyttet til tredjepartstjenester brukeren hadde koblet til agenten.

To forbehold er viktige her. For det første dreier det seg om forskernes demonstrasjon, ikke en dokumentert hendelse der reelle brukerdata ble eksfiltrert. Cyber Security Intelligence beskriver rekken av eksponerte kontoer – e-post, skylagring, koderepositorium og lignende – som et potensielt scenario, ikke som en bekreftet eksfiltrering. For det andre er det logiske poenget uansett alvorlig: En agent som kobler seg til tredjepartstjenester på brukerens vegne må lagre eller kunne hente frem autorisasjon for disse tjenestene. Et miljø som er kompromittert gjennom kodekjøring, kan derfor gi angriperen nøklene til tjenestene agenten har adgang til – én e-post inn, bred tilgang ut.

Hvorfor guardrails feiler mot obfuskert input

Manus' guardrail virker på innholdet slik det fremstår: mønstre av ondsinnede instruksjoner. Denne typen forsvar ligner tradisjonell gjenkjenning av kjente angrepssignaturer – effektivt mot det den kjenner igjen, blind for det som er pakket inn i en form den ikke gjenkjenner.

Prompt injection utnytter nettopp det at språkmodeller ikke skiller mellom «instruksjon» og «data» på en robust måte. En guardrail som inspiserer råteksten, kan flagge instruksjoner i ren tekst. Men obfuskert innhold flytter problemet: Agentens tolkningslag kan dekode innholdet underveis – fordi dekoding er en legitim oppgave agenten ofte bes om å utføre – og dermed konfronteres modellen med den ondsinnede instruksen først etter at input allerede har passert det ytre forsvarslaget.

Timing-problemet er minst like viktig som gjenkjenningsproblemet. At Manus varslet eieren etter kjøring, betyr at guardrailen fungerte som alarm, ikke som lås. I et autonomt system der én handling kan utløse kodekjøring, og kodekjøringen kan gi vedvarende tilgang, er et varsel i etterkant et svakt vern.

Forskerens advarsel: lag-på-lag, ikke én barriere

Yaniv Balmas, leder for forskning i Salt Security, oppsummerer leksjonen slik, gjengitt av Cyber Security Intelligence: «Alle som designer et agentisk system bør bygge robuste, lagdelte forsvar i stedet for å stole på at guardrails skal gi all beskyttelsen, akkurat som vi lærte å gjøre med tradisjonelle tjenester. Etter hvert som agentadopsjonen vokser, tviler jeg ikke på at dette blir en av de vanligste angrepsvektorene vi ser.»

Analogien til tradisjonell sikkerhet er reell. Web- og API-sikkerhet lærte bransjen at inputvalidering alene aldri er nok: man legger til minst rettigheter, isolasjon, autentisering mellom tjenester, overvåking og begrensninger på hva et kompromittert miljø faktisk kan nå. Satt over på agentiske systemer betyr det konkrete tiltak som at agentens miljø kjører isolert med minimale rettigheter, at tredjepartstokens ikke ligger lett tilgjengelig i miljøet, at handlinger som gir kodekjøring krever eksplisitt godkjenning, og at varsling skjer før risikable handlinger utføres – ikke etter.

Det vanskelige rundt ansvarslinjen

En kuriositet i saken er hvem som egentlig eier sårbarheten. Salt Labs rapporterte ifølge Cyber Security Intelligence først til Manus, uten å få respons, og brukte deretter Metas bug bounty-program – der Meta ifølge rapporteringen bekreftet og rettet opp saken. Det er verdt å holde to ting fra hverandre: Metas bug bounty-program ble brukt som rapporteringskanal, og Meta bekreftet og adresserte saken der; påstanden om at Manus ikke svarte, stammer fra Salt Labs selv, som gjengitt av Cyber Security Intelligence, og er ikke bekreftet av Manus.

For en bransje der AI-agenter bygges, driftes og integreres av ulike aktører, er dette ikke bare en prosedursak. Hvem brukerne skal melde sårbarheter til – og hvem som faktisk tetter dem – blir en del av sikkerhetsmodellen for hele det agentiske økosystemet.

Usikkerheter og åpne spørsmål

Alt som er kjent om dette tilfellet stammer fra sekundærkilder som gjengir Salt Securitys forskning, og de hviler sannsynligvis på samme underliggende rapport. Salt Labs' originale tekniske rapport ligger ikke til grunn direkte i de tilgjengelige kildene, og de tre dekningsmediene bør derfor ikke leses som uavhengig bekreftelse av hverandre.

Tidslinjen er også vag: Cyber Security Intelligence skriver bare at forskningen skjedde «tidligere i år» og ble meldt til Manus uten respons, uten presise datoer. MSN/TechRadar-artikkelen omtaler kun avsløringen via Metas bug bounty-program, mens Cyber Security Intelligence legger til første-kontakt-med-Manus-steget. Rekkefølgen kan ikke fullstendig verifiseres.

Og det største åpne spørsmålet er det SC Media peker på: Selv om denne spesifikke teknikken er lukket, finnes det trolig andre, like effektive – en vurdering Salt Labs selv gjør i TechRadars gjengivelse. En guardrail som gjenkjenner et mønster, kan omgås med en ny innpakning av samme ondsinnede innhold. Det er derfor poenget i denne saken ikke er at Manus var sårbart, men at forsvarsdesignet til agentiske systemer må anta at et hvilket som helst enkelt lag kan brytes – og sørge for at konsekvensen av et brudd blir liten.

Få de viktigste AI-nyhetene i innboksen

Nyheter, analyser og verktøy samlet for deg.