Trạng thái tràn heap xảy ra khi một vùng đệm được cấp phát trên heap bị ghi vượt giới hạn đã cấp phát. Điều này thường xảy ra khi vùng nhớ được cấp phát bằng các hàm như malloc bị truy cập với dữ liệu vượt quá giới hạn mà không được kiểm tra.
Phân tích của CyStack dựa trên nguồn MITRE CWE chính thức 4.20 (30/04/2026).
A heap overflow condition is a buffer overflow, where the buffer that can be overwritten is allocated in the heap portion of memory, generally meaning that the buffer was allocated using a routine such as malloc().
Mô tả chi tiết
Tràn heap xảy ra khi dữ liệu nhập từ bên ngoài hoặc quản lý kém ghi vượt quá ranh giới của các khối nhớ được cấp phát trên heap. Khác với tràn ngắn hạn ở ngăn xếp, tràn heap có thể làm hỏng metadata của bộ cấp phát, con trỏ hàm hoặc các cấu trúc điều khiển heap khác, có thể cho phép thực thi mã tùy ý hoặc làm cho chương trình treo. Lỗ hổng liên quan đến quản lý bộ nhớ và ngữ cảnh an ninh của cấp phát động, trong đó khai thác thường dựa vào làm hỏng dữ liệu trong khu vực heap và ảnh hưởng tới luồng điều khiển hoặc tính toàn vẹn dữ liệu.
Đặc điểm
Trừu tượng: Biến thể. Cấu trúc: Đơn giản. Khả năng khai thác: Cao. Giai đoạn giới thiệu: Triển khai. Thuật ngữ: Tràn đệm, heap. Nền tảng: Ngôn ngữ không an toàn với bộ nhớ như C/C++. Các đặc tính liên quan của lỗ hổng bao gồm ảnh hưởng đến sẵn sàng, tính toàn vẹn, bí mật và kiểm soát truy cập khi thực thi mã tùy ý xảy ra.
Giai đoạn hình thành
Hiện thực hóa
Tác động thường gặp
Phạm vi bao gồm Tính sẵn sàng, Tính toàn vẹn, Bảo mật thông tin, Kiểm soát truy cập. Tác động bao gồm từ chối dịch vụ do treo hoặc khởi động lại, tiêu hao tài nguyên CPU và bộ nhớ. Thực thi mã tùy ý có thể bypass cơ chế bảo vệ và sửa đổi bộ nhớ, có thể làm suy yếu dữ liệu người dùng và chính sách bảo mật. Trong một số trường hợp, khai thác có thể làm suy yếu các dịch vụ bảo mật khác bằng cách thay đổi luồng điều khiển hoặc cấu trúc bộ nhớ.
Tính sẵn sàng
Từ chối dịch vụ: sập, thoát hoặc khởi động lại, Từ chối dịch vụ: tiêu thụ tài nguyên CPU, Từ chối dịch vụ: tiêu thụ bộ nhớ
Tính toàn vẹn, Tính bí mật, Tính sẵn sàng, Kiểm soát truy cập
Thực thi mã hoặc lệnh trái phép, Vượt qua cơ chế bảo vệ, Thay đổi bộ nhớ
Tính toàn vẹn, Tính bí mật, Tính sẵn sàng, Kiểm soát truy cập, Khác
Thực thi mã hoặc lệnh trái phép, Vượt qua cơ chế bảo vệ, Khác
Biện pháp giảm thiểu
Tiền thiết kế: Sử dụng ngôn ngữ hoặc trình biên dịch có kiểm tra giới hạn tự động. Kiến trúc và Thiết kế: Sử dụng thư viện trừu tượng để che chắn các API nguy hiểm. Vận hành/Build: Kích hoạt các cơ chế phát hiện tràn tự động trong trình biên dịch hoặc phần mở rộng (ví dụ GS của Microsoft, FORTIFY_SOURCE của GCC, StackGuard, ProPolice, hoặc D3-SFCV); mặc dù không phải là giải pháp đầy đủ, chúng cung cấp kiểm tra canary hoặc kiểm tra phạm vi. Vận hành/Build: Áp dụng các kỹ thuật ngẫu nhiên hóa không gian bộ nhớ như ASLR và PIE để gây khó cho việc nhảy tới mã độc hại. Triển khai: Áp dụng kiểm tra giới hạn cho đầu vào. Triển khai: Ưu tiên các hàm thư viện an toàn và tránh các hàm nguy hiểm như gets.
Kiến trúc và thiết kế
Vận hành, Xây dựng và biên dịch · Gia cố môi trườngHiệu quả: Phòng thủ nhiều lớp
Vận hành, Xây dựng và biên dịch · Gia cố môi trườngHiệu quả: Phòng thủ nhiều lớp
Hiện thực hóa
Hiện thực hóa · Thư viện hoặc framework
Vận hành
Phương pháp phát hiện
Fuzzing rất hiệu quả để kích hoạt treo và sự cố bộ nhớ, và phân tích động tự động với các công cụ như AddressSanitizer có thể phát hiện lỗi an toàn bộ nhớ trong quá trình biên dịch hoặc chạy. Các phương pháp này có giới hạn, vì có thể cần các đầu vào được thiết kế đặc biệt để tới được mã dễ bị tổn thương và một số công cụ có thể báo cáo lỗi mà không giải thích sai lầm cơ bản.
Kiểm thử fuzzingHiệu quả: Cao
Phân tích động tự độngHiệu quả: Khá
Lỗ hổng điển hình
Các ví dụ được ghi nhận chính thức bao gồm chuỗi lỗ hổng như: CVE-2025-46687 mô tả tràn heap do mất kiểm tra độ dài trong động viên JavaScript, CVE-2021-43537 nơi ép kiểu từ 64-bit sang 32-bit có thể gây hỏng bộ nhớ heap, CVE-2007-4268 liên quan đến lỗi chữ số dấu và dẫn tới tràn heap, CVE-2009-2523 nơi thiếu NULL termination gây tràn heap hoặc đọc tràn đệm, CVE-2021-29529 nơi giới hạn được suy ra từ làm tròn số thực dẫn tới tràn heap, và CVE-2010-1866 nơi tràn số nguyên bỏ qua kiểm tra và gây tràn heap.
Các ví dụ này chỉ minh họa cho mục CWE, không phải danh sách đầy đủ mọi lỗ hổng liên quan.