25/12/14

Lỗ hổng an ninh từ file .git/config

Vào ngày 18/12/2014 vừa rồi, cộng đồng người dùng Git đã được thông báo về một lỗ hổng an ninh của Git mà theo đó trong trường hợp xấu nhât thì máy tính chạy Git sẽ bị chiếm quyền điều khiển. Lỗi này xuất hiện trên toàn bộ hệ thống chạy Git và không giới hạn ở phiên bản cài đặt nào cũng như Windows nào.

Điều đáng nói là ban đầu chính cộng đồng Hg là bên phát hiện ra lỗ hổng này trước, sau đó họ cũng thử kiểm tra bên Git và cũng phát hiện ra điều tương tự và thông báo một cách cẩn thận cho cộng đồng Git sau khi đã kiểm chứng và đưa ra cách giải quyết. (Vỗ tay)

Vậy lỗ hổng này là như thế nào?


Chúng ta đều biết Git luôn có một thư mục .git nằm ở thư mục gốc mã nguồn, trong thư mục .git này có chứa một file config và file này chứa nhiều thiết lập cục bộ (local settings) và đặc biệt là những alias (lệnh tắt) của git. Những alias này rất dễ dàng bị chỉnh sửa để chạy những lệnh không phải của git.

Thông thường thì trình Git client sẽ tránh ghi đè file này bằng file từ repository khi chúng ta kéo về (pull). Ngay cả khi bạn commit cả thư mục .git/config và push lên repository chung thì cũng không có vấn đề gì vì chẳng có trình Git client nào sẽ pull thư mục đó về để ghi đè lên .git/config trong local. Nó đủ thông minh để không làm việc đó.

Tuy nhiên, độ thông minh của Git client chưa được hoàn hảo như chúng ta tưởng. Nó vẫn chưa lọc được hết các trường hợp tên khác nhau của thư mục .git chẳng hạn như .Git, .gIT, .GiT, .git~123 (tên tắt của Windows) v.v.. nên khi có ai đó push một file config chứa mã độc nằm trong một trong những thư mục kể trên thì những người dùng Git khác sẽ vô tình tải nó về và ghi đè lên file .git/config và thực hiện những đoạn mã đó.

Có thể bạn sẽ tự hỏi sao một lỗi sơ đẳng vậy có thể tồn tại một thời gian dài như vậy trươc khi được phát hiện bởi một cộng đồng khác? Có thể bởi vì Linux/Unix là môi trường chính cho Git, mà trên Linux thì nó lại phân biệt hoa/thường. Có lẽ người ta hơi xem nhẹ Windows/OSX :D

Vậy sẽ thật nguy hiểm đúng không ?


Ồ, rất may là thực tế sẽ không quá nguy hiểm như bạn tưởng. Bởi vì nếu ai đó có ý định tấn công thì người đó phải có quyền commit lên repo mà bạn sẽ kéo về. Hầu hết thì những người như vậy đều là những người tin cậy, ít ra là chúng ta có thể nghĩ vậy. :)

Vậy có cần đối phó gì không?

Vâng tất nhiên vẫn phải cần, vì rõ ràng nó nguy hiểm vậy còn gì nữa. Git và Github đều đã có những ứng phó cho vấn đề này. Nếu bạn đang dùng Git hay Github (lastest info) thì hãy cập nhật ngay nhé.

Credit: Git vulnerability with .git\config

Không có nhận xét nào:

Đăng nhận xét