Trong thế giới trò chơi điện tử, Factorio tạo ra một sự độc đáo riêng của giới game mô phỏng xây dựng và quản lý. Trò chơi tiến triển khi người chơi tiếp tục xây dựng và quản lý hệ thống kiểu nhà máy tự động của họ, hệ thống này tự động hóa việc khai thác, vận chuyển, xử lý và lắp ráp tài nguyên và sản phẩm. Người chơi nghiên cứu các công nghệ tiên tiến cho phép họ tạo ra những công trình, vật phẩm và nâng cấp mới, bắt đầu với quá trình tự động hóa cơ bản.
Với hơn 3,5 triệu bản được bán trên nhiều nền tảng khác nhau bao gồm Windows, Linux, macOS, Steam Deck và Nintendo Switch, mức độ phổ biến của Factorio là không thể phủ nhận. Tuy nhiên, kiến trúc lập trình độc đáo của trò chơi gần đây đã dẫn đến một một lỗ hổng bảo mật gây bất ngờ.
Vào tháng 9 năm 2023, nhà nghiên cứu bảo mật Valentin-Metz đã tiết lộ một lỗ hổng tràn bộ đệm nghiêm trọng trong Factorio. Lỗ hổng này ẩn trong mã C++ của công cụ tùy chỉnh của trò chơi, gây ra rủi ro đáng kể. Nó cho phép thực thi mã tùy ý khi tải hoặc xem trước tệp lưu đã sửa đổi, một tình huống đáng báo động trong một trò chơi nổi tiếng có cộng đồng dân công nghệ lớn.
Nguồn gốc của lỗ hổng nằm ở việc tính toán phân bổ byte (được đánh dấu cụ thể ở dòng 36 trong mã). Do việc truyền `data_length + 1` thành số nguyên không dấu 32 bit, một đầu vào cụ thể có thể kích hoạt giá trị bao quanh về 0.
Do đó, trình giải tuần tự mong muốn đọc các byte `data_length`, thay vào đó sẽ ghi các byte này vào một bộ đệm có kích thước không đủ là một byte. Tính toán sai lầm này đã dẫn đến việc ghi đè lên một đống dữ liệu lớn.
Các chi tiết cụ thể của tình trạng là liên tục dẫn đến tràn bội số 4GiB. Tuy nhiên, việc khai thác đã có cảnh báo, yêu cầu tệp bản đồ phải ngắn chính xác một byte là 4 gigabyte. Bất kỳ sai lệch nào và MapDeserializer sẽ gắn cờ lỗi dữ liệu không đủ.
Một khía cạnh thú vị của lỗ hổng này là việc Factorio triển khai toán tử `new[]` tùy chỉnh. Trong các trường hợp tiêu chuẩn, phân bổ có kích thước bằng 0 sẽ trả về một con trỏ null. Tuy nhiên, trong mã của Factorio, kích thước phân bổ bằng 0 được mặc định là một, đảm bảo không có phân bổ nào trả về con trỏ null.
Nhà nghiên cứu đã phát triển bằng chứng khai thác khái niệm trên máy Linux amd64 và đang sử dụng phiên bản Factorio gốc của Linux .
Nhóm Factorio khi nhận được báo cáo và bằng chứng về khái niệm của Valentin-Metz đã nhanh chóng hành động. Phiên bản 1.1.94 của trò chơi đã được phát hành và vá lỗ hổng.
Lỗ hổng tràn bộ đệm Factorio đóng vai trò như một lời nhắc nhở về sự phức tạp trong quá trình phát triển trò chơi và an ninh mạng. Nó nhấn mạnh tầm quan trọng của việc tăng cường xem xét mã và thực hành bảo mật, đặc biệt là trong các ứng dụng có cơ sở người dùng lớn và đa dạng khả năng sửa đổi.