Trong blog này, chúng tôi khám phá CVE-2024-36401—một lỗ hổng bảo mật được tìm thấy trong GeoServer, một máy chủ mã nguồn mở dựa trên Java được sử dụng rộng rãi để thao tác và chia sẻ dữ liệu không gian địa lý. Lỗ hổng này, có thể cho phép RCE (thực thi mã từ xa) bởi những người dùng chưa xác thực, nhấn mạnh tầm quan trọng của việc vá lỗi triển khai GeoServer càng sớm càng tốt.
Trong phân tích bảo mật mới nhất của chúng tôi, hai OPSWAT Các nghiên cứu sinh sau đại học điều tra mối đe dọa này bằng cách:
- Kiểm tra sâu các vectơ tấn công của CVE
- Xác định lỗ hổng bảo mật mà kẻ tấn công có thể sử dụng để khai thác GeoServer
- Mô phỏng cách kẻ tấn công có thể xâm phạm các triển khai GeoServer
Chúng tôi cũng sẽ chia sẻ cách OPSWAT Công nghệ SBOM có thể phát hiện lỗ hổng này, đồng thời cung cấp các bước hành động để các nhóm bảo vệ cơ sở hạ tầng không gian địa lý của mình trước khi kẻ tấn công tấn công.

Tổng quan về GeoServer
GeoServer là máy chủ mã nguồn mở dựa trên Java được thiết kế để xem, chỉnh sửa và chia sẻ dữ liệu không gian địa lý. Ban đầu được TOPP (Dự án Quy hoạch Mở) ra mắt vào năm 2001, GeoServer được phát triển để cải thiện sự tham gia của công chúng vào chính phủ và quy hoạch đô thị thông qua trao đổi dữ liệu không gian mở. Sau hơn hai thập kỷ, GeoServer đã phát triển thành một nền tảng mạnh mẽ có khả năng xử lý nhiều định dạng dữ liệu không gian khác nhau và tích hợp với nhiều nguồn dữ liệu khác nhau.
GeoServer cung cấp các dịch vụ dựa trên tiêu chuẩn OGC (Open Geospatial Consortium) , bao gồm:
- WFS (Dịch vụ tính năng web) – Cho phép tạo, sửa đổi và trao đổi thông tin địa lý định dạng vector bằng HTTP .
- WCS (Dịch vụ phủ sóng web) – Tạo điều kiện truy cập vào dữ liệu raster (ví dụ: hình ảnh vệ tinh) để lập mô hình và phân tích phức tạp.
- WMS (Dịch vụ bản đồ web) – Cung cấp giao diện HTTP đơn giản để yêu cầu hình ảnh bản đồ.
Bối cảnh về CVE-2024-36401
CVE-2024-36401 ảnh hưởng đến các phiên bản GeoServer trước 2.25.2, 2.24.4 và 2.23.6. Lỗi này phát sinh từ việc đánh giá không an toàn các tên thuộc tính dưới dạng biểu thức XPath trên nhiều tham số yêu cầu OGC. Kẻ tấn công có thể khai thác lỗ hổng này để tạo RCE (thực thi mã từ xa) bằng cách chèn các đầu vào được tạo thủ công vào cài đặt GeoServer mặc định.
Theo GitHub Security Advisories, lỗ hổng này có điểm CVSS v3.1 là 9,8 (Nguy cấp).
Các tính năng đơn giản và phức tạp của GeoServer
GeoServer hỗ trợ cả các loại đối tượng đơn giản và phức tạp để chứa các cấu trúc dữ liệu không gian địa lý khác nhau, từ các tập dữ liệu phẳng đến phức tạp, lồng nhau. Tuy nhiên, việc xử lý sai các biểu thức XPath trên các loại dữ liệu này là nguyên nhân khiến CVE-2024-36401 có thể khai thác được.
Tính năng đơn giản
Các kiểu đối tượng đơn giản biểu diễn dữ liệu không gian địa lý trực tiếp ở định dạng phẳng, trong đó mỗi hàng trong cơ sở dữ liệu tương ứng với một đối tượng không gian địa lý; và mỗi thuộc tính ánh xạ trực tiếp đến một phần tử XML.
Ví dụ, một bảng biểu diễn các công ty với các cột như ID, tên và vị trí có thể dễ dàng được chuyển đổi thành các tính năng XML đơn giản.
nhận dạng | tên | vị trí |
1 | OPSWAT | ĐIỂM (10.769829, 106.685248) |
Tính năng phức tạp
Ngược lại, các kiểu đối tượng phức tạp xử lý dữ liệu phức tạp hơn. Kiểu đối tượng này hỗ trợ các thuộc tính lồng nhau và mối quan hệ giữa các tập dữ liệu khác nhau. Các lược đồ phức tạp này không được tạo tự động mà được xác định bằng các tiêu chuẩn cộng đồng, như được nêu trong tiện ích mở rộng Application Schema của GeoServer.
Ví dụ:
Trong bảng công ty trước đó, chúng tôi thêm một khóa ngoại hướng dẫn
để mô tả mối quan hệ giữa một công ty và đơn vị địa chất tương đương của nó:
nhận dạng | tên | vị trí | hướng dẫn |
1 | OPSWAT | ĐIỂM (10.769829, 106.685248) | 12 |
Thông tin đơn vị địa chất được lưu trữ riêng biệt trong bảng đơn vị địa chất
:
hướng dẫn | bình đựng tro cốt | Sự miêu tả |
12 | urn:x-demo:feature:GeologicUnit:12 | Đá phiến biến chất |
Bằng cách sử dụng các bảng này, chúng ta có thể lập bản đồ công ty thành một sa:Công ty lấy mẫu
, trong đó có một lồng nhau gsml:Đơn vị địa chất
Thiết lập này tạo ra một tính năng phức tạp vì nó liên quan đến các kiểu lồng nhau và các mối quan hệ được xác định bởi các thông số kỹ thuật của cộng đồng thay vì các lược đồ được tạo tự động.
Tính linh hoạt như vậy rất cần thiết để mô hình hóa các tình huống thực tế phức tạp, nhưng cũng gây ra lỗ hổng do dựa vào các kỹ thuật xử lý tiên tiến như đánh giá JXPath để quản lý hiệu quả các cấu trúc lồng nhau.
Sự phát sinh của lỗ hổng
GeoServer được thiết kế để sử dụng đánh giá XPath để xử lý các loại đối tượng phức tạp (chẳng hạn như các đối tượng được tìm thấy trong kho dữ liệu Application Schema). Nhưng do xử lý không đúng cách, nó cũng áp dụng đánh giá XPath nhầm vào các loại đối tượng đơn giản. Điều này tạo ra một vectơ tấn công vì:
- GeoServer dựa vào thư viện GeoTools để đánh giá tên thuộc tính trong quá trình truy xuất dữ liệu.
- Các
commons-jxpath
thư viện, được sử dụng để xử lý biểu thức XPath, thiếu xác thực thích hợp, có thể thực thi mã tùy ý khi xử lý biểu thức XPath. - Lỗ hổng này khiến tất cả các phiên bản GeoServer có nguy cơ bị tấn công RCE vì kẻ tấn công có thể tạo một yêu cầu độc hại khai thác lệnh thực thi XPath không an toàn này để kiểm soát máy chủ.
Tổng quan về quy trình khai thác
- MỘT
BƯU KIỆN
yêu cầu được gửi đếnLấy giá trị tài sản
hoạt động. Sau đó, GeoServer cố gắng truy xuất thuộc tính (hoặcgiá trịTham chiếu
) cho một tính năng nhất định. - Nếu thuộc tính được yêu cầu tồn tại trong bảng Chi tiết loại đối tượng, GeoServer sẽ xử lý thuộc tính đó một cách bình thường.
- Tuy nhiên, nếu thuộc tính không được liệt kê, GeoServer sẽ quay lại
commons-jxpath
thư viện để diễn giải tham số yêu cầu như một biểu thức XPath. - Từ
commons-jxpath
cho phép thực thi mã Java trực tiếp từ XPath, cơ chế dự phòng này có khả năng cho phép khai thác các tham số yêu cầu do người dùng cung cấp để thực thi mã từ xa. Nói một cách đơn giản, kẻ tấn công có thể đưa mã độc vào để đạt được RCE.
Khai thác và phân tích lỗ hổng
JXPath và Cầu thực thi Java
Các commons-jxpath
thư viện, thường được gọi là JXPath, cho phép điều hướng qua đồ thị đối tượng Java (JavaBeans, đối tượng DOM, v.v.) bằng cú pháp XPath. Ví dụ, nếu bạn có một đối tượng Employee đơn giản với các thuộc tính như tên và địa chỉ, JXPath cho phép bạn truy vấn các thuộc tính đó như thể chúng là các nút trong tài liệu XML.
Khai thác các hàm mở rộng
Ngoài các hàm chuẩn, JXPath còn hỗ trợ các hàm mở rộng đóng vai trò là cầu nối tới Java. "Cầu nối tới Java" này rất quan trọng vì nó cho phép các hàm Java được gọi trực tiếp trong các truy vấn XPath, ví dụ:
Do có một số hạn chế về các phương thức Java có thể được gọi thông qua cầu nối này, nên kẻ tấn công có thể khai thác thực thi()
chức năng (hoặc các phương pháp tương tự) để thực thi các lệnh tùy ý trên máy chủ.
WFS Lấy giá trị thuộc tính
WFS của GeoServer cho phép người dùng truy vấn và thao tác các tính năng không gian địa lý. Trong điều kiện bình thường, WFS Lấy giá trị tài sản
hoạt động này chỉ đơn giản trả về thuộc tính được yêu cầu trong một cấu trúc XML.


