CWE-122: Heap-based Buffer Overflow

CWE-122 là gì?

CWE-122 là Heap-based Buffer Overflow. Lỗi phát sinh khi the product writes past the end of a buffer that was allocated on the heap. Hiện có 1.098 lỗ hổng trong kho dữ liệu liên quan đến CWE-122 và 3 trong số đó nằm trong danh mục khai thác thực tế của CISA.

Thứ hạng OWASP Top 10-
Tổng số CVE liên quan (365 ngày)1.098
Mức trừu tượngBiến thể
Khả năng khai thácCao

Số lượng lỗ hổng nằm trong CWE-122

1.098 lỗ hổngTăng 294% so với cùng kỳ

Số lượng lỗ hổng trong CISA KEV của CWE-122

3 lỗ hổngKhông đổi so với cùng kỳ

Định nghĩa chính thức

TheoMitre CWE

Đặc điểm

Dữ liệu MITRE CWE chính thức

Tên gọi khác

  • Heap Overflow
  • Heap Buffer Overflow

Giai đoạn hình thành

  • Hiện thực hóa

Hậu quả thường gặp

Dữ liệu MITRE CWE chính thức
Tác độngPhạm viDiễn giải
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 sẵn sàngBuffer overflows generally lead to crashes. Other attacks leading to lack of availability are possible, including putting the program into an infinite loop.
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ậpBuffer overflows often can be used to execute arbitrary code, which is usually outside the scope of a program's implicit security policy. Besides important user data, heap-based overflows can be used to overwrite function pointers that may be living in memory, pointing it to the attacker's code. Even in applications that do not explicitly use function pointers, the run-time will usually leave many in memory. For example, object methods in C++ are generally implemented using function pointers. Even in C programs, there is often a global offset table used by the underlying runtime.
Thực thi mã hoặc lệnh trái phép, Vượt qua cơ chế bảo vệ, KhácTính toàn vẹn, Tính bí mật, Tính sẵn sàng, Kiểm soát truy cập, KhácWhen the consequence is arbitrary code execution, this can often be used to subvert any other security service.

Biện pháp giảm thiểu rủi ro

Dữ liệu MITRE CWE chính thức
  1. Pre-design: Use a language or compiler that performs automatic bounds checking.
  2. Kiến trúc và thiết kếUse an abstraction library to abstract away risky APIs. Not a complete solution.
  3. Gia cố môi trường · Vận hành, Xây dựng và biên dịch · Hiệu quả: Phòng thủ nhiều lớpUse automatic buffer overflow detection mechanisms that are offered by certain compilers or compiler extensions. Examples include: the Microsoft Visual Studio /GS flag, Fedora/Red Hat FORTIFY_SOURCE GCC flag, StackGuard, and ProPolice, which provide various mechanisms including canary-based detection and range/index checking. D3-SFCV (Stack Frame Canary Validation) from D3FEND [REF-1334] discusses canary-based detection in detail.This is not necessarily a complete solution, since these mechanisms only detect certain types of overflows. In addition, the result is still a denial of service, since the typical response is to exit the application.
  4. Gia cố môi trường · Vận hành, Xây dựng và biên dịch · Hiệu quả: Phòng thủ nhiều lớpRun or compile the software using features or extensions that randomly arrange the positions of a program's executable and libraries in memory. Because this makes the addresses unpredictable, it can prevent an attacker from reliably jumping to exploitable code. Examples include Address Space Layout Randomization (ASLR) [REF-58] [REF-60] and Position-Independent Executables (PIE) [REF-64]. Imported modules may be similarly realigned if their default memory addresses conflict with other modules, in a process known as "rebasing" (for Windows) and "prelinking" (for Linux) [REF-1332] using randomly generated addresses. ASLR for libraries cannot be used in conjunction with prelink since it would require relocating the libraries at run-time, defeating the whole purpose of prelinking. For more information on these techniques see D3-SAOR (Segment Address Offset Randomization) from D3FEND [REF-1335].These techniques do not provide a complete solution. For instance, exploits frequently use a bug that discloses memory addresses in order to maximize reliability of code execution [REF-1337]. It has also been shown that a side-channel attack can bypass ASLR [REF-1333].
  5. Hiện thực hóaImplement and perform bounds checking on input.
  6. Thư viện hoặc framework · Hiện thực hóaDo not use dangerous functions such as gets. Look for their safe equivalent, which checks for the boundary.
  7. Vận hànhUse OS-level preventative functionality. This is not a complete solution, but it provides some defense in depth.

Cách phát hiện trong hệ thống

Dữ liệu MITRE CWE chính thức
Phương phápCách làmHiệu quả
Kiểm thử fuzzingFuzz testing (fuzzing) is a powerful technique for generating large numbers of diverse inputs - either randomly or algorithmically - and dynamically invoking the code with those inputs. Even with random inputs, it is often capable of generating unexpected results such as crashes, memory corruption, or resource consumption. Fuzzing effectively produces repeatable test cases that clearly indicate bugs, which helps developers to diagnose the issues.Cao
Phân tích động tự độngUse tools that are integrated during compilation to insert runtime error-checking mechanisms related to memory safety errors, such as AddressSanitizer (ASan) for C/C++ [REF-1518].Crafted inputs are necessary to reach the code containing the error, such as generated by fuzzers. Also, these tools may reduce performance, and they only report the error condition - not the original mistake that led to the error.Khá

Lỗ hổng điển hình

Nguồn (2)

CWE™ Program, operated by The MITRE Corporation. Copyright © 2006–2026, The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. CWE Terms of Use.

Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.