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

Git vá lỗ hổng thực thi mã nghiêm trọng trong clone đệ quy

Các bản phát hành bảo trì Git 2.56.1 và các phiên bản cũ hơn đã khắc phục CVE-2026-111760, một lỗi cắt ngắn số nguyên cho phép các repository độc hại thực thi mã trong quá trình clone đệ quy.

Một khối kính chứa biểu tượng cảnh báo màu đỏ bên trong, đại diện cho một repository Git dễ bị tổn thương, bên cạnh một mắt xích gãy.
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.

Dự án Git đã phát hành các bản vá khẩn cấp để khắc phục một lỗ hổng nghiêm trọng cho phép kẻ tấn công thực thi mã tùy ý trên máy của nhà phát triển. Lỗi này, được xác định là CVE-2026-111760, xảy ra khi người dùng clone đệ quy một repository chứa các submodule độc hại. Các bản sửa lỗi đã được công bố trong tuần này trên nhiều phiên bản được hỗ trợ, đòi hỏi sự chú ý ngay lập tức từ các nhóm kỹ thuật đang sử dụng Git để quản lý phiên bản.

Chuyện gì đã xảy ra

Vấn đề cốt lõi nằm ở cách Git xử lý đường dẫn tệp trong index của nó. Kẻ tấn công có thể tạo ra một repository với đường dẫn cực dài, vượt qua các kiểm tra an toàn ban đầu nhưng bị cắt ngắn số nguyên (integer truncation) khi ghi ra đĩa. Việc cắt ngắn này làm rút gọn tên đường dẫn, cho phép kẻ tấn công thao túng tên tệp cuối cùng sao cho khớp với .git. Trong một submodule vừa được clone, .git tồn tại dưới dạng một tệp chứ không phải một thư mục. Kẻ tấn công thay thế tệp này bằng một symbolic link trỏ tới một thư mục chứa các hook hoặc tệp cấu hình độc hại. Vì Git thực thi các hook tại những thời điểm cụ thể trong quy trình làm việc, việc liên kết tới thư mục do kẻ tấn công kiểm soát sẽ kích hoạt khả năng thực thi mã từ xa.

Dự án Git đã giải quyết vấn đề này trong phiên bản 2.56.1 và backport các bản sửa lỗi sang các dòng phiên bản từ 2.50 đến 2.55, cụ thể là các phiên bản 2.50.2, 2.51.3, 2.52.1, 2.53.1, 2.54.1 và 2.55.1. GitHub xác nhận rằng họ đã áp dụng các bản sửa lỗi này cho github.com và GitHub Enterprise Cloud. Đối với các instance tự host, các phiên bản GitHub Enterprise Server 3.19.15, 3.20.11, 3.21.9 và 3.22.4 đã bao gồm bản vá. Các bản cập nhật cho GitHub Desktop, GitHub Copilot, Codespaces và Actions đang trong quá trình chuẩn bị. Tuy nhiên, tính đến 19:09 UTC ngày thứ Ba, Git for Windows vẫn chưa phát hành phiên bản dựa trên nhánh 2.56.1 đã được vá.

Cơ chế hoạt động

Lỗ hổng này khai thác sự không nhất quán giữa việc kiểm tra đường dẫn nội bộ của Git và cách hệ thống tệp xử lý các tên dài. Khi Git xử lý index, nó kiểm tra độ dài của đường dẫn. Nếu đường dẫn quá dài, một lỗi cắt ngắn số nguyên sẽ xảy ra, khiến Git ghi tệp dưới một tên ngắn hơn và dễ đoán. Bằng cách xây dựng đường dẫn một cách cẩn thận, kẻ tấn công đảm bảo rằng tên bị rút gọn này sẽ phân giải thành .git bên trong thư mục submodule.

Các submodule đặc biệt dễ bị tổn thương vì mục .git của chúng ban đầu là một tệp chứa tham chiếu đến thư mục git thực tế, chứ không phải chính thư mục đó. Git thường ngăn chặn việc thay thế thư mục .git bằng một symlink, nhưng không chặn việc thay thế tệp .git. Một khi symlink được thiết lập, bất kỳ thao tác Git tiếp theo nào kích hoạt hooks đều sẽ thực thi các script từ vị trí do kẻ tấn công kiểm soát. Các phiên bản đã được vá hiện từ chối những đường dẫn cực dài trước khi việc cắt ngắn có thể xảy ra, ngăn chặn hoàn toàn xung đột tên.

