From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.81]) by mx.groups.io with SMTP id smtpd.web10.10944.1593785227300533217 for ; Fri, 03 Jul 2020 07:07:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=PujnvNBR; spf=pass (domain: redhat.com, ip: 207.211.31.81, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593785226; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FHV7z6x0r75iKbAEYqhepQ5dlocGpienj+WrnWdunDk=; b=PujnvNBRVYHpkQHam1+1I68OlAulv/STNIPBeUmOQuNviMTKwzXL2IAROr4fFI7xIl2cic 3MXfd9eG3FOHK+rF7eXrtbQiJxyJnFETepydp7UEYysRe69rGjciBUyPVKhIZZLEXEFMXg wqST07qDariyzv0tXPeHW/HD3jcd7jo= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-133-xgtbrEyEOISVIHBS0rvZ4Q-1; Fri, 03 Jul 2020 10:06:47 -0400 X-MC-Unique: xgtbrEyEOISVIHBS0rvZ4Q-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8E929107ACCA; Fri, 3 Jul 2020 14:06:45 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-114-238.ams2.redhat.com [10.36.114.238]) by smtp.corp.redhat.com (Postfix) with ESMTP id 27D705BAEA; Fri, 3 Jul 2020 14:06:41 +0000 (UTC) Subject: Re: [edk2-devel] [PATCH v2 0/9] Migrate Pointer from flash to permanent memory (CVE-2019-11098) To: devel@edk2.groups.io, guomin.jiang@intel.com, Michael Kubacki Cc: Jian J Wang , Hao A Wu , Dandan Bi , Liming Gao , Debkumar De , Harry Han , Catharine West , Eric Dong , Ray Ni , Rahul Kumar , Jiewen Yao , Chao Zhang , Qi Zhang , "Ard Biesheuvel (ARM address)" References: <20200702051525.1102-1-guomin.jiang@intel.com> From: "Laszlo Ersek" Message-ID: <32a8ff22-b4cf-5ac4-bb36-18eb9d39fb5b@redhat.com> Date: Fri, 3 Jul 2020 16:06:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20200702051525.1102-1-guomin.jiang@intel.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lersek@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi, I'm adding Michael Kubacki's new email address to the "To:" list, as Michael has authored a significant portion of this code, plus he seems to have contributed a large part of the design, in . Also CC'ing Ard. Comments below. On 07/02/20 07:15, Guomin Jiang wrote: > The TOCTOU vulnerability allow that the physical present person to replace the code with the normal BootGuard check and PCR0 value. > The issue occur when BootGuard measure IBB and access flash code after NEM disable. > the reason why we access the flash code is that we have some pointer to flash. > To avoid this vulnerability, we need to convert those pointers, the patch series do this work and make sure that no code will access flash address. I've now read through the comments in , and I've also checked the slides at: [1] https://conference.hitb.org/hitbsecconf2019ams/sessions/now-you-see-it-toctou-attacks-against-secure-boot-and-bootguard/ https://conference.hitb.org/hitbsecconf2019ams/materials/D1T1%20-%20Toctou%20Attacks%20Against%20Secure%20Boot%20-%20Trammell%20Hudson%20&%20Peter%20Bosch.pdf My understanding is that this vulnerability (and fix) do not apply to virtualization, or even most other emulation platforms (such as EmulatorPkg). Therefore I'm requesting that the approach seen in this patch series be reversed, as follows. * The patch v3 #1 should introduce the new PCD called "PcdMigrateTemporaryRamFirmwareVolumes". (Currently: patch v2 #7.) The comments in the DEC file (and in the UNI file) should *very* clearly explain what the PCD controls. It should provide a *concise* description of the entire feature. The default value of the PCD should be TRUE. * The next patches in the series (v3 patches #2, #3, #4) should set the PCD to FALSE in at least the following platform DSC files: - ArmVirtPkg [v3 #2] - EmulatorPkg [v3 #3], - OvmfPkg [v3 #4]. The commit messages on these patches should explain that the vulnerability simply doesn't exist on those platforms, as BootGuard is undefined on them in the first place. "CAR" (Cache-As-RAM) is also undefined on them. In particular, slide #8 in the presentation, titled "Chain of Trust (simplified)", presents two "cascades" (sub-chains of trust). My understanding is that the attack targets the left hand side cascade ("Fused OEM key", "Signed by Intel"). And that cascade doesn't seem to exist at all on virtualized platforms. Furthermore, the abstract at [1] writes, "These protections are supposed to be secure against physical attacks on the SPI flash" foreshadowing that the attack is indeed a physical machine attack. Doesn't apply to virtualization. Therefore both the attack and the mitigation appear moot, on virtual platforms. This should be stated in the commit messages of v3 patches #2, #3, #4. * Patch v3 #5 should be the current (v2) patch #1, namely: MdeModulePkg/PeiCore: Enable T-RAM evacuation in PeiCore This patch should *immediately* depend on "PcdMigrateTemporaryRamFirmwareVolumes". That is, please let's not introduce the feature first as unconditionally active, and then gate it on "PcdMigrateTemporaryRamFirmwareVolumes" separately. The feature should honor "PcdMigrateTemporaryRamFirmwareVolumes" right off the bat. Technically, this more or less means squashing part of patch v2 #7 into v2 #1. The commit message should point out that EvacuateTempRam() is never called if "PcdMigrateTemporaryRamFirmwareVolumes" is FALSE. * I've made the rest of my comments under the individual patches. Thanks, Laszlo > > Cc: Jian J Wang > Cc: Hao A Wu > Cc: Dandan Bi > Cc: Liming Gao > Cc: Debkumar De > Cc: Harry Han > Cc: Catharine West > Cc: Eric Dong > Cc: Ray Ni > Cc: Laszlo Ersek > Cc: Rahul Kumar > Cc: Jiewen Yao > Cc: Chao Zhang > Cc: Qi Zhang > > Guomin Jiang (5): > MdeModulePkg/Core: Create Migrated FV Info Hob for calculating hash > (CVE-2019-11098) > SecurityPkg/Tcg2Pei: Use Migrated FV Info Hob for calculating hash > (CVE-2019-11098) > MdeModulePkg/Core: Add switch to enable or disable TOCTOU feature > (CVE-2019-11098) > UefiCpuPkg/SecMigrationPei: Add switch to control if produce PPI > (CVE-2019-11098) > UefiCpuPkg/CpuMpPei: Enable paging and set NP flag to avoid TOCTOU > (CVE-2019-11098) > > Jian J Wang (1): > MdeModulePkg/DxeIplPeim: Register for shadow on S3 shadowed boot > (CVE-2019-11098) > > Michael Kubacki (3): > MdeModulePkg/PeiCore: Enable T-RAM evacuation in PeiCore > (CVE-2019-11098) > UefiCpuPkg/CpuMpPei: Add GDT and IDT migration support > (CVE-2019-11098) > UefiCpuPkg/SecMigrationPei: Add initial PEIM (CVE-2019-11098) > > MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 3 + > MdeModulePkg/Core/DxeIplPeim/DxeLoad.c | 2 +- > MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 417 ++++++++++++++++++ > MdeModulePkg/Core/Pei/Image/Image.c | 115 +++++ > MdeModulePkg/Core/Pei/Memory/MemoryServices.c | 82 ++++ > MdeModulePkg/Core/Pei/PeiMain.h | 169 +++++++ > MdeModulePkg/Core/Pei/PeiMain.inf | 3 + > MdeModulePkg/Core/Pei/PeiMain/PeiMain.c | 17 + > MdeModulePkg/Core/Pei/Ppi/Ppi.c | 287 ++++++++++++ > MdeModulePkg/Include/Guid/MigratedFvInfo.h | 22 + > MdeModulePkg/MdeModulePkg.dec | 8 + > SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c | 31 +- > SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf | 1 + > UefiCpuPkg/CpuMpPei/CpuMpPei.c | 40 +- > UefiCpuPkg/CpuMpPei/CpuMpPei.h | 13 + > UefiCpuPkg/CpuMpPei/CpuMpPei.inf | 3 + > UefiCpuPkg/CpuMpPei/CpuPaging.c | 31 +- > UefiCpuPkg/Include/Ppi/RepublishSecPpi.h | 54 +++ > .../Ia32/ArchExceptionHandler.c | 4 +- > .../SecPeiCpuException.c | 2 +- > UefiCpuPkg/SecCore/SecCore.inf | 2 + > UefiCpuPkg/SecCore/SecMain.c | 26 +- > UefiCpuPkg/SecCore/SecMain.h | 1 + > UefiCpuPkg/SecMigrationPei/SecMigrationPei.c | 374 ++++++++++++++++ > UefiCpuPkg/SecMigrationPei/SecMigrationPei.h | 170 +++++++ > .../SecMigrationPei/SecMigrationPei.inf | 68 +++ > .../SecMigrationPei/SecMigrationPei.uni | 13 + > UefiCpuPkg/UefiCpuPkg.dec | 4 + > UefiCpuPkg/UefiCpuPkg.dsc | 1 + > 29 files changed, 1947 insertions(+), 16 deletions(-) > create mode 100644 MdeModulePkg/Include/Guid/MigratedFvInfo.h > create mode 100644 UefiCpuPkg/Include/Ppi/RepublishSecPpi.h > create mode 100644 UefiCpuPkg/SecMigrationPei/SecMigrationPei.c > create mode 100644 UefiCpuPkg/SecMigrationPei/SecMigrationPei.h > create mode 100644 UefiCpuPkg/SecMigrationPei/SecMigrationPei.inf > create mode 100644 UefiCpuPkg/SecMigrationPei/SecMigrationPei.uni >