From: Markus Armbruster <armbru@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kwolf@redhat.com, qemu-block@nongnu.org, qemu-devel@nongnu.org,
Max Reitz <mreitz@redhat.com>,
stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH RFC for-2.3 1/1] block: New command line option --no-format-probing
Date: Mon, 23 Mar 2015 21:19:46 +0100 [thread overview]
Message-ID: <87sicvfov1.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <55105283.9070105@redhat.com> (Paolo Bonzini's message of "Mon, 23 Mar 2015 18:50:59 +0100")
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 23/03/2015 18:48, Eric Blake wrote:
>>> Why can't libvirt just add ,format=raw instead of leaving out the
>>> format key altogether?
>>
>> Libvirt DOES add format=raw. This patch is an extra insurance
>> policy to guarantee that libvirt does not have any code paths that
>> omit the explicit format (as we have had a couple of CVEs in
>> libvirt over the years where that was the case).
>
> And where's the extra insurance policy to guarantee that QEMU does not
> have any code paths that ignore the new command line option?
Right here (in the non-RFC patch, not this one):
@@ -751,6 +752,11 @@ static int find_image_format(BlockDriverState *bs, const char *filename,
return ret;
}
+ if (bdrv_image_probing_disabled) {
+ error_setg(errp, "Format not specified and image probing disabled");
+ return -EINVAL;
+ }
+
ret = bdrv_pread(bs, 0, buf, sizeof(buf));
if (ret < 0) {
error_setg_errno(errp, -ret, "Could not read image for determining its "
The option sets bdrv_image_probing_disabled in a straightforward manner,
and bdrv_image_probing_disabled guards the probing code in an equally
straightforward manner.
> This is really borderline security theater.
I don't think so. It's optional insurance agains libvirt bugs, and
libvirt wants to buy it.
> Bugs happen, we fix them.
Yes. Doesn't mean we shouldn't proactively mitigate bugs.
> Even better, Kevin now has implemented a strong mitigation for CVEs
> like this, that won't allow guests to transmute a probed raw image
> into another format.
Yes. As we discussed at some length back then, Kevin's mitigation is
not airtight and not without risk, but we decided it's worth having all
the same, in particular since it provides a good amount of protection
for users unwilling or unable to always specify formats.
How to get p0wned anyway:
1. Use your raw image with format=raw. Malicious guest writes qcow2
header.
2. Use the image again without a format. Probe returns qcow2, no
warning is printed.
Plausible attack? Maybe not. Worth stopping cold anyway? I think so,
as long as it's easy.
My new option is a different kind of mitigation. It's for users who
want more airtight protection, prefer writes to sector 0 just work,
funny or not, and are willing to always specify the format. At least
one such user exists: libvirt.
Without this patch:
* Alternate use of raw images with and without format is still insecure;
Kevin's mitigation can't protect you then.
* If you somehow miss specifying a format, and probing detects raw, you
get a warning on stderr. If your guest writes something funny to
sector 0, the write fails.
With this patch:
* If you somehow miss specifying a format, open fails. This is what
libvirt wants.
> There certainly hasn't been enough discussion
> for this to get into 2.3.
Isn't that what were doing now? :)
next prev parent reply other threads:[~2015-03-23 20:20 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-20 13:05 [Qemu-devel] [PATCH RFC for-2.3 0/1] block: New command line option --no-format-probing Markus Armbruster
2015-03-20 13:05 ` [Qemu-devel] [PATCH RFC for-2.3 1/1] " Markus Armbruster
2015-03-20 13:34 ` Max Reitz
2015-03-20 13:48 ` Markus Armbruster
2015-03-20 13:49 ` Max Reitz
2015-03-20 13:56 ` Eric Blake
2015-03-20 14:19 ` Markus Armbruster
2015-03-20 14:32 ` Eric Blake
2015-03-23 17:23 ` Paolo Bonzini
2015-03-23 17:48 ` Eric Blake
2015-03-23 17:50 ` Paolo Bonzini
2015-03-23 20:19 ` Markus Armbruster [this message]
2015-03-24 8:37 ` Paolo Bonzini
2015-03-24 14:22 ` [Qemu-devel] [Qemu-block] " Eric Blake
2015-03-24 16:49 ` [Qemu-devel] " Markus Armbruster
2015-03-24 20:11 ` Paolo Bonzini
2015-03-25 8:10 ` Markus Armbruster
2015-03-25 10:36 ` Paolo Bonzini
2015-03-20 14:01 ` [Qemu-devel] [PATCH RFC for-2.3 0/1] " Eric Blake
2015-03-20 14:27 ` Markus Armbruster
2015-03-20 14:17 ` [Qemu-devel] [RFC PATCH] qemu: enforce no format probing when possible Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sicvfov1.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.