CWE-122 là gì?
Tràn bộ đệm dựa trên heap xảy ra khi dữ liệu được ghi vượt quá giới hạn của một bộ đệm được cấp phát trong vùng nhớ heap, thường thông qua một hàm như malloc.
Tràn bộ đệm dựa trên heap xảy ra khi dữ liệu được ghi vượt quá giới hạn của một bộ đệm được cấp phát trong vùng nhớ heap, thường thông qua một hàm như malloc.
Điểm yếu phát sinh khi chương trình không bảo đảm dữ liệu vừa với bộ đệm được cấp phát trên heap. Việc ghi vượt giới hạn có thể làm hỏng dữ liệu heap lân cận hoặc thông tin điều khiển nằm trong bộ nhớ, bao gồm con trỏ hàm và các cấu trúc thời gian chạy khác. Tùy thuộc vào dữ liệu bị ghi đè và môi trường thực thi, lỗi này có thể gây treo chương trình, tiêu hao tài nguyên, thực thi mã trái phép hoặc vượt qua các cơ chế kiểm soát bảo mật.
Đây là một điểm yếu đơn giản ở cấp biến thể, thường được đưa vào trong giai đoạn triển khai và thường liên quan đến các ngôn ngữ không an toàn về bộ nhớ, đặc biệt là C và C++. Đặc điểm xác định là bộ đệm bị ảnh hưởng nằm trong vùng nhớ heap thay vì trên stack. Tình trạng này có thể bắt nguồn từ việc kiểm tra giới hạn đầu vào không đầy đủ, lỗi tính toán số nguyên, xử lý kết thúc chuỗi không đúng hoặc sử dụng API không an toàn.
Tác động trực tiếp có thể là chương trình bị treo, kết thúc hoặc khởi động lại, tiêu thụ quá nhiều CPU, cạn kiệt bộ nhớ hoặc gây ra một dạng từ chối dịch vụ khác. Việc làm hỏng dữ liệu heap hoặc con trỏ hàm có thể cho phép thực thi mã hoặc lệnh trái phép, sửa đổi bộ nhớ hoặc vượt qua cơ chế bảo vệ, ảnh hưởng đến tính bí mật, toàn vẹn, khả dụng và kiểm soát truy cập. Việc thực thi mã tùy ý cũng có thể làm suy yếu các dịch vụ bảo mật khác.
| Tác động | Phạm vi | Diễ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àng | Buffer 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ập | Buffer 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ác | 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 | When the consequence is arbitrary code execution, this can often be used to subvert any other security service. |
Ngăn ghi dữ liệu không an toàn: Sử dụng ngôn ngữ hoặc trình biên dịch có kiểm tra giới hạn tự động, thực hiện kiểm tra giới hạn đầu vào trong giai đoạn triển khai và tránh các hàm nguy hiểm như gets, thay bằng các hàm tương đương có kiểm tra giới hạn. Sử dụng thư viện trừu tượng để che giấu các API rủi ro, nhưng cần hiểu rằng đây không phải giải pháp hoàn chỉnh. Áp dụng các chức năng phòng ngừa ở cấp hệ điều hành như một lớp phòng thủ bổ sung.
Tăng cường bản build và môi trường chạy: Bật cơ chế phát hiện tràn bộ đệm do trình biên dịch hoặc phần mở rộng trình biên dịch cung cấp, chẳng hạn cờ /GS của Microsoft Visual Studio, FORTIFY_SOURCE của Fedora/Red Hat, StackGuard và ProPolice. Các cơ chế này chỉ phát hiện một số dạng tràn và thường phản ứng bằng cách kết thúc ứng dụng, vì vậy bản thân chúng vẫn có thể dẫn đến từ chối dịch vụ. Sử dụng ngẫu nhiên hóa bố cục bộ nhớ và các biện pháp bảo vệ liên quan, bao gồm ASLR và PIE; chúng làm giảm độ tin cậy của việc khai thác luồng điều khiển nhưng không bảo vệ hoàn toàn vì việc làm lộ địa chỉ hoặc tấn công kênh bên có thể vượt qua ASLR.
Fuzzing: Tạo số lượng lớn đầu vào đa dạng, gọi mã một cách động và tìm các lỗi lặp lại được như treo chương trình, hỏng bộ nhớ hoặc tiêu hao tài nguyên. Fuzzing có hiệu quả cao trong việc phát hiện hành vi bất thường, nhưng phụ thuộc vào việc đầu vào có tiếp cận được đoạn mã lỗi hay không.
Phân tích động tự động: Tích hợp các cơ chế kiểm tra an toàn bộ nhớ trong thời gian chạy khi biên dịch, chẳng hạn AddressSanitizer (ASan) cho C/C++. Cần có đầu vào được tạo phù hợp để đi tới lỗi; các công cụ này có thể làm giảm hiệu năng và chỉ báo cáo điều kiện lỗi, không chỉ ra sai sót lập trình ban đầu gây ra lỗi.
| Phương pháp | Cách làm | Hiệu quả |
|---|---|---|
| Kiểm thử fuzzing | Fuzz 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ự động | Use 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á |
Hồ sơ chính thức liệt kê các ví dụ tiêu biểu sau, không phải danh sách đầy đủ:
CVE-2025-46687: Việc thiếu kiểm tra độ dài dẫn qua lỗi tràn số nguyên và cấp phát bộ đệm quá nhỏ, cuối cùng gây tràn bộ đệm heap trong một engine JavaScript.CVE-2021-43537: Việc ép chuyển từ số nguyên không dấu 64 bit sang 32 bit có thể góp phần gây tràn số nguyên và hỏng bộ nhớ heap trong trình duyệt web.CVE-2007-4268: Lỗi về dấu của số nguyên cho phép phép so sánh vượt qua kiểm tra và dẫn đến tràn heap.CVE-2009-2523: Không xử lý chuỗi đầu vào không được kết thúc bằng giá trị null dẫn đến đọc vượt bộ đệm hoặc tràn bộ đệm dựa trên heap.CVE-2021-29529: Việc tính giới hạn liên quan đến số nguyên bằng ceiling và floor trên giá trị dấu phẩy động có thể gây tràn bộ đệm heap trong một sản phẩm máy học.CVE-2010-1866: Tràn số nguyên tạo ra giá trị có dấu âm, vượt qua kiểm tra chỉ giới hạn tối đa và dẫn đến tràn bộ đệm dựa trên heap.Dưới đây là các lỗ hổng tiêu biểu liên quan đến CWE-122, dựa theo mức độ ưu tiên
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.
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.
Khám phá CyStack VulnScanvi