Chi tiết chính

  • Lỗ hổng chính: CVE-2026-111760 liên quan đến lỗi cắt ngắn số nguyên trong việc xử lý index của Git, cho phép thực thi mã thông qua các submodule độc hại.
  • Phiên bản đã sửa: Git 2.56.1, cộng với 2.50.2, 2.51.3, 2.52.1, 2.53.1, 2.54.1 và 2.55.1.
  • Bản sửa cho GitHub Enterprise: Có sẵn trong các phiên bản server 3.19.15, 3.20.11, 3.21.9 và 3.22.4.
  • Các lỗi khác: Năm CVE khác cũng đã được khắc phục, bao gồm path traversal trong các repo trống (CVE-2026-113408) và heap corruption thông qua các merge lớn (CVE-2026-105437).
  • Tình trạng trên Windows: Git for Windows chưa phát hành phiên bản đã vá dựa trên 2.56.1 vào thời điểm báo cáo.
  • Giải pháp tạm thời: Tránh clone đệ quy các repository không đáng tin cậy và không xử lý các binary patch từ nguồn lạ cho đến khi được cập nhật.

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

Đối với các kỹ sư phần mềm và trưởng nhóm kỹ thuật, lỗ hổng này nhấn mạnh những rủi ro tiềm ẩn trong các phụ thuộc chuỗi cung ứng (supply chain dependencies). Clone đệ quy là một thực hành phổ biến trong các monorepo và các dự án có nhiều submodule. Nếu chỉ một submodule bị xâm phạm hoặc nếu nhà phát triển clone một fork độc hại, toàn bộ môi trường phát triển có thể bị ảnh hưởng. Đây không chỉ là một rủi ro lý thuyết; các pipeline CI/CD tự động thường clone repository một cách đệ quy, có khả năng phơi bày các máy chủ build trước cùng một cuộc tấn công.

Sự hiện diện của năm lỗ hổng bổ sung trong cùng một bản phát hành cho thấy mức độ phức tạp trong việc duy trì các hệ thống quản lý phiên bản an toàn. Các vấn đề như heap corruption từ các merge lớn hoặc path traversal trong protocol v2 ảnh hưởng đến cả dịch vụ hosting và client cục bộ. Các nhóm quản lý instance GitLab hoặc GitHub Enterprise riêng tư phải ưu tiên các bản cập nhật này, vì các máy chủ chạy git merge-tree để xác minh pull request là mục tiêu cụ thể của CVE-2026-105437. Việc trì hoãn các bản vá sẽ để hạ tầng mở cửa cho các cuộc tấn công từ chối dịch vụ (DoS) và nguy cơ rò rỉ dữ liệu.

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

  • Nâng cấp cài đặt Git cục bộ của bạn lên một trong các phiên bản đã được vá ngay lập tức, kiểm tra trình quản lý gói của OS hoặc nhà phân phối Git.
  • Nếu bạn quản lý GitHub Enterprise Server, hãy nâng cấp lên phiên bản 3.19.15, 3.20.11, 3.21.9 hoặc 3.22.4.
  • Tránh sử dụng git clone --recursive trên các repository từ nguồn không đáng tin cậy cho đến khi tất cả các hệ thống đều được vá.
  • Cấu hình các pipeline CI/CD để bỏ qua việc khởi tạo submodule đệ quy đối với các phụ thuộc bên ngoài hoặc chưa được xác minh.
  • Đối với các máy chủ GitLab không thể nâng cấp ngay lập tức, hãy đặt conflict-marker-size=7 trong tệp info/attributes của repository để giảm thiểu rủi ro từ CVE-2026-105437.
  • Theo dõi các tag phát hành của Git for Windows và cập nhật ngay khi một phiên bản dựa trên 2.56.1 trở nên khả dụng.
  • #git
  • #security
  • #vulnerability
  • #devops
  • #supply-chain

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

Đọc tiếp

Tất cả bài viết