Vấn đề
- Tối qua, khi đang khám phá nội dung của cơ sở dữ liệu checksum của Go, tôi phát hiện ra một kết quả thú vị.
- Kết quả khi chạy lệnh
sqlite> select path, count(path) from modules group by path order by count(path) desc;:
github.com/homebrew/homebrew-core|39438
github.com/Homebrew/homebrew-core|30896
github.com/concourse/concourse|25372
github.com/openshift/release|24065
github.com/cilium/cilium|22138
- Homebrew vốn được biết là dùng Ruby, nên mối liên hệ với Go khiến tôi thấy khó hiểu.
- Thống kê ngôn ngữ của GitHub cũng xác nhận điều đó.
- Tôi đã clone kho lưu trữ để tìm các tệp liên quan đến Go (
go.mod hoặc tệp mã nguồn Go), nhưng không tìm thấy gì.
Nghiên cứu
- Một ngày mới bắt đầu và sự tò mò đòi hỏi phải có câu trả lời.
- Nếu kho Git không liên quan đến mã Go, tôi tự hỏi tại sao nó lại xuất hiện trong cơ sở dữ liệu checksum của Go.
- Tôi biết rằng
proxy.golang.org là proxy mô-đun mặc định và sum.golang.org là cơ sở dữ liệu checksum.
- Đọc tài liệu của Go, tôi biết được rằng nếu phiên bản mô-đun chưa được ghi vào log, cơ sở dữ liệu checksum sẽ cố lấy mô-đun từ máy chủ gốc.
- Để xác nhận xem kho mô-đun Go mới có được thêm vào cơ sở dữ liệu checksum và proxy hay không, tôi đã gọi endpoint
lookup.
- Sau khi tạo một mô-đun Go mới và tải nó lên tài khoản GitHub, tôi thử lệnh
lookup theo hai cách nhưng cả hai đều báo lỗi.
- Tôi tạo đúng pseudo-version và truy vấn lại cơ sở dữ liệu checksum để xác nhận rằng mô-đun đã được tải xuống.
- Tôi truy vấn proxy và tải về
zip của mô-đun để chứng minh rằng có thể lưu dữ liệu tùy ý trên hạ tầng Go.
Khả năng bị lạm dụng
- Có thể bị dùng để vượt qua các giới hạn tải xuống trên máy của lập trình viên và máy chủ CI/CD.
- Phần mềm độc hại có thể lưu payload và lấy nó từ proxy khi cần.
- Có thể thực hiện tấn công từ chối dịch vụ (DoS) vào
proxy.golang.org.
- Có thể dễ dàng triển khai hệ thống chỉ huy và điều khiển (C2).
Kết luận
- Tôi đã hiểu được quy trình của cơ sở dữ liệu checksum hoạt động như thế nào.
- Hiện tại đây chưa phải là vấn đề nghiêm trọng đối với hạ tầng Go, nhưng có khả năng bị lạm dụng.
- Vẫn còn những câu hỏi tiếp theo về lý do các dự án không phải Go lại có mặt trong cơ sở dữ liệu.
- Nghiên cứu này đã mang lại cho tôi nhiều ý tưởng và tôi dự định sẽ tiếp tục khám phá.
Ý kiến của GN⁺
- Lỗ hổng bảo mật: Bài viết này chỉ ra một lỗ hổng bảo mật trong cơ sở dữ liệu checksum của Go, nơi có thể lưu trữ dữ liệu tùy ý. Điều này có thể tạo ra một con đường để mã độc được phát tán dễ dàng.
- Cần cải thiện: Cần cải thiện kiểm soát truy cập của cơ sở dữ liệu checksum và máy chủ proxy để tăng cường bảo mật và tính toàn vẹn của hạ tầng Go.
- Tích hợp với ngôn ngữ khác: Cần làm rõ vì sao các dự án không phải Go lại xuất hiện trong cơ sở dữ liệu checksum của Go, đồng thời cần thêm các bước xác thực để ngăn điều này.
- Đào tạo lập trình viên: Cần đào tạo để các lập trình viên nhận thức được những lỗ hổng bảo mật như vậy và hiểu các biện pháp tốt nhất để phòng tránh.
- Giải pháp thay thế: Có thể so sánh với cơ sở dữ liệu checksum và máy chủ proxy của các ngôn ngữ khác có chức năng tương tự để tham khảo cho việc cải thiện hạ tầng Go.
1 bình luận
Ý kiến Hacker News
Tóm tắt các bình luận trên Hacker News
Khả năng bị lạm dụng của các dịch vụ trực tuyến
Vấn đề lưu trữ tệp của Google
So sánh với GitHub
Các dự án không phải Python trên PyPI
Proxy Golang và nhật ký checksum
sumdb.Khám phá tên miền
Vấn đề đã biết
Hệ thống mô-đun của CUE
Vấn đề bộ nhớ đệm web
Cache-Control: max-agengắn một cách không cần thiết hoặcVary: Cookie, hay là quá nhiều ISP phải trả chi phí transit?Vấn đề bộ nhớ đệm proxy