Remotely send Chrome and Node.js into infinite loops via OS X kernel bug
blog.sandstorm.io
blog.sandstorm.io
Yep.
It was definitely there before XP, at least since 2002.
But I can understand why you wrote what you wrote. Early XP experience for many remains repressed memory, because it was quite buggy (be it OS itself or drivers delivered with it, BSODs were a norm), far from stable 2000 SP4, which I kept using for a long time. XP around SP2 (August 25, 2004) got usable.
ON *:join:#: {
/run c:\winnuke.exe $gettok($address,2,64)
}we do not break user space
If an application is utilizing a bug, it is not a bug but a feature
On the one hand you're changing an API, which is a promise to userspace. On the other hand, no one was using it right leading to most networking apps being vulnerable to a DOS.
Given the proven risk and how little the feature is used, changing the API to match what people THINK it does seems sane.
I have a vague memory or Linus making a similar 'change it' decision once.
Alternatively glibc could change it, as glibc almost seems to want to break existing programs.
Seems like they change stuff all the time. Especially on iOS.
On the other hand, developers for OS X and iOS are often willing to expend enormous amounts of effort to keep their apps working.
"The moral of the story? Confusing APIs are a security problem. If many users of your API get it wrong in a way that introduces a security bug, that’s a bug in your API, not their code."
Aren't I/O completion ports fairly analogous to kqueue?
One advantage of the aio model is that it at least theoretically allows "non-blocking" I/O of a normal disk file, whereas none of the polling-based systems I am aware of work with regular files. However, at least on Linux the kernel aio is notoriously fidgety (as it still may block the process if you take certain kinds of page cache misses; the solution is apparently to use O_DIRECT to bypass the page cache which has its own bag of problems), and most people fall back to using blocking reads with thread pools, or something like libeio or libuv that handles all that crap for you. (There's also the POSIX AIO that's built into glibc, but that done entirely in userspace [presumably with thread pools] and uses signal-based completion notification, which is kind of gross and probably pretty slow if you have a ton of I/O events happening.)
I can't quite comprehend how the implementation got so screwed up in the first place. A two byte field in every header, supposed to be a pointer to designate a range of data, OBVIOUSLY when it's set it should transmit exactly one byte of information.
More likely, I suspect, would be a gradual move to deprecate OOB data. It's a poorly designed wart on TCP.
Some places where msg_control is used for TCP/IP sockets (at least in Linux) include kernel timestamping of messages. This is "out of band" data, but it is out of band to the kernel, not the network peer.
It's pretty confusing.
And regarding the fix, which do you propose, change the spec or change the majority of implementations?
It may offend the sensibilities but we're stuck with the current state of affairs for the life of TCP I think.
This means that if your Node.JS app was behind a http proxy that's not vulnerable, like nginx+passenger, you would've been safe. Just a TCP pass-through would leave you vulnerable though.
All theory of course, since no one is really running a Node.JS server on OSX.. right?
0] http://www.serverframework.com/asynchronousevents/2011/10/ou...
(Incidentally, a bug like this was what got me to switch from Netscape to Internet Explorer back in 2000. Doubleclick ran an ad that included some Javascript which locked up Netscape and hung the browser entirely, blocking roughly 40% of the Internet for me. At that point I was like "This is ridiculous, fix your damn software Netscape" and switched.)
How about "reURGitate"? It plays on URG, and regurgitate is something you can do forever.
I can reproduce the bug on Mavericks and Chrome 41.0.2272.118 after the 2014-004 update for Mavericks.
If the bug in any way threatened data integrity or confidentiality, then yeah, they should backport it. But for a DoS, I can see the case for not really caring.
FWIW, for many of the bugs patched today, Apple did in fact backport to Mavericks and even Mountain Lion, so it seems like they haven't completely abandoned old versions.
(Disabling Flash helped)
They could implement resource limits and stop consuming more resources once those limits are reached.
In any case, DoS attacks exist yet don't seem to be a big problem in practice, probably because there's not much in it for the attacker.
(My single core Mac Mini works fine as a media/file server, but cant upgrade past 10.6.something...)
I know companies can't support old software forever though. I also know Apple has their hardware and software coupled fairly tightly so it may not be as simple as simply basing it on resource constraints the way Windows does. But client security is more important than ever and last I checked Apple won't commit to publishing support timelines which doesn't strike me as very fair if you're trying to make an informed decision when purchasing something. It would be nice if they were able to strike a balance between how they do things and Microsoft's noble but certainly expensive and painful commitment to backwards compatibility.
All that said, I have multiple Macs and I love them.