Một kẻ tấn công unauthenticated có thể đọc bất kỳ file nào mà service account có quyền truy cập trên Gitea, nền tảng Git self-hosted, trong các phiên bản từ 1.22.1 đến 1.27.0. Không cần đăng nhập, không cần quyền ghi vào repository. Một public repository và mã Org-mode markup được thiết kế đặc biệt là đủ để thực hiện. Lỗi này đã được khắc phục trong Gitea 1.27.1.
Lỗ hổng file-read này được theo dõi dưới mã CVE-2026-59774, được xếp hạng Critical với điểm CVSS là 9.8, và đã nhận được thông báo tư vấn chính thức vào ngày 2 tháng 8. Gitea 1.27.1 cũng vá lỗi CVE-2026-60004, một lỗi remote code execution riêng biệt đã được đề cập trong báo cáo trước đó.
Gitea cho biết các Cloud instances sẽ được nâng cấp tự động trong thời gian bảo trì. Các quản trị viên self-hosted nên cập nhật lên phiên bản 1.27.1 ngay lập tức.
Lỗi file-read này không phải là remote code execution trực tiếp qua một yêu cầu. Gitea cho biết nó có thể trở thành command execution nếu kẻ tấn công đọc được file app.ini, trích xuất INTERNAL_TOKEN, chèn một Git hook thông qua internal logger, và kích hoạt hook đó trong quá trình anonymous clone.
Chuỗi tấn công này được mô tả trong thông báo tư vấn của Gitea; tuy nhiên chưa có exploit công khai nào chứng minh được điều này một cách độc lập.
Việc nâng cấp là cần thiết nhưng có thể chưa đủ nếu nghi ngờ hệ thống đã bị xâm nhập. Nếu nhật ký (logs) cho thấy markup endpoint đã bị truy cập trên một bản build bị ảnh hưởng, hãy coi như các thông tin xác thực mà Gitea service account có thể đọc được đã bị lộ. Hãy thực hiện xoay vòng (rotate) internal token, tài liệu OAuth, tài liệu ký JWT và thông tin xác thực cơ sở dữ liệu trước khi coi instance đó là sạch.
Không yêu cầu quyền truy cập đặc biệt
Đường dẫn file-read chạy qua markup rendering endpoint của Gitea: POST /{owner}/{repo}/markup. Route này cho phép đăng nhập tùy chọn, phân giải repository và kiểm tra quyền truy cập của người đọc. Một yêu cầu anonymous có thể vượt qua kiểm tra này đối với bất kỳ public repository nào có code unit được bật. Điều kiện tiên quyết này giới hạn phạm vi tiếp xúc unauthenticated: một instance không có public repositories sẽ không có đường dẫn tấn công anonymous qua endpoint này.
Điểm yếu nằm trong Org-mode renderer của Gitea. Phiên bản Gitea 1.27.0 đã khởi tạo go-org với org.New() và không thay thế callback ReadFile mặc định của thư viện. Trong go-org 1.9.1, callback đó là ioutil.ReadFile. Chỉ thị #+INCLUDE của Org-mode chấp nhận các absolute paths và chuyển chúng đến callback. Kẻ tấn công gửi Org-mode markup, chọn Mode: file, và nhận được các file mà service account có thể đọc.
Bản vá đã được đưa vào PR #38642 và PR #38645. Gitea hiện đã ghi đè ReadFile để đường dẫn Org-mode include được trả về dưới dạng nội dung văn bản thuần túy thay vì được phân giải từ server filesystem. Bản vá cũng thêm một bài kiểm tra regression test cho việc hiển thị đường dẫn include.
CVE-2026-59774 được phát hiện bởi XBOW Security, một hệ thống an ninh tấn công tự động, và được phân loại bởi Guido Leo. Shai Rod (NightRang3r) cũng đã báo cáo độc lập vấn đề tương tự.
Quản trị viên nên kiểm tra những gì
Gitea không công bố hướng dẫn phát hiện chính thức. Hãy xem xét các yêu cầu POST anonymous tới /{owner}/{repo}/markup, đặc biệt là các yêu cầu chọn Org-mode rendering hoặc gửi các absolute filesystem paths. Nếu nghi ngờ chuỗi leo thang đặc quyền đã được thực hiện, hãy kiểm tra các thư mục repository hook để tìm các file thực thi bất thường.
Thông báo của Gitea cho biết chưa thấy việc khai thác trong thực tế, và tính đến tháng 8 năm 2026, CVE-2026-59774 vẫn chưa xuất hiện trong danh mục Known Exploited Vulnerabilities của CISA. Tuy nhiên, nguyên mẫu file-read đã được xem trước công khai trước khi có thông báo chính thức.
Lỗ hổng này xuất hiện sau một chuỗi các vấn đề bảo mật liên quan đến Gitea. Vào tháng 6, Gitea đã vá lỗi critical reverse-proxy authentication bypass trong các Docker images (CVE-2026-20896). Vào tháng 5, một lỗi container-registry access-control (CVE-2026-27771) ước tính ảnh hưởng đến hơn 30.000 lượt triển khai trên toàn thế giới.