Lỗ hổng nghiêm trọng trên GitLab khiến kẻ tấn công bỏ qua xác thực SAML

Lỗ hổng nghiêm trọng trên GitLab khiến kẻ tấn công bỏ qua xác thực SAML

Lỗ hổng CVE-2023-7028 là một lỗ hổng bảo mật nghiêm trọng trong GitLab, ảnh hưởng đến cả phiên bản Enterprise Edition (EE)Community Edition (CE). Nếu khai thác thành công, kẻ tấn công có thể chiếm quyền kiểm soát tài khoản quản trị của hệ thống GitLab, gây nguy cơ lộ lọt thông tin về dữ liệu và hạ tầng của tổ chức.

Thông tin lỗ hổng như sau:

  • Định danh lỗ hổng: CVE-2024-45409

  • Mức độ nghiêm trọng: Critical

  • Điểm CVSS: 10

  • Mô tả chung: Lỗ hổng này bắt nguồn từ thư viện ruby-saml, có thể cho phép kẻ tấn công đăng nhập với tư cách là người dùng tùy ý trong hệ thống có lỗ hổng này.

  • Phiên bản bị ảnh hưởng: GitLab Community Edition (CE) và Enterprise Edition (EE) phiên bản <=12.2 và phiên bản từ 1.13.0 đến 1.16.0

1. Chi tiết lỗ hổng

SAML, viết tắt của Security Assertion Markup Language, là một giao thức dựa trên XML cho phép single sign-on (SSO) và trao đổi dữ liệu xác thực và ủy quyền trên nhiều ứng dụng và trang web.

Một lỗi xảy ra trong thư viện của ruby-saml khiến kẻ tấn công có thể làm giả SAML Response/Assertion dù chưa có quyền trên hệ thống. Điều này sẽ cho phép kẻ tấn công đăng nhập với tư cách là người dùng tùy ý trong hệ thống.

2. Dấu hiệu nhận biết tấn công

Các dấu hiệu về việc cố gắng khai thác lỗ hổng CVE-2024-45409 hoặc đã khai thác thành công sẽ có trong file log GitLab application_json và auth_json.

Dấu hiệu khai thác nhưng không thành công

Các dấu hiệu của việc cố gắng khai thác nhưng không thành công có thể tạo ra ValidationError từ thư viện RubySaml như hai ví dụ được hiển thị bên dưới (nhưng lỗi có thể hơi khác nhau với mỗi hệ thống). Chuỗi để tìm kiếm là RubySaml::ValidationError bên trong application_json log.

  1. Ticket không hợp lệ do URL callback không đúng:
  • {"severity":"ERROR","time":"2024-xx-xx","correlation_id":"xx","message":"(saml) Authentication failure! invalid_ticket: OneLogin::RubySaml::ValidationError, The response was received at https://domain.com/users/auth/saml/incorrect_callback instead of https://domain.com/users/auth/saml/callback"}
  1. Ticket không hợp lệ do vấn đề về certificate signing:
  • "message":"(saml) Authentication failure! invalid_ticket: OneLogin::RubySaml::ValidationError, Fingerprint mismatch"

Dấu hiệu khai thác thành công

Dấu hiệu của việc khai thác thành công sẽ tạo ra các event log liên quan đến SAML. Tuy nhiên, những event log này sẽ có chút khác biệt với các event log xác thực SAML hợp lệ.

Khi khai thác thành công thì log sẽ ghi lại bất kỳ giá trị extern_id nào được kẻ tấn công đặt. Do đó, việc xác định một extern_uid bất thường trong hệ thống có thể là dấu hiệu của việc khai thác lỗ hổng.

Ví dụ về authentication event trong application_json log, với extern_id được đặt trong code exploit:

  • {"severity":"INFO","time":"2024-xx-xx","correlation_id":"xx","meta.caller_id":"OmniauthCallbacksController#saml","meta.remote_ip":"0.0.0.0","meta.feature_category":"system_access","meta.client_id":"ip/0.0.0.0","message":"(SAML) saving user exploit-test-user@domain.com from login with admin =\\u003e false, extern_uid =\\u003e exploit-test-user"}

Khi tạo ra payload khai thác, có nhiều SAML assertions mà kẻ tấn công cần tạo ra để sao chép hoàn hảo một phiên đăng nhập hợp lệ. Chúng bao gồm cả trường key-value mà người dùng sử dụng tại IdP của họ và những thông tin này người dùng không được biết đến.

3. Khuyến nghị

Phía FPT Threat Intelligence khuyến nghị một số cách để giảm thiểu rủi ro của lỗ hổng:

  • Cập nhật bản vá: GitLab đã phát hành phiên bản 17.3.3, 17.2.7, 17.1.8, 17.0.816.11.10 để vá lỗ hổng trên.

  • Sử dụng F2A: Kích hoạt xác thực hai yếu tố (2FA) cho tất cả các tài khoản người dùng.

  • Cấu hình GitLab: Không cho phép tùy chọn SAML two-factor bypass trong GitLab.

4. Tham khảo

  1. GitLab Critical Patch Release: 17.3.3, 17.2.7, 17.1.8, 17.0.8, 16.11.10

  2. GitLab Patches Critical SAML Authentication Bypass Flaw in CE and EE Editions