Các lỗ hổng mới liên tục xuất hiện trên Zimbra - Phần II

2. CVE-2022-30333 | Lỗ hổng Path Traversal trên UnRar cho phép thực thi mã từ xa trên Zimbra

2.1. Điều kiện tiên quyết

• Máy chủ sử dụng Zimbra các phiên bản:

o 8.x trước 8.8.15 patch 32.

o 9.x trước 9.0.0 patch 25.

• Zimbra có cài đặt unrar phiên bản trước 6.1.7 và 6.12.

2.2. Thông tin chi tiết

Nguy cơ xảy ra do Zimbra sử dụng công cụ của bên thứ 3 là unrar, công cụ kiểm tra virus và email spam. Unrar tồn tại lỗ hổng Path Traversal CVE-2022-30333.

CVE-2022-30333 - Lỗ hổng File Write trên unrar:

Một lệnh gọi unrar điển hình trên command-line có thể giống như sau:

• unrar x archive.rar /tmp/extract

Lệnh trên sẽ trích xuất tất cả các tệp trong archive.rar ra thư mục /tmp/extract.

Tin tặc có thể trích xuất một symbolic link ra ngoài thư mục trích xuất, sau đó dereference link này với tệp thứ 2.

Một số symbolic link độc hại trên Unix và Windows:

Hàm IsRelativeSymLinkSafe()thực hiện kiểm tra relative symbolic link:

extinfo.cpp:

Hình 12. Hàm IsRelativeSymLinkSafe() (Nguồn: Sonar Source)

Hàm này kiểm tra xem liệu symbolic link mục tiêu có bao gồm ../ trên Unix và ..\ trên Windows hay không. Nếu có dấu hiệu path traversal, symbolic link sẽ được xem là không an toàn.

Sau khi symbolic link được kiểm tra, link này sẽ được unrar chuẩn hóa. Để đảm bảo rằng một tệp tin nén RAR được tạo trên Windows có thể được trích xuất trên hệ thống Unix, kí tự (\) sẽ được chuyển đổi thành (/).  Hàm DosSlashToUnix sẽ thực hiện điều này.

ulinks.cpp:

Hình 13. Hàm ulinks (Nguồn: Sonar Source)

Kẻ tấn công có thể tạo một tệp tin nén RAR gồm một symbolic link thuộc loại FSREDIR_WINSYMLINK với mục tiêu là ..\..\..\tmp/shell. Khi tệp này được giải nén trên hệ thống Unix, symbolic link được coi là an toàn vì không có chuỗi ../ nào. Tuy nhiên, do hàm DosSlashToUnix, symbolic link cuối cùng được chuyển thành ../../../tmp/shell. Lợi dụng điều này, tin tặc có thể chèn tệp ở bất kì đâu trên hệ thống mục tiêu.

Khai thác lỗ hổng trên Zimbra:

Khi hệ thống nhận được một email bao gồm một tệp đính kèm có chứa tệp tin nén RAR, nó sẽ được Amavis tự động trích xuất và phân tích dựa trên unrar. Trong Zimbra, phần lớn service sử dụng Amavis server chạy dưới quyền zimbra user.

Điều này cho phép tin tặc tạo và ghi đè các tệp trên thư mục của các service khác, và tin tặc có thể thực thi mã từ xa bằng nhiều cách khai thác khác nhau.

Một trong số các cách tấn công được sử dụng:

  1. Tạo một JSP shell ở web directory (/opt/zimbra/jetty_base/webapps/zimbra/public/) bởi vì Jetty chạy dưới quyền zimbra user.
  2. Sử dụng file-based command injection:

Tin tặc có thể khai thác một cronjob chạy mỗi ngày một lần để xử lý các tệp log.

Tại zm-core-utils/src/libexec/client_usage_report.py có thể thấy cách danh sách các tệp log được phân tích cú pháp, sau đó tên của mỗi tệp log được nhúng vào lệnh hệ thống mà không cần kiểm tra:

Hình 14. client_usage_report.py (Nguồn: Sonar Source)

