HNNewShowAskJobs
Built with Tanstack Start
RCE Vulnerability in React and Next.js(github.com)
167 points by rayhaanj 4 hours ago | 47 comments
  • coffeecodersan hour ago

    This vulnerability is basically the worst-case version of what people have been warning about since RSC/server actions were introduced.

    The server was deserializing untrusted input from the client directly into module+export name lookups, and then invoking whatever the client asked for (without verifying that metadata.name was an own property).

        return moduleExports[metadata.name]
    
    
    We can patch hasOwnProperty and tighten the deserializer, but there is deeper issue. React never really acknowledged that it was building an RPC layer. If you look at actual RPC frameworks like gPRC or even old school SOAP, they all start with schemas, explicit service definitions and a bunch of tooling to prevent boundary confusion. React went the opposite way: the API surface is whatever your bundler can see, and the endpoint is whatever the client asks for.

    My guess is this won't be the last time we see security fallout from that design choice. Not because React is sloppy, but because it’s trying to solve a problem category that traditionally requires explicitness, not magic.

    • j4538 minutes ago |parent

      For the layperson, does this mean this approach and everything that doesn't use it is not secure?

      Building a private, out of date repo doesn't seem great either.

      • coffeecoders32 minutes ago |parent

        Not quite. This isn’t saying React or Next.js are fundamentally insecure in general.

        The problem is this specific "call whatever server code the client asks" pattern. Traditional APIs with defined endpoints don’t have that issue.

  • embedding-shape3 hours ago

    From Facebook/Meta: https://www.facebook.com/security/advisories/cve-2025-55182

    > A pre-authentication remote code execution vulnerability exists in React Server Components versions 19.0.0, 19.1.0, 19.1.1, and 19.2.0 including the following packages: react-server-dom-parcel, react-server-dom-turbopack, and react-server-dom-webpack. The vulnerable code unsafely deserializes payloads from HTTP requests to Server Function endpoints.

    React's own words: https://react.dev/blog/2025/12/03/critical-security-vulnerab...

    > React Server Functions allow a client to call a function on a server. React provides integration points and tools that frameworks and bundlers use to help React code run on both the client and the server. React translates requests on the client into HTTP requests which are forwarded to a server. On the server, React translates the HTTP request into a function call and returns the needed data to the client.

    > An unauthenticated attacker could craft a malicious HTTP request to any Server Function endpoint that, when deserialized by React, achieves remote code execution on the server. Further details of the vulnerability will be provided after the rollout of the fix is complete.

    • filearts2 hours ago |parent

      Given that the fix appears to be to look for own properties, the attack was likely to reference prototype level module properties or the gift-that-keeps-giving the that is __proto__.

  • benmmurphy2 hours ago

    I suspect the commit to fix is:

    https://github.com/facebook/react/commit/bbed0b0ee64b89353a4...

    and it looks like its been squashed with some other stuff to hide it or maybe there are other problems as well.

    this pattern appears 4 times and looks like it is reducing the functions that are exposed to the 'whitelist'. i presume the modules have dangerous functions in the prototype chain and clients were able to invoke them.

          -  return moduleExports[metadata.name];
          +  if (hasOwnProperty.call(moduleExports, metadata.name)) {
          +    return moduleExports[metadata.name];
          +  }
          +  return (undefined: any);
    • hackhomelab2 hours ago |parent

      It could also be https://github.com/facebook/react/commit/7dc903cd29dac55efb4... ("This also fixes a critical security vulnerability.")

      • nine_k2 hours ago |parent

        It does the same thing here, too: https://github.com/facebook/react/commit/7dc903cd29dac55efb4...

  • karimfan hour ago

    > Projects hosted on Vercel benefit from platform-level protections that already block malicious request patterns associated with this issue.

    https://vercel.com/changelog/cve-2025-55182

    > Cloudflare WAF proactively protects against React vulnerability

    https://blog.cloudflare.com/waf-rules-react-vulnerability/

    • serhalp24 minutes ago |parent

      Same for Netlify: https://www.netlify.com/changelog/2025-12-03-react-security-...

      and Deno Deploy/Subhosting: https://deno.com/blog/react-server-functions-rce

    • Rauchgan hour ago |parent

      We collaborated with many industry partners to proactively deploy mitigations due to the severity of the issue.

      We still strongly recommend everyone to upgrade their Next, React, and other React meta-frameworks (peer)dependencies immediately.

      • semiquaver17 minutes ago |parent

        Does AWS WAF have a mitigation in place?

  • phelm3 hours ago

    More detail in the React Blog post here https://react.dev/blog/2025/12/03/critical-security-vulnerab...

  • AgentK203 hours ago

    CVE 10.0 is bonkers for a project this widely used

    • nine_k2 hours ago |parent

      The packages affected, like [1], literally say:

      > Experimental React Flight bindings for DOM using Webpack.

      > Use it at your own risk.

      311,955 weekly downloads though :-|

      [1]: https://www.npmjs.com/package/react-server-dom-webpack

      • ascorbican hour ago |parent

        That number is misleadingly low, because it doesn't include Next.js which bundles the dependency. Almost all usage in the wild will be Next.js, plus a few using the experimental React Router support.

    • j4535 minutes ago |parent

      The subjects of theses types of posts should report the CVSS severity as 10.0 so the PR speak can't simply deflect to what needs to be done.

    • rs_rs_rs_rs_rs2 hours ago |parent

      React is widely used, react server components not so much.

      • _jab2 hours ago |parent

        Next.js is still pretty damn widely used.

  • dzongaan hour ago

    till this day, I don't know the substantial benefits of React Server Components over say classically rendered html pages + using htmx ?

    mind you react in 2017 paid my rent. now cz of the complexity I refuse to work with react.

    • switz35 minutes ago |parent

      They lend you optionality of when and where you want your code to run. Plus it enables you to define the server/client network boundary where you see fit and cross that boundary seamlessly.

      It's totally fine to say you don't understand why they have benefits, but it really irks me when people exclaim they have no value or exist just for complexity's sake. There's no system for web development that provides the developer with more grounded flexibility than RSCs. I wrote a blog post about this[0].

      To answer your question, htmx solves this by leaning on the server immensely. It doesn't provide a complete client-side framework when you need it. RSCs allow both the server and the client to co-exist, simply composing between the two while maintaining the full power of each.

      [0] https://saewitz.com/server-components-give-you-optionality

    • AstroBen30 minutes ago |parent

      You can optionally enhance it and use React on the client. Doing that with HTMX is doable with "islands" but a bit more of a pain in the ass - and you'll struggle hard if you attempt to share client state across pages. Actually there are just a lot of little gotchas with the htmx approach

      I mean it's a lot of complexity but ideally you shouldn't bring it in unless you actually need it. These solutions do solve real problems. The only issue is people try to use it everywhere. I don't use RSC, standard SPAs are fine for my projects and simpler

    • nonethewiseran hour ago |parent

      easier/more reactivity, doesnt require your api responses to be text parsable to html

    • leptons34 minutes ago |parent

      >now cz of the complexity I refuse to work with react.

      What do you like to work with now?

  • kachapopopow4 minutes ago

    static builds save the day.

  • croemeran hour ago

    Link should go to: https://react.dev/blog/2025/12/03/critical-security-vulnerab...

  • c-hendricksan hour ago

    Anyone know how Tanstack Start isn't affected?

    • serhalp19 minutes ago |parent

      TanStack Start has its own implementation of Server Functions: https://tanstack.com/start/latest/docs/framework/solid/guide.... It doesn't use React Server Functions, in part because it intends to be agnostic of the rendering framework (it currently supports React and Solid).

      To be fair, they also haven't released (even experimental) RSC support yet, so maybe they lucked out on timing here.

    • dimitrisnl23 minutes ago |parent

      They haven't implemented RSC yet.

  • javakingan hour ago

    I'm not a javascript person so I was trying to understand this. if i get it right this is basically a way to avoid writing backend APIs and manually calling them with fetch or axios as someone traditionally would do. The closest comparison my basic java backend brain can make is dynamically generating APIs at runtime using reflection, which is something I would never do... I'm lazy but not dumb

  • nickthegreek3 hours ago

    dupe: https://news.ycombinator.com/item?id=46136067

    • anonymars2 hours ago |parent

      Hey, just wanted to thank you for your recommendation for The Rehearsal season 2. It was deep, funny, crazy, etc.

      Sorry for the off topic, but figured this would be the least offensive spot to commit the faux pas

  • bitbasher3 hours ago

    It's almost like trying to magically wire up your frontend to the backend through magical functions is a bad idea.

    • beders2 hours ago |parent

      One could get the impression that the only really really important non-functional requirement for such a thing is to absolutely ensure that you can only call the "good" functions with the "good" payload.

    • dizlexic2 hours ago |parent

      ikr, no way this could have been predicted and warned about for months and months before now.

    • bossyTeacher2 hours ago |parent

      CV driven development needs new ideas for resume padding regardless of whether the idea is good or bad. Then you get this

    • baiwl3 hours ago |parent

      Look at the money they’ve made to see if it was a bad idea or not.

      • bitbasher2 hours ago |parent

        I don't think money is a good proxy for idea quality. AI? Blockchain? Crime in general? Plenty of bad ideas make a whole lot of money.

        • dizlexic2 hours ago |parent

          Enron made boat loads.

  • ajross3 hours ago

    The CVE says the that flaw is in React Server Components, which implies strongly that this is a RCE on the backend (!!), not the client.

    • padjoan hour ago |parent

      Where else would it be? What would an RCE of the client even mean?

      • cyptus15 minutes ago |parent

        it would be an RCE on your own machine :D

  • dizlexic2 hours ago

    AHAHAHAHAHA, I'm sorry but we all knew this would happen.

    I'm just laughing because I called it when they were in the "random idea x posts" about use server.

    They'll fix it, but this was what we were warning about.

    edit: downvote if you want, but I'm sorry React thinking they could shoehorn "use server" in and not create huge vulnerabilities was a pipe dream at best. I vote gross negligence because EVERYONE knew this was going to happen.

    • cluckindan2 hours ago |parent

      This is not related to ”use server”. That’s used to mark Server Actions / Server Functions, and it is not necessarily used in files with Server Components.

      • ptxan hour ago |parent

        It sounds related to me. The react.dev blog post [1] says that the vulnerability is

        > a flaw in how React decodes payloads sent to React Server Function endpoints

        and the react.dev docs for React Server Functions [2] say that

        > Server Components can define Server Functions with the "use server" directive [...] Client Components can import Server Functions from files that use the "use server" directive

        So it certainly sounds like the vulnerability is related to React Server Functions which are related to "use server".

        [1] https://react.dev/blog/2025/12/03/critical-security-vulnerab...

        [2] https://react.dev/reference/rsc/server-functions

        • cluckindanan hour ago |parent

          No. You cannot find all vulnerable code by grepping for ”use server”, for instance.

          • dizlexic8 minutes ago |parent

            So that’s your “it’s not related to use server” argument?

            That seems like it could be a quote from their hardening guide.