Phân tích quy trình làm việc
- Kẻ tấn công gửi yêu cầu POST tới /geoserver/wfs.
- GeoServer kiểm tra thẻ XML ngoài cùng—
wfs:GetPropertyValue—
để xác định thao tác nào sẽ được thực hiện. - Sau đó, GeoServer chuyển giao các tham số yêu cầu cho phương thức tương ứng trong lớp WFS. Trong trường hợp này, Dispatcher chuyển hướng yêu cầu đến
Lấy giá trị tài sản
phương pháp.
- Trong lớp DefaultWebFeatureService20 (WFS), điều này
Lấy giá trị tài sản
phương thức chuyển tiếp các tham số của người dùng tới trình xử lý có cùng tên. - Người xử lý
chạy()
phương pháp nhận được yêu cầu, bao gồm cả yêu cầu quan trọnggiá trịTham chiếu
tham số được kiểm soát bởi người dùng.
- Trong suốt
chạy()
phương pháp, GeoServer lấy lạitham chiếuGiá trị
và triệu hồi nóđánh giá()
chức năng.
- Nếu như
giá trịTham chiếu
không khớp với các thuộc tính được xác định trước của GeoServer, GeoServer mặc định nó làTính năngThuộc tínhTruy cập
, mà giải thíchgiá trịTham chiếu
dưới dạng biểu thức XPath.
- Các
lấy()
phương pháp trong FeaturePropertyAccessor sử dụngcommons-jxpath
để thực hiện truy vấn XPath. Ở đây, người dùnggiá trịTham chiếu
được truyền trực tiếp vào tham số xpath mà không cần xác thực. Thông quaJXPathContext.newContext()
, GeoServer khởi tạo môi trường cho các truy vấn XPath, sau đó chạy chúng thông qualặp lạiCon trỏ()
.
Vì JXPath hỗ trợ các hàm mở rộng nên kẻ tấn công có thể đưa mã độc vào biểu thức XPath, kích hoạt việc thực thi mã tùy ý trên phiên bản GeoServer.
Chuỗi sự kiện này chứng minh việc xử lý không an toàn như thế nào giá trịTham chiếu
tham số này có thể dẫn đến RCE, gây ra mối đe dọa bảo mật nghiêm trọng đối với các triển khai GeoServer dễ bị tấn công.
Mô phỏng cuộc tấn công
Để mô phỏng việc khai thác này trong một kịch bản thực tế, chúng tôi OPSWAT Các nghiên cứu sinh đã triển khai GeoServer trên máy Windows cục bộ. Giao diện sau được hiển thị khi truy cập GeoServer.
Khi máy chủ đang chạy, kẻ tấn công có thể khai thác lỗ hổng bằng cách gửi yêu cầu POST với biểu thức XPath độc hại qua giá trịTham chiếu
đến điểm cuối /geoserver/wfs.
Kết quả: Sau khi yêu cầu được gửi đi, biểu thức XPath độc hại sẽ thực thi lệnh hệ thống và kích hoạt khởi chạy ứng dụng Máy tính.
Giảm thiểu và khuyến nghị
Một khai thác đơn giản có thể leo thang thành một cuộc tấn công chuỗi cung ứng phần mềm, đặc biệt là trong các dự án dựa trên phần mềm nguồn mở như GeoServer. Công nghệ OPSWAT SBOM (Bảng kê vật liệu Software ) giúp xác định các lỗ hổng như CVE-2024-36401 trong cơ sở mã của bạn.
Ví dụ này chứng minh cách OPSWAT SBOM:
- Phát hiện các thành phần phần mềm bị ảnh hưởng bởi lỗ hổng bảo mật.
- Đánh giá và xếp hạng mức độ nghiêm trọng của lỗ hổng bảo mật – tại đây, các CVE của GeoServer được đánh dấu là “Nghiêm trọng”.
- Xác định phiên bản bị ảnh hưởng.
- Đề xuất phiên bản đã sửa lỗi để nhóm phát triển có thể áp dụng bản vá hoặc thực hiện biện pháp khắc phục kịp thời.
Các bước khuyến nghị khác
- Cập nhật GeoServer: Nâng cấp lên phiên bản GeoServer 2.25.2, 2.24.4 hoặc 2.23.6 (hoặc mới hơn) khi lỗ hổng được vá.
- Phụ thuộc kiểm toán: Thường xuyên sử dụng các công cụ như OPSWAT SBOM để xác định các thư viện lỗi thời (ví dụ:
commons-jxpath
) trong môi trường của bạn. - Hạn chế quyền truy cập: Triển khai GeoServer sau tường lửa hoặc lớp xác thực để giảm thiểu bề mặt tấn công.
- Theo dõi các cảnh báo bảo mật: Theo dõi các ghi chú phát hành GeoServer chính thức và cơ sở dữ liệu CVE để cập nhật các bản vá lỗi mới.
Về OPSWAT SBOM
OPSWAT SBOM hỗ trợ các ngôn ngữ lập trình phổ biến nhất, cung cấp cho các nhóm phát triển phần mềm khả năng hiển thị các thư viện nguồn mở của bên thứ ba, các phụ thuộc liên quan của chúng và các phiên bản mới nhất có sẵn để nâng cấp. Các nhà phát triển có thể tích hợp OPSWAT SBOM vào mã nguồn và các dịch vụ container như GitHub, BitBucket, GitLab, Amazon ECR, DockerHub, v.v. Tìm hiểu thêm về SBOM .
Hãy nói chuyện với một chuyên gia ngay hôm nay để tìm hiểu cách tích hợp OPSWAT các công cụ và giải pháp với cơ sở hạ tầng và quy trình làm việc hiện tại của bạn: