Một lỗ hổng nghiêm trọng trong Git cho phép tấn công RCE (thực thi mã từ xa) đã được tiết lộ gần đây, ảnh hưởng đến nhiều phiên bản Git và Microsoft Visual Studio 2017. Lỗ hổng này cho phép kẻ tấn công thao túng kho lưu trữ Git bằng các mô-đun con, khai thác lỗi trong Git cho phép ghi tệp bên ngoài cây làm việc của mô-đun con và vào thư mục .git/ . Lỗi này cho phép thực hiện một hook độc hại trong khi hoạt động sao chép kho lưu trữ vẫn đang chạy [1].
Lỗ hổng CVE-2024-32002 ảnh hưởng đến Microsoft Visual Studio 2017 phiên bản 15.9 và các phiên bản Git cũ hơn 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 và 2.39.4. Lỗ hổng này có thể bị khai thác trong môi trường hỗ trợ liên kết tượng trưng được bật trên hệ điều hành không phân biệt chữ hoa chữ thường.
Hiểu về Git
Git là một hệ thống kiểm soát phiên bản phân tán mã nguồn mở và miễn phí, được thiết kế để giúp các nhà phát triển phần mềm quản lý cơ sở mã nhanh chóng và hiệu quả. Nó tăng cường sự hợp tác giữa các thành viên trong nhóm phát triển bằng cách tổ chức và theo dõi các thay đổi đối với các tệp và thư mục theo cách chuẩn hóa, có cấu trúc.
Git được sử dụng rộng rãi trong phát triển phần mềm. Các nền tảng như GitHub, GitLab và Bitbucket được xây dựng trên Git để tăng cường sự hợp tác giữa các nhà phát triển do các tính năng mạnh mẽ của nó:
- Ghi lại những thay đổi có thể theo dõi được vào các tệp mã, được gọi là cam kết .
- Hoàn nguyên các chỉnh sửa mã về phiên bản trước khi cần thiết.
- Kết hợp hiệu quả các thay đổi từ nhiều nhánh hoặc người đóng góp khác nhau.
- Lưu lại lịch sử về những người thực hiện thay đổi và ngày thực hiện.

