Bảo mật & quyền riêng tư

Alpine Linux tái thiết lập GitLab sau nỗ lực khai thác lỗ hổng regex nghiêm trọng của Ruby

Alpine Linux đã xây dựng lại máy chủ GitLab và đặt lại tất cả mật khẩu sau khi một kẻ tấn công nhắm vào lỗ hổng CVSS 10.0 trong engine regex của Ruby, vốn vẫn tồn tại bất chấp việc nâng cấp GitLab.

Hình minh họa một vụ xâm nhập máy chủ với các ký hiệu regex thoát ra từ một giá đỡ bị nứt
Minh họa được tạo riêng cho bài viết này

Được dịch tự động từ bản gốc tiếng Anh.

Alpine Linux thông báo vào ngày 28 tháng 10 rằng họ đã xây dựng lại hoàn toàn máy chủ GitLab và đặt lại mật khẩu cho mọi người dùng sau một cuộc tấn công có chủ đích khai thác một lỗ hổng nghiêm trọng. Sự cố này làm nổi bật khoảng trống nguy hiểm trong quy trình vá lỗi đối với các instance tự quản lý (self-managed), nơi runtime Ruby cơ bản vẫn dễ bị tổn thương ngay cả sau khi ứng dụng GitLab đã được cập nhật.

Chuyện gì đã xảy ra

Một kẻ tấn công đã cố gắng khai thác CVE-2026-97229, một lỗ hổng có điểm CVSS hoàn hảo là 10.0, trên chính instance GitLab của Alpine lưu trữ kho aports. Lỗ hổng này cho phép thực thi mã từ xa thông qua các biểu thức chính quy (regular expressions) được chế tác sẵn trong cấu hình CI. Mặc dù Alpine không tìm thấy bằng chứng xác đáng nào cho thấy kẻ tấn công đã thực thi mã thành công, họ cũng không thể loại trừ khả năng này do thiếu sót nhật ký (logs) và đặc tính của kỹ thuật khai thác. Do đó, họ coi máy chủ đã bị xâm phạm, tắt nó vào ngày 27 tháng 10 và hoàn tất quá trình xây dựng lại vào ngày 28 tháng 10.

Cuộc tấn công bắt đầu vào ngày 20 tháng 10, chỉ một tuần sau khi GitLab phát hành bản vá. Một tài khoản mới đăng ký đã thăm dò máy chủ, gửi các cấu hình CI độc hại làm sập quy trình worker tám lần. Vào ngày 21 tháng 10, kẻ tấn công gây ra các lỗi 502 và thất bại trong job CI. Alpine đã chặn tài khoản này vào ngày 23 tháng 10, nhưng kẻ tấn công quay lại vào ngày 25 và 26 tháng 10. Quan trọng hơn, Alpine phát hiện vào ngày 26 tháng 10 rằng việc nâng cấp lên GitLab 19.3.6 vào ngày 22 tháng 10 thực tế đã không khắc phục được lỗ hổng vì cài đặt của họ sử dụng Ruby hệ thống tiêu chuẩn thay vì phiên bản đã được vá đi kèm với các gói chính thức của GitLab.

Cơ chế hoạt động

Nguyên nhân gốc rễ nằm ở Onigmo, engine biểu thức chính quy tích hợp trong Ruby. CVE-2026-97229 là một lỗi trong engine này, có thể được kích hoạt bởi các mẫu regex cụ thể do kẻ tấn công cung cấp trong tệp cấu hình CI. Khi GitLab xử lý các cấu hình này, nó biên dịch regex bằng Ruby. Nếu phiên bản Ruby dễ bị tổn thương, bước biên dịch này có thể dẫn đến thực thi mã từ xa.

GitLab đã giải quyết vấn đề này trong bản phát hành ngày 12 tháng 10 bằng cách vá interpreter Ruby được bao gồm trong các gói Linux và container images chính thức của họ. Tuy nhiên, nhiều quản trị viên, bao gồm cả đội ngũ Alpine, chạy GitLab trên nền tảng Ruby cài đặt sẵn trong hệ thống hoặc các container image tùy chỉnh. Trong những thiết lập này, việc nâng cấp mã ứng dụng GitLab không cập nhật interpreter Ruby cơ bản. Vì bản vá nằm trong chính ngôn ngữ Ruby, các máy chủ chạy phiên bản Ruby chưa được vá vẫn bị lộ diện bất kể phiên bản GitLab được cài đặt là gì. Image của Alpine sử dụng Ruby tiêu chuẩn, nên việc nâng cấp GitLab của họ vẫn để nguyên engine dễ bị tổn thương cho đến khi họ cập nhật rõ ràng Ruby lên phiên bản 3.3.13, 3.4.12 hoặc mới hơn.