Vì thư mục log do zimbra sở hữu, tin tặc có thể tạo một tệp log access_log$(date) để kích hoạt cron job.

3. Tạo một SSH key:

Theo mặc định, zimbra user có thể SSH vào hệ thống. Do đó, tin tặc có thể tạo một tệp authorized_keys để đăng nhập hệ thống với SSH key của tin tặc.

Entry mặc định passwd của zimbra user có dạng như sau:

/etc/passwd

zimbra:x:997:998::/opt/zimbra:/bin/bash

2.3. Kịch bản khai thác lỗ hổng

  1. Tin tặc gửi một tệp đính kèm tới hệ thống, bao gồm một tệp tin nén RAR có chứa payload độc hại để khai thác lỗ hổng trên unrar.
  2. Tin tặc sử dụng một trong các cách khai thác ở trên để thực thi mã từ xa với quyền zimbra user.
  3. Tin tặc khai thác các lỗ hổng leo thang đặc quyền tồn tại trên Zimbra để có được đặc quyền root trên hệ thống.

Ví dụ như lỗ hổng:

https://darrenmartyn.ie/2021/10/27/zimbra-zmslapd-local-root-exploit/

2.4. Dấu hiệu nhận biết

Các dấu hiệu nhận biết khi tin tặc khai thác lỗ hổng:

Tin tặc gửi email đến hệ thống với tệp đính kèm có một tệp tin nén dạng rar, trong đó có chứa tệp với tên chứa:

• ..\ (Dấu hiệu Path Traversal)

• Ngoài ra; trên thực tế, dấu hiệu tấn công có thể là trong tệp rar có chứa tệp với tên là một trong các chuỗi sau:

o /opt/zimbra/jetty_base/webapps/zimbra/public/

o /opt/zimbra/log/access_log

o /opt/zimbra/.ssh/authorized_keys

2.5. Biện pháp khắc phục

VCS-TI khuyến nghị quản trị viên cập nhật phiên bản Zimbra lên 8.8.15 Patch 32 và 9.0.0 Patch 25.

• 8.8.15 Patch 32:

o https://wiki.zimbra.com/wiki/Zimbra_Releases/8.8.15/P32#Security_Fixes

• 9.0.0 Patch 25:

o https://wiki.zimbra.com/wiki/Zimbra_Releases/9.0.0/P25#Security_Fixes

Cách khắc phục tạm thời:

• Sửa tệp cấu hình để sử dụng 7zip thay vì unrar và khởi động lại dịch vụ Amavis. Chi tiết về cách sửa tệp cấu hình được trình bày tại:

https://github.com/Zimbra/zm-amavis/commit/94308d6e1192495fd1cd2ccbd8d85aef5eff8084.

3. CVE-2022-27925 | CVE-2022-37042 | Nguy cơ thực thi mã từ xa trên Zimbra

3.1. Điều kiện tiên quyết

• Hệ thống sử dụng Zimbra các phiên bản:

o 8.x trước 8.8.15 patch 31

o 9.x trước 9.0.0 patch 24

3.2. Thông tin chi tiết

CVE-2022-27925 được công bố vào tháng 3 năm 2022 và được vá trong các phiên bản 8.8.15P31 và 9.0.0P24. Nguy cơ xảy ra do hệ thống tồn tại lỗ hổng Path Traversal trong quá trình giải nén tệp Zip, cho phép tin tặc tải lên tệp tùy ý trên hệ thống. Tại thời điểm này, việc khai thác lỗ hổng yêu cầu tin tặc phải có thông tin xác thực với quyền quản trị viên. Điều này khiến việc khai thác hàng loạt khó xảy ra hơn.

