Live data from Hacker News

Chrome 0-day exploit used in Operation WizardOpium

securelist.com

141–150 of 159 posts

Re: Chrome 0-day exploit used in Operation WizardOpium

#141

Earlier quoted context omitted.

Javascript, that the exploit uses, is a memory safe language too, at lest in theory... None of the languages around, that are in major production use, are really completely memory safe in practise. There is always a runtime lurking under it, most times a libc (not in Go tho, IIRC) and assortment of various libraries written in memory unsafe languages and always a kernel. While it's probably harder to exploit Go, as,…

Javascript is used to perform the exploit. The renderer, where the vulnerable code exists (I assume), is C++. The problem with protecting a C++ codebase like a JS renderer is that the attacker has HUGE amounts of control. They can literally already execute arbitrary code in the renderer, making information leaks and other techniques much easier. ASLR was never intended to protect against an attacker with such a level…

> Javascript is used to perform the exploit. The renderer, where the vulnerable code exists (I assume), is C++.

Yes, that way my point. There is a runtime and/or VM and/or stdlib under these "memory safe" languages and these things are never fully written in memory safe languages themselves, at least as far as the current state of affairs goes. And even then, they run on insecure hardware (rowhammer and spectre anybody?).

Would using a language with better memory safety and other guarantees like Rust be better to write these things? Most certainly, as the attack surface becomes smaller and e.g. Rust would prevent a lot of programming mistakes in the first place. Would that be a complete silver bullet, tho? Nope.

So I agree with you that using a language with C++ isn't exactly "optimal" to implement these runtimes that are meant to run untrusted code. I just didn't like that the OP declared "memory safe languages like Go" to be a silver bullet.

>ASLR was never intended to protect against an attacker with such a level of control.

ASLR is not a protection. It's an additional roadblock put in place to make things harder for attackers once shit already hit the fan.

Re: Chrome 0-day exploit used in Operation WizardOpium

#142

Earlier quoted context omitted.

Javascript is used to perform the exploit. The renderer, where the vulnerable code exists (I assume), is C++. The problem with protecting a C++ codebase like a JS renderer is that the attacker has HUGE amounts of control. They can literally already execute arbitrary code in the renderer, making information leaks and other techniques much easier. ASLR was never intended to protect against an attacker with such a level…

