From object transition to RCE in the Chrome renderer
github.blog
github.blog
Obviously ASLR specifically is pretty weak these days, but the idea is the same (and also it’s still important - this is very much along the lines of “I have seatbelts why do I need airbags”
Or maybe it was never really secure and it was just good marketing?
I think it’s also partly Google’s very open culture on CVEs that means they are discovered and reported on promptly. It’s difficult to tell how much it’s just increases awareness that browsers are full of holes and whether the holes are increasing in size/frequency tbh.
I would say there were three trends that happened at the same time that really made a difference:
- People now actually update their web browser, and yes, started to ignore the browser vendor that wasn't shipping them (IE). Driveby download exploits started to disappear.
- Flash and Java went from enabled by default to prompt-first. Flash was later abandoned, and IcedTea-Web / Java Web Start had its core functionality gutted in later Java versions.
- No support for ActiveX at all, unless you wanted to go for IE Frame (Chrome and IE tabs under a Chrome interface) or Chrome Frame (IE and Chrome tabs under an IE interface), which quickly faded into corporate Intranet obscurity
All three saved us from a much worse future.
So the code is running in a process that runs as the same user running the browser. That's no longer much of a sandbox and you're now relying on the OS to protect your data, right?
https://chromium.googlesource.com/chromium/src/+/HEAD/docs/d...
> If successful, on Ubuntu 22.04, it should call launch xcalc when calc.html is opened in Chrome.
Then how does this work? It doesn't look like the provided build flags disable any sandbox that the distributed build doesn't.
However, Chrome is an operating system unto itself. It's more than 40 million lines of code comprising of complex intertwined systems. It's a miracle there are so few CVEs
Who in their right mind thinks it makes sense to have a desktop screen sharing system... built into a browser?
Goes to show the level of sophistication and technical skill of this RCE rabbit whole.
Well done.
At what point is replacement the right answer?
There are some promising browser engines in development right now: Servo / Verso, and Ladybird. Some discussions from the past few days:
Verso – Web browser built on top of the Servo web engine | 806 points | 319 comments | https://news.ycombinator.com/item?id=41215727
Ladybird browser to start using Swift language this fall | 200 points | 196 comments | https://news.ycombinator.com/item?id=41208836
- $168615 awarded to security researchers and unknown $X in TBD bounties
I sure hope they're refactoring parts of the codebase to leverage memory-safe languages.
rust, since its syntax has the same toxic complexity than c++, not really worth it.
But the real solution is to restore noscript/basic (x)html where reasonable.
That said, you perfectly can have a big program, actually one window with tabs (chromebooks), handling various network protocols (URLs are nice, irc:// etc), or system interaction.
That said, I gave some thoughts of that thing which would be simpler and stable in time: a light javascript engine with very basic OS functions, and I mean very basic (namely _NOT_ google AMP).
Namely, a dynamic viewport into a "framebuffer" surface 10bits RGB, and very, _VERY_, few "acceleration objects" (i18n text shapper/video decoder/blitter/network/etc), fully event based with support of multi-threading (explicit locking only, and very basic sync primitives). Namely RIP CSS and 99.99% of the insanity which became the "scripted DOM". On low-end hardware, this may be too slow to render, so this would have to be tested, we are talking heavy R&D with an outcome being very likely a failure.
I was lurking on quickjs from Mr. Bellard friends (ffmpeg/qemu/tinycc/etc) while giving some thoughs about this.
There is some kind of alternative beyond restoring noscript/basic (x)html portals (with proper network protection, ofc) though: regulation on the network protocols of critical services: namely regulated publishing of versioned (but very stable in time), straight to the point, simpler to parse than basic (x)html, noscript, rigorously defined protocols, basically a RFC (txt format), easily and readily availably on internet ("HTTP curl" would download it, and search engines would index this document and list it).
For instance, in my city there is a public service of electric bikes, the network protocol should be public (with the features I did describe above) to allow all past/present/future/small/big/etc platforms to work, instead of _ONLY_ google and apple apps (or their web engines... which is no better). For instance HTTP with a very simple json based format.
The main threats are those guys... you know those who would push over-complicated and badly defined network protocols and delirious dependencies (ultra complex parser? gigantic script engine?)
https://security.googleblog.com/2023/01/supporting-use-of-ru...
https://chromium.googlesource.com/chromium/src/+/refs/heads/...