Hình 15. Hàm tồn tại lỗ hổng (Nguồn: http://www.yang99.top/index.php/archives/82)

Hàm unzipToTempFiles tồn tại lỗ hổng Path Traversal, cụ thể là tại

ZipBackupTarget.this.mZipIn.getNextEntry():

Hình 16. Hàm unzipToTempFiles (Nguồn: http://www.yang99.top/index.php/archives/82)

Tin tặc có thể khai thác lỗ hổng cho phép bỏ qua xác thực khi sử dụng endpoint mboximport kết hợp với CVE-2022-27925. Từ đây, tin tặc có thể tải lên tệp tùy ý trên hệ thống mà không cần xác thực, qua đó thực thi mã từ xa. Lỗ hổng bỏ qua xác thực được chỉ định với mã CVE-2022-37042. Lỗ hổng này được vá trong bản cập nhật 9.0.0P26 và 8.8.15P33.

Nguy cơ xảy ra tại hàm doPost nằm trong MailboxImport servlet:

Hình 17. Hàm doPost()

Hàm này kiểm tra người dùng đã xác thực với quyền quản trị viên hay chưa bằng cách trích xuất thông tin token xác thực thông qua getAuthTokenFromCookie. Tuy nhiên, hàm không trả về trạng thái cho hệ thống, dẫn tới việc tin tặc chỉ cần thiết lập chính xác các tham số trong URL để khai thác lỗ hổng thành công và bỏ qua xác thực.

3.3. Kịch bản khai thác

  1. Tin tặc tạo tệp zip có chứa tệp với tên chứa đường dẫn của tệp mà tin tặc muốn tạo trên hệ thống.
  2. Tin tặc gửi truy vấn HTTP sử dụng phương thức POST tới Zimbra Servlet MailboxImport (/service/extension/backup/mboximport) và đưa tệp zip vào trong nội dung của truy vấn (CVE-2022-37042 + CVE-2022-27925).
  3. Tệp được tạo trên hệ thống có thể là webshell cho phép tin tặc thực thi mã từ xa và chiếm quyền điều khiển hệ thống.

3.4. Dấu hiệu nhận biết

Gói tin tin tặc sử dụng để khai thác lỗ hổng có đồng thời các dấu hiệu sau:

• Là truy vấn HTTP sử dụng phương thức POST.

• Truy vấn tới endpoint /service/extension/backup/mboximport.

• Chứa các chuỗi "account-name=", "ow=" trong URI.

• Có chứa "../" trong nội dung truy vấn (dấu hiệu Path Traversal).

Ví dụ về truy vấn của tin tặc:

Hình 18. Ví dụ về truy vấn của tin tặc (Minh họa bằng công cụ Burpsuite)

Cách kiểm tra xem hệ thống Zimbra có lỗ hổng CVE-2022-37042 hay không:

Lưu ý:

- Thư mục cài đặt Zimbra mặc định tại /opt/Zimbra, nếu cài ở thư mục khác cần thay đổi đường dẫn cho phù hợp.

- Lỗ hổng xảy ra ở component mailbox server (ZCS store) nên chỉ cần kiểm tra các mailbox server. Đây là component của Zimbra để chạy webapp trên Jetty, từ đó cung cấp giao diện web cho người dùng.

Bước 1. Kiểm tra trên mỗi mailbox server – ZCS Store component xem có tệp /opt/zimbra/lib/ext/backup/zimbrabackup.jar không?

- Nếu có tệp -> máy chủ có chứa lỗ hổng, cần phương án khắc phục.

- Nếu không có tệp -> thực hiện tiếp bước 2.

Bước 2. Truy cập URI https://<domain>/service/extension/backup/mboximport và https://<domain>:7071/service/extension/backup/mboximport, sau đó kiểm tra tệp log zmmailboxd.out trên mỗi mailbox server – ZCS Store component (tệp log mặc định tại /opt/zimbra/log/zmmailboxd.out).

Kiểm tra xem có dòng log nào báo exception như bên dưới không com.zimbra.common.service.ServiceException: system failure: Extension HTTP handler not found at /backup/mboximport.

- Nếu không có dòng log -> máy chủ có nguy cơ chứa lỗ hổng, cần phương án khắc phục.

- Nếu có dòng log -> server không chứa lỗ hổng.

3.5. Biện pháp khắc phục

Để đảm bảo an toàn thông tin cho tổ chức, VCS-TI khuyến nghị quản trị viên cập nhật hệ thống Zimbra tới phiên bản 8.8.15 patch 32 hoặc 9.0.0 patch 26.

Trong trường hợp chưa thể cập nhật phiên bản, vui lòng thực hiện các biện pháp khắc phục tạm thời sau:

• Chặn tất cả các truy vấn đến endpoint /service/extension/backup/mboximport.

Quản trị viên cần rà soát, kiểm tra hệ thống, đặc biệt là thư mục cài đặt Zimbra trên hệ thống (thường là /opt/Zimbra) có tồn tại các webshell, tệp .jsp lạ, ... cho thấy dấu hiệu hệ thống đã bị khai thác để tiến hành loại bỏ.

3.6. Thực trạng của CVE-2022-27925 và CVE-2022-37042

Theo thông tin Viettel Threat Intelligence ghi nhận; tại thời điểm thông tin chi tiết và PoC của lỗ hổng được công bố, trong số 74951 địa chỉ IP sử dụng Zimbra trên toàn thế giới công khai trên shodan, có tới gần 2500 IP tồn tại 2 lỗ hổng CVE-2022-27925 + CVE-2022-37042 và có nguy cơ bị khai thác.

Hình 19. Nhiều hệ thống trên thế giới tồn tại 2 lỗ hổng CVE-2022-27925 + CVE-2022-37042 (Nguồn:Viettel Threat Intelligence) 

Theo Volexity, hơn 1.000 IP trên toàn thế giới đã bị các nhóm tin tặc tấn công và tải lên webshell, và con số thực sự có thể cao hơn rất nhiều.

Bảng 1. Thống kê số lượng IP sử dụng Zimbra đã bị tấn công và tải lên webshell (Theo Volexity)

Tại Việt Nam; vào ngày 6/8/2022, Viettel Threat Intelligence ghi nhận thông tin 2 lỗ hổng CVE-2022-37042 + CVE-2022-27925 đang được rà soát, khai thác trên không gian mạng. Tại thời điểm này, thông tin chi tiết và PoC của các lỗ hổng chưa được công bố trên không gian mạng.

Hình 20. Tin tặc sử dụng PoC chưa được công bố để rà quét lỗ hổng CVE-2022-27925 từ ngày 6/8

Tin tặc đã sử dụng PoC chưa được công bố để tấn công, rà soát lỗ hổng; điều này cho thấy tầm quan trọng của việc các cơ quan, tổ chức nắm bắt được thông tin kịp thời và đưa ra phương án để ngăn ngừa nguy cơ khi thông tin Advisory của lỗ hổng xuất hiện trên không gian mạng.

Theo Viettel Threat Intelligence ghi nhận; tới thời điểm hiện tại, các nhóm tấn công vẫn đang tích cực rà soát, khai thác CVE-2022-37042 và CVE-2022-27925 trên không gian mạng.

Hình 21. Các lỗ hổng vẫn đang được các nhóm tấn công rà soát và khai thác (Nguồn: Viettel Threat Intelligence)

Chỉ tính từ ngày 16/8/2022 tới ngày 22/8/2022, Viettel Cyber Security đã ghi nhận 200 cảnh báo liên quan đến việc CVE-2022-27925 bị các nhóm tin tặc khai thác và rà soát.

IV. Nhận định của Viettel Threat Intelligence

Trong khoảng thời gian cuối năm 2022, các lỗ hổng Zimbra vẫn sẽ là mục tiêu của nhiều nhóm tấn công trên toàn thế giới và các nhà nghiên cứu bảo mật. Đi kèm với đó là các lỗ hổng trên các sản phẩm máy chủ mail như Microsoft Exchange,... Đặc biệt, khi các sản phẩm phổ biến xuất hiện lỗ hổng bảo mật nghiêm trọng thì các sản phẩm này sẽ được tin tặc và các nhà nghiên cứu chú ý. Các lỗ hổng liên quan sẽ tiếp tục được công bố. Quản trị viên cần nắm bắt thông tin kịp thời để đưa ra phương án ngăn ngừa nguy cơ.  

V. Dấu hiệu nhận biết của các lỗ hổng

1. CVE-2022-27924

Gói tin tin tặc sử dụng để khai thác lỗ hổng có đồng thời các dấu hiệu sau:

• Là truy vấn HTTP.

• Có chuỗi "%0A|%0D trong URI (dấu hiệu tin tặc chèn các dấu xuống dòng để ngăn cách các lệnh được gửi vào Memcached).

2. CVE-2022-30333

Các dấu hiệu nhận biết khi tin tặc khai thác lỗ hổng:

Tin tặc gửi email đến hệ thống với tệp đính kèm có một tệp tin nén dạng rar, trong đó có chứa tệp với tên chứa:

• ..\ (Dấu hiệu Path Traversal)

• Ngoài ra; trên thực tế, dấu hiệu tấn công có thể là trong tệp rar có chứa tệp với tên là một trong các chuỗi sau:

o /opt/zimbra/jetty_base/webapps/zimbra/public/

o /opt/zimbra/log/access_log

o /opt/zimbra/.ssh/authorized_keys

3. CVE-2022-27925 | CVE-2022-37042

Gói tin tin tặc sử dụng để khai thác lỗ hổng có đồng thời các dấu hiệu sau:

• Là truy vấn HTTP sử dụng phương thức POST.

• Truy vấn tới endpoint /service/extension/backup/mboximport.

• Chứa các chuỗi trong URI: "account-name=", "ow=".

• Có chứa "../" trong nội dung truy vấn (dấu hiệu Path Traversal).

Rule Suricata:

alert http any any -> any any (msg:"Detecting CVE-2022-27925 Zimbra attack"; flow:to_server; content:"POST"; http_method; content:"/service/extension/backup/mboximport"; startswith; http_uri; content:"account-name="; http_uri; content:"ow="; http_uri; content:"../"; http_client_body; classtype:web-application-attack; sid:202241841; rev:1;)

Rule yara để phát hiện webshell:

https://github.com/volexity/threat-intel/blob/main/2022/2022-08-10%20Mass%20exploitation%20of%20(Un)authenticated%20Zimbra%20RCE%20CVE-2022-27925/yara.yar

VI. IOC

Một số IP tấn công mà VCS-TI ghi nhận được:

• 103[.]108[.]192[.]238

• 104[.]167[.]247[.]66

• 118[.]31[.]1[.]6

• 123[.]20[.]147[.]155

• 125[.]212[.]138[.]71

• 136[.]144[.]42[.]47

• 141[.]98[.]90[.]24

• 159[.]223[.]75[.]183

• 171[.]255[.]192[.]249

• 178[.]173[.]230[.]202

• 180[.]65[.]235[.]83

• 194[.]233[.]93[.]67

• 222[.]255[.]214[.]209

• 27[.]68[.]241[.]28

• 3[.]26[.]14[.]182

• 34[.]81[.]11[.]157

• 45[.]76[.]223[.]23

• 5[.]62[.]34[.]42

• 61[.]76[.]54[.]186

• 64[.]52[.]80[.]253

• 89[.]38[.]225[.]143

• 91[.]216[.]169[.]233

• 92[.]118[.]39[.]86

• 92[.]223[.]85[.]248

• 98[.]159[.]232[.]206

• 98[.]159[.]232[.]88

Lưu ý: Tin tặc có thể sử dụng VPN nên VCS-TI khuyến nghị không thêm IOC vào hệ thống. Quản trị viên có thể sử dụng IOC để điều tra và rà soát dấu hiệu tấn công trên các giải pháp bảo vệ.

VII. Tài liệu tham khảo

https://blog.sonarsource.com/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/

https://blog.sonarsource.com/zimbra-pre-auth-rce-via-unrar-0day/

https://www.volexity.com/blog/2022/08/10/mass-exploitation-of-unauthenticated-zimbra-rce-cve-2022-27925/