CWE-682: Tính toán không chính xác

CWE-682 là gì?

CWE-682 là tính toán không chính xác. Lỗi phát sinh khi sản phẩm thực hiện phép tính tạo ra kết quả sai hoặc ngoài dự kiến, rồi sử dụng kết quả đó trong các quyết định quan trọng về bảo mật hoặc quản lý tài nguyên.

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

Không có dữ liệu

Chưa có dữ liệu về lỗ hổng cho CWE-682

Không có dữ liệu

Chưa có dữ liệu về lỗ hổng trong CISA KEV cho CWE-682

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

TheoMitre CWE

Chi tiết kỹ thuật

CWE-682 xảy ra khi chương trình tính sai, hoặc tạo ra kết quả ngoài dự kiến, rồi tin cậy kết quả đó trong một thao tác có ảnh hưởng đến bảo mật hay tài nguyên. Lỗi có thể nằm trong biểu thức, thứ tự toán tử, phép tính kích thước hoặc độ dài, phép cộng dồn, xử lý bit, hoặc quá trình chuyển đổi giữa các kiểu số. Khi kết quả sai được dùng để kiểm tra quyền, xác thực dữ liệu, tính kích thước bộ đệm hay phân bổ tài nguyên, một lỗi số học nhỏ có thể lan thành lỗi logic bảo mật, truy cập ngoài phạm vi, tiêu thụ tài nguyên hoặc thực thi mã trái phép.

Đặc điểm

Điểm yếu này xuất hiện khi kết quả của một phép tính không phản ánh ý định của chương trình nhưng vẫn được dùng để quyết định cấp phát tài nguyên, kiểm tra bảo mật hoặc trạng thái thực thi. Nguyên nhân có thể là sai thứ tự toán tử, bỏ sót thành phần trong công thức, lỗi lan truyền bit nhớ, tràn số, độ chính xác không phù hợp, chuyển đổi kiểu hoặc xử lý sai các giá trị ngoài phạm vi. Điểm yếu không phụ thuộc vào ngôn ngữ hay công nghệ cụ thể và được ghi nhận ở giai đoạn triển khai.

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

Tính toán sai có thể khiến chương trình chuyển sang trạng thái ngoài dự kiến, bị lỗi dừng hoặc làm suy giảm dịch vụ. Trong cấp phát tài nguyên, kết quả sai có thể góp phần gây thao tác ngoài phạm vi, dẫn đến lỗi dừng hoặc thậm chí thực thi mã trái phép; nó cũng có thể gây tràn số nguyên hoặc các vấn đề tiêu thụ tài nguyên khác. Trong việc gán quyền hoặc đặc quyền, lỗi có thể cấp quyền truy cập vào tài nguyên nhạy cảm. Nếu tạo ra phép so sánh không đủ chặt chẽ, lỗi có thể làm suy yếu cơ chế bảo vệ hoặc quy trình kiểm tra và cho phép vượt qua logic quan trọng về bảo mật.

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ạiTính sẵn sàngIf the incorrect calculation causes the program to move into an unexpected state, it may lead to a crash or impairment of service.
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 khác, Thực thi mã hoặc lệnh trái phépTính toàn vẹn, Tính bí mật, Tính sẵn sàngIf the incorrect calculation is used in the context of resource allocation, it could lead to an out-of-bounds operation (CWE-119) leading to a crash or even arbitrary code execution. Alternatively, it may result in an integer overflow (CWE-190) and / or a resource consumption problem (CWE-400).
Chiếm đặc quyền hoặc mạo danhKiểm soát truy cậpIn the context of privilege or permissions assignment, an incorrect calculation can provide an attacker with access to sensitive resources.
Vượt qua cơ chế bảo vệKiểm soát truy cậpIf the incorrect calculation leads to an insufficient comparison (CWE-697), it may compromise a protection mechanism such as a validation routine and allow an attacker to bypass the security-critical code.

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

Trong giai đoạn triển khai, cần hiểu cách ngôn ngữ biểu diễn số và cách biểu diễn đó ảnh hưởng đến phép tính. Phải chú ý đến khác biệt về kích thước byte, độ chính xác, kiểu có dấu và không dấu, việc cắt ngắn, chuyển đổi và ép kiểu, cách xử lý NaN, cũng như các giá trị vượt quá phạm vi biểu diễn. Kiểm tra mọi đầu vào số để bảo đảm nằm trong cả giới hạn tối thiểu và tối đa; chọn kiểu dữ liệu phù hợp với thao tác và chỉ dùng kiểu không dấu cho các giá trị không thể âm, chẳng hạn kích thước hoặc số lượng. Nên chọn ngôn ngữ, thư viện hoặc framework hỗ trợ xử lý số an toàn hơn, chẳng hạn SafeInt cho C++ hoặc IntegerLib cho C hay C++. Cần xem xét kỹ cảnh báo của trình biên dịch và loại bỏ các vấn đề có ý nghĩa bảo mật, như không tương thích giữa kiểu có dấu và không dấu trong thao tác bộ nhớ hoặc sử dụng biến chưa được khởi tạo.

