Slashdot Mirror


Microsoft Responds to WMF Vulnerability

beuges writes "In an entry on the Microsoft Security Response Center Blog, Stephen Toulouse explains exactly how the WMF flaw could be triggered. BetaNews has an overview of the company's response." From the BetaNews article: "This code exists on every version of Windows since version 3.0, security firms have said. When this functionality was introduced, Toulouse said the security landscape differed from what it is now and metafile records were completely trusted by the operating system. Gibson claimed that the flaw could be exploited only by using a byte size of 1 in the metafile record, which Toulouse says is incorrect. He surmised that Gibson's tests had the offending function as the last entry in the metafile, which caused only incorrect sizes to trigger the flaw." We've previous reported on the backdoor claim.

48 of 221 comments (clear)

  1. Every version since 3.0? by Captain_Thunder · · Score: 5, Insightful

    That's quite a long time to have a flaw in your OS. Maybe they should focus more on security rather than a fancy new AeroGlass interface.

    --
    My journal: Clicky. Read it because it
    1. Re:Every version since 3.0? by Shano · · Score: 5, Interesting

      The WMF vulnerability isn't a programming flaw, it's a problem with the original spec. The code may have been rewritten many times, and the potential for damage never noticed. Indeed, the WINE people did reimplement it, complete with the vulnerability.

      While it seems obvious that allowing arbitrary code to execute, it is clearly sufficiently non-obvious that a flaw in a well-documented spec went unnoticed for more than 10 years.

      What's most likely is that security wasn't a big thing when the spec was written (this much we know), and the WMF code was never audited because is "obviously" isn't related to security. After all, nobody uses it any more, WMF isn't used much on the web, and it's "just" an image format.

      I would be worried about how many similar flaws may exist. I'm willing to forgive them for missing this one (and I'm not a Windows user), but if it doesn't lead to a proper audit of legacy APIs, the next time around they deserve everything they get.

    2. Re:Every version since 3.0? by HugePedlar · · Score: 4, Insightful

      Indeed. Sometimes, late at night, I worry about legacy code. Are we ever going to receive a brand new OS from Microsoft, or will each release merely be an upgrade from older versions?

      I understand the importance of being able to run old programs, but surely Vista could have included a virtual machine or something for XP compatibility - is it really that hard to create a new OS from scratch with proper security etc. as a starting point, not an add-on? Yes it would be a mammoth task, but MS is pretty big, you know.

      I don't know - when you have vulnerable code from Windows 3.1 in your latest release, don't you want to just cut the cord and start again?

      --
      Argh.
    3. Re:Every version since 3.0? by CyricZ · · Score: 2, Insightful

      The OpenBSD crew was able to perform a security audit of their fairly large codebase, which may very well consist of code that predates anything Microsoft is using today. And remember, they don't have anywhere near the resources that a massive corporation like Microsoft has.

      What was the end result of their efforts? An extremely secure operating system. Now, Microsoft probably wouldn't need to take it to that extreme. But even putting out a quarter of the effort of the OpenBSD team could lead to security issues being caught before they are exploited.

      --
      Cyric Zndovzny at your service.
    4. Re:Every version since 3.0? by mwvdlee · · Score: 3, Informative
      The WMF flaw was patched ahead of schedule


      "ahead of schedule" meaning "after a number of exploits have been released but before our original delayed release date"?
      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    5. Re:Every version since 3.0? by tpgp · · Score: 4, Funny

      Indeed, the WINE people did reimplement it, complete with the vulnerability.

      Yep - the WINE people are reimplementing the windows API bug-for-bug ;-)

      --
      My pics.
    6. Re:Every version since 3.0? by CastrTroy · · Score: 4, Insightful

      Actually, they didn't actually rewrite from scratch. They used BSD, I think. The problem with this, is that if Microsoft chooses something too close to Unix, then it will be easier for people to move away from their operating system. The reason that many people don't switch now, is that moving is very abrupt, and you not only have to change the OS, but many of the applications at the same time. If the OS was unix based, the move could be much more gradual. The funny thing I remember is that the microsoft research lab created an OS that was based on security from the bottom up, and it still ran faster than windows XP. Which I realize isn't that hard, since it's so slow, but shows that you can build a secure OS, that still performs well.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    7. Re:Every version since 3.0? by pato101 · · Score: 2, Funny
      Yep - the WINE people are reimplementing the windows API bug-for-bug ;-)

      Otherwise sotware would not crash as expected.

    8. Re:Every version since 3.0? by dirty · · Score: 2, Informative

      I believe the lineage is actually BSD -> NeXTStep -> Mac OS X. Apple simply bought NeXT because their previous attempt at a new OS (Copland) had failed. With NeXT they got NeXTStep which was the foundation for OS X (that's why all of the Cocoa classes start with NS). Even with all of this it took two full versions before OS X became useable, 10.0 and 10.1 were dog slow from what I understand. A complete rewrite of any major product from scratch is an extremely daunting task.

      --

      -matt
    9. Re:Every version since 3.0? by Shano · · Score: 5, Informative

      I believe it was a part that WINE reimplemented, and it's certainly documented. I don't follow WINE that closely, though, so I can't say for sure.

      The WMF spec allows a file to define a callback function that is executed in case of an error (it resembles ON ERROR GOTO more than modern exception handling). This was presumably useful for some reason, although I'm not aware it was ever used. The exploit defines a malicious callback function, then deliberately creates an error condition.

      Any correct implementation of the spec should have the same vulnerability, whether it's done by Microsoft, WINE, or anyone else.

    10. Re:Every version since 3.0? by Waffle+Iron · · Score: 5, Funny
      The WMF flaw was patched ahead of schedule and it works fine.

      Indeed. Here's the original schedule, as found in the source to Windows 3.0:

      /*
      * SATABORTPROC - Error Callback
      *
      * FIXME: Could this be a security issue? We really
      * need to get somebody to take a look at this sometime
      * within the next 20 years or so. XXX Need to recheck
      * around the 2007 timeframe. -AB 5/86
      */
    11. Re:Every version since 3.0? by mrsbrisby · · Score: 2, Interesting
      Yep - the WINE people are reimplementing the windows API bug-for-bug ;-)
      Otherwise sotware would not crash as expected.

      Actually, that's been incredibly useful for me: I don't have any Windows machines, but I (admittedly haphazardly) maintain a Win32 port of some software.

      This has helped me find bugs in Microsoft's own implementation of Win32- or if you'd prefer, bugs in the MSDN documentation.

      The WINE people have spent a considerable amount of time inspecting Win32 function calls- more time I'm sure than Microsoft trying to find what values and what commands do exactly what, and without that efforts, I would not maintain a Win32 port at all.
    12. Re:Every version since 3.0? by Thundersnatch · · Score: 2, Informative

      At some point Microsoft will release a completely new OS. It will probably look something very much like Singularity. Reliability and security, rather than speed or features, will be the focus.

    13. Re:Every version since 3.0? by poot_rootbeer · · Score: 4, Insightful

      Are we ever going to receive a brand new OS from Microsoft, or will each release merely be an upgrade from older versions?

      Did Windows NT 3.1 count, or is it disqualified for inheriting code from VMS and OS/2?

      Linux can trace its kernel lineage back to 1991, and many of its utilities are much much older than that. Are we ever going to receive a brand new OS from Torvalds?

      What's the incentive for anyone to re-invent an operating system from scratch? A desire to create the next BeOS? There's too much collected knowledge in the decades' worth of "legacy" OS code that would be foolish to throw out.

  2. Ah those were the days. by DrSkwid · · Score: 4, Funny

    > metafile records were completely trusted by the operating system

    when there were no disgruntled employees and no spies (international or industrial)

    everyone used telnet and ftp

    and there was no user 0

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
    1. Re:Ah those were the days. by maxwell+demon · · Score: 3, Insightful
      everyone used telnet and ftp

      I think at that time, the typical protocols for those tasks on a PC were "walk to the computer you want to work on" and "floppy disk". Internet just wasn't that common outside academic institutions.
      And Windows 3.x was single-user anyway (i.e. as soon as you had physical access to a computer, you didn't need to play any tricks with WMF files, you just could put your code in a .COM or .EXE and start it directly).
      --
      The Tao of math: The numbers you can count are not the real numbers.
  3. Why does Windows have so much legacy? by antifoidulus · · Score: 4, Interesting

    Windows 3.0?! Ok, if it was a problem back then, why didn't it get fixed when the security environment changed? Windows has too much of a legacy going for it, and I'm surprised they held on to it this long. Apple realized that it's legacy code was no good years ago and succesfully ditched it in favor of something more modern, why can't windows do the same?

    1. Re:Why does Windows have so much legacy? by heavy+snowfall · · Score: 5, Funny

      More importantly: when is the patch for 3.1 and MS Bob coming out?

    2. Re:Why does Windows have so much legacy? by IamTheRealMike · · Score: 5, Informative
      Windows 3.0?! Ok, if it was a problem back then, why didn't it get fixed when the security environment changed?

      There are a large number of 16 bit (ie Win3.0/3.1) apps out there that are still in industrial use. They tend to be obscure things - applications for subtitling TV transmissions, interfacing to medical kit etc. Although it may be hard for you to believe there are no apps out there more than 10 years old in fact there are, and often the computers these apps run on are upgraded to new versions of Windows as time goes by (because it'd be a huge pain to have like 8 versions of Windows in use in a single organisation).

      Fixing this flaw does in fact break backwards compatibility, and that means somewhere some random app we've never heard is is broken right about now - of this I am almost certain. That has a cost, and nobody wants to break peoples apps and cause network admins headaches without good reason.

      Apple realized that it's legacy code was no good years ago and succesfully ditched it in favor of something more modern, why can't windows do the same?

      Apple did no such thing - they maintained a compatibility mode in the OS and more importantly kept the Carbon APIs around mostly complete so legacy code could be ported over very easily. And of course, Apple had hardly any mission-critical apps running on their platform anyway so the pain and cost was much less than it would be for Microsoft.

      In fact, Windows does run Windows 3.1 apps in a VM type process these days, it's called a WoW (Windows on Windows) VM, but the integration is so tight most users never even realise it. Except for looking a bit dated the apps continue to run correctly and appear on the same desktop etc. In other words, Microsoft already did what you asked for!

      Now it didn't mitigate this vulnerability, because the Microsoft developers who wrote the Windows Image/Fax viewer wanted to support every file format they could, and when supporting WMF was so easy why not do it? They unfortunately didn't get the memo about this being a potential attack vector: this is a failure of corporate communications, and perhaps over-zealous developers, not a failure of operating system design.

      As an interesting historical aside, Raymond Chen has said that back in the early days of the Windows 95 project there were in fact two competing approaches to 3.1 compatibility: a VMware type approach where the 16 bit environment ran inside a window box that was in turn running a copy of Windows 3.1 .... and the approach they actually ended up using which was based on API thunks. The thunk approach was more complex but had much better integration, much lower resource usage (not running two operating systems on top of each other) and in usability tests came out on top every time. Everybody who tried the tight integration approach preferred it, and MS management felt they couldn't ask users to put up with a very jarring experience - potentially forever, in the case of apps that'd never be ported to Win32.

    3. Re:Why does Windows have so much legacy? by Locutus · · Score: 2, Informative

      Part of the design for how Windows95 ran Windows3.x code probably had to do with how the competition ran that code. For instance, IBM was selling a million copies a month of 32bit OS/2 when Windows95 was finally released and OS/2 was a major threat during the formative years of Chicago. Running those old apps in a VM like OS/2 did, resulted in two different look/feels and really made the old Windows3.x stuff seem old and outdated to the user. Microsoft needed users to THINK they had a new system even when running the old code. When Windows95 finally shipped, OS/2 had a good number of native applications running on it along with all the Windows3.x applications which ran on it too. Heck, Microsoft even went so far as to tell the press/public it was a new 32bit operation system when the techies were showing them it wasn't...Dos/Windows95 was a hack to beat OS/2 when 32bit WindowsNT v3.1 turned out to be overbloated as a destkop OS. The fact that it has the flaws of Windows3.x should not be a surprise. And looking back at how poorly Microsofts tools on WinowsNT v3.1, 3.50, 3.51, and 4.0 applications used multi-threading, it shows that they did very little redesign above the system kernel and did more porting of the application/tools and most likely much more. Again, not a surprise that flaws show up all the way down the lineage when the "feature" existed back that far. How would you have liked to be a developer at Microsoft when they failed to beat OS/2 with NT and then started hacking on DOS/Windows for 3 years to only come out with the hack that was DOS/Windows95? Intel and Microsoft fractured some on this when Intels 32bit PentiumPro CPU ran slower on DOS/Windows95 than it's older Pentium( 150MHz vs 150MHz )....

      BTW, how many times has Microsoft told the press that they were rewriting and redesigning their new operating system? We're getting close to needing another hand to count them. It is why Microsoft is really much more of a Marketing Company and than a technology company. They rely less on techical solutions to their "problems" and more on smoke and mirror kinds of solutions IMO. And had they done things right, they wouldn't need to rely so much on fake "Get the Facts" programs either. But THAT Microsoft never existed so there's not much hope of it ever happening. So Microsoft Windows still sucks and history shows that it will for another decade or more no matter what lies, half-truths, fabrications come out of their executives mouths. IMO.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
  4. Security a top priority since 2002 by sl4shd0rk · · Score: 3, Informative

    It's nice to know they are taking such a proactive stance on the issue of security. http://news.com.com/2100-1001-816880.html

    --
    Join the Slashcott! Feb 10 thru Feb 17!
  5. Inverse security evolution by maxwell+demon · · Score: 5, Interesting

    An interesting quote from the first link:

    With WMF we want to be very clear: the Windows 9x platform is not vulnerable to any "Critical" attack vector. The reason Windows 9x is not vulnerable to a "Critical" attack vector is because an additional step exists in the Win9x platform: When not printing to a printer, applications will simply never process the SetAbortProc record.

    Which makes me wonder, why on earth did they remove that security measure in later versions of Windows?

    --
    The Tao of math: The numbers you can count are not the real numbers.
    1. Re:Inverse security evolution by BoneFlower · · Score: 3, Insightful

      My guess is they redid the printing system, and didn't fully check what other windows systems were affected.

    2. Re:Inverse security evolution by cnettel · · Score: 3, Insightful
      Or even that printing under NT has used different drivers and different stuff in general than 9x. 95 and classic NT device drivers are REALLY different, although 98 and later supported WDM drivers by emulating a (small) subset of the NT kernel.

      Put another way: In NT 4 and later, GDI calls are translated to kernel service calls, in 32-bit. In 9x, it's thunking to a globally mapped 16-bit DLL...

    3. Re:Inverse security evolution by m50d · · Score: 2, Informative

      They didn't remove it, it was just never added to the new program (windows printer and fax viewer) when it was written. If this was there as a fix in win9x then this shows why it's important to update specifications with security fixes, but it could just as easily be different application writers taking different approaches and one of them incidentally fixing the flaw.

      --
      I am trolling
  6. Odd thing to introduce... by makomk · · Score: 4, Interesting

    Seeing as I didn't get an answer last time (probably posted too late), I'll re-post my response when this was linked to in a comment in a previous article:

    Interesting - according to the article, Win95/98/ME don't actually run the hook set via SetAbortProc when rendering a metafile (unless you're printing it and the print job is aborted), but some change was introduced in 2000/XP such that it was called after the next metafile record is processed (which is an *extremely* odd thing for Windows to do, considering what SetAbortProc was designed to do). This seems to fit with what people are reporting (and explains why the Metasploit exploit, which adds leading and trailing records, works).

    Maybe Gibson was accidentally on the mark about it being an intentional backdoor. After all, that's about the same time a vulnerable program able to display metafiles was introduced and bundled with Windows (was that in 2000 or XP?).

    1. Re:Odd thing to introduce... by DrPizza · · Score: 2, Informative

      I haven't seen any evidence thus far that a change was introduced in 2000/XP. So far, everything suggests that it's always been in the NT 3.1 line.

      What "saved" windows 9x is that it was a completely different code-base from NT (derived from Win3.x); it was likely altered independently by the 9x product team. But because of the separate code-bases there was no cross-pollination of this change to the NT line. Presumably the recent patch implements an equivalent fix (so that SetAbortProc is only handled when actually printing). Or perhaps it removes the functionality altogether, as even when printing, the behaviour seems risky.

      It may well be that this "defer until the next record is read" behaviour exists in 9x (even if when actually printing) and Win3.x too.

      Rather, the issue that arose in XP and 2003 is that they bundled a COM control that could handle WMF files, and which assumed them to be trustworthy.

      IE was deliberately neutered because in IE it's obvious that any WMF file /isn't/ trustworthy. But in the Fax Viewer thingy, such an assumption can't be made. The WMF files it views could come from anywhere; some sources friendly, others hostile. So it is not altogether surprising that it did not have an equivalent change made to it.

    2. Re:Odd thing to introduce... by Kiaser+Zohsay · · Score: 2, Insightful

      The Toulouse blog basically proves, as if it weren't obvious, that Gibson is full of crap.

      The Toulouse blog states that Gibson is full of crap, without providing any proof. He says the flaw can be triggered with a correct record length, but does not state anything about what conditions might be the trigger. Not that I would expect him to provide those details, but that's what it would take to prove Gibson wrong. Toulouse's response amounts to "Pay no attention to the man behind the curtain" or "These are not the droids you're looking for".

      I suppose the proof is in a briefcase, along with all of the UNIX code that IBM copied into Linux.

      --
      I am not your blowing wind, I am the lightning.
    3. Re:Odd thing to introduce... by lseltzer · · Score: 3, Informative
  7. Source code leak? by erroneus · · Score: 2, Interesting

    Has anyone looked at the leaked source code to determine anything from the code written there? I've never actually seen or possessed the code and I wouldn't know where to look even if I did. But I'm sure SOMEONE out there still has it and so I wonder if anyone has examined the source to see if anything interesting appears there?

  8. Why make it a vulnerability? by NorbrookC · · Score: 2, Interesting

    What I found interesting was this quote:

    The reason Windows 9x is not vulnerable to a "Critical" attack vector is because an additional step exists in the Win9x platform: When not printing to a printer, applications will simply never process the SetAbortProc record. Although the vulnerable code does exist in the Win9x platform, all "Critical" attack vectors are blocked by this additional step.

    Well, that explains (sort of) why they didn't feel obligated to update the 9x series, but it lacks a great deal of explanation as to why they would:

    a. Keep what they knew could be a problem,

    b. Make it even worse in their "new" edition.

    I can see why they might have put it in in the first place, as a way to cancel printing, but what I still can't understand is why you'd extend to that extent.

    Oh... yeah... it's Microsoft!

  9. "Landscape has changed" by jav1231 · · Score: 5, Insightful

    I think maybe Windows' landscape has changed but security wasn't so passe' to other software makers. I wonder how much arbitrary code could have been executed by UNIX or even Netware in those days? And I leave open the possibility that it could have. In the long run, this was left uncheck and maybe forgotten for what, 12-15 years now? And more importantly, was brought right into the server code from the desktop code.
    I think therein lies the fundamental problem with Windows and why SA's warned for years about Microsoft's assbackwards approach to security. Windows is at it's heart a desktop OS and as such has a reverse understanding of security.

    1. Re:"Landscape has changed" by multipartmixed · · Score: 4, Informative

      > I wonder how much arbitrary code could have been executed by UNIX
      > or even Netware in those days?

      Plenty. At one point, it was possible to hack a Sun box running sendmail using nothing more than telnet.

      Yeah, baby, a root shell prompt without even logging. Now THAT was scary.

      --

      Do daemons dream of electric sleep()?
    2. Re:"Landscape has changed" by thetoastman · · Score: 3, Interesting

      Ah yes, the DEBUG mode in sendmail. I remember it well, since I spent an entire day patching sendmail from various vendors during the Robert Morris, Jr. Internet worm.

      I know there have been lots of other unpleasant security issues with sendmail over the years. However, that particular one could have been completely avoided if the people releasing binary copies of sendmail had read the Makefile.

      Also, another point needs to be made. Sendmail is not a part of the UNIX OS. It is an additional program which doesn't need to be present in order for a UNIX system to function. The vulnerabilities in Windows are a part of the OS.

  10. Cold War junk code? by AHuxley · · Score: 2, Funny
    I have always wondered about code from the mid 80's and the East Block.
    Thinking back to http://it.slashdot.org/article.pl?sid=04/03/02/071 9247


    Was M$ helpeing to add a little extra into the USSR as US software flooded east?
    The fun of a free door into any network thanks to M$ moving around the world?

    In America bad code is no problem, it is just for end users.
    In Soviet Union, expensive stolen code kills YOU.

    Was M$ just a CIA front company gone too far?

    --
    Domestic spying is now "Benign Information Gathering"
  11. Why XP/2000 and not 9X? by KevinColyer · · Score: 3, Insightful

    I wonder whether the reason the wmf vulnerability was fixed in 9X and then broken in XP/2000 has to do with the way the NT stream was created. If I understand it correctly the initially diverged from Win 3.0. Perhaps the code was "fixed" in 9X but they reverted to the NT core code as the development went on into 2000/XP. I hear a lot about the compartmentalisation at MS.

    I am inclined to believe in incompetence before conspiracy theories... (although incompetence does not leave me all warm and glowy)

  12. What WINE does by JohnGrahamCumming · · Score: 5, Informative

    I think that their implementation contains exactly the same bug as Windows (as others have pointed out) and that if you take a look at the code you can easily see why (and it's not a backdoor).

    First the file dlls/gdi/metafile.c contains a function called PlayMetaFileRecord with the following signature:

    BOOL WINAPI PlayMetaFileRecord( HDC hdc, HANDLETABLE *ht, METARECORD *mr, UINT handles )

    Which is simply WINE's implementation of the same Win32 API (which is documented here: http://msdn.microsoft.com/library/default.asp?url= /library/en-us/gdi/metafile_1yec.asp)

    The third parameter (mr) is a METARECORD pointer (a METARECORD is just an entry in the metafile and is detailed here: http://msdn.microsoft.com/library/default.asp?url= /library/en-us/gdi/metafile_8j1u.asp) and is the all important header with the following definition:

    typedef struct tagMETARECORD { DWORD rdSize; WORD rdFunction; WORD rdParm[1]; } METARECORD, *PMETARECORD;

    With the rdSize being the size of the record in words, the rdFunction being the function and the rdParm the data (which in the case of an exploit would be executable code). PlayMetaFileRecord handles META_ESCAPE like this:

    case META_ESCAPE:
    Escape( hdc, mr->rdParm[0], mr->rdParm[1], (LPCSTR)&mr->rdParm[2], NULL);
    break;

    You'll note that parameter 3 is a pointer into the metafile parameter block, i.e. if executed parameter 3 would execute code in the metafile. Now Escape has implemented like this (dlls/gdi/driver.c):

    INT WINAPI Escape( HDC hdc, INT escape, INT in_count, LPCSTR in_data, LPVOID out_data )

    and the SETABORTPROC is handled with the following code:

    case SETABORTPROC:
    return SetAbortProc( hdc, (ABORTPROC)in_data );

    So if you have an ESCAPE/SETABORTPROC record in a metafile then under WINE the AbortProc is set to point into the metafile (since in_data is corresponds to &mr->rdParm[2]).

    So it's quite clear from the WINE implementation that this is a way to set a pointer into the metafile for execution. All it would take is that the metafile's AbortProc is called and arbitrary code could be executed.

    In WINE at least this looks nothing like an intentional backdoor. It looks more like a bug caused by the fact that Escape is rather powerful and can set a pointer to code.

    Now it's possible in WINE (I believe) to force the AbortProc to execute with another ESCAPE record that has NEWFRAME as the function. Again looking at the Escape code you'll see that NEWFRAME has handled like this:

    case NEWFRAME:
    return EndPage( hdc );

    EndPage is a standard GDI function (see here for documentation: http://msdn.microsoft.com/library/default.asp?url= /library/en-us/gdi/prntspol_0d6b.asp). If you take a look at the implementation in WINE you see the following code (dlls/gdi/printdrv.c):

    INT WINAPI EndPage(HDC hdc)
    {
    ABORTPROC abort_proc;
    INT ret = 0;
    DC *dc = DC_GetDCPtr( hdc );
    if(!dc) return SP_ERROR;

    if (dc->funcs->pEndPage) ret = dc->funcs->pEndPage( dc->physDev );
    abort_proc = dc->pAbortProc;
    GDI_ReleaseObj( hdc );
    if (abort_proc && !abort_proc( hdc, 0 ))
    {
    EndDoc( hdc );
    ret = 0;
    }
    return ret;
    }

    Note that this function always called the Abo

  13. Re:NEW study finds win 9x more secure by Klivian · · Score: 2, Interesting

    Windows 95/98/Me operating systems are more secure than Windows 2000/XP.

    The funny thing is, the statement is not as ridiculous as it sounds. They are of course not more secure, but they are actually less likely to get compromised by an attack. Since most of the current malware and virus uses newer functionality which do not exist or function slightly different on the older systems. Resulting in the malware simply not working on those old systems. I guess the mallware writers are not too concerned about backwards compability.

  14. Stop, and think for a moment by anzev · · Score: 4, Informative

    Ok, i've been reading about this for much too long. It seems that there are two main issues here, how the flaw went unnoticed and why Microsoft didn't reimplement the whole legacy thing.

    Did anybody even RTFA? I've seen a lot of people already writing that Microsoft should have re-implemented the Legacy code, yadayadayada, write a new OS from scratch, introduce a new virtual machine just for OS compatibility. However, you all missed something very important. WMF is a well-defined standard (not saying a good one, but a well-defined one!) which means that Microsoft (or Wine for that matter) HAS TO IMPLEMENT IT WITH CERTAIN CONSIDERATIONS. One of them, is the SetAbortProc procedure that's been causing so much trouble. If Microsoft would failed to implement one part of this standard we would be getting comments like "M$ is 3vil, they don't respect standards...". I bet they're sorry that the security flaw got missed. I think it shows on their stock also! But non the less, it's fixed now.

    Come to think of it, I think that, in a world where there were no exploits (PC-wise) the whole callback function scenario was pretty cool. You'd just say that if something fails, notify the user with this procedure in my code, and since you already no it failed (no return false statement :-) ), you can also do some other tasks.

    One more sidenote, Microsoft HAS REIMPLEMENTED the code. This is proven by the following statement in the article:

    With WMF we want to be very clear: the Windows 9x platform is not vulnerable to any "Critical" attack vector. The reason Windows 9x is not vulnerable to a "Critical" attack vector is because an additional step exists in the Win9x platform: When not printing to a printer, applications will simply never process the SetAbortProc record. Although the vulnerable code does exist in the Win9x platform, all "Critical" attack vectors are blocked by this additional step.

    I have no idea why they've let this slip though in the XP.

  15. 'ported' isn't really the word by dioscaido · · Score: 5, Informative

    Something that people don't seem to realize is that when a new OS is created for a particular windows family (95/98/ME or NT4/2000/XP/2003/Vista), functions aren't 'ported'. Instead the same codebase is worked on until you arrive at the next version. So once that function was ported over from the 95 family to the NT4 family, it probably remained untouched, with this vulnerability. So it's not necessarily correct to say 'why did they keep porting this function across OS?!'.

    The reality is the windows codebase has a ton of legacy in it. One positive step taken for Vista is that *all* code, including legacy (actually, most importantly, legacy), was SAL annotated so that static analysis of the full codebase could be performed for a large variety of coding mistakes that lead to vulnerabilities. Related to that, all memory/string functions that don't take bounds have been removed from the codebase, which allows SAL to statically analyze for buffer overruns. There's been a few times when thanks to updates to the SAL agent I've had bugs assigned to my code that catch obscure issues. You can read more about the technique at: http://research.microsoft.com/slam/ At the same time, WIM is doing a second security sweep of all windows components. This is in no way complete, given that things like this WMF vulnerability still got through, but still it is a start, and is a process that is evolving every day.

    I'd like to point out that in Vista WMF is mitigated by the fact that unless you are logged in as the straight Administrator account, the arbitrary code executed from the WMF exploit will only have limited user access to the system (no access to write to the windows directory, program files directory, and system registry for example) even if the account is part of the Administrators group. Honestly this is probably the #1 reason to move to Vista -- it finally has a coherent LUA story and by default I can run all my apps with low priviledges.

  16. Re:MS shooting itself in the foot? by XMilkProject · · Score: 3, Insightful

    Get over yourself.

    And for what it's worth, I don't consider it a bug, or a failure, or anything else like that. It's a feature that was implemented in the format. You should always be careful when running formats that can contain executable code, just as you would with a .exe or .scr file.

    From MSDN:
    A metafile contains records that describe a sequence of application programming interface (API) calls. Metafiles can be recorded (constructed) and played back (displayed).

    A metafile is not a 'graphics format' exactly. It is rather a macro of API calls. Obviously one would suspect that such a thing could be used to execute malicious code.

    --
    Big ones, small ones, some as big as yer 'ead!
    Give 'em a twist, a flick o' the wrist...
  17. You might do the same... by Svartalf · · Score: 3, Interesting

    This should have never even been in the WMF specification in the first place .

    It was a bad idea then.
    It's a bad idea now.

    What else is in their specs that's a bad idea?

    Something like this WMF exploit, or perhaps less problematic but still annoying,
    like GetTempFileName- where in 16 bits, you used a zero for the main drive and
    a 1, 2, or so forth for the drive you wanted it to and in 32 bits, it's a string
    with a canonical path to the place you want the temp file to be generated. Oh,
    and by the way, zero's what most people used for their 16-bit code and a null
    (zero on machines of the day...) produced undetermined results from the 32-bit
    version of the API. Sometimes it'd work, sometimes it wouldn't. To be sure,
    that sort of problem code wouldn't have gotten out the door. But if they've done
    that sort of thing with their API's, I wouldn't trust that something never went
    out with issues due to lurkers in the API's and specs that will come back to
    bite someone on the ass down the line.

    What else is lurking in MS' products that we don't know about? If they didn't design
    it with security in mind then, what possesses you to think that they can go back
    after the fact and bolt it on afterwards without causing it's own set of problems?
    That'd be like using a hollow core door on the entry or exit of a house, and
    not having a lock or deadbolt on the door- and then putting just a deadbolt on the
    selfsame door when your house gets entered and people take things from you.

    MS just simply needs to work at some solution to the issue of backwards compatibility
    for their current OS products and start fresh with security in mind when they
    do things. Anything else is like the door analogy I just gave.

    --
    I am not merely a "consumer" or a "taxpayer". I am a Citizen of the State of Texas
  18. Re:NEW study finds win 9x more secure by Anonymous Coward · · Score: 2, Interesting
    > The funny thing is, the statement is not as ridiculous as it sounds. They are of course not more secure, but they are actually less likely to get compromised by an attack. Since most of the current malware and virus uses newer functionality which do not exist or function slightly different on the older systems. Resulting in the malware simply not working on those old systems. I guess the mallware writers are not too concerned about backwards compability.

    I'd even go so far as to say that when used as designed (single-user clients) were more secure. A box that runs no services listens on no ports, and a box that listens on no ports cannot be compromised remotely. Unbind NetBIOS from TCP/IP (5 minutes) and you eliminate the only attack vector on an out-of-the-box 9x installation. On XP (pre-SP1), you had to manually disable the uPnP service, NetBIOS service, Messenger, probably half a dozen other services that I'd forgotten, and use third-party tools (software "firewalls") to block port 135 and friends. Just about every service that came bundled with XP turned into a hole over the past few years. People running 9x was never affected.

    People running IE (especially with the insecure default settings that enabled Javashit and ActiveX), or Outleak, were hosed -- but they got just as hosed on XP as they did on 9x.

    It's not just that more people are targeting XP - it's that XP presented itself as a much bigger target.

  19. Re:Illegal byte size in the metafile record by Jerry+Coffin · · Score: 3, Insightful
    Yeah, so? Most bugs of this kind is triggered by passing "broken" data.

    It's important (from MS' viewpoint) because Gibson used the incorrect data to support a claim that this was an intentional backdoor. Given Gibson's general modus operandi, I'm sure the data being entirely incorrect won't slow him down a bit, but at least anybody with a somewhat unclouded view of reality realizes he was full of nonsense.

    While you can trigger this with broken data, those who RTFA realize that the broken data is entirely incidental.

    --
    The universe is a figment of its own imagination.
  20. [OT] So that's what WOW stands for by achurch · · Score: 2, Funny
    In fact, Windows does run Windows 3.1 apps in a VM type process these days, it's called a WoW (Windows on Windows) VM

    So that's what the "wow" in wowexec means . . . and here I always thought it was some overworked coder saying "wow, we actually managed to get this ancient crapola working". You learn something new every day!

  21. So where does Microsoft refute Gibson?? by dtjohnson · · Score: 3, Informative

    Read more closely. Where does Microsoft actually say that Gibson is wrong? Gibson claimed that Windows XP would read a .wmf file and begin executing a portion of the data file contents as executable code if a metafile record was encountered with a length of one byte. Since the minimum length of a valid metafile record is 6 bytes, Gibson suggests that the behavior was intentional rather than an accident. Microsoft doesn't actually SAY in their response that any of what Gibson claims is wrong:

    Gibson: Except that, when I was pursuing this and finally got it to work, what Windows did when it encountered this Escape function, followed by the SETABORTPROC metafile record, was it jumped immediately to the next byte of code and began to execute it. That is, it was no longer interpreting my metafile records record by record, which is the way metafiles are supposed to be processed.

    Microsoft: If you are seeing that you can only trigger it with an incorrect value, it's probably because your SetAbortProc record is the last record in the metafile.

    Gibson: It turns out that the only way to get Windows to misbehave in this bizarre fashion is to set the length to one, which is an impossible value. I tried setting it to zero. It didn't trigger the exploit. I tried setting it to two, no effect. Three, no effect. Nothing, not even the correct length. Only one.

    Microsoft: The vulnerability can be triggered with correct or incorrect size values.

    Even though the Microsoft guy claims he is going to "get rather technical here" he never specifies what he considers an 'incorrect' or 'correct' size value to be. More importantly, he never refutes the claim that a record with a length of one byte would always cause Windows to spawn a new thread and begin executing 'data' as code.

  22. Like they say, politicians always know best! by notaprguy · · Score: 2, Funny

    I think we should leave all technology decisions up to politicians. They know what's best for the rest of us. As a matter of fact, I'm thinking of putting up a Web site to encourage companies like Google, IBM, Microsoft and Apple to put politicians on all of their boards so that we're sure to get what's best for the people. Clearly in this case the Korean's are ahead of us!

  23. Re:Kind of makes you wonder, though. by tadmas · · Score: 2, Interesting

    Comments like this show that you probably don't have a lot of programming experience. The fact that they know what went wrong is because they already investigated it and fixed it. If they fixed it and still couldn't explain the problem, I'd worry that they didn't really fix it at all.

    Hindsight is 20/20. Foresight is a little trickier.