Slashdot Mirror


NULL Pointer Exploit Excites Researchers

Da Massive writes "Mark Dowd's paper "Application-Specific Attacks: Leveraging the ActionScript Virtual Machine" has alarmed researchers. It points out techniques that promise to open up a class of exploits and vulnerability research previously thought to be prohibitively difficult. Already, the small but growing group of Information Security experts who have had the chance to read and digest the contents of the paper are expressing an excited concern depending on how they are interpreting it. While the Flash vulnerability described in the paper[PDF] has been patched by Adobe, the presentation of a reliable exploit for NULL pointer dereferencing has the researchers who have read the paper fascinated. Thomas Ptacek has an explanation of Dowd's work, and Nathan McFeters at ZDNet is 'stunned by the technical details.'"

75 of 327 comments (clear)

  1. Aha! by Rik+Sweeney · · Score: 4, Funny

    So you CAN get something from nothing!

  2. The crux of the exploit: by Ethanol-fueled · · Score: 5, Informative

    "...Not this time. Flash forgets to check that allocation failed, a ludicrously common error. It then uses that pointer with an offset controlled by the attacker. NULL isn't valid. NULL plus 1024 isn't valud. But NULL + 0x8f71ba90 is, as is NULL + N for any N that addresses valid memory.

    To this address, controlled by attackers via wild offset, Flash writes a value that is also controlled by the attacker. This is the write32 pattern: a vulnerability that gives the attacker the means to set any one value in memory to a value of their choosing. Game over.

    The exploit doesn't actually get to offset an arbitrary number of bytes from 0. A complicated set of conditions constrains the address it writes to and the value it gives it.

    The the actual write occurs via a structure offset. Flash is hardcoded to translate your offset into another number. Working offsets, as it turns out, will be greater than 0x80000000, and will be evenly divisible by 12 after 4 is added to them. Note: I thought I was hardcore when I wrote shellcode with no lowercase letters for the IMAP vulnerability in the '90s.

    That's not all. The value that Flash will write to the wild pointer isn't totally controlled by the attacker either. It's cast up from a 16 bit integer to a 32 bit integer, and has another variable subtracted to it. This is the point in the report that I started giggling uncontrollably, embarassing myself at the coffee shop...

    ...The net result of this silliness is that it's hard to do what attackers normally do with a write32 vulnerability, which is to clobber a function's address with a pointer back to their buffer, so that their shellcode is called when the clobbered function is called. So Dowd's exploit takes things in a different direction, and manipulates the ActionScript bytecode state.

    To wit: his exploit must (because he's messing with us) corrupt the Flash runtime, rewrite it to execute his trojan, and leave it running steady as if nothing had happened. Meaning:

    --His modification to the verifier can't break existing instructions. --His bytecode has to swap values into the stack instead of clobbering them directly. --Portions of his shellcode have to run as both Flash bytecode and an X86 first-stage shellcode boot.

    Two fun details:
    First, even though IE and Firefox use different Flash builds, the addressing inside them is compatible. The exploit works in both places.
    Second, Flash isn't compiled with ASLR. So the attack works on Vista.
    Mass casualty. Go Flash!"

    1. Re:The crux of the exploit: by slapys · · Score: 5, Funny

      Dude. You are wise beyond your years. I hereby dub thee: the sensei of security.

    2. Re:The crux of the exploit: by jo42 · · Score: 3, Insightful

      So you would ban knives from the kitchen because they are sharp and can cut you?

      If you think Flash sucks now, wait until it is written in 100% Java.

    3. Re:The crux of the exploit: by martinmcc · · Score: 2, Informative

      That is just silly, and demonstrates a lack of understanding of programming. High level langauges with built in checks and safties are very useful in a lot of situations, but they do not meet the needs when precision and control of the underlaying hardware is required. Whether flash needs this level of control I do not know, but plenty of applications do.

      And, oh yes, WTF!!OMG!! - '...should be banned...'. Yeah, ban the filthy programming languages that don't babysit the programmer. While we are at it lets ban corners, very dangerous.

    4. Re:The crux of the exploit: by Rogerborg · · Score: 2, Informative

      The default C++ new does throw an exception rather than returning NULL, but don't let your ignorance of the language stop you from decrying it.

      --
      If you were blocking sigs, you wouldn't have to read this.
    5. Re:The crux of the exploit: by pla · · Score: 4, Insightful

      Assuming that Flash is made in C or C++, here is another very vivid example of why these languages should be banned.

      You do understand that all those nasty loosely-typed pointer-based exploits you and others disdain in C, exist because C nicely mirrors how the actual hardware handles similar concepts?


      If failure of allocation threw an exception, instead of just returning null, there would be no problem.

      And if programmers would check that the allocation succeeded, we would also have no problem.

      In your hypothetical "safe" language (C#, for example), I can't count how many times I've seen system calls wrapped in a try/catch to hide the exception, then carry on pretending the call worked just fine. Guess what? SAME DAMNED PROBLEM!



      Don't blame the pipe-wrench for making a poor hammer. Blame the craftsman too lazy to find a hammer.

    6. Re:The crux of the exploit: by hey! · · Score: 4, Insightful

      The kitchen? No. The Nursery? Might be a good idea.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    7. Re:The crux of the exploit: by Anonymous Coward · · Score: 2, Informative

      So you would ban knives from the kitchen because they are sharp and can cut you?

      If you think Flash sucks now, wait until it is written in 100% Java. And just what do you think the JVM is written in?

      Because underneath it all, the computer runs its native instructions. Period. The GP is a fucking moron if he thinks "throwing an exception" is a cure-all for insecure code. One guy develops a complicated NULL-pointer exploit that's valid in ONE virtual machine, and the GP reflexively supports banning C and C++.

      Probably because he's too stupid to code properly without having some virtual machine interpreter holding his dick.

      If you don't understand the consequences of the code you write, you're incompetent and in over your head. Banning specific languages won't improve your comprehension.
    8. Re:The crux of the exploit: by spir0 · · Score: 2, Insightful

      Assuming that Flash is made in C or C++, here is another very vivid example of why these languages should be banned. look, there's really no nice way of saying this, but ... well, you're an idiot.

      what should be banned are those useless coders who think that a language should do everything for you, thus making you lazy and bloated like your code.

      remember: you are in control of the machine, not the other way around.
      --
      The reason girls and Windows users don't understand UNIX is because all the documentation is in Man files.
    9. Re:The crux of the exploit: by Waffle+Iron · · Score: 3, Funny

      Furthermore, if you ban the low level languages, what are you going to write the high level language's byte-code interpreters in? Why, turtles of course. Turtles all the way down.
    10. Re:The crux of the exploit: by dargaud · · Score: 2, Interesting

      I don't know either flash or VMs in general, but in order for the attacker to return a fake value from a malloc call, shouldn't the attacker already have control to libc (in C) or to the internals of the VM in that case ? Meaning he already can do whatever he wants...

      --
      Non-Linux Penguins ?
    11. Re:The crux of the exploit: by T.E.D. · · Score: 2, Funny

      remember: you are in control of the machine, not the other way around.


      If you are coding in C, you won't be in control of the machine for long. :-)
    12. Re:The crux of the exploit: by Abcd1234 · · Score: 2, Insightful

      In your hypothetical "safe" language (C#, for example), I can't count how many times I've seen system calls wrapped in a try/catch to hide the exception, then carry on pretending the call worked just fine. Guess what? SAME DAMNED PROBLEM!

      Yeah, which is why you *don't catch exceptions you can't recover from*. It's a basic design tenant, and it's *easier* to do than fucking it up by incorrectly handling the error. Basically, in a language like C, you have two options:

      1) Check for the error and handle it, possibly incorrectly, leading to the problem you describe.
      2) Ignore the error, and your program could misbehave.

      An exception-based language gives you these options:

      1) Catch the error and handle it, possibly incorrectly, leading to the problem you describe.
      2) Ignore the error, and the program violently terminates.

      Gee, which one do you think is better from a security standpoint?

      Nope, sorry buddy, but *any* language that uses exceptions as the model for error indication will be superior, as far as security goes, to a language like C. The real problem with the GP is that that also includes C++ (which, at least in a decent compiler, throws an exception if new fails to allocate a chunk of memory).

    13. Re:The crux of the exploit: by T.E.D. · · Score: 5, Informative

      The default C++ new does throw an exception rather than returning NULL, but don't let your
      ignorance of the language stop you from decrying it.

      Hold on a minute there, Captain Ivory Tower. Perhaps *your* C++ compiler does that. Mine (VC++, probably the most used compiler on the planet) does not.

      With VC++6 it returns NULL. With newer versions it *sometimes* will throw an exception, but it depends on which libraries the linker happened to pull in first. See this link for more information.

    14. Re:The crux of the exploit: by spir0 · · Score: 2, Insightful

      Besides, having the computer automatically do things like memory management behind the scenes means that you don't have to do them in your code, making it simpler, not bloated. I disagree. your source may not be bloated, but the binary at the end will be.

      making programming simpler only means that simpler coders will be coding.
      --
      The reason girls and Windows users don't understand UNIX is because all the documentation is in Man files.
    15. Re:The crux of the exploit: by leuk_he · · Score: 2, Informative

      If you read teh article you read that flash uses bytecode, just like jave, and that a part of the exploit was exploiting one byte of cehcks on the bytecode.

      If you know java/JVM like he exploited flash bytecode, you can exploint null derefeneces just like he did with flash in java.

      JIT, with all kind of crazy optimizations will make it only worse.

      The problem is that you can break out the virtual machine(/application) if you knwo it well enough.

      Even virtualisation will not fix this. Look at the vmware 1.05 release notes and you see that there was a exploit where the client could write in the ENTIRE host file system.

    16. Re:The crux of the exploit: by SL+Baur · · Score: 2, Insightful

      The GP is a fucking moron if he thinks "throwing an exception" is a cure-all for insecure code. One guy develops a complicated NULL-pointer exploit that's valid in ONE virtual machine, and the GP reflexively supports banning C and C++. Crudely put, but correct. TFA outlines clearly the logic errors in the bytecode interpreter that make this possible. There's a period of time between input validation and usage that can be exploited and it is. Duh. There's an unwise distinct difference between how the input validator and the executor treat invalid input that can be exploited and it is. Duh.

      I thought this was going to be something interesting like the 0 page exploit described in Bach's Unix System V Internals book where on certain kinds of hardware, it was possible to read NULL and near NULL pointers without the machine faulting allowing access to kernel data (which worked on my M68K Unix System V box at the time). Instead it's just a sloppily written byte code interpreter bug.
    17. Re:The crux of the exploit: by Mr+Z · · Score: 2, Informative

      The first C compilers were written in assembly. What's GCC written in? C. More interestingly, what's Gnat (GNU Ada) written in? That's right. Ada.

      How's that you ask? It's the very bootstrapping process you refer to.

      As long as you can compile to machine code, there's no reason you ever need to write it. If you have a new machine, just make a cross-compiler in a high level language. Sure you need to have a native code generator at some level to createe the lowest level code that runs on the new machine, but that native code can be generated from as high a level language as you like once you have a sufficient software stack.

      Of course, such bootstrapping has its own problems.

    18. Re:The crux of the exploit: by Mr+Z · · Score: 2, Informative

      Unfortunately, there are [rare] times when it is necessary to write code which generates compiler warnings.

      These get MUCH less rare when you crank up the warning and optimization levels. For example, the following idiom generates a warning in recent GCC versions if you turn -Wstrict-overflow on:

      for (i = 0; i < len; i++)
      . . if (foo[i] == blah)
      . . . . break;
      if (i == len)
      . . return -1; /* not found */

      This tends to generate the following warning:

      warning: assuming signed overflow does not occur when simplifying conditional to constant

      *sigh*

    19. Re:The crux of the exploit: by spir0 · · Score: 2

      Besides, didn't people say the exact same thing to defend the use of hand-optimized assemblers against such inefficient bloated crap like C, and C against C++ ? well, now that you mention it, let's see.. a stripped binary of cat (written in C) on my current system weighs in at 18,148 bytes.

      My version of cat (written in asm) weighs in at 596 bytes.

      Even if it was true, it didn't really matter, because computers keep on getting faster while humans don't, so moving more and more of the work from the programmer to the programmed is inevitable; ah yes, the old, computers-have-so-much-power-we-don't-need-to-care line. in general, this may not be an issue, but there are some people who take this to the extreme, and some programmers who are either so bullheaded, or so retarded, that if they see any loss of performance, the fault is always that of the hardware. Because computers should be able to cope with their terrible code. I mean, come on, this is the 21st century, right?

      You make that sound like it was a bad thing. It isn't. Making coding simpler and thus accessible for larger number of people is a good thing; it makes computers more useful to them. yes, I'm sure the legions of people writing spyware, viruses, and other malware for windows would agree with you.

      And of course, the less effort you need to put towards the details, the more you can put to the big picture; consequently, removing the grunt work from programming makes even good programmers more productive, since they'll be using less of their time for said grunt work. absolutely, the virus writers are more productive than ever. back when viruses had to be written in super optimised assembly so that you could jam a couple of bytes into a bootblock to call a nasty wee sub, then continue on as if nothing had happened was a real art.

      now what? you can get virus construction kits. why think for yourself when someone else can do that for you?
      --
      The reason girls and Windows users don't understand UNIX is because all the documentation is in Man files.
  3. Binary blobs by should_be_linear · · Score: 4, Insightful

    Some years ago I had many binary proprietary blobs on my computer: SUN Java browser plugin (now OSS), Adobe Acrobat (don't need it any more, OSS alternatives are equal now), nVidia driver (still needed but solution is on the way -> looking forward to switch to ATI as soon as GPL drivers get there), MS media codecs (don't need it any more, Flash ate MS' streaming video pie). Now, only Flash player remains that I don't see replacement in OSS world in foreseeable future. Add to it security concerns, 64-bit version and it clearly becomes major PITA of Linux desktop users. Doesn't look it will change any time soon.

    --
    839*929
    1. Re:Binary blobs by CRCulver · · Score: 4, Informative

      There's always Gnash. FWIW, the only Flash applications that I can't get to work with Gnash are YouTube-like video players, and I usually prefer to download those as .flv files straight to my computer with a Firefox extension.

    2. Re:Binary blobs by vux984 · · Score: 3, Informative

      Add to it security concerns, 64-bit version and it clearly becomes major PITA of Linux desktop users. Doesn't look it will change any time soon.

      Actually, its just a major PITA, period.

      Flash isn't any more secure on windows.

      And there's no 64-bit version for windows either.

      Windows x64 even ships with a proper 64-bit Internet Explorer 7, but it doesn't support flash. So to view flash in Windows x64, just like on Linux x64 you need to use a 32-bit web browser. Pretty sad.

      And it goes without saying the a 64-bit build of Firefox (Minefield) doesn't work with flash on Windows x64 either.

    3. Re:Binary blobs by atlastiamborn · · Score: 2, Interesting

      What I'd really want was some way to have both the proprietary flash player and gnash installed side by side and an easy way to switch between them. That way, you could just use gnash until you hit some file that it has trouble with and then just switch over.

      --
      I never apologize. I'm sorry, but that's just the way I am.
    4. Re:Binary blobs by martinw89 · · Score: 2, Informative

      Just wanted to mention that Swfdec is coming along quite nicely also. It already plays all the popular FLV video players. Plus it has some cool features, like a universal "play" button on all the media it handles so you don't get assaulted by flash.

    5. Re:Binary blobs by Peter+La+Casse · · Score: 2, Interesting

      What I'd really want was some way to have both the proprietary flash player and gnash installed side by side and an easy way to switch between them. That way, you could just use gnash until you hit some file that it has trouble with and then just switch over.

      I do that on my Kubuntu desktop. I use Konqueror with gnash as my default browser, and when it can't handle something I right click and select "open this page in Firefox" (which has the adobe plugin installed.)

  4. Oblig by Anonymous Coward · · Score: 5, Funny

    NULL to see here, move along to 0x80000001 please...

  5. The Art of Software Security Assessment by MadMidnightBomber · · Score: 4, Interesting

    (book by Dowd, McDonald, Schuh) is well worth a look: http://taossa.com/index.php/author/mark/

    --
    "It doesn't cost enough, and it makes too much sense."
    1. Re:The Art of Software Security Assessment by n0-0p · · Score: 2, Insightful

      I don't think that it has much at all on automating the workflow, which makes sense to me. Tools and fuzzers are changing so fast that they aren't well served by books. I already have a few books on those topics, and they've all grown stale within a year or two.

      The books that I keep around for a long time are the ones that really cover the essentials. I put this book in that category because it explains vulnerabilities more clearly and thoroughly than anything else out there. And it lays out all the process and tricks for finding security bugs. That's the kind of stuff that will be relevant for years.

  6. Always check your return values! by Anonymous Coward · · Score: 3, Informative

    The moral of the story is a point that many of us have already been making for years: check the return value of malloc. I've had lots of arguments over whether or not it's okay to omit that and let your program crash for the poor sap who hasn't got any heap left. Unfortuantely a common attitude is, "the program is screwed anyway at that point, so who cares?"

    The fact that Flash is doing all of these bytecode things also of course makes it more interesting. The first article linked seems to suggest that that makes the exploit really difficult (probably true), but it sounds like it also made it... well... possible.

    1. Re:Always check your return values! by Tony+Hoyle · · Score: 4, Insightful

      On a modern OS you have to work hard to make malloc fail. OSs will grant memory requests far above the amount of physical memory, and will even overcommit the virtual memory on the theory that you're not going to use all of it anyway.

      The only way I've seen to get it to consistently fail is not on low memory but by asking for ludicrous amounts like 4GB at once on a 32bit system. Try it - get your system into a low memory condition and execute a few mallocs.. they don't fail - the OS merely continues to increase virtual memory and swap more and more.

    2. Re:Always check your return values! by siride · · Score: 3, Insightful

      You have to have contiguous sections of address space large enough for the allocation. If you're on Windows, and you've already allocated, say, a gigabyte of heap space, plus whatever is taken up by your code, stack and loaded libraries, then even a relatively small request might end up failing, even if there is enough memory available. There is just no free chunk large enough to satisfy it. In fact, on a 32-bit system, I can say with 95% confidence that you could never allocate, say, 1GB in a single allocation and have it succeed. There are probably smaller numbers that work here as well.

    3. Re:Always check your return values! by Anonymous Coward · · Score: 2, Funny

      On a modern OS you have to work hard to make malloc fail. OSs will grant memory requests far above the amount of physical memory, and will even overcommit the virtual memory on the theory that you're not going to use all of it anyway.

      The only way I've seen to get it to consistently fail is not on low memory but by asking for ludicrous amounts like 4GB at once on a 32bit system. Try it - get your system into a low memory condition and execute a few mallocs.. they don't fail - the OS merely continues to increase virtual memory and swap more and more. You talk about "a modern OS", and then describe how WINDOWS uses its swap file.

      "A modern OS" will most likely have fixed-size swap partitions.
  7. Re:Cross platform? I don't think so. by lisaparratt · · Score: 3, Informative

    For x86: you use the Flash APIs to determine which actual platform you're on, load the code appropriate for the platform, and then use the exploit to execute it.

  8. Re:fubar by Hal_Porter · · Score: 5, Interesting

    This interesting because he's exploiting a malloc fail. The gory details of exploiting ActionScript is also cool because it has a bytecode verifier and he manages to get around it. It really is a lot more high tech than a typical stack buffer smash against a badly written C application, and that is important because everyone should hopefully have updated that sort of code to be exploit free by now. And stack checked binaries and data execute prevention, AMD's "Not Execute" bit, make those more likely to end in process death than arbitrary code execution.

    Finally because it works on both IE and Firefox and Flash has such a huge installation base it should be able to target a very high percentage of current machines. Larry Osterman called it "The way the world (wide web]) ends"

    Mind you, if Address Space Layout Randomisation was turned on in the Flash executable on Vista, exploiting this hole would most likely (255 times out of 256) lead to a browser crash rather than arbitrary code execution, so it's not like the last few years work on security has been totally wasted. At the moment it's not and you will get owned reliably. Adobe have published an update, so it's a good idea to download it.

    http://www.adobe.com/support/security/bulletins/apsb08-11.html

    Back when I was reading about security someone said that buffer overflows that execute code on the stack were first generation exploits. Second generation would be more subtle stuff like this.

    --
    echo -e 'global _start\n _start:\n mov eax, 2\n int 80h\n jmp _start' > a.asm; nasm a.asm -f elf; ld a.o -o a;
  9. Re:Big deal by Trouvist · · Score: 5, Informative

    It can run anything. If you read the paper, it explains that once you desynchronize the interpreter from the validator, you are running x86 instructions. One might have to tailor the exploit to work differently on Linux/Unix than on Windows due to the different executable addressing schemes, but once that is determined you are in business.

  10. Re:Cross platform? I don't think so. by Alioth · · Score: 3, Interesting

    The only cross platformness it needs is browser cross platformness. 95% of desktops run Windows on x86. Since I suspect Flash doesn't get updated as often as Windows or Firefox (and I suspect many users don't even update those) this is going to be quite an effective way of making a botnet.

    The original article already has Russian trackbacks on it.

  11. Re:boring? by starling · · Score: 4, Informative

    It's an impressive hack, or series of hacks rather, so I wouldn't say boring. The interest is not that the exploits are anything new (they aren't), but in the difficulty of pulling it off.

  12. Re:Is this new? by somersault · · Score: 3, Funny

    That's what the aliens get for abducting Bill Gates and basing their Mothership's OS on values obtained while probing his anus..

    --
    which is totally what she said
  13. Re:Cross platform? I don't think so. by Anonymous Coward · · Score: 3, Interesting

    It relies on Flash. Flash is only available in five versions - Windows / x86 (as an ActiveX control, and a Netscape plugin), Linux / x86, Mac OS X / PPC, and Mac OS X / x86.

    The exploit already works on two (both Windows versions) out of those five. With some tweaking, it'll work on two more. With some additional work, it will also work on the last one.

    The neat thing is that this single exploit can be used to break into any browser, on any operating system.

    Anyone still believe that the secure browser from a month or so ago was overkill?

  14. Re:boring? by somersault · · Score: 5, Funny

    This is more like a cat up a tree armed with a sniper rifle, picking off any emergency service personnel that get too close while his buddies rob a bank.

    --
    which is totally what she said
  15. Why the java icon? by LarsWestergren · · Score: 4, Interesting

    The paper specifically talks about the ActionScript virtual machine, i.e. the Flash player VM. There is nothing in there about Java. Why the Java icon? Why the Java tag?

    When it comes a day after this flamebait article you have to start to wonder if the Slashdot editors are busy with some massive FUD campaign against Sun or if they are just really ignorant.

    --

    Being bitter is drinking poison and hoping someone else will die

    1. Re:Why the java icon? by Roofus · · Score: 2, Insightful

      I was wondering the same thing with the Java tag. My thought is the editors are actually ignorant and biased.

    2. Re:Why the java icon? by ChunderDownunder · · Score: 5, Insightful

      Probably because they see JavaScript, bytecode and virtual machine all in the same sentence. Put two and two together and you end up with five.

  16. Re:fubar by Anonymous Coward · · Score: 3, Insightful

    The NX bit doesn't get rid of the problem entirely, though. To use this example, it sounds like an exploit can be written pretty much entirely in ActionScript bytecode. Also, just because the stack is non-executable, what's to stop me from replacing the return address to point at, say, libc's system(), placing a nasty shell script on the stack?

  17. Re:hmm. by keysersoze_sec · · Score: 2, Insightful

    does it run Linux? Definitely. Just need to massage some asm code to make it fit.

    part of the security of Linux relies on the smaller audience is not so attractive a target Dude, if you feel safe just because you're running Linux, you could be surprised some day. Plus, the "smaller audience" is not so small anymore, thanks to Ubuntu and the like. On the other hand, projects like PaX and grsecurity, constant code reviews and bug monitoring do make Linux a pretty safe place.
  18. Re:boring? by ubernostrum · · Score: 5, Insightful

    Wow, an error in a program. This seems akin to ground-breaking front-page news: a cat stuck in a tree rescued by firemen.

    Actually, it is a big deal, as you'd know if you'd read the article(s). But you're too lazy for that, so here's the short summary:

    Lots of interesting (and important) security problems revolve around figuring out a way to take an error in a program, and turn it into a way to have that program execute arbitrary code of your choice. Traditionally, NULL pointer exceptions have not been fruitful ground for this because, well, a NULL pointer is NULL -- there's nothing on the other end of the pointer for the unsuspecting program to read or execute, so it simply crashes. And merely crashing the program isn't really all that interesting, since at best it lets you execute a denial-of-service. But this guy (Dowd) found what would have been a run-of-the-mill NULL pointer exception in Flash and parlayed it into full-scale arbitrary code execution through a series of fairly impressive tricks. You really should go read Ptacek's summary, because it has all the gory details and will, if nothing else, make you realize what an amazing hack this is.

  19. Why Java? by vvsiz · · Score: 2, Informative

    How on Earth this is Java related and tagged with 'java' keyword?

  20. Re:fubar by Anonymous Coward · · Score: 4, Funny

    You don't have to come across this exploit for your browser to crash in Vista, normal browsing does that just fine.

  21. Crap factor 11 Captain? by Nomen+Publicus · · Score: 2
    Crappy programming allows successful hacking?

    Wake me when something new happens.

    Seriously, who in this day and age doesn't check the return codes of library routines when writing software that will be deployed on millions of computers?

  22. If your pointer is NULL by superbrose · · Score: 4, Funny

    ...you'll need a pointer first.

  23. Comment removed by account_deleted · · Score: 4, Informative

    Comment removed based on user account deletion

  24. Could someone please... by capn_buzzcut · · Score: 2

    explain this event in terms that a person with a sex life not involving the Internet could understand?

    --
    "And now, Frank N. Furter, your time has come. Say 'goodbye' to all of this, and 'hello'... to oblivion!"
  25. Re:flashblock ftw! by LiquidCoooled · · Score: 5, Informative

    I am also a huge fan of flashblock (I helped code up some bugfixes for it in a prior version), but be aware of its limitations.

    Flashblock does not prevent flash running.
    It removes existing flash from the DOM AFTER it has already been inserted and sometimes the initialization of the flash starts before it is replaced by the clicker.

    Granted, most of the time it is removed before the ping time of the destination server with the SWF, but not always.
    (Notice on a very slow page with lots of html you may see flash for a couple of seconds).

    The only way to allow flashblock to block in a sane manner would be to replace the actual Flash binary with our own binary clicker that only calls the original adobe flash binary after clicking to view.
    Everything else is a hack.

    --
    liqbase :: faster than paper
  26. Re:Big deal by Anonymous Coward · · Score: 5, Insightful

    Because it can probably be made to work cross-version, cross-platform and cross-architecture?

    Because everyone has Flash installed?

    Because it opens up a whole class of common bugs previously thought to be unexploitable?

    Because the way he does it is nothing short of godlike?

    This is HUGE.

  27. Re:fubar by orasio · · Score: 4, Informative

    FYI: you can type about:plugins in the address bar, when you need to know anything about plugins.
    If you want to know something about the config, you type about:config and get to the super duper advanced settings page.

  28. Re:fubar by morgan_greywolf · · Score: 2, Insightful

    The NX bit doesn't get rid of the problem entirely, though. To use this example, it sounds like an exploit can be written pretty much entirely in ActionScript bytecode. Also, just because the stack is non-executable, what's to stop me from replacing the return address to point at, say, libc's system(), placing a nasty shell script on the stack?
    This assumes, of course, that you know the entry point of libc's system(). Since glibc is typically a dynamically-linked ELF .so these days on Linux, this means that you need to know the architecture on which your target is running, the specific version of glibc in use, etc.

    While you can determine this easily for any given architecture/Linux distro pair, determining what particular distro and architecture are present from remote is problematic at best.

    Furthermore, if I'm not mistaken, there are certain SELinux rules you can use to prevent shell scripts from doing nasty things.
  29. Re:hmm. by JasterBobaMereel · · Score: 2, Insightful

    The difference is that in Linux the browser runs as you and so can only affect your own files ... (Which you have backed up?) On Windows the browser runs as an elevated user and so can affect much more ...

    If however it can run arbitary x86 code directly all bets are off and operating system security is basically non-existent except at the hardware level ....

    --
    Puteulanus fenestra mortis
  30. Re:Big deal by Simon+Brooke · · Score: 4, Informative

    I don't think I'll be updating adobe on my linux box just yet. sudo apt-get update; sudo apt-get upgrade

    solves the problems on Ubuntu boxes as of this moment, so someone at Ubuntu is paying attention. Don't know about Debian, because I don't run Flash on any of my Debian machines.

    --
    I'm old enough to remember when discussions on Slashdot were well informed.
  31. Re:fubar by X0563511 · · Score: 3, Informative

    about:plugins is what you want. Why this isn't linked or otherwise brought to light, I don't know. I discovered this by trial/error and/or boredom.

    On mine, I see this:

    Shockwave Flash
            File name: NPSWF32.dll
            Shockwave Flash 9.0 r47

    --
    For large sets, this will be our guide even unto death, for the LORD will work for each type of data it is applied to...
  32. Re:fubar by Hal_Porter · · Score: 3, Insightful

    You're aware this site is News for Nerds, right? If this sort of thing is boring to you, maybe you're on the wrong site.

    --
    echo -e 'global _start\n _start:\n mov eax, 2\n int 80h\n jmp _start' > a.asm; nasm a.asm -f elf; ld a.o -o a;
  33. Re:So... 0x8000000 is salt? by n0-0p · · Score: 3, Informative

    It's not a salt, it's just an artifact of how the Flash VM operates. There's a year-old post on Dowd's blog with a much simpler example of the same class of vulnerability: http://taossa.com/index.php/2007/04/15/bored-games/

    Basically, the vulnerability occurs when you can write to an arbitrary offset from NULL. This is probably a common enough mistake that no one has been looking for because NULL derefs are usually just a crash bug. What Dowd has shown is that with a little application knowledge, and control of the deref value, you can make this type of bug into a perfectly reliable exploit that is unaffected by application hardening like stack canaries and heap checking.

  34. Re:Big deal by n0-0p · · Score: 4, Insightful

    It's news because it's a general method for code execution from a common class of NULL pointer dereferences. He turned something that most people consider a crash bug into a code execution bug. Here's a simpler example from Dowd's blog: http://taossa.com/index.php/2007/04/15/bored-games/

    The other reason why it's news is that his method for exploiting Flash in this case is technically brilliant. I can understand if you don't appreciate it, but any security people out there are just overwhelmed.

  35. Re:hmm. by dysfunct · · Score: 2, Informative

    If however it can run arbitary x86 code directly all bets are off and operating system security is basically non-existent except at the hardware level ....
    What exactly do you mean? Any x86 code will either pretty much have to use syscalls to do anything useful and thereby run under normal user privileges or - as you said - will cause exceptions because it's not running in ring 0 and can't do anything privileged on the hardware side of things.
    --
    :/- spoon(_).
  36. What's ironic.. by encoderer · · Score: 4, Funny

    What's ironic is that this exploit DOESN'T crash the browser! That's the whole ever-fuckin point.

    A browser crash is what's SUPPOSED to happen here to prevent the exploit from deploying its payload. I mean, in this case, a crash is the DESIRED behavior. An uncaught exception should be thrown.

    So... just walk with me here... maybe Windows isn't just unreliable and unstable. MAYBE it's the most secure application stack ever devised. ...oh, hell...nevermind

  37. Re:fubar by crymeph0 · · Score: 2, Funny

    Actually the researcher specifically crafted his exploit demo so it wouldn't crash the browser. Maybe if I intentionally get infected, Vista won't suck as much!

    --
    It should be illegal to say that freedom of speech should be limited.
  38. Re:flashblock ftw! by Hatta · · Score: 3, Interesting

    Or use NoScript. I don't know why anyone would use Flashblock when there's NoScript.

    --
    Give me Classic Slashdot or give me death!
  39. Re:flashblock ftw! by LiquidCoooled · · Score: 4, Informative

    Yes, I am sure.
    You are right, and I pointed that out at first, it doesnt happen most of the time, but it can occur.

    go read the source.
    http://www.mozdev.org/source/browse/flashblock/source/content/flashblock/flashblock.xml?rev=1.34;content-type=text%2Fplain;sortby=date

    Look for the settimeout values which indicate you want a callback event raising after a specified period.

    The period is set to 0, but as with all callbacks, I believe it does not run instantly.
    (This code used to fail if you just call the flashblockShowPlaceholder() function directly because the actual DOM is not completely initialized)

    Most of the time the flash will be blocked instantly, but if other threaded operations are ongoing and the page load is not simple then the flash actually gets time to run.

    (If its totally changed and is really secure I will be very pleasantly surprised, but from the looks of things it hasn't yet).

    --
    liqbase :: faster than paper
  40. Re:Help me out here... by Flaming_cows · · Score: 3, Interesting

    Yes, it's easily patchable once you realize it's there, and yes, it should have been easy to check for. This isn't as revolutionary as the summary might suggest, but it is still interesting. The way Dowd jumps through a bunch of hoops to achieve the exploit is interesting to learn from, in the same way a perfect shot in pool or pitching a no-hitter might be to a sports fan. Dowd showed an amazing amount of technical skill by putting together all the pieces, and people are reacting to that more than the specific bug(s) that allowed it, though those are interesting as well in some ways.

  41. Re:flashblock ftw! by Inda · · Score: 2, Interesting

    LiquidCoooled is right.

    Try it on an old PC (450mhz in my case) with many applications running. I can often hear the sound from the Flash player advert or video before it is 'blocked'.

    --
    This post contains benzene, nitrosamines, formaldehyde and hydrogen cyanide.
  42. Re:fubar by RKThoadan · · Score: 2, Informative

    Well, until now it was generally consdiered an un-exploitable error. Now it's not. That changes things.

  43. Re:flashblock ftw! by LiquidCoooled · · Score: 3, Interesting

    Without checking I cannot be certain, but I would imagine that anything hooking onto the DOM event tree is too late.

    It may be interesting to see if noscript suffers similar issues.

    Maybe some enterprising young security guy could investigate (send reports to flashblock so they an make improvements if required).

    --
    liqbase :: faster than paper
  44. Re:fubar by mr_mischief · · Score: 2, Insightful

    The fact that it's a bug and needs to be fixed hasn't changed. Its priority come debugging time just jumped up quite a bit because it went from a stability issue to a security issue.

    Debugging is generally handled in a triage fashion. The first bugs to fix are easily exploitable remote exploits that allow arbitrary code execution with elevated privileges. Then come those that allow easy remote exploitation and arbitrary code execution at the user's restricted level. It goes on like that all the way down to a bug equivalent to "sometimes on platform X the last character of output sometimes is an extra newline that gets appended which is unnecessary".

    If you have the time to make sure every piece of software you write is entirely and certifiably bug free, then that's great. Somehow, though, I imagine maintenance programming for the rest of us will probably still be prioritized based on severity.

  45. Re: are executions necessary? by Have+Brain+Will+Rent · · Score: 3, Insightful

    Most of the patches I see popping up in Ubuntu's update notifier seem to involve buffer overflows. Now there is this exploit because someone didn't check a pointer (failed malloc()/new/etc?).

    When I taught CS, back when dinosaurs ruled the earth, I would have given a homework assignment with anything like that a D or an F.

    I mean WTF, fast forward a few eons and people are still writing code like this??? What do we have to do - shoot them???

    A programmer not checking for a null pointer return or a buffer overflow is the equivalent of... geez, I don't know... a surgeon forgetting to wash his hands before operating?

    --
    The tyrant will always find a pretext for his tyranny - Aesop