From 97476271275a4bd1340230677b7301d7b78b3317 Mon Sep 17 00:00:00 2001 From: Steve Dower <steve.dower@python.org> Date: Mon, 7 Mar 2022 17:37:20 +0000 Subject: [PATCH] bpo-46948: Fix CVE-2022-26488 by ensuring the Windows Installer correctly uses the install path during repair (GH-31730) --- .../2022-03-07-16-34-11.bpo-46948.Ufd4tG.rst | 2 ++ Tools/msi/bundle/bundle.wxs | 2 +- Tools/msi/common.wxs | 16 ++++++++++++++-- Tools/msi/dev/dev.wxs | 1 + Tools/msi/doc/doc.wxs | 1 + Tools/msi/lib/lib.wxs | 1 + Tools/msi/path/path.wxs | 3 ++- Tools/msi/tcltk/tcltk.wxs | 1 + Tools/msi/test/test.wxs | 1 + Tools/msi/tools/tools.wxs | 1 + Tools/msi/ucrt/ucrt.wxs | 1 + 11 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Windows/2022-03-07-16-34-11.bpo-46948.Ufd4tG.rst diff --git a/Misc/NEWS.d/next/Windows/2022-03-07-16-34-11.bpo-46948.Ufd4tG.rst b/Misc/NEWS.d/next/Windows/2022-03-07-16-34-11.bpo-46948.Ufd4tG.rst new file mode 100644 index 00000000000..cfc4827882d --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2022-03-07-16-34-11.bpo-46948.Ufd4tG.rst @@ -0,0 +1,2 @@ +Prevent CVE-2022-26488 by ensuring the Add to PATH option in the Windows +installer uses the correct path when being repaired. diff --git a/Tools/msi/bundle/bundle.wxs b/Tools/msi/bundle/bundle.wxs index ddd6870f625..12f2a46c8c7 100644 --- a/Tools/msi/bundle/bundle.wxs +++ b/Tools/msi/bundle/bundle.wxs @@ -95,8 +95,8 @@ <Chain ParallelCache="yes"> <PackageGroupRef Id="crt" /> <PackageGroupRef Id="core" /> - <PackageGroupRef Id="dev" /> <PackageGroupRef Id="exe" /> + <PackageGroupRef Id="dev" /> <PackageGroupRef Id="lib" /> <PackageGroupRef Id="test" /> <PackageGroupRef Id="doc" /> diff --git a/Tools/msi/common.wxs b/Tools/msi/common.wxs index 398d94a24d5..d8f3cde99ab 100644 --- a/Tools/msi/common.wxs +++ b/Tools/msi/common.wxs @@ -53,11 +53,23 @@ </Fragment> <Fragment> - <?ifdef InstallDirectoryGuidSeed ?> <Directory Id="TARGETDIR" Name="SourceDir"> + <?ifdef InstallDirectoryGuidSeed ?> <Directory Id="InstallDirectory" ComponentGuidGenerationSeed="$(var.InstallDirectoryGuidSeed)" /> + <?endif ?> </Directory> - <?endif ?> + </Fragment> + + <Fragment> + <!-- Locate TARGETDIR automatically assuming we have executables installed --> + <Property Id="TARGETDIR"> + <ComponentSearch Id="PythonExe_Directory" Guid="$(var.PythonExeComponentGuid)"> + <DirectorySearch Id="PythonExe_Directory" AssignToProperty="yes" Path="."> + <FileSearch Id="PythonExe_DirectoryFile" Name="python.exe" /> + </DirectorySearch> + </ComponentSearch> + </Property> + <Property Id="DetectTargetDir" Value="1" /> </Fragment> <!-- Top-level directories --> diff --git a/Tools/msi/dev/dev.wxs b/Tools/msi/dev/dev.wxs index a09e139c428..fee68e1912c 100644 --- a/Tools/msi/dev/dev.wxs +++ b/Tools/msi/dev/dev.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <Feature Id="DefaultFeature" AllowAdvertise="no" Title="!(loc.Title)" Description="!(loc.Description)"> diff --git a/Tools/msi/doc/doc.wxs b/Tools/msi/doc/doc.wxs index cd1a68cc260..cc5bdb493e5 100644 --- a/Tools/msi/doc/doc.wxs +++ b/Tools/msi/doc/doc.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <PropertyRef Id="REGISTRYKEY" /> diff --git a/Tools/msi/lib/lib.wxs b/Tools/msi/lib/lib.wxs index 2a3b9ecfeef..b38cd9114be 100644 --- a/Tools/msi/lib/lib.wxs +++ b/Tools/msi/lib/lib.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <PropertyRef Id="REGISTRYKEY" /> diff --git a/Tools/msi/path/path.wxs b/Tools/msi/path/path.wxs index 8b37936cc93..017b812270c 100644 --- a/Tools/msi/path/path.wxs +++ b/Tools/msi/path/path.wxs @@ -2,7 +2,8 @@ <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Language="!(loc.LCID)" Name="!(loc.Title)" Version="$(var.Version)" Manufacturer="!(loc.Manufacturer)" UpgradeCode="$(var.UpgradeCode)"> <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> - + + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <PropertyRef Id="REGISTRYKEY" /> diff --git a/Tools/msi/tcltk/tcltk.wxs b/Tools/msi/tcltk/tcltk.wxs index eeae8e8b0df..bbf6ac70fad 100644 --- a/Tools/msi/tcltk/tcltk.wxs +++ b/Tools/msi/tcltk/tcltk.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <PropertyRef Id="REGISTRYKEY" /> diff --git a/Tools/msi/test/test.wxs b/Tools/msi/test/test.wxs index f2ed64f07bf..e8f514a2223 100644 --- a/Tools/msi/test/test.wxs +++ b/Tools/msi/test/test.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <PropertyRef Id="REGISTRYKEY" /> diff --git a/Tools/msi/tools/tools.wxs b/Tools/msi/tools/tools.wxs index 7a805d0612e..133a743efcc 100644 --- a/Tools/msi/tools/tools.wxs +++ b/Tools/msi/tools/tools.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <Feature Id="DefaultFeature" AllowAdvertise="no" Title="!(loc.Title)" Description="!(loc.Description)"> diff --git a/Tools/msi/ucrt/ucrt.wxs b/Tools/msi/ucrt/ucrt.wxs index 76e56820c53..94fd3f0e974 100644 --- a/Tools/msi/ucrt/ucrt.wxs +++ b/Tools/msi/ucrt/ucrt.wxs @@ -4,6 +4,7 @@ <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" /> <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + <PropertyRef Id="DetectTargetDir" /> <PropertyRef Id="UpgradeTable" /> <PropertyRef Id="REGISTRYKEY" /> -- GitLab