Lỗ hổng Git CVE-2025-48384: Nguy cơ RCE và ghi tệp tùy ý trên Linux/macOS

Một lỗ hổng nghiêm trọng trong giao diện dòng lệnh của Git đã được tiết lộ, kèm theo các bằng chứng khái niệm (proof-of-concept) công khai có sẵn, cho phép ghi tệp tùy ý (arbitrary file writes) và thực thi mã từ xa (remote code execution) trên các hệ thống Linux và macOS.

Giới thiệu về CVE-2025-48384 và Tác động

Lỗ hổng CVE-2025-48384 ảnh hưởng đến các cài đặt Git sử dụng lệnh git clone --recursive trên các kho lưu trữ được thiết kế để tấn công. Lỗ hổng này khai thác việc xử lý không đúng ký tự carriage return (\r) trong các tệp .gitmodules để vượt qua các cơ chế kiểm soát bảo mật.

Theo báo cáo từ DataDog Security Labs, lỗ hổng xuất phát từ sự không khớp trong hành vi của trình phân tích cú pháp cấu hình (configuration parser) của Git khi xử lý các ký tự điều khiển. Cụ thể, các ký tự carriage return (\r) có thể bị loại bỏ trong quá trình đọc nhưng lại được giữ nguyên trong quá trình ghi, tạo ra một lỗi “không khớp đọc-ghi” (read-write mismatch). Sự khác biệt này là trọng tâm cho phép kẻ tấn công thực hiện khai thác.

Cơ chế Khai thác Lỗ hổng

Lỗi xử lý ký tự Carriage Return

Cơ chế cốt lõi của lỗ hổng nằm ở cách Git xử lý ký tự carriage return (\r). Khi Git đọc một đường dẫn trong tệp cấu hình, chẳng hạn như từ tệp .gitmodules, trình phân tích cú pháp của nó có thể loại bỏ hoặc bỏ qua ký tự \r để chuẩn hóa đường dẫn. Tuy nhiên, khi Git thực hiện thao tác ghi xuống hệ thống tệp dựa trên đường dẫn đó, nó lại có thể sử dụng đường dẫn gốc, bao gồm cả ký tự \r chưa bị loại bỏ. Điều này dẫn đến sự khác biệt giữa đường dẫn mà Git “thấy” (khi đọc) và đường dẫn mà Git “thực sự ghi” (khi ghi), tạo ra điều kiện để tấn công.

Kỹ thuật Directory Traversal thông qua .gitmodules

Kẻ tấn công có thể tạo ra các tệp .gitmodules độc hại với các đường dẫn submodule kết thúc bằng ký tự carriage return. Một ví dụ điển hình là đường dẫn có dạng:

hooks\r../../../.git/hooks/malicious.sh

Khi Git xử lý đường dẫn này, trình phân tích cú pháp cấu hình có thể đọc phần hooks (tức là phần trước \r) như là đường dẫn hợp lệ của submodule. Tuy nhiên, khi Git thực hiện thao tác ghi, nó lại sử dụng toàn bộ đường dẫn bao gồm cả ký tự \r. Điều này cho phép kẻ tấn công thực hiện kỹ thuật directory traversal (xuyên thư mục), ghi tệp ra ngoài vị trí submodule dự định. Ký tự \r có vai trò như một “điểm dừng ảo” trong quá trình đọc, nhưng lại không có tác dụng tương tự trong quá trình ghi, khiến phần còn lại của đường dẫn (../../../.git/hooks/malicious.sh) được hiểu là một đường dẫn tương đối từ thư mục gốc của kho lưu trữ, vượt ra ngoài ranh giới bảo mật thông thường của submodule.

Kỹ thuật nguyên thủy này cho phép kẻ tấn công ghi các tập lệnh Git Hook độc hại vào thư mục .git/hooks của nạn nhân. Các Git Hook là các script được Git tự động thực thi khi các thao tác Git phổ biến như git commit hoặc git merge được thực hiện. Bằng cách chèn mã độc vào các hook này, kẻ tấn công có thể đạt được mục tiêu thực thi mã từ xa (remote code execution – RCE) trên hệ thống của nạn nhân.

Ứng dụng GitHub Desktop client dành cho macOS cũng bị ảnh hưởng do mặc định sử dụng git clone --recursive. Các cài đặt Git trên hệ điều hành Windows không bị ảnh hưởng bởi lỗ hổng này do sự khác biệt trong cách xử lý các ký tự điều khiển trên các hệ thống phát sinh từ UNIX.

Phiên bản bị ảnh hưởng và Điểm CVSS

