- Nhóm nghiên cứu bảo mật đã thành công thực thi mã từ xa (RCE) trên máy chủ production của CodeRabbit và làm rò rỉ token API cùng thông tin bí mật
- Thông qua một PR sử dụng Rubocop, họ đã đánh cắp biến môi trường, đồng thời có thể truy cập PostgreSQL và đọc/ghi 1 triệu repository
- Việc rò rỉ private key của GitHub App khiến kẻ tấn công có thể tiêm mã độc vào kho lưu trữ quy mô lớn, bao gồm cả repo public và private, sửa mã nguồn và gây ra thiệt hại thực tế
- Phía CodeRabbit đã phản ứng ngay trong vòng vài giờ sau khi nhận báo cáo lỗ hổng và tăng cường các biện pháp bảo mật
- Khi chạy công cụ bên ngoài, cần nhấn mạnh sự cần thiết của ngăn chặn sự cố bảo mật bằng cách cô lập sandbox, áp dụng đặc quyền tối thiểu và chặn mạng
Giới thiệu
- Tháng 1 năm 2025, nhóm nghiên cứu Kudelski Security đã công bố một lỗ hổng bảo mật nghiêm trọng trong CodeRabbit
- Trên CodeRabbit, một công cụ tự động hóa review PR được sử dụng rộng rãi, đã xác nhận các vấn đề nghiêm trọng gồm remote code execution (RCE), rò rỉ biến môi trường và thông tin nhạy cảm, cùng khả năng giành quyền Read/Write với hơn 1 triệu repository
- Bài viết này phân tích chi tiết nội dung lỗ hổng đã được công bố tại Black Hat USA và có giá trị tham khảo cao như một trường hợp thực tế về lỗ hổng trong công cụ review dạng code và các hệ thống tích hợp liên quan
- Lỗ hổng được báo cáo đã được vá nhanh chóng ngay sau khi thông báo
Tổng quan về CodeRabbit
- CodeRabbit là ứng dụng review code dựa trên AI được cài đặt nhiều nhất trên GitHub/GitLab Marketplace
- Ứng dụng này đã review 1 triệu repository và 5 triệu pull request trên hai nền tảng lớn
- Mỗi khi người dùng tạo hoặc cập nhật PR, engine AI sẽ phân tích mã và tự động tạo comment cùng đề xuất
- Các tính năng như tóm tắt code, phát hiện lỗ hổng bảo mật, gợi ý cải tiến và tạo sơ đồ mang lại hiệu quả lớn trong việc nâng cao năng suất phát triển
Cách sử dụng và cấu trúc quyền của CodeRabbit
- Gói Pro cung cấp tính năng tích hợp linter và công cụ SAST (phân tích tĩnh)
- Khi xác thực tài khoản GitHub và cài đặt app, người dùng sẽ cấp quyền đọc/ghi cho các repository đã chọn
- Nếu cơ chế quản lý quyền này bị lạm dụng, nó có thể tạo ra tác động trực tiếp đến mã nguồn của mọi repo đã cài đặt
Thực thi công cụ bên ngoài và phát hiện khai thác
- Khi phát hiện thay đổi mã trong PR, CodeRabbit sẽ tự động chạy nhiều công cụ phân tích tĩnh bên ngoài (ví dụ: Rubocop)
- Rubocop được thiết kế để có thể dùng file cấu hình
.rubocop.yml nhằm nạp file mở rộng Ruby bên ngoài (ext.rb v.v.)
- Kẻ tấn công chèn mã độc vào
.rubocop.yml và ext.rb, sau đó gửi PR để khiến CodeRabbit thực thi mã đó trên máy chủ từ xa
- Mã được thực thi bằng kỹ thuật này đã gửi toàn bộ biến môi trường của máy chủ về máy chủ của kẻ tấn công
Phân tích nội dung rò rỉ biến môi trường
- Các biến môi trường bị rò rỉ bao gồm API key, token và mật khẩu của nhiều dịch vụ khác nhau như:
- API key của Anthropic/OpenAI, encryption salt/password, private key của GitHub App, thông tin kết nối PostgreSQL, v.v.
- Thông qua RCE, có thể gây ra thiệt hại thứ cấp lớn với mức độ ảnh hưởng cao như truy cập cơ sở dữ liệu, thay đổi mã và làm lộ thông tin nội bộ của dịch vụ
- Nhóm nghiên cứu có thể tiếp tục thăm dò sâu hơn trên máy chủ thực, nhưng đã dừng lại sau khi chỉ xác minh ở mức tối thiểu để tránh ảnh hưởng đến vận hành dịch vụ
Giành quyền Read/Write trên 1 triệu repository
- Có thể xác thực với GitHub API bằng GITHUB_APP_PEM_FILE (private key) có trong biến môi trường
- Đối với mọi kho lưu trữ mà CodeRabbit có thể truy cập (bao gồm public và private):
- Có thể thực hiện các quyền rất mạnh như đọc/ghi mã nguồn, thay thế file phát hành (tấn công chuỗi cung ứng), thay đổi lịch sử git, v.v.
- Mã tái hiện (PoC) đã được công bố, chứng minh khả năng bị khai thác trên thực tế
Tóm tắt PoC
- Sử dụng các thư viện như PyGitHub cùng private key và App ID bị rò rỉ để phát hành access token cho repository tùy ý
- Với token này, có thể tự động hóa việc clone repository private, thay đổi file, tạo commit mới và sửa đổi file phát hành
Khả năng xâm phạm repository nội bộ/riêng tư của CodeRabbit
- Do chính tổ chức CodeRabbit cũng cài đặt và sử dụng dịch vụ của họ, nên cũng có thể truy cập và sao chép repo mã nguồn nội bộ của CodeRabbit
- Chỉ cần biết tên tổ chức là có thể tra installation ID rồi ngay lập tức truy cập danh sách repo tương ứng
Tóm tắt tác động
- Truy cập trái phép vào repository private và rò rỉ dữ liệu cá nhân
- Nguy cơ tấn công chuỗi cung ứng như chỉnh sửa mã nguồn, chèn mã độc/backdoor
- Khả năng liên kết khai thác với các lỗ hổng bổ sung như GitHub Actions
- RCE trực tiếp có thể dẫn tới phá hủy dữ liệu, làm gián đoạn dịch vụ và gây thiệt hại dây chuyền sang các dịch vụ khác
Bối cảnh và giới hạn trong phán đoán của AI
- Ngay cả trong quá trình tấn công, PR vẫn được CodeRabbit review bình thường, và dù có để lại comment cảnh báo lỗ hổng nhưng thực tế không nhận diện được cú pháp đe dọa
- Điều này cho thấy công cụ review code AI không thực sự hiểu được bối cảnh của tình huống rủi ro ngoài đời thực
Ứng phó và khuyến nghị
- CodeRabbit đã vô hiệu hóa Rubocop, thay thế thông tin bí mật và kiểm toán hệ thống chỉ trong vài giờ sau khi nhận báo cáo lỗ hổng
- Sự cố phát sinh từ công cụ không áp dụng sandbox (Rubocop), và sau khi khắc phục, hệ thống đã được cải tiến để chạy mọi công cụ bên ngoài trong môi trường cô lập
- Để tăng cường bảo mật, cần nhấn mạnh sự cần thiết của thiết kế phòng thủ như tối thiểu hóa biến môi trường trong môi trường chạy công cụ bên ngoài, giới hạn IP truy cập mạng và chặn truy cập Internet
Công bố có trách nhiệm và kết luận
- Vào tháng 1 năm 2025, sau khi được báo cáo, phản ứng và biện pháp khắc phục đã được triển khai nhanh chóng
- Dù chỉ dừng ở PoC, trường hợp này cho thấy nếu là kẻ tấn công độc hại thì rất dễ lạm dụng để chọn lọc repo giá trị cao, triển khai ransomware quy mô lớn hoặc thực hiện các cuộc tấn công chuỗi cung ứng mang tính phá hoại
- Tầm quan trọng của việc triển khai sandbox và nguyên tắc đặc quyền tối thiểu một lần nữa được khẳng định khi tích hợp với các công cụ phân tích bên ngoài và dịch vụ tự động hóa dựa trên AI
Chưa có bình luận nào.