Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

msrc логотип

CVE-2026-45585

Опубликовано: 21 мая 2026
Источник: msrc
CVSS3: 6.8
EPSS Низкий

Описание

Windows BitLocker Security Feature Bypass Vulnerability

Microsoft is aware of a security feature bypass vulnerability in Windows publicly referred to as "YellowKey". The proof of concept for this vulnerability has been made public violating coordinated vulnerability best practices.

We are issuing this CVE to provide mitigation guidance that can be implemented to protect against this vulnerability until the security update is made available.

Mitigation FAQs

Should I leverage the temporary mitigation?

Microsoft recommends that you consider implementing these mitigations if you are concerned your devices and data are at risk of being compromised or stolen. For example, if your organization’s employees take their work devices home or on business travel.

What impact to service availability/management could be caused by implementing the mitigations?

Implementing these mitigations will not impact service availability or management operations.

Do customers need to revert the changes made to mitigate the vulnerability once the security update to protect against this vulnerability is available?

No. The security update will maintain the mitigation's behavior once the security update is installed.

I am using TPM+PIN, am I at risk of this vulnerability being exploited

No, if you are using TPM+PIN the vulnerability is not exploitable.

FAQ

What kind of security feature could be bypassed by successfully exploiting this vulnerability?

A successful attacker could bypass the BitLocker Device Encryption feature on the system storage device. An attacker with physical access to the target could exploit this vulnerability to gain access to encrypted data.

Is there a script that I can copy and paste to implement a mitigation?

Yes. This script is an interim security fix that helps to reduce the risk of exploitation of the vulnerability.

The script is for WinRE and removes autofstx.exe from the BootExecute registry value. Since BootExecute runs programs very early in boot (even in recovery mode), removing this entry prevents that executable from running in a high‑privilege environment, reducing risk.

It works by mounting the WinRE image, editing its offline SYSTEM registry to remove the entry if present, then safely committing changes and re‑sealing WinRE so BitLocker trust remains intact.

It’s designed to be safe—if the autofstx.exe entry isn’t there, it exits without making changes.

<# .SYNOPSIS Removes autofstx.exe from the WinRE BootExecute registry value.

.DESCRIPTION This remediation script removes the "autofstx.exe" entry from the BootExecute REG_MULTI_SZ value inside the Windows Recovery Environment (WinRE) offline SYSTEM registry hive. This is a security fix to prevent autofstx.exe from executing during WinRE boot.

The script performs the following steps: 1. Verify administrator privileges 2. Verify WinRE is enabled 3. Mount the WinRE image via reagentc 4. Load the offline SYSTEM registry hive 5. Read BootExecute and remove autofstx.exe if present 6. Unload the offline hive 7. Unmount the WinRE image with commit 8. Disable and re-enable WinRE to re-seal BitLocker trust chain Exit 0 = Success (entry removed or not present) Exit 1 = Failure (error during remediation)

.PARAMETER MountPath Directory to use as the WinRE mount point. Created if it does not exist. Default: C:\Mount

.EXAMPLE # Standard run .\Remove-AutoFsTxFromWinRE.ps1

.EXAMPLE # Custom mount path .\Remove-AutoFsTxFromWinRE.ps1 -MountPath D:\mount

.NOTES Requirements: Windows with WinRE and reagentc support, Administrator privileges. The WinRE disable/enable cycle at the end is required to re-seal the BitLocker measurement chain after modifying the WinRE image.

THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#> param( [Parameter(Mandatory = $false)] [string]$MountPath = "C:\Mount" )

Target entry to remove from BootExecute

$EntryToRemove = "autofstx.exe"

Internal constant for the offline hive key name

$HiveName = "WinREHive"

State tracking for cleanup

$hiveLoaded = $false $imageMounted = $false $mountCreated = $false $changesMade = $false

Write-Host "Remove autofstx.exe from WinRE BootExecute"

1. Verify Administrator Privileges

PS Version: All | Admin: Yes | System Requirements: None

try { $identity = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = [Security.Principal.WindowsPrincipal]$identity $isAdmin = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if (-not $isAdmin) { Write-Host &quot;[1/8] Administrator check: FAILED&quot; -ForegroundColor Red Write-Host &quot; This script must be run as Administrator.&quot; Write-Host &quot; Right-click PowerShell and select 'Run as administrator'.&quot; exit 1 } Write-Host &quot;[1/8] Administrator check: Passed&quot; -ForegroundColor Green

} catch { Write-Warning "Error checking administrator privileges: $_" exit 1 }

