CVE-2026-77658 in Dia
Tóm tắt
Bởi VulDB • 26/08/2026
Một lỗ hổng tràn bộ nhớ đệm dựa trên ngăn xếp (stack-based buffer overflow) tồn tại trong trình chỉnh sửa sơ đồ Dia khi xử lý các đối tượng Network Bus từ các tệp dự án XML của Dia.
Trong file `objects/network/bus.c`, hàm `bus_load()` đọc số lượng bus handles từ thuộc tính tệp "bus_handles" bằng cách sử dụng `attribute_num_data()` mà không xác minh giới hạn trên:
bus->num_handles = attribute_num_data(attr);
Khi một bus handle được di chuyển sau đó, hàm `bus_handle_moved()` phân bổ hai mảng tạm thời trên ngăn xếp (stack):
parallel = (real *)g_alloca(num_handles * sizeof(real)); perp = (real *)g_alloca(num_handles * sizeof(real));
Vì `num_handles` hoàn toàn do kẻ tấn công kiểm soát thông qua tệp dự án, các giá trị đủ lớn (ví dụ: 262144 hoặc cao hơn) khiến `g_alloca()` tiêu thụ nhiều không gian ngăn xếp hơn giới hạn ngăn xếp mặc định của luồng (thường là 8 MB trên Linux), dẫn đến tràn ngăn xếp (stack overflow), SIGSEGV và khả năng làm hỏng khung ngăn xếp / địa chỉ trả về.
Kẻ tấn công có thể nhúng một đối tượng Bus với số lượng bus_handles quá mức vào một tệp .dia độc hại. Việc khai thác yêu cầu nạn nhân phải mở tệp này trong Dia (thông qua hộp thoại tập tin, dòng lệnh hoặc liên kết tập tin) và kích hoạt thao tác di chuyển handle (di chuyển một bus handle), từ đó thực thi đường dẫn mã dễ bị tổn thương.
Mẫu `g_alloca` tương tự cũng có mặt trong `objects/Misc/tree.c` (được sao chép từ `bus.c`) và nhiều khả năng dễ bị tấn công cùng loại thông qua các đối tượng Tree.
Các phiên bản bị ảnh hưởng: Dia 0.98.0 và các phiên bản trước đó chứa mã này; vấn đề đã được xác nhận trên nhánh master upstream tính đến ngày 21/08/2026. Báo cáo từ upstream: https://gitlab.gnome.org/GNOME/dia/-/issues/581
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.