Chi tiết chính

  • Lỗ hổng: CVE-2026-97229 (CVSS 10.0) trong engine regex Onigmo của Ruby.
  • Vector tấn công: Các biểu thức chính quy được chế tác sẵn trong tệp .gitlab-ci.yml được gửi qua cấu hình CI.
  • Khoảng trống vá lỗi: Chỉ nâng cấp GitLab là không đủ đối với các bản cài đặt tự biên dịch hoặc image tùy chỉnh; bản thân Ruby phải được cập nhật lên 3.3.13, 3.4.12, 4.0.9 hoặc mới hơn.
  • Dòng thời gian sự cố: Các cuộc thăm dò tấn công bắt đầu ngày 20 tháng 10; máy chủ bị đóng ngày 27 tháng 10; quá trình xây dựng lại hoàn tất ngày 28 tháng 10.
  • Rủi ro dữ liệu: Nguy cơ rò rỉ tiềm ẩn bao gồm email người dùng, hash mật khẩu, bí mật 2FA, biến CI/CD và các repository riêng tư nếu mã được thực thi.
  • Xác minh: Alpine đã xác minh tính toàn vẹn của gói từ ngày 20 đến 24 tháng 10 so với hồ sơ bên ngoài, xác nhận không có sự xâm phạm chuỗi cung ứng trong các gói đã build.

Tại sao điều này quan trọng

Sự cố này là lời nhắc nhở mạnh mẽ cho các nhóm kỹ thuật đang quản lý hạ tầng tự host (self-hosted). Nó phơi bày một điểm mù phổ biến trong quản lý phụ thuộc: giả định rằng việc cập nhật ứng dụng sẽ tự động bảo vệ môi trường runtime của nó. Đối với các nhà phát triển xây dựng sản phẩm với AI hoặc pipeline CI/CD phức tạp, việc hiểu rõ sự khác biệt giữa bản vá cấp ứng dụng và bản vá cấp runtime là rất quan trọng. Việc không cập nhật interpreter ngôn ngữ cơ bản có thể khiến hệ thống mở toang trước các exploit nghiêm trọng, ngay cả khi nhà cung cấp ứng dụng tuyên bố vấn đề đã được giải quyết.

Hơn nữa, tính mơ hồ của kết quả nhấn mạnh khó khăn trong phân tích pháp y (forensic analysis) tại các môi trường cloud-native. Bởi vì một cuộc khai thác thành công thuộc loại này có thể không để lại dấu vết truyền thống như sập máy hay mục nhật ký, các tổ chức phải áp dụng phương pháp zero-trust (không tin cậy mặc định) trong phản ứng sự cố. Quyết định của Alpine xây dựng lại từ đầu thay vì cố gắng dọn dẹp minh họa chi phí vận hành cao của những lỗ hổng như vậy. Đối với các founder kỹ thuật và trưởng nhóm IT, điều này củng cố nhu cầu về logging robust, thực hành hạ tầng bất biến (immutable infrastructure) và xác minh nghiêm ngặt tất cả các thành phần trong chuỗi cung ứng phần mềm.

Bạn có thể làm gì

  • Kiểm tra phiên bản Ruby: Nếu bạn chạy GitLab tự biên dịch hoặc container tùy chỉnh, hãy đảm bảo Ruby được cập nhật ngay lập tức lên 3.3.13, 3.4.12, 4.0.9 hoặc mới hơn.
  • Xác minh nâng cấp GitLab: Xác nhận rằng phương pháp cài đặt GitLab của bạn bao gồm Ruby đã được vá. Nếu không, hãy cập nhật thủ công Ruby hệ thống.
  • Xoay vòng bí mật (Rotate secrets): Nếu nghi ngờ bị lộ, hãy xoay vòng tất cả biến CI/CD, token runner, personal access token và thông tin xác thực webhook.
  • Hạn chế truy cập: Giới hạn quyền truy cập ẩn danh vào các dự án công khai và ngăn người dùng không đáng tin cậy tạo hoặc ghi vào các repository công khai.
  • Giám sát chỉ báo: Sử dụng các quy tắc phát hiện Sigma do GitLab công bố để tìm kiếm các mẫu regex thù địch, đường dẫn tệp dài bất thường chứa ký tự non-ASCII và báo cáo sập Ruby.
  • Kéo image cập nhật: Nếu sử dụng image GitLab của Alpine, hãy kéo lại alpinelinux/gitlab:19.3.6, đảm bảo rằng nó được xuất bản sau ngày 27 tháng 10 để bao gồm Ruby đã được sửa lỗi.
  • #gitlab
  • #security
  • #ruby
  • #devops
  • #vulnerability

Công cụ từ cửa hàng Bytechap

Đọc tiếp

Tất cả bài viết