-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Dear all,
I'm coming to you after a short discussion with Alexandre on this topic.
Wine gets more and more used, in various ways: either directly by users, or because it gets shipped in various form. It can packaged in a distribution, forked to suit a project needs (thinking about pipelight), or even shipped along with software to save native portage costs. Not to say that it's core of the ReactOS operating system itself.
But as any other software, Wine can present security vulnerabilities. MITRE exposes some of the code defects pattern (known as CWE) that can lead to potential exploitation and thus to security vulnerabilities [1]. When such defect is found and looks potentially exploitable (either because a crash was reported, or because it directly deals with callers data), a vulnerability ID (CVE) can be assigned by MITRE to reference the potential security vulnerability and make it known to people using it.
Some of them (buffer overflow, overrun, double-free, use-after-free, and so on) are sometimes found and fixed in Wine without further consideration regarding what it would imply for real Wine (mis-)usage. Even if no Proof of Concept is available at the time when the commit is made, it doesn't mean it cannot be exploited later on. With such exploits, it generally means that the attacker can target a Linux OS through a crafted PE binary.
What I'm proposing here is that I start requesting CVE-ID for these findings when I find them in the commit logs of Wine and that they look exploitable. My hope is that it would allow distributions to repackage Wine taking care of these issues, but also to make people shipping Wine aware that the Wine they are shipping is likely vulnerable. This proposal it though limited in space & time: I wouldn't only do it starting in 2015 (I don't believe going backwards would make that much sense) and for 1.7 branch which is, I believe, the most used.
I'm looking for your feedback on my proposal and how you believe such vulnerabilities in Wine can affect the host Linux (or Mac). This wouldn't involve more work on your side (excepted if I ask for more details to make sure I'm right in my analysis of the issue).
With my best regards,
[1]: https://cwe.mitre.org/ - -- Pierre Schweitzer <pierre at reactos.org> System & Network Administrator Senior Kernel Developer ReactOS Deutschland e.V.
On Wed, Jan 07, 2015 at 04:46:10PM +0100, Pierre Schweitzer wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Dear all,
I'm coming to you after a short discussion with Alexandre on this topic.
Wine gets more and more used, in various ways: either directly by users, or because it gets shipped in various form. It can packaged in a distribution, forked to suit a project needs (thinking about pipelight), or even shipped along with software to save native portage costs. Not to say that it's core of the ReactOS operating system itself.
But as any other software, Wine can present security vulnerabilities. MITRE exposes some of the code defects pattern (known as CWE) that can lead to potential exploitation and thus to security vulnerabilities [1]. When such defect is found and looks potentially exploitable (either because a crash was reported, or because it directly deals with callers data), a vulnerability ID (CVE) can be assigned by MITRE to reference the potential security vulnerability and make it known to people using it.
Some of them (buffer overflow, overrun, double-free, use-after-free, and so on) are sometimes found and fixed in Wine without further consideration regarding what it would imply for real Wine (mis-)usage. Even if no Proof of Concept is available at the time when the commit is made, it doesn't mean it cannot be exploited later on. With such exploits, it generally means that the attacker can target a Linux OS through a crafted PE binary.
What I'm proposing here is that I start requesting CVE-ID for these findings when I find them in the commit logs of Wine and that they look exploitable. My hope is that it would allow distributions to repackage Wine taking care of these issues, but also to make people shipping Wine aware that the Wine they are shipping is likely vulnerable. This proposal it though limited in space & time: I wouldn't only do it starting in 2015 (I don't believe going backwards would make that much sense) and for 1.7 branch which is, I believe, the most used.
I'm looking for your feedback on my proposal and how you believe such vulnerabilities in Wine can affect the host Linux (or Mac). This wouldn't involve more work on your side (excepted if I ask for more details to make sure I'm right in my analysis of the issue).
I would say that exploiting by "crafted PE binary" is not in scope for CVE allocation for Wine, as you would not keep the crafted PE binary from doing "int 0x80" itself.
(Except of course when the binary crashes already the loader or imagehlp or so.)
But bugs in progressing any data leading to exploitation would be.
This is probably going to be tedious ;)
Ciao, Marcus
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 07/01/2015 17:19, Marcus Meissner wrote:
On Wed, Jan 07, 2015 at 04:46:10PM +0100, Pierre Schweitzer wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Dear all,
I'm coming to you after a short discussion with Alexandre on this topic.
Wine gets more and more used, in various ways: either directly by users, or because it gets shipped in various form. It can packaged in a distribution, forked to suit a project needs (thinking about pipelight), or even shipped along with software to save native portage costs. Not to say that it's core of the ReactOS operating system itself.
But as any other software, Wine can present security vulnerabilities. MITRE exposes some of the code defects pattern (known as CWE) that can lead to potential exploitation and thus to security vulnerabilities [1]. When such defect is found and looks potentially exploitable (either because a crash was reported, or because it directly deals with callers data), a vulnerability ID (CVE) can be assigned by MITRE to reference the potential security vulnerability and make it known to people using it.
Some of them (buffer overflow, overrun, double-free, use-after-free, and so on) are sometimes found and fixed in Wine without further consideration regarding what it would imply for real Wine (mis-)usage. Even if no Proof of Concept is available at the time when the commit is made, it doesn't mean it cannot be exploited later on. With such exploits, it generally means that the attacker can target a Linux OS through a crafted PE binary.
What I'm proposing here is that I start requesting CVE-ID for these findings when I find them in the commit logs of Wine and that they look exploitable. My hope is that it would allow distributions to repackage Wine taking care of these issues, but also to make people shipping Wine aware that the Wine they are shipping is likely vulnerable. This proposal it though limited in space & time: I wouldn't only do it starting in 2015 (I don't believe going backwards would make that much sense) and for 1.7 branch which is, I believe, the most used.
I'm looking for your feedback on my proposal and how you believe such vulnerabilities in Wine can affect the host Linux (or Mac). This wouldn't involve more work on your side (excepted if I ask for more details to make sure I'm right in my analysis of the issue).
I would say that exploiting by "crafted PE binary" is not in scope for CVE allocation for Wine, as you would not keep the crafted PE binary from doing "int 0x80" itself.
Well, by crafted PE binary, I mean, binary that would be designed to exploit such weaknesses. To corrupt memory, read from it or whatever.
(Except of course when the binary crashes already the loader or imagehlp or so.)
That's my point.
But bugs in progressing any data leading to exploitation would be.
This is probably going to be tedious ;)
This generally is, but helps a lot, so... It deserves it, I believe.
Ciao, Marcus
- -- Pierre Schweitzer <pierre at reactos.org> System & Network Administrator Senior Kernel Developer ReactOS Deutschland e.V.
Pierre Schweitzer pierre@reactos.org writes:
On 07/01/2015 17:19, Marcus Meissner wrote:
I would say that exploiting by "crafted PE binary" is not in scope for CVE allocation for Wine, as you would not keep the crafted PE binary from doing "int 0x80" itself.
Well, by crafted PE binary, I mean, binary that would be designed to exploit such weaknesses. To corrupt memory, read from it or whatever.
That's the sort of thing I was alluding to in our private discussion. In the context of Wine, postulating a specially crafted binary doesn't make sense. Obviously such a binary doesn't need to exploit Wine to do anything it wants.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 07/01/2015 21:19, Alexandre Julliard wrote:
Pierre Schweitzer pierre@reactos.org writes:
On 07/01/2015 17:19, Marcus Meissner wrote:
I would say that exploiting by "crafted PE binary" is not in scope for CVE allocation for Wine, as you would not keep the crafted PE binary from doing "int 0x80" itself.
Well, by crafted PE binary, I mean, binary that would be designed to exploit such weaknesses. To corrupt memory, read from it or whatever.
That's the sort of thing I was alluding to in our private discussion. In the context of Wine, postulating a specially crafted binary doesn't make sense. Obviously such a binary doesn't need to exploit Wine to do anything it wants.
Likely my 'crafted' word was poorly chosen. Here, I refer to a binary designed to exploit the flaws in Wine, as it would be designed to exploit flaws in any library. The user excepts to run a sane binary, whereas said binary will actually use its running context to corrupt memory, attempt to cause a denial of service in Wine, and so on. As for any other exploit (be it for a lib or another tool).
Cheers, - -- Pierre Schweitzer <pierre at reactos.org> System & Network Administrator Senior Kernel Developer ReactOS Deutschland e.V.
On Wed, Jan 7, 2015 at 2:56 PM, Pierre Schweitzer pierre@reactos.org wrote:
Likely my 'crafted' word was poorly chosen. Here, I refer to a binary designed to exploit the flaws in Wine, as it would be designed to exploit flaws in any library. The user excepts to run a sane binary, whereas said binary will actually use its running context to corrupt memory, attempt to cause a denial of service in Wine, and so on. As for any other exploit (be it for a lib or another tool).
Typically, flaws in a library don't allow a program using the library to do anything it couldn't do without access to that flaw. The exception would be something like polkit which has privileged components compared to the software using it.
All of Wine's components run as a single user, so flaws in them cannot be exploited in this way.
I think we would be more worried about a scenario where a flaw in Wine creates vulnerabilities in programs running in Wine. An example would be if one of our image processing functions corrupted memory when given some invalid data. This could be demonstrated using a test program that reads an image using the Windows API, combined with crafted image data that exploits the flaw.
The test program does not have to be designed to exploit a flaw, in fact the problem is that it was designed to do something sane (read and display an image), but an attacker supplying the image file can make it do something else.
(Sorry if you already know all this, it's unclear based on what you've said.)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 07/01/2015 22:25, Vincent Povirk wrote:
On Wed, Jan 7, 2015 at 2:56 PM, Pierre Schweitzer pierre@reactos.org wrote:
Likely my 'crafted' word was poorly chosen. Here, I refer to a binary designed to exploit the flaws in Wine, as it would be designed to exploit flaws in any library. The user excepts to run a sane binary, whereas said binary will actually use its running context to corrupt memory, attempt to cause a denial of service in Wine, and so on. As for any other exploit (be it for a lib or another tool).
Typically, flaws in a library don't allow a program using the library to do anything it couldn't do without access to that flaw. The exception would be something like polkit which has privileged components compared to the software using it.
Depends. We can think about other scenario. Vulnerability in an API a network application is using, which allows leaking data over the network. Or to run another program remotely. Or bypass security checks and execute parts it shouldn't. Even if this doesn't elevate privileges, it can already harm. Not talking about crashing the whole Wine instance.
All of Wine's components run as a single user, so flaws in them cannot be exploited in this way.
I think we would be more worried about a scenario where a flaw in Wine creates vulnerabilities in programs running in Wine. An example would be if one of our image processing functions corrupted memory when given some invalid data. This could be demonstrated using a test program that reads an image using the Windows API, combined with crafted image data that exploits the flaw.
Yup, sorry, forgot to speak about that one, which is also often tracked. That can even go farther. Crafted images or input for a program can lead to severe damages, or running programs (cf: CVE-2014-7209).
The test program does not have to be designed to exploit a flaw, in fact the problem is that it was designed to do something sane (read and display an image), but an attacker supplying the image file can make it do something else.
(Sorry if you already know all this, it's unclear based on what you've said.)
Thanks for it. I would have totally forgotten to speak about it otherwise!
Cheers, - -- Pierre Schweitzer <pierre at reactos.org> System & Network Administrator Senior Kernel Developer ReactOS Deutschland e.V.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am 2015-01-07 um 21:19 schrieb Alexandre Julliard:
That's the sort of thing I was alluding to in our private discussion. In the context of Wine, postulating a specially crafted binary doesn't make sense. Obviously such a binary doesn't need to exploit Wine to do anything it wants.
PE parsing may be an exception though. A specially crafted PE binary could try to execute code when e.g. the file selection dialog wants to extract its icon. Microsoft had a related problem on Windows a while ago: http://blogs.msdn.com/b/oldnewthing/archive/2011/06/09/10172702.aspx