Lỗ hổng này mang mức điểm CVSS là 8.1 (High), cho thấy mức độ rủi ro đáng kể đối với các nhà phát triển phần mềm và các hệ thống CI/CD (Continuous Integration/Continuous Delivery). Điểm số này phản ánh khả năng khai thác cao và tác động nghiêm trọng nếu thành công.

Git đã phối hợp phát hành một bản vá bảo mật vào ngày 8 tháng 7 năm 2025, giải quyết lỗ hổng trên nhiều phiên bản:

  • Git 2.45.2
  • Git 2.44.2
  • Git 2.43.5
  • Git 2.42.3
  • Git 2.41.4
  • Git 2.40.2
  • Git 2.39.4

Các phiên bản cũ hơn có thể cũng bị ảnh hưởng và nên được nâng cấp lên các bản vá mới nhất nếu có thể.

Các kịch bản Khai thác

Các kịch bản khai thác lỗ hổng này bao gồm nhiều hình thức tấn công tiềm ẩn, có thể gây ra thiệt hại nghiêm trọng cho cá nhân và tổ chức:

  • Ghi các Git Hook độc hại để duy trì quyền truy cập (persistence): Kẻ tấn công có thể chèn các script thực thi mã độc vào thư mục .git/hooks của nạn nhân. Các script này sẽ tự động chạy khi người dùng thực hiện các lệnh Git thông thường như git commit, git push, hoặc git pull, cho phép kẻ tấn công duy trì quyền truy cập vào hệ thống hoặc thực hiện các hành vi độc hại theo ý muốn.
  • Ghi đè các tệp cấu hình Git để đánh cắp sở hữu trí tuệ: Kẻ tấn công có thể lợi dụng khả năng ghi tệp tùy ý để ghi đè hoặc sửa đổi các tệp cấu hình quan trọng của Git (ví dụ: .git/config, ~/.gitconfig). Thông qua việc sửa đổi này, kẻ tấn công có thể thay đổi các thiết lập như URL của kho lưu trữ từ xa, thông tin xác thực, hoặc các lệnh tùy chỉnh, từ đó có thể chuyển hướng dữ liệu nhạy cảm hoặc mã nguồn sang máy chủ do kẻ tấn công kiểm soát, dẫn đến rò rỉ sở hữu trí tuệ hoặc dữ liệu độc quyền.
  • Thỏa hiệp các pipeline xây dựng tự động (automated build pipelines): Trong môi trường CI/CD, nơi các dự án thường xuyên được clone và xây dựng tự động, lỗ hổng này đặc biệt nguy hiểm. Nếu một pipeline CI/CD clone một kho lưu trữ độc hại (có chứa tệp .gitmodules được thiết kế để khai thác), mã độc có thể được thực thi trong môi trường xây dựng. Điều này có thể dẫn đến việc chèn mã độc vào các sản phẩm phần mềm cuối cùng, thỏa hiệp máy chủ xây dựng, hoặc lan truyền tấn công rộng hơn trong hạ tầng phát triển.

Biện pháp Khắc phục và Khuyến nghị

Để giảm thiểu rủi ro từ CVE-2025-48384, các tổ chức và người dùng cần thực hiện ngay các biện pháp sau:

  • Nâng cấp ngay lập tức: Các tổ chức và người dùng nên nâng cấp ngay lập tức lên các phiên bản Git đã được vá lỗi bằng cách sử dụng trình quản lý gói của hệ điều hành (ví dụ: apt, brew, yum). Đây là biện pháp hiệu quả nhất để loại bỏ lỗ hổng.
  • Đối với người dùng GitHub Desktop trên macOS: Hiện tại, người dùng GitHub Desktop trên macOS nên tạm thời sử dụng Git CLI (giao diện dòng lệnh) thay vì GitHub Desktop để thực hiện các thao tác clone cho đến khi bản vá dành riêng cho ứng dụng này được phát hành.
  • Kiểm tra tệp .gitmodules: Các đội ngũ bảo mật nên kiểm tra và kiểm duyệt các tệp .gitmodules trong các kho lưu trữ của mình để phát hiện bất kỳ ký tự carriage return đáng ngờ nào trong các đường dẫn submodule. Việc này có thể giúp xác định các kho lưu trữ có khả năng bị tấn công hoặc đã bị sửa đổi độc hại.
  • Triển khai quy tắc phát hiện: Thiết lập các quy tắc phát hiện trong hệ thống giám sát an ninh để cảnh báo về các thao tác git clone --recursive được thực hiện đối với các kho lưu trữ không đáng tin cậy hoặc từ các nguồn không xác định. Việc giám sát chặt chẽ hoạt động này có thể giúp phát hiện sớm các nỗ lực khai thác.