Móc Git
Khi kho lưu trữ Git được tạo hoặc sao chép, sử dụng lệnh git init hoặc git clone , một thư mục .g it được tạo ở gốc của cây làm việc. Cấu trúc thư mục của thư mục .git ban đầu trông như thế này:
Git hooks là các tập lệnh thực thi, nằm trong thư mục .git/hooks hoặc thư mục .git/modules/module_type/module_name/hooks . Hooks được tự động kích hoạt khi các sự kiện cụ thể xảy ra trong kho lưu trữ Git.
Khi một tệp trong thư mục hooks không có hậu tố .sample , các lệnh trong tệp đó sẽ được thực thi trước hoặc sau một hành động Git cụ thể có trong tên tệp, chẳng hạn như pre-commit, post-commit và post-checkout .
Các mô-đun con Git
Một mô-đun con Git là một bản ghi trong kho lưu trữ Git tham chiếu đến một cam kết cụ thể trong kho lưu trữ bên ngoài. Khi một mô-đun con được thêm vào kho lưu trữ, một tệp mới trong thư mục .gitmodules được tạo với siêu dữ liệu về ánh xạ giữa URL của mô-đun con và thư mục cục bộ của nó. Khi một kho lưu trữ chứa nhiều mô-đun con, tệp .gitmodules sẽ bao gồm một mục nhập cho mỗi mô-đun con. [3]
Liên kết tượng trưng (Symlinks)
Liên kết tượng trưng, còn được gọi là liên kết tượng trưng hoặc liên kết mềm, là tệp trỏ đến tệp hoặc thư mục khác (được gọi là "mục tiêu") bằng cách chỉ định đường dẫn của tệp hoặc thư mục đó. Nếu liên kết tượng trưng bị xóa, mục tiêu của tệp hoặc thư mục đó vẫn không bị ảnh hưởng. [4]
Một liên kết tượng trưng trong Git được tạo dưới dạng tệp có siêu dữ liệu để làm cho nó hoạt động như một tham chiếu hoặc một phím tắt đến một tệp khác. Liên kết tượng trưng có thể được sử dụng để tạo nhiều tham chiếu đến một tệp mà không cần sao chép nội dung của tệp đó.
Phân tích lỗ hổng bảo mật GIT
Phân tích bản vá
Để hiểu sâu hơn về các lỗ hổng bảo mật, các chuyên gia bảo mật thường thực hiện phân tích bản vá. Đây là một kỹ thuật giúp xác định các chức năng dễ bị tấn công và các vectơ tấn công tiềm ẩn. OPSWAT Các thành viên đã kiểm tra những thay đổi được thực hiện trong phiên bản đã vá để giải quyết lỗ hổng CVE-2024-32002 và họ phát hiện ra rằng có hai tệp đã được cập nhật để giải quyết lỗ hổng CVE này.
Một trong những tệp được cập nhật là tệp submodule--helper.c , bao gồm mã xử lý việc sao chép submodule Git. Cam kết mới trong phiên bản đã vá bao gồm hai mục sau:
- Thêm hàm dir_contains_only_dotgit để đảm bảo rằng thư mục submodules không chứa bất kỳ tệp hoặc thư mục .git nào.
- Đã có những thay đổi đối với hàm clone_submodule() để bao gồm một điều kiện để kiểm tra xem thư mục submodule có tồn tại và trống không. Nếu thư mục không trống, quá trình sao chép sẽ bị hủy bỏ.
Bản cập nhật thứ hai trong cam kết mới nằm trong tệp t/t7406-submodule-update.sh, thêm một tập lệnh kiểm tra để xác minh rằng lỗ hổng bảo mật đã được giải quyết.
Từ Phân tích đến Khai thác
Ngoài những thông tin chi tiết thu thập được từ phân tích bản vá và mô tả về lỗ hổng CVE-2024-32002, OPSWAT Các thành viên đã làm việc để điều tra quy trình làm việc của các liên kết tượng trưng và các mô-đun con trong Git. Họ đã phân tích trình tự các sự kiện xảy ra khi người dùng sao chép một kho lưu trữ:
- Git bắt đầu bằng cách tải xuống các tệp và thư mục từ kho lưu trữ chính.
- Nó sử dụng các định nghĩa được chỉ định trong các tệp liên kết tượng trưng để tạo lại các liên kết tượng trưng tương ứng trong hệ thống tệp cục bộ.
- Nếu liên kết tượng trưng trỏ đến một tệp hiện có, liên kết tượng trưng sẽ hoạt động; nếu không, liên kết tượng trưng sẽ không hoạt động cho đến khi mục tiêu được khôi phục.
- Nếu kho lưu trữ được sao chép bằng tùy chọn --recursive , Git sẽ sao chép các mô-đun con (kho lưu trữ bên ngoài) và đặt chúng vào đường dẫn thư mục như được chỉ định trong tệp .gitmodules.
- Nếu liên kết tượng trưng là một phần của đường dẫn mô-đun con (ví dụ: util/module/test , trong đó util là liên kết tượng trưng trỏ đến một thư mục khác, chẳng hạn như symlink_folder ), Git sẽ lưu trữ nội dung mô-đun con trong thư mục thực tế được liên kết tượng trưng tham chiếu (ví dụ: symlink_folder/module/test ), đồng thời cho phép truy cập thông qua đường dẫn liên kết tượng trưng ban đầu.
Hiểu về lỗ hổng bảo mật Git CVE-2024-32002
Tạo kho lưu trữ độc hại
OPSWAT Các thành viên tiếp tục kiểm tra việc tạo ra các kho lưu trữ độc hại dựa trên các bản cập nhật được thực hiện cho tệp t/t7406-submodule-update.sh và chia nhỏ quá trình này thành các bước sau:
- Tạo một kho lưu trữ có chứa móc sau khi thanh toán
- Tạo một kho lưu trữ khác bao gồm một mô-đun con, nằm tại đường dẫn A/modules/x . Mô-đun con mới tham chiếu đến kho lưu trữ đã tạo trước đó.
- Tạo liên kết tượng trưng có tên a , trỏ đến thư mục .git trong chỉ mục Git.
Hiểu về lỗ hổng bảo mật
Khi người dùng sao chép kho lưu trữ độc hại được tạo ở bước trước bằng tùy chọn --recursive , tập lệnh độc hại từ hook sau khi thanh toán sẽ được kích hoạt, cho phép kẻ tấn công xâm nhập vào thiết bị của người dùng.
Việc thực thi mã từ xa này xảy ra vì kho lưu trữ chính phát hiện ra một liên kết tượng trưng có tên a trỏ đến thư mục .git khi được sao chép. Với chế độ đệ quy được bật, các mô-đun con cũng được kéo vào kho lưu trữ được sao chép. Kho lưu trữ này chứa một thư mục hooks, chứa tập lệnh hook sau khi kiểm tra và thư mục cục bộ của nó nằm trong A/modules/x .
Vì a trỏ đến thư mục .git và hệ thống tệp không phân biệt chữ hoa chữ thường, A được hiểu là tương đương với a . Git bị đánh lừa khi viết tập lệnh hook sau khi kiểm tra vào thư mục .git/modules/query/fast/hooks/ . Nếu tìm thấy tập lệnh hook sau khi kiểm tra trong thư mục .git/modules/{module_type}/{module_name}/hooks , tập lệnh này sẽ được kích hoạt khi kho lưu trữ chính được sao chép bằng tùy chọn --recursive . Do đó, kẻ tấn công có thể xâm nhập thành công thiết bị của người dùng bằng cách thực thi mã từ xa.
Mô phỏng khai thác lỗ hổng Git
Dựa trên những phát hiện trước đó, OPSWAT Các thành viên đã tạo một kho lưu trữ chính và một móc nối để mô phỏng việc tạo ra một kho lưu trữ độc hại:
- Ban đầu, bạn nên cấu hình Git để luôn cho phép protocol.file , bật core.symlinks và đặt tên nhánh mặc định thành main (để tránh thông báo cảnh báo).
- Một tập lệnh móc hậu kiểm tra độc hại được thêm vào thư mục móc. Để đảm bảo rằng tập lệnh hậu kiểm tra có thể được thực thi trên thiết bị của người dùng, tập lệnh bash tạo ra móc này bao gồm lệnh chmod +x fast/hooks/post-checkout .
- Một liên kết tượng trưng được tạo trong kho lưu trữ chính, trỏ đến thư mục .git .
Thư mục /hooks có móc sau khi thanh toán
Khắc phục
Để vô hiệu hóa mối đe dọa, người dùng có thể gỡ cài đặt Git hoặc áp dụng bản vá bảo mật mới nhất. Ngoài ra, một giải pháp như MetaDefender Endpoint có thể thông báo kịp thời cho người dùng và hiển thị tất cả các CVE đã biết trong môi trường thông qua giao diện trực quan của nó. MetaDefender Endpoint có thể phát hiện và giảm thiểu các CVE mới nhất bằng cách tận dụng khả năng của nó với hơn 3 triệu điểm dữ liệu và hơn 30.000 CVE liên quan với Thông tin mức độ nghiêm trọng. Bằng cách triển khai bất kỳ biện pháp đối phó nào, CVE sẽ được ngăn chặn hoàn toàn, loại bỏ nguy cơ tấn công mạng tàn phá.
Bạn đã sẵn sàng để đưa MetaDefender Endpoint ở tuyến đầu trong chiến lược an ninh mạng của bạn?