Endor Labs publiserte en analyse av en RCE-sårbarhet i protobuf.js, et bibliotek med rundt 52 millioner npm-nedlastinger per uke. Feilen er tildelt GHSA-xq3m-2v4x-88gg og har CVSS 9.4. Sårbare versjoner er 8.0.0 og tidligere, samt 7.5.4 og tidligere.
Mekanismen
protobuf.js bruker en funksjon kalt Type.generateConstructor for å bygge JavaScript dynamisk. Internt kaller den Function-konstruktøren — en oppførsel tilsvarende eval() som gjør om tekst til kjørende kode. Fordi biblioteket ikke filtrerte feltnavn fra .proto- eller JSON-schemaer, kunne en angriper putte inn et navn som faktisk var en JavaScript-payload. Når applikasjonen laster og behandler det ondsinnede schemaet, kjører koden — uten at brukeren trenger å gjøre noe ekstra.
«This vulnerability is not a supply-chain attack against protobuf.js itself; the package is legitimate. It is a vulnerability in how protobuf.js processes the data developers feed it — this class of bugs, dev-tool-as-code-execution-primitive, has an emerging threat model the ecosystem has been slow to internalize.» — Endor Labs-forskerne
Hvem er eksponert
Hvis du laster schemaer som brukere eller eksterne systemer kan påvirke — gRPC reflection-tjenester, multi-tenant plattformer der kunder laster opp egne datadefinisjoner, eller systemer som parser .proto-filer hentet fra Git-repoer — er du utsatt. Systemer med forhåndsdefinerte, betrodde schemaer er ikke rammet.
Fiksen er trivielt enkel: én linje som strippet ikke-ordtegn før stringen nåes Function-konstruktøren: jsname = name.replace(/\W/g, "");. Men som Endor skriver: «exploitation is trivial as soon as a poisoned file is in memory.»
Hva bør du gjøre?
- Kjør
npm ls protobufjsi alle Node-prosjekter og oppdater til^8.0.1eller^7.5.5. Husk transitive avhengigheter — gRPC-verktøy, Firebase-SDK-er og KI-agentrammeverk drar ofte inn biblioteket indirekte. - Identifiser kode som aksepterer eksterne schemaer. Hvis du har en agent som laster .proto-filer fra brukerens repo eller via MCP, må oppgraderingen skje i dag.
- Audit gRPC reflection-endepunkter. Hvis de er eksponert mot nett, slå dem av i produksjon uansett — dette hullet er en påminnelse om hvorfor.
Bakgrunn
Dette er et klassisk tilfelle av dev-tool-as-execution-primitive: Verktøy designet for å gjøre utvikleres liv enklere (som dynamisk kode-generering fra schemaer) blir angrepsflate når input-validering er antatt heller enn skrevet. Mønsteret dukker opp jevnlig i ORM-er, template-motorer og i KI-verktøy som parser konfigurasjoner fra uklarerte kilder.