Dữ liệu MITRE CWE chính thức
  1. Hiện thực hóaUnderstand your programming language's underlying representation and how it interacts with numeric calculation. Pay close attention to byte size discrepancies, precision, signed/unsigned distinctions, truncation, conversion and casting between types, "not-a-number" calculations, and how your language handles numbers that are too large or too small for its underlying representation.
  2. Kiểm tra dữ liệu đầu vào · Hiện thực hóaPerform input validation on any numeric input by ensuring that it is within the expected range. Enforce that the input meets both the minimum and maximum requirements for the expected range.
  3. Hiện thực hóaUse the appropriate type for the desired action. For example, in C/C++, only use unsigned types for values that could never be negative, such as height, width, or other numbers related to quantity.
  4. Lựa chọn ngôn ngữ · Kiến trúc và thiết kếUse languages, libraries, or frameworks that make it easier to handle numbers without unexpected consequences. Examples include safe integer handling packages such as SafeInt (C++) or IntegerLib (C or C++).
  5. Thư viện hoặc framework · Kiến trúc và thiết kếUse languages, libraries, or frameworks that make it easier to handle numbers without unexpected consequences. Examples include safe integer handling packages such as SafeInt (C++) or IntegerLib (C or C++).
  6. Gia cố quá trình biên dịch hoặc xây dựng · Hiện thực hóaExamine compiler warnings closely and eliminate problems with potential security implications, such as signed / unsigned mismatch in memory operations, or use of uninitialized variables. Even if the weakness is rarely exploitable, a single failure may lead to the compromise of the entire system.

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

Có thể phát hiện bằng phân tích thủ công, phân tích tĩnh tự động và fuzzing. Phân tích tĩnh thủ công đặc biệt hữu ích để đánh giá tính đúng đắn của các phép tính cấp phát và phát hiện điều kiện tràn số; phương pháp này có thể hiệu quả hơn các kỹ thuật hoàn toàn tự động đối với các vấn đề thiết kế và quy tắc nghiệp vụ. Phân tích tĩnh tự động có thể lập mô hình luồng dữ liệu và luồng điều khiển để tìm các mẫu dễ bị tổn thương giữa nguồn dữ liệu đầu vào và nơi dữ liệu được sử dụng. Fuzzing tạo nhiều đầu vào đa dạng và gọi mã một cách động, có thể phát hiện kết quả bất thường như lỗi dừng, hỏng bộ nhớ hoặc tiêu thụ tài nguyên, đồng thời tạo các ca kiểm thử có thể lặp lại; tuy nhiên, phương pháp này không bảo đảm bao phủ mọi phép tính hoặc quy tắc nghiệp vụ.

Dữ liệu MITRE CWE chính thức
Phương phápCách làmHiệu quả
Phân tích thủ côngThis weakness can be detected using tools and techniques that require manual (human) analysis, such as penetration testing, threat modeling, and interactive tools that allow the tester to record and modify an active session. Specifically, manual static analysis is useful for evaluating the correctness of allocation calculations. This can be useful for detecting overflow conditions (CWE-190) or similar weaknesses that might have serious security impacts on the program.These may be more effective than strictly automated techniques. This is especially the case with weaknesses that are related to design and business rules.Cao
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.)-
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

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

Các ví dụ sau là những trường hợp đại diện được ghi nhận, không phải danh sách đầy đủ:

  • CVE-2026-7270: biểu thức tính toán không dùng dấu ngoặc để xử lý thứ tự toán tử, dẫn đến tính toán sai và sau đó là tràn bộ đệm.
  • CVE-2020-0022: triển khai Bluetooth trên điện thoại di động bỏ qua độ lệch khi tính độ dài gói tin, dẫn đến ghi ngoài phạm vi.
  • CVE-2017-8932: lỗi lan truyền bit nhớ trong triển khai mật mã trên kiến trúc x86-64 đưa bit nhớ từ một thao tác không liên quan vào phép tính hiện tại.
  • CVE-2010-1378: tính toán sai cho phép kẻ tấn công vượt qua kiểm tra chứng chỉ.
  • CVE-2004-1363: tràn do thay thế xảy ra khi biến môi trường được mở rộng sau khi kiểm tra độ dài đã hoàn tất, dẫn đến tràn bộ đệm.
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.