Open source React executes malicious code with malformed HTML—no authentication needed.
See full article...
See full article...
That is exactly what it is: if you enable server-side rendering of your page, that's apparently when the vulnerability exists with if I read it correctly. When rendering on client side, you send a simple skeleton page with a great deal of (combined and minified) javascript code.Can you elaborate on the server side vs client side nature of this exploit? Our servers run java and tomcat, not react, but some of the web pages we have are "react".
Edit:
I "looked up" some info here, but it seems you can run REACT as client side rendering. I am not your security professional, but it seems like client side isn't included here, nor would screwing up the end users computer harm the server.
Even when running React clientside, you might want to have server-side rendering enabled for accessibility and crawlers.That is how you SHOULD run it. Its a freaking client (i.e. browser) framework for rendering User Interfaces.
Its only the janky "lets run client side code on the server" that is having the issue.
As someone who has done some front and back end coding, who has on several occasion acted as a proxy for someone with a WordPress website and has occasionally lifted the lid to look at the inner workings of PHP frameworks, and someone who's an active user of NodeJS (and npm/pnpm), JS-in-the-browser and is happy to be not compelled to learn, use or even touch React, I have to, essentially, contradict this opinion.React gives JS a bad name.
NPM gives JS a bad name.
Tailwind gives CSS a bad name.
Wordpress gives PHP a bad name.
I wish these 8 week coding workshop, AI deferring junior developers would learn the actual platform instead of imitating these hype filled slopfluencers.
Please, don't take a hype filled shiny shortcut.
Learn the actual platform and you don't need to reach for these hollow tools that break within a year.
Right. Nobody but popular JavaScript frameworks ever had deserialization vulnerabilities.Coincidentally, all the popular JavaScript-based frameworks seem to have a "bad name" when it comes to implementing secure, maintainable and robust code.
If only we could work out what the common denominator was, we could do something about it.
You know, a place I used to work didn't like the idea of paying for backup. You know, because it was an expensive investment. I tried to explain how chosing not to do backups might prove to be more expensive.If you own a company that develops any type of website or web application, you really should have knowledgeable folks that stay on top of stuff like this.
While most shops I have worked with do have some capacity for this, many don’t and consider such things to be low priority.
It may surprise some here, but even financial companies in charge of your money are slow to resolve security issues. Think months, and sometimes years.
Oh great, I was sure I was unaffected but now I am no longer so sure. The full list of third party software that embeds React is probably loooong.Is there any way to know whether a web server has it embedded? For example, the web server running on my NAS?
I work in state-government level IT fairly high up, and we DO have both people and capacity for this. But - and I cannot stress this enough - it also relies on dev teams to know and check their own repos and codebases... Because sometimes BOTH are needed.If you own a company that develops any type of website or web application, you really should have knowledgeable folks that stay on top of stuff like this.
While most shops I have worked with do have some capacity for this, many don’t and consider such things to be low priority.
It may surprise some here, but even financial companies in charge of your money are slow to resolve security issues. Think months, and sometimes years.
How the heck do you pronounce that? Is it vul-ens? Vul-nas?It's incredibly common to call security vulnerabilities "vulns" in programming and technical areas.
You mean other than getting the most basic info wrong? This statement: "React versions 19.0.1, 19.1.2, or 19.2.1 contain the vulnerable code." is false - those are the patched versions. From the linked aikido.dev page (as well as other sources):BTW - Ars team - thank you again for a good vulnerability writeup - I saw this news from several other sources, but once again, Ars writeup is the one I find both comprehensive enough, useful enough - and trusted enough - to share with my teams.
Install a patched React version such as 19.0.1, 19.1.2, or 19.2.1. These include hardened input handling.
However you pronounce the first part of vulnerability and pluralise it by sticking an s on the end. Not trying to be funny, I just don't know what dialect of English you speak.How the heck do you pronounce that? Is it vul-ens? Vul-nas?
The abbreviation of words by insiders is not an excuse for foisting gibberish on the general public. I saw this story on Apple News and thought it was a mistake.
Its not just Patch Tuesday anymore.... Zero-Day is more like Minus One Day.And now we get to see who reacts fastest.
IMPORTANT: This repository is an unsuccessful attempt to understand and replicate CVE-2025-55182 using Claude. The PoC turned out to be intentionally insecure and does NOT represent exploitation of CVE-2025-55182. (see issue #1)
THIS IS NOT A REAL POC - EDUCATIONAL ONLY
Why This Doesn't Work
The PoC explicitly registers dangerous modules (fs, child_process, vm) in the server manifest - something real applications never do. In real React Server Components The manifest is build-time generated - only contains legitimate Server Actions.
So you're saying in addition to React.js people should be running Proact.js?These days - you have to be both reactive and proactive. There is no other way to stay uncompromised.
SSR is needed for SEO and good initial render times. Legacy technologies have been able to fetch enough data quickly enough for a full server render for decades now. The problem in my experience is that current meta-frameworks try and replace server-side frameworks like express and nest rather than compliment them.The entire react ecosystem has been pushing towoards server side rendering by default over the last few years.
React was and is primarily a client side framework for developing UIs easier and faster (not faster as in execution, faster to develop the site. Execution speed is an ancillary concern that other frameworks address better).
However some big players, namely vercel (owner of Nextjs) have been pushing everyone towards SSR. Presumably so they can sell their cloud offering which will host your React SSR project.
This has changed the APIs of react and a lot of the tooling because SSR has a set of constraints that are different from pure client side JS.
In reality SSR is only useful for websites whose content changes infrequently relative to how often the content is read. Thats because of what static site rendering is: some change in data triggers a re creation of static html pages and those pages can be cached and replicated using services like Cloudfront. Meaning your clients never have to talk directly to the APIs that deliver the data. Thus reducing the load on those servers as well. if your data changes often then you ve just added an HTML generation step that adds overhead to what could be a much faster direct call for the data.
So a blog site or a news site are a perfect fit. While something like Google maps is the nightmare scenario. In short, the more dynamic you website is the less useful SSR is.
The best practices these days assume you should start with SSR by default. Even though this is a much more complex setup. Which means a lot of react beginners reach for SSR even though it doesn't fit the use case. After all, if everyone is recommending it, not using SSR will seem the riskier choice.
I see very dynamic websites (ie: lots of calls to data that cannot be done ahead of time) that have SSR only so they can deliver an uninteractive 'skeleton' of a page (headers, footers, nav bar) while the data loads because they think users will feel that's faster than showing a loading spinner. It's like if at a restaurant, instead of waiting for your food, the waiter hands you a picture of what food looks like while you wait. Users aren't that dumb.
I think a situation like this is a good reminder to only use a tech if it actually fits your use case, not because it's in the zeitgeist.
You know what else works for SEO and good initial render times? HTML.SSR is needed for SEO and good initial render times. Legacy technologies have been able to fetch enough data quickly enough for a full server render for decades now. The problem in my experience is that current meta-frameworks try and replace server-side frameworks like express and nest rather than compliment them.
Wow, so you want to generate html on the server side and then send it to the client?You know what else works for SEO and good initial render times? HTML.
Ah I forgot about SEO. I usually work on web apps that have no SEO requirement so that is a blindspot for me. However lower initial load times goes back to my restaurant analogy. It only matters if users can actually accomplish a task while other content is loading. Unless you meant that low initial load is also a metric for SEO?SSR is needed for SEO and good initial render times. Legacy technologies have been able to fetch enough data quickly enough for a full server render for decades now. The problem in my experience is that current meta-frameworks try and replace server-side frameworks like express and nest rather than compliment them.
I think you're right. I mixed up static site generation with server side rendering. Doh.People here seem to have quite a few misconceptions regarding client vs server and static site generation vs server etc. see my https://mastrojs.github.io/guide/cl...ide-javascript-static-vs-ondemand-spa-vs-mpa/
what’s even more confusing is that even when you only look at react with a running server (e.g. next.js) there is server-side rendering (which still loads everything into the client as well unfortunately) and the newer react server components (RSC), which do some remote-procedure-call thing. But if you’re running newer versions of next.js you’re vulnerable even if you’re not using RSC.
If you ask me, React in general, and next.js specifically, are really past their prime. it’s such a heavy and bloated ecosystem and there are more modern alternatives nowadays (Svelte, Solid.js for complex interactive SPAs if you really need that, and plain modern HTML/CSS for MPAs, which should be most websites).
That’s just a different syntax. JSX is a template language that’s “embedded” in the host language (JavaScript). Solid and Svelte really are pretty much 1:1 replacements, minus the ecosystem and mindshare of course, but much more efficient.Svelte/Solid/etc arent necessarily a 1 for 1 with React. They are all 'template' based
My cranky perspective (that I guess I have to spell out explicitly, since you and others seem to have missed it) is that these frameworks have abstracted server-side rendering of HTML so much that most younger devs I've dealt with don't even really think about what they're rendering.Wow, so you want to generate html on the server side and then send it to the client?
If only there was a name for that.
I couldn’t agree more! Because I’m still in the field, this is what compelled me to build https://mastrojs.github.io/My cranky perspective (that I guess I have to spell out explicitly, since you and others seem to have missed it) is that these frameworks have abstracted server-side rendering of HTML so much that most younger devs I've dealt with don't even really think about what they're rendering.
Templating with PHP and the like may be terrible in many respects but at least with it the HTML being produced was the result of human choices, not just blindly calling a function that spits out a chunk that can be styled but is typically filled with unnecessary nesting, non-semantic attribute values, etc.
Clearly there are reasons I no longer build front-ends for multi-billion dollar companies, but as far as I'm concerned we took a very wrong turn when the actual "Web 2.0" era was co-opted to become...this. There was a shining moment when we were moving to embrace the DOM with all its interoperability and transformation, and we could have had that without the JS framework BS that a few big players pushed out as they undercut the W3C. It didn't need to be XML/XSLT, but keeping the data as data and then transforming it with stylesheets that humans actually built would have been a better way to go. It's possible to do it with JSON and things like Handlebars but I usually see those used to make very minor elements of sites with needlessly bloated HTML coming out of frameworks.
I got out of the field a decade ago, so I'm sure there are lots of things people can point to as counter examples that I don't know about, but on a philosophical level I think we embraced the wrong approach for the wrong reasons.
Heh. I've looked at your project before but haven't had an excuse to download it!I couldn’t agree more! Because I’m still in the field, this is what compelled me to build https://mastrojs.github.io/
oh, cool! where did you come across it?Heh. I've looked at your project before but haven't had an excuse to download it!
That's a good question. Probably when I was looking into static site generation tools as a possible way to replace my WP blog, but since I never update it anyway that's been a largely moot point. (When I get HTML under my fingernails these days it's because I'm doing a side art project for myself, although I am easing into a consulting role that may become paid if I help them generate enough income with some people publishing with Ghost so I've been starting to dig into how theming works there.)oh, cool! where did you come across it?
good thing is you don’t even need to download it: https://github.dev/mastrojs/template-basic (this web-only version requires a github account though)
At a high level they are close replacements, but they are not the same. JSX transpiles to plain old javascript functions. A React component is a javascript function that returns another function. Rendering is execute the functions until there are no more functions to execute all you have is the HTML. Frameworks like Svelte process the code you write into HTML fragments and bind data to certain fragments (aka data binding / signaling). This allows more fine-grained updates (aka faster updates) but requires them to restrict how you write your components.That’s just a different syntax. JSX is a template language that’s “embedded” in the host language (JavaScript). Solid and Svelte really are pretty much 1:1 replacements, minus the ecosystem and mindshare of course, but much more efficient.
About the pronunciation: In the sonority hierarchy in linguistics, approximants like "l" are more sonorant than nasals like "n", and so it is natural to have "l" before "n" at the end of a syllable (but not vice versa; "vunl" would have to have two syllables).How the heck do you pronounce that? Is it vul-ens? Vul-nas?
The abbreviation of words by insiders is not an excuse for foisting gibberish on the general public. I saw this story on Apple News and thought it was a mistake.
It's identifying a risky pattern (like deserializing arbitrary objects) and seeing if they've accounted for the risks.How do human minds even discover vulns such as this?
26 months to go. I can coast in from hereI'm so glad that I am now a retired IT Manager
You’re going to need to provide some solid data, or at least a much better argument, if you’re going to make bold claims like: “…I can already tell it would be much harder to manage a 10+ person team with it compared to React, …”Angular v2+ and React are very similar, to the point where I would say that Google ditched what made Angular different and useful and just turned it into another React clone with a weird compiler at the beginning.
React used to need a lot of third-party libraries and frameworks, but as of React 18 I think you can pretty much get away without anything besides a UI library that handles all the intricacies of web accessibility and maybe one for internationalization to handle multiple languages. Everything else is either part of web standards now or has been brought in-house to the React project itself.
As part of that they also really stepped up linting and compile-time checks in the last few versions.
That said, my horse hasn't really been in the race for a bit. I'm trying out a small project in Vue and I can already tell it would be much harder to manage a 10+ person team with it compared to React, without just reimplementing React along the way.
And while I'm at it, even though Facebook is (or was) technically the "owner" of the project, I think it's Microsoft and outside devs that are really carrying it nowadays.
Hey, come on over to: Vue.js — we have cookies!I hated React so much that I just refused to learn it. I do shit the hard way by writing it from scratch without relying on a giant ass library that is controlled by one of the most evil companies in the world
what doesn’t?JSX transpiles to plain old javascript functions.
no, that’s a higher-order component. a react component is a function that returns a jsx object (and if it calls some hooks, it’s not pure anymore and not at all like plain js anymore).A React component is a javascript function that returns another function.
Don't expose your NAS to the public internet. While it might seem convenient, but just don't do it.Is there any way to know whether a web server has it embedded? For example, the web server running on my NAS?
Most templates don't transpile to functions and objects. They're fragments of HTML with some event handlers bound to elements. That's materially different than react's VDOM approach.what doesn’t?
A function that returns an object with a render function executed is to me the same as a function that returns a function. Ie: whether the chain is component1() returns component2() returns <div> or compontent1.render() returns component2.render() returns <div> isn't really different from each other.no, that’s a higher-order component. a react component is a function that returns a jsx object (and if it calls some hooks, it’s not pure anymore and not at all like plain js anymore).
That's kind of the entire point that I was making. That difference in syntax and more importantly, execution, is meaningful to me and how I prefer to write UI code. It's the reason I stick with React instead of moving over to other frameworks. Or at least the reason I look for other frameworks use React's draw strategy, even if I have to go to other languages eg ElmJS / Dioxus / Lustre.I wouldn’t get too hung up on the loop syntax. as you said, in solid you can even use .map and it will actually fall back to a vdom-like diffing for arrays.
JSX allows you to use JavaScript to control the logic flow in the templates. However, without a Virtual DOM, using things like Array.prototype.map would wastefully recreate all the DOM nodes on every update. Instead it is common for Reactive libraries to use template helpers. In Solid we wrap them in components.
You don't need SSR for SEO. Every search engine worth its salt renders client-side Javascript before crawling the page.SSR is needed for SEO