2. Check WinRE Status

PS Version: All | Admin: Yes | System Requirements: reagentc.exe

try { $winreOutput = & reagentc /info 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "[2/8] WinRE status check: FAILED" -ForegroundColor Red Write-Warning "reagentc /info returned exit code $LASTEXITCODE" exit 1 } $winreOutputStr = $winreOutput -join "`n"

Make this check language agnostic

if ($winreOutputStr -match "[::]\s*Enabled\b") { Write-Host "[2/8] WinRE status: Enabled" -ForegroundColor Green } else { Write-Host "[2/8] WinRE status: NOT ENABLED. Exiting." -ForegroundColor Green exit 0 } } catch { Write-Warning "Error checking WinRE status: $_" exit 1 }

3. Mount WinRE Image

PS Version: All | Admin: Yes | System Requirements: reagentc.exe

try { if (-not (Test-Path $MountPath)) { New-Item -ItemType Directory -Path $MountPath -Force | Out-Null $mountCreated = $true Write-Host "[3/8] Created mount directory: $MountPath" } else { $existing = Get-ChildItem -Path $MountPath -Force -ErrorAction SilentlyContinue if ($existing) { Write-Host "[3/8] Mount WinRE image: FAILED" -ForegroundColor Red Write-Host " Mount directory $MountPath is not empty." Write-Host " Clean it or specify a different -MountPath." exit 1 } }

$mountOutput = &amp; reagentc /mountre /path $MountPath 2&gt;&amp;1 if ($LASTEXITCODE -ne 0) { Write-Host &quot;[3/8] Mount WinRE image: FAILED&quot; -ForegroundColor Red Write-Warning &quot;reagentc /mountre output: $mountOutput&quot; exit 1 } $imageMounted = $true Write-Host &quot;[3/8] WinRE image mounted: $MountPath&quot; -ForegroundColor Green

} catch { Write-Warning "Error mounting WinRE image: $_" exit 1 }

4. Load Offline SYSTEM Registry Hive

PS Version: All | Admin: Yes | System Requirements: reg.exe

