CWE-665 là gì?
Sản phẩm không khởi tạo hoặc khởi tạo không đúng một tài nguyên, khiến tài nguyên đó có thể ở trạng thái không dự kiến khi được truy cập hoặc sử dụng.
Sản phẩm không khởi tạo hoặc khởi tạo không đúng một tài nguyên, khiến tài nguyên đó có thể ở trạng thái không dự kiến khi được truy cập hoặc sử dụng.
Tài nguyên chưa được khởi tạo có thể chứa giá trị còn sót lại hoặc giá trị không xác định, trong khi mã chương trình lại giả định rằng tài nguyên đã có các thuộc tính an toàn. Vấn đề đặc biệt nghiêm trọng khi tài nguyên là biến quyết định người dùng đã xác thực hay chưa, cờ kiểm soát truy cập, bộ nhớ được tái sử dụng, chỉ số mảng hoặc con trỏ. Lỗi có thể xuất hiện trong các nhánh hiếm gặp như xử lý lỗi, khi khởi tạo bị bỏ qua do điều kiện phức tạp, hoặc khi một luồng khác truy cập tài nguyên trước khi quá trình khởi tạo hoàn tất.
Điểm yếu này thường xuất hiện khi một tài nguyên, biến hoặc vùng dữ liệu được truy cập trước khi có trạng thái hợp lệ, hoặc khi chỉ một số nhánh điều khiển thực hiện khởi tạo. Các đường dẫn ít được kiểm thử, đặc biệt là điều kiện lỗi và xử lý ngoại lệ, dễ bỏ sót việc khởi tạo. Hậu quả phụ thuộc vào giá trị còn lại trong tài nguyên: dữ liệu có thể bị sử dụng như cờ bảo mật, chỉ số, con trỏ, hàm xử lý hoặc nội dung được gửi ra ngoài.
Các tác động có thể gồm tiết lộ dữ liệu còn sót lại trong bộ nhớ hoặc dữ liệu ứng dụng khi tài nguyên được tái sử dụng rồi gửi cho bên không tin cậy. Nếu quyết định bảo mật phụ thuộc vào việc một giá trị bằng không hoặc tương đương, giá trị ngoài dự kiến có thể làm vượt qua cơ chế bảo vệ. Các giá trị bất thường cũng có thể làm thay đổi luồng chương trình, gây treo, thoát hoặc khởi động lại, kết quả sai, hỏng bộ nhớ hoặc thực thi mã trong các trường hợp đại diện.
| Tác động | Phạm vi | Diễn giải |
|---|---|---|
| Đọc bộ nhớ, Đọc dữ liệu ứng dụng | Tính bí mật | When reusing a resource such as memory or a program variable, the original contents of that resource may not be cleared before it is sent to an untrusted party. |
| Vượt qua cơ chế bảo vệ | Kiểm soát truy cập | If security-critical decisions rely on a variable having a "0" or equivalent value, and the programming language performs this initialization on behalf of the programmer, then a bypass of security may occur. |
| Từ chối dịch vụ: sập, thoát hoặc khởi động lại | Tính sẵn sàng | The uninitialized data may contain values that cause program flow to change in ways that the programmer did not intend. For example, if an uninitialized variable is used as an array index in C, then its previous contents may produce an index that is outside the range of the array, possibly causing a crash or an exit in other environments. |
Sử dụng ngôn ngữ ngăn dữ liệu chưa khởi tạo hoặc cung cấp các cơ chế giúp tránh lỗi này, chẳng hạn kiểm tra tại thời điểm biên dịch hoặc giá trị mặc định được xác định rõ. Trong giai đoạn kiến trúc và thiết kế, hãy xác định các biến và kho dữ liệu nhận thông tin từ bên ngoài, đồng thời kiểm tra đầu vào để chúng chỉ được khởi tạo bằng các giá trị hợp lệ dự kiến. Khởi tạo tường minh mọi biến và kho dữ liệu khi khai báo hoặc ngay trước lần sử dụng đầu tiên; rà soát các điều kiện phức tạp để bảo đảm mọi nhánh liên quan đều thực hiện khởi tạo. Tránh điều kiện tranh chấp trong các thủ tục khởi tạo và biên dịch hoặc xây dựng sản phẩm với tùy chọn cảnh báo về biến hay dữ liệu chưa khởi tạo.
Có thể phát hiện một số trường hợp bằng phân tích tĩnh tự động, thông qua mô hình hóa luồng dữ liệu và luồng điều khiển để tìm các mẫu kết nối nguồn dữ liệu với nơi sử dụng dữ liệu. Phân tích động tự động, gồm fuzzing, kiểm thử độ bền, tiêm lỗi và kiểm thử tải đồng thời bằng nhiều luồng hoặc tiến trình, có thể làm lộ hành vi không ổn định, lỗi, kết quả sai hoặc việc sử dụng dữ liệu chưa khởi tạo; phương pháp này có hiệu quả trung bình và có thể bỏ sót đường dẫn hiếm gặp. Phân tích động thủ công nên kích hoạt các điều kiện lỗi ít xảy ra, chẳng hạn bộ nhớ thấp, quyền không đủ, giao dịch bị ngắt hoặc mất kết nối dịch vụ mạng, rồi theo dõi hành vi bất thường.
| Phương pháp | Cách làm | Hiệu quả |
|---|---|---|
| Phân tích động tự động | This weakness can be detected using dynamic tools and techniques that interact with the software using large test suites with many diverse inputs, such as fuzz testing (fuzzing), robustness testing, and fault injection. The software's operation may slow down, but it should not become unstable, crash, or generate incorrect results. Initialization problems may be detected with a stress-test by calling the software simultaneously from a large number of threads or processes, and look for evidence of any unexpected behavior. The software's operation may slow down, but it should not become unstable, crash, or generate incorrect results. | Khá |
| Phân tích động thủ công | Identify error conditions that are not likely to occur during normal usage and trigger them. For example, run the program under low memory conditions, run with insufficient privileges or permissions, interrupt a transaction before it is completed, or disable connectivity to basic network services such as DNS. Monitor the software for any unexpected behavior. If you trigger an unhandled exception or similar error that was discovered and handled by the application's environment, it may still indicate unexpected conditions that were not handled by the application itself. | — |
| Phân tích tĩnh tự động | Automated static analysis, commonly referred to as Static Application Security Testing (SAST), can find some instances of this weakness by analyzing source code (or binary/compiled code) without having to execute it. Typically, this is done by building a model of data flow and control flow, then searching for potentially-vulnerable patterns that connect "sources" (origins of input) with "sinks" (destinations where the data interacts with external components, a lower layer such as the OS, etc.) | Cao |
Các ví dụ sau là các trường hợp đại diện, không phải danh sách đầy đủ:
CVE-2001-1471: giá trị không hợp lệ ngăn tệp thư viện được nạp, bỏ qua việc khởi tạo các biến quan trọng và dẫn đến chèn mã qua eval.CVE-2008-3637: kiểm tra lỗi không đúng trong cơ chế bảo vệ tạo ra biến chưa khởi tạo, cho phép vượt qua bảo vệ và thực thi mã.CVE-2008-4197 và CVE-2008-0081: sử dụng bộ nhớ hoặc biến chưa khởi tạo có thể dẫn đến thực thi mã.CVE-2008-2934, CVE-2008-0062, CVE-2009-2692, CVE-2009-0949 và CVE-2009-3620: các lỗi khởi tạo liên quan đến con trỏ, trình xử lý hoặc cấu trúc dữ liệu dẫn đến hỏng hóc, lỗi truy cập con trỏ rỗng hoặc giải phóng kép.CVE-2007-3749, CVE-2005-1036: trạng thái hoặc cấu trúc không được đặt lại hay khởi tạo đúng, dẫn đến truy cập trái phép hoặc leo thang đặc quyền.CVE-2008-0063: nội dung bộ nhớ không được xóa khi tạo thông báo lỗi, gây rò rỉ thông tin.CVE-2008-3688, CVE-2008-3475 và CVE-2008-3597: khởi tạo không đúng dẫn đến vòng lặp vô hạn, hỏng bộ nhớ hoặc truy cập cấu trúc trước khi khởi tạo.CVE-2008-5021: điều kiện tranh chấp cho phép sửa một đối tượng trong khi đối tượng vẫn đang được khởi tạo, khiến phần mềm truy cập bộ nhớ chưa khởi tạo.Dưới đây là các lỗ hổng tiêu biểu liên quan đến CWE-665, 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