Một lỗ hổng cross-site scripting (XSS) nghiêm trọng đã được phát hiện trong thư viện MapLibre GL JS, có khả năng khiến các ứng dụng và khoảng 2.7 triệu người dùng gặp phải các cuộc tấn công zero-click. Lỗ hổng này, được theo dõi với mã định danh CVE-2026-85061 và GitHub Security Advisory GHSA-jrc7-96c5-q579, ảnh hưởng đến các phiên bản maplibre-gl 6.4.0 trở về trước.
MapLibre GL JS và Cơ chế Hoạt động
MapLibre GL JS là một thư viện JavaScript mã nguồn mở được sử dụng để hiển thị bản đồ tương tác trên các trang web và ứng dụng web. Lỗ hổng tồn tại trong hàm DOM.sanitize() của thư viện, vốn có chức năng loại bỏ các thuộc tính HTML không an toàn trước khi chèn nội dung vào trang.
Các nhà nghiên cứu đã phát hiện ra rằng cơ chế làm sạch (sanitizer) xử lý các thuộc tính của một phần tử thông qua một đối tượng NamedNodeMap của trình duyệt. Trong quá trình lặp qua các thuộc tính, hàm này loại bỏ các thuộc tính nguy hiểm bằng cách sử dụng phương thức elem.removeAttribute().
Cơ chế Tấn công Khai thác Lỗ hổng
Việc loại bỏ thuộc tính trong quá trình lặp đã tạo ra một tình huống dịch chuyển chỉ số. Sau khi một thuộc tính bị loại bỏ, thuộc tính kế tiếp sẽ dịch chuyển vào vị trí đó, nhưng vòng lặp lại tiếp tục với chỉ số tiếp theo. Điều này cho phép cơ chế làm sạch bỏ sót một thuộc tính độc hại nằm ngay sau một thuộc tính không an toàn khác.
Kẻ tấn công có thể khai thác lỗ hổng này bằng cách cung cấp mã HTML chứa các thuộc tính nguy hiểm liên tiếp. Một ví dụ được cung cấp trong tư vấn của GitHub liên quan đến một phần tử details với các thuộc tính như open, onload, và ontoggle. Cơ chế làm sạch có thể loại bỏ một thuộc tính độc hại nhưng lại không kiểm tra hoặc loại bỏ trình xử lý sự kiện (event handler) liền kề.
Khi MapLibre sau đó chèn các payload còn sót lại vào innerHTML thông qua thành phần điều khiển thuộc tính (attribution control), trình xử lý sự kiện có thể tự động thực thi. Cuộc tấn công này không yêu cầu người dùng tương tác, xác thực hoặc đặc quyền nào, làm cho nó đặc biệt nghiêm trọng đối với các dịch vụ tải kiểu bản đồ, văn bản thuộc tính, hoặc dữ liệu bản đồ khác từ các nguồn bên thứ ba.
Các ứng dụng cho phép người dùng cung cấp thuộc tính tùy chỉnh cũng có thể bị tấn công nếu chúng truyền các giá trị đó cho MapLibre mà không có sự xác thực và làm sạch độc lập.
Tác động và Mức độ Nghiêm trọng
Việc khai thác thành công có thể cho phép kẻ tấn công thực thi mã JavaScript trong ngữ cảnh bảo mật của trình duyệt nạn nhân. Tùy thuộc vào ứng dụng bị ảnh hưởng, điều này có thể dẫn đến việc đánh cắp phiên làm việc của tài khoản, thực hiện các hành động trái phép, truy cập dữ liệu nhạy cảm, chuyển hướng đến các trang lừa đảo hoặc thao túng nội dung bản đồ hiển thị.
Vấn đề này đã được xếp hạng mức độ nghiêm trọng là critical theo CVSS v3.1. Vectơ tấn công là CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N, cho thấy khả năng khai thác qua mạng, độ phức tạp thấp, không yêu cầu đặc quyền và không cần người dùng tương tác.
Tư vấn đã phân loại điểm yếu này là CWE-79, lỗi trung hòa không đúng cách đầu vào trong quá trình tạo trang web, thường được biết đến với tên gọi cross-site scripting.
Biện pháp Khắc phục và Vá lỗi
Những người bảo trì MapLibre đã khắc phục lỗ hổng này trong phiên bản maplibre-gl 6.4.1. Bản vá thay đổi hành vi của cơ chế làm sạch bằng cách tạo một bản sao tĩnh của các thuộc tính phần tử bằng cách sử dụng Array.from(elem.attributes). Sau đó, mã có thể kiểm tra và loại bỏ các thuộc tính một cách an toàn mà không làm thay đổi tập hợp đang được lặp.
Các tổ chức sử dụng MapLibre GL JS nên cập nhật ngay lập tức lên phiên bản 6.4.1 hoặc phiên bản mới nhất hiện có. Đội ngũ an ninh mạng cũng nên xác định các ứng dụng xử lý siêu dữ liệu kiểu bản đồ không đáng tin cậy, chuỗi thuộc tính của bên thứ ba, hoặc các trường thuộc tính tùy chỉnh do người dùng kiểm soát.
Là một biện pháp giảm thiểu tạm thời, các nhà phát triển nên làm sạch (sanitize) dữ liệu đầu vào liên quan đến thuộc tính trước khi cung cấp cho MapLibre. Tuy nhiên, việc cập nhật phiên bản vẫn là biện pháp khắc phục đáng tin cậy nhất vì logic dễ bị tổn thương là một phần của quy trình làm sạch DOM nội bộ của thư viện.
Tìm hiểu 7 Giai đoạn Triển khai AI SOC theo Chỉ số Đo lường – Tải xuống Sổ tay Triển khai AI SOC Miễn phí 2026.