try { # Locate the SYSTEM hive in the mounted WinRE image $hivePath = $null $hiveCandidates = @( "$MountPath\Windows\System32\config\SYSTEM", "$MountPath\windows\system32\config\SYSTEM" )

foreach ($candidate in $hiveCandidates) { if (Test-Path $candidate) { $hivePath = $candidate break } } if (-not $hivePath) { # Broader search as fallback $found = Get-ChildItem -Path $MountPath -Recurse -Filter &quot;SYSTEM&quot; -ErrorAction SilentlyContinue | Where-Object { $_.FullName -match &quot;config\\SYSTEM$&quot; } | Select-Object -First 1 if ($found) { $hivePath = $found.FullName } } if (-not $hivePath) { Write-Host &quot;[4/8] Load offline hive: FAILED&quot; -ForegroundColor Red Write-Warning &quot;Cannot locate SYSTEM hive in mounted WinRE image.&quot; # Cleanup: unmount with discard $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false exit 1 } Write-Host &quot;[4/8] Found SYSTEM hive: $hivePath&quot; $loadOutput = &amp; reg load &quot;HKLM\$HiveName&quot; $hivePath 2&gt;&amp;1 if ($LASTEXITCODE -ne 0) { Write-Host &quot;[4/8] Load offline hive: FAILED&quot; -ForegroundColor Red Write-Warning &quot;reg load output: $loadOutput&quot; # Cleanup: unmount with discard $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false exit 1 } $hiveLoaded = $true Write-Host &quot;[4/8] Hive loaded as HKLM\$HiveName&quot; -ForegroundColor Green

} catch { Write-Warning "Error loading offline hive: $_"

if ($imageMounted) { $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false } exit 1

}

5. Read BootExecute and Remove autofstx.exe

PS Version: All | Admin: Yes | System Requirements: None

try { # Determine active ControlSets from Select key $selectPath = "Registry::HKEY_LOCAL_MACHINE$HiveName\Select" $selectProps = Get-ItemProperty -Path $selectPath -ErrorAction SilentlyContinue

if ($selectProps -and $selectProps.Current) { $csNumbers = @($selectProps.Current) if ($selectProps.Default -and $selectProps.Default -ne $selectProps.Current) { $csNumbers += $selectProps.Default } $controlSets = $csNumbers | ForEach-Object { &quot;ControlSet{0:D3}&quot; -f [int]$_ } Write-Host &quot;[5/8] Active ControlSets (from Select key): $($controlSets -join ', ')&quot; } else { $controlSets = @(&quot;ControlSet001&quot;) Write-Host &quot;[5/8] Select key not readable, falling back to ControlSet001&quot; } # Remediate all relevant ControlSets $foundEntry = $false foreach ($cs in $controlSets) { $regPath = &quot;Registry::HKEY_LOCAL_MACHINE\$HiveName\$cs\Control\Session Manager&quot; $testResult = Get-ItemProperty -Path $regPath -Name &quot;BootExecute&quot; -ErrorAction SilentlyContinue if (-not $testResult) { Write-Host &quot; $cs\Session Manager\BootExecute: not found, skipping&quot; continue } $currentValue = $testResult.BootExecute if (-not $currentValue) { Write-Host &quot; $cs BootExecute: (empty)&quot; continue } # Remove matching entry (case-insensitive) $updatedValue = @($currentValue | Where-Object { $_ -and ($_ -ne $EntryToRemove) -and ($_ -notmatch &quot;^\s*$([regex]::Escape($EntryToRemove))\s*$&quot;) }) if ($updatedValue.Count -eq @($currentValue).Count) { Write-Host &quot; $cs BootExecute: '$EntryToRemove' not present&quot; continue } # Write updated REG_MULTI_SZ back Set-ItemProperty -Path $regPath -Name &quot;BootExecute&quot; -Value $updatedValue $foundEntry = $true Write-Host &quot; $cs BootExecute: removed '$EntryToRemove'&quot; -ForegroundColor Green # Verify the write $verifyValue = (Get-ItemProperty -Path $regPath -Name &quot;BootExecute&quot; -ErrorAction Stop).BootExecute Write-Host &quot; $cs verification: $($verifyValue -join '; ')&quot; } if (-not $foundEntry) { Write-Host &quot;[5/8] '$EntryToRemove' not found in any active ControlSet. No changes needed.&quot; -ForegroundColor Green # Cleanup: unload hive, unmount with discard [gc]::Collect() Start-Sleep -Seconds 1 $null = &amp; reg unload &quot;HKLM\$HiveName&quot; 2&gt;&amp;1 $hiveLoaded = $false $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false if ($mountCreated) { Remove-Item -Path $MountPath -Recurse -Force -ErrorAction SilentlyContinue } exit 0 } $changesMade = $true Write-Host &quot;[5/8] Removed '$EntryToRemove' from BootExecute&quot; -ForegroundColor Green

} catch { Write-Warning "Error modifying BootExecute: $_"

# Cleanup: unload hive, unmount with discard [gc]::Collect() Start-Sleep -Seconds 2 if ($hiveLoaded) { $null = &amp; reg unload &quot;HKLM\$HiveName&quot; 2&gt;&amp;1 $hiveLoaded = $false } if ($imageMounted) { $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false } exit 1

}

6. Unload Offline Registry Hive

PS Version: All | Admin: Yes | System Requirements: reg.exe

try { [gc]::Collect() Start-Sleep -Seconds 2

$unloadOutput = &amp; reg unload &quot;HKLM\$HiveName&quot; 2&gt;&amp;1 if ($LASTEXITCODE -ne 0) { Write-Warning &quot;First unload attempt failed, retrying...&quot; [gc]::Collect() Start-Sleep -Seconds 3 $unloadOutput = &amp; reg unload &quot;HKLM\$HiveName&quot; 2&gt;&amp;1 if ($LASTEXITCODE -ne 0) { Write-Host &quot;[6/8] Unload hive: FAILED&quot; -ForegroundColor Red Write-Warning &quot;reg unload output: $unloadOutput&quot; Write-Host &quot; Close any Registry Editor windows and retry.&quot; # Try to unmount with discard to avoid leaving image mounted $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false exit 1 } } $hiveLoaded = $false Write-Host &quot;[6/8] Offline hive unloaded&quot; -ForegroundColor Green

} catch { Write-Warning "Error unloading hive: $_"

$null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 $imageMounted = $false exit 1

}

7. Unmount WinRE Image with Commit

PS Version: All | Admin: Yes | System Requirements: reagentc.exe

try { if ($changesMade) { $unmountOutput = & reagentc /unmountre /path $MountPath /commit 2>&1 } else { $unmountOutput = & reagentc /unmountre /path $MountPath /discard 2>&1 }

if ($LASTEXITCODE -ne 0) { Write-Host &quot;[7/8] Unmount WinRE: FAILED&quot; -ForegroundColor Red Write-Warning &quot;reagentc /unmountre output: $unmountOutput&quot; # Attempt discard as fallback if ($changesMade) { Write-Host &quot; Attempting discard to avoid leaving image in broken state...&quot; $null = &amp; reagentc /unmountre /path $MountPath /discard 2&gt;&amp;1 } $imageMounted = $false exit 1 } $imageMounted = $false if ($changesMade) { Write-Host &quot;[7/8] WinRE image unmounted and committed&quot; -ForegroundColor Green } else { Write-Host &quot;[7/8] WinRE image unmounted (no changes)&quot; -ForegroundColor Green }

} catch { Write-Warning "Error unmounting WinRE image: $_" exit 1 }

8. Re-seal WinRE (Disable + Enable Cycle for BitLocker Trust Chain)

PS Version: All | Admin: Yes | System Requirements: reagentc.exe, BitLocker

try { if (-not $changesMade) { Write-Host "[8/8] Re-seal WinRE: Skipped (no changes made)" -ForegroundColor Green } else { $disableOutput = & reagentc /disable 2>&1 if ($LASTEXITCODE -ne 0) { Write-Warning "reagentc /disable returned non-zero: $disableOutput" } else { Write-Host " WinRE disabled." }

$enableOutput = &amp; reagentc /enable 2&gt;&amp;1 if ($LASTEXITCODE -ne 0) { Write-Host &quot;[8/8] Re-seal WinRE: FAILED&quot; -ForegroundColor Red Write-Warning &quot;reagentc /enable output: $enableOutput&quot; Write-Host &quot; WinRE may need manual recovery. Run: reagentc /enable&quot; exit 1 } Write-Host &quot;[8/8] WinRE re-sealed (disable + enable cycle)&quot; -ForegroundColor Green }

} catch { Write-Warning "Error during WinRE re-seal: $_" Write-Host " Run manually: reagentc /enable" exit 1 }

Write-Host "" Write-Host " COMPLETE: '$EntryToRemove' removed from WinRE BootExecute" -ForegroundColor Green

Cleanup: remove mount directory if we created it

if ($mountCreated -and (Test-Path $MountPath)) { Remove-Item -Path $MountPath -Recurse -Force -ErrorAction SilentlyContinue }

Обновления

ПродуктСтатьяОбновление
Windows 11 Version 24H2 for x64-based Systems
Windows Server 2025
Windows Server 2025 (Server Core installation)
Windows 11 Version 25H2 for x64-based Systems
Windows 11 version 26H1 for x64-based Systems

Показывать по

Возможность эксплуатации

Publicly Disclosed

Yes

Exploited

No

Latest Software Release

Exploitation More Likely

EPSS

Процентиль: 66%
0.01249
Низкий

6.8 Medium

CVSS3

Связанные уязвимости

CVSS3: 6.8
nvd
2 месяца назад

Microsoft is aware of a security feature bypass vulnerability in Windows publicly referred to as &quot;YellowKey&quot;. The proof of concept for this vulnerability has been made public violating coordinated vulnerability best practices. We are issuing this CVE to provide mitigation guidance that can be implemented to protect against this vulnerability until the security update is made available. Mitigation FAQs Should I leverage the temporary mitigation? Microsoft recommends that you consider implementing these mitigations if you are concerned your devices and data are at risk of being compromised or stolen. For example, if your organization’s employees take their work devices home or on business travel. What impact to service availability/management could be caused by implementing the mitigations? Implementing these mitigations will not impact service availability or management operations. Do customers need to revert the changes made to mitigate the vulnerability once the security u

CVSS3: 6.8
github
2 месяца назад

Microsoft is aware of a security feature bypass vulnerability in Windows publicly referred to as &quot;YellowKey&quot;. The proof of concept for this vulnerability has been made public violating coordinated vulnerability best practices. We are issuing this CVE to provide mitigation guidance that can be implemented to protect against this vulnerability until the security update is made available.

CVSS3: 7.8
fstec
3 месяца назад

Уязвимость компонента BitLocker операционных систем Windows, позволяющая нарушителю получить несанкционированный доступ к защищаемой информации

EPSS

Процентиль: 66%
0.01249
Низкий

6.8 Medium

CVSS3