CWE-665: Khởi tạo không đúng

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.

Thống kê dữ liệu

TỔNG SỐ CVE LIÊN QUAN (365 NGÀY)10
MỨC TRỪU TƯỢNGLớp
KHẢ NĂNG KHAI THÁCTrung bình

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

10 lỗ hổngTăng 233,3% so với cùng kỳ

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

0 lỗ hổng

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

TheoMitre CWE

Chi tiết kỹ thuật

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.

Đặc điểm

Đ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.

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

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.

Dữ liệu MITRE CWE chính thức
Tác độngPhạm viDiễn giải
Đọc bộ nhớ, Đọc dữ liệu ứng dụngTính bí mậtWhen 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ậpIf 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ạiTính sẵn sàngThe 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.

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

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.

Dữ liệu MITRE CWE chính thức
  1. Lựa chọn ngôn ngữ · Yêu cầuUse a language that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid. For example, in Java, if the programmer does not explicitly initialize a variable, then the code could produce a compile-time error (if the variable is local) or automatically initialize the variable to the default value for the variable's type. In Perl, if explicit initialization is not performed, then a default value of undef is assigned, which is interpreted as 0, false, or an equivalent value depending on the context in which the variable is accessed.
  2. Kiến trúc và thiết kếIdentify all variables and data stores that receive information from external sources, and apply input validation to make sure that they are only initialized to expected values.
  3. Hiện thực hóaExplicitly initialize all your variables and other data stores, either during declaration or just before the first usage.
  4. Hiện thực hóaPay close attention to complex conditionals that affect initialization, since some conditions might not perform the initialization.
  5. Hiện thực hóaAvoid race conditions (CWE-362) during initialization routines.
  6. Xây dựng và biên dịchRun or compile your product with settings that generate warnings about uninitialized variables or data.

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

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.

Dữ liệu MITRE CWE chính thức
Phương phápCách làmHiệu quả
Phân tích động tự độngThis 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ôngIdentify 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ự độngAutomated 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

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

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ữ liệu MITRE CWE chính thức

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

Nguồn (4)

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.

Khám phá CyStack VulnScan