> Javascript is used to perform the exploit. The renderer, where the vulnerable code exists (I assume), is C++. Yes, that way my point. There is a runtime and/or VM and/or stdlib under these "memory safe" languages and these things are never fully written in memory safe languages themselves, at least as far as the current state of affairs goes. And even then, they run on insecure hardware (rowhammer and spectre anybo…

Oh, I see. I misunderstood your point.

> Would that be a complete silver bullet, tho? Nope.

I don't think anyone would disagree!

> So I agree with you that using a language with C++ isn't exactly "optimal"

Yeah, I think the distinction here is that I don't consider it "suboptimal" I consider it to be an absolute disaster. I would call rust "suboptimal" in that the language contains some soundness holes and the stdlib contains unsafe - issues, but practically still a massive improvement.

Re: Chrome 0-day exploit used in Operation WizardOpium

#143

Earlier quoted context omitted.

But not in Rust. Go isn't exactly a bastion of safety. It's memory safe due to the GC, but it has a weak type system, so logic bugs are not well guarded against.

> It's memory safe due to the GC That gets debatable as soon as you start using concurrency, like I said. There are idiomatic patterns in concurrent Go that are very much not safe.

What do you mean?

It has a GC, right? So use-after-free is impossible, no?

Re: Chrome 0-day exploit used in Operation WizardOpium

#144
post #112

Earlier quoted context omitted.

I never heard undefined behavior in Go like your example. This would means that not synchronizing a slice would lead to memory corruption. Please give us a code example.

Here's a blog post from Russ Cox (Go core team) explaining it: https://research.swtch.com/gorace

[deleted]

Re: Chrome 0-day exploit used in Operation WizardOpium

#145

Earlier quoted context omitted.

Javascript is used to perform the exploit. The renderer, where the vulnerable code exists (I assume), is C++. The problem with protecting a C++ codebase like a JS renderer is that the attacker has HUGE amounts of control. They can literally already execute arbitrary code in the renderer, making information leaks and other techniques much easier. ASLR was never intended to protect against an attacker with such a level…

> Javascript is used to perform the exploit. The renderer, where the vulnerable code exists (I assume), is C++. Yes, that way my point. There is a runtime and/or VM and/or stdlib under these "memory safe" languages and these things are never fully written in memory safe languages themselves, at least as far as the current state of affairs goes. And even then, they run on insecure hardware (rowhammer and spectre anybo…

> There is a runtime and/or VM and/or stdlib under these "memory safe" languages and these things are never fully written in memory safe languages themselves, at least as far as the current state of affairs goes.

The ideal solution is to go beyond safe languages, and use formally verified compilers and interpreters.

'CompCert', for instance, is a formally verified C compiler [0]. (Strictly, it's a compiler for a very-nearly-complete subset of standard C.) (As an aside, I Googled for a formally verified Ada compiler, but I couldn't see any sign of one. I find that surprising.)

No reason the same couldn't be done for Rust, and/or its standard library. Would be a lot of work, of course, but it would close the door on some of the bugs you have in mind.

It wouldn't save you from operating-system bugs, but formally verified operating systems are a possibility too. [1]

> And even then, they run on insecure hardware (rowhammer and spectre anybody?).

True, but I think it's safe to say that insecure hardware isn't usually near the top of our practical security concerns. I imagine one can greatly reduce the risk of such vulnerabilities if high-performance isn't required, and AMD/Intel aren't the only options.

[0] http://compcert.inria.fr/compcert-C.html

[1] https://sel4.systems/About/seL4/

Re: Chrome 0-day exploit used in Operation WizardOpium

#146
post #115

Earlier quoted context omitted.

What do you mean? If you don't use unsafe package you can't have the same problem as C/C++ so it is memory safe. The bug in Chrome can't happen in Go without unsafe usage.

That is categorically not true. Go compiles down to machine code, it has a stack and heap, it has structures on that stack and heap, and it has data races; those are all of the required components for a use after free. You can have data races compiled by the stock go compiler without the use of unsafe (also, why have race detector tooling if this is false?). It would probably be easier to exploit than here even becau…

Having race data in your Go code doesn't mean it will be exploitable like C or C++. Same reason with Java / C# when you don't use native code.

Re: Chrome 0-day exploit used in Operation WizardOpium

#147
post #70

I know this is a bit a pet peeve of mine, (and not a very popular opinion) but I think the browsers are doing too much, and WebAudio is a very good example of that. Instead of standardizing something low-level to input/output audio and query the hardware, like an OS; it standardizes soooo many things and filters, including downmixers, panners, quadfilters and Convolution (for reverbs); which is where the issue is in…

You'd be right about Firefox or IE, but that's not the case with Chrome, because Chromium OS is a thing. Google is building an OS, not just a browser.

Re: Chrome 0-day exploit used in Operation WizardOpium

#148

Earlier quoted context omitted.

> It's memory safe due to the GC That gets debatable as soon as you start using concurrency, like I said. There are idiomatic patterns in concurrent Go that are very much not safe.

What do you mean? It has a GC, right? So use-after-free is impossible, no?

Serious question - has that been verified, especially with regards to concurrency? Also does it rely on the assumption that GC implementions such as Java's are bug-free in this regard, and if so - has that been verified as well?

Re: Chrome 0-day exploit used in Operation WizardOpium

#150
post #45

Funnily enough, looks like the vulnerability was introduced by a (korean?) samsung engineer. fix: https://chromium-review.googlesource.com/c/chromium/src/+/18... git blame: https://chromium.googlesource.com/chromium/src.git/+/e1fa6d4...

Didn't the article say the explot is hosted on a Korean portal? I assume this means they target mostly Korean users, which probably means the hackers themselves are Korean.
Post reply on HN