Umbra Wiki weakness weakness/CWE-196
Back to wiki

CWE-196 — Unsigned to Signed Conversion Error

provenance: imported · CWE: CWE-196

CWE-196: Unsigned to Signed Conversion Error

MITRE CWE weakness

Kind Weakness
Abstraction Variant
Status Draft
Likelihood of exploit Medium

Description

The product uses an unsigned primitive and performs a cast to a signed primitive, which can produce an unexpected value if the value of the unsigned primitive can not be represented using a signed primitive.

Although less frequent an issue than signed-to-unsigned conversion, unsigned-to-signed conversion can be the perfect precursor to dangerous buffer underwrite conditions that allow attackers to move down the stack where they otherwise might not have access in a normal buffer overflow condition. Buffer underwrites occur frequently when large unsigned values are cast to signed values, and then used as indexes into a buffer or for pointer arithmetic.

Common consequences

  • Availability: DoS: Crash, Exit, or Restart
  • Integrity: Modify Memory
  • Integrity, Confidentiality, Availability, Access Control: Execute Unauthorized Code or Commands, Bypass Protection Mechanism

Mitigations

Requirements — Choose a language which is not subject to these casting flaws.

Architecture and Design — Design object accessor functions to implicitly check values for valid sizes. Ensure that all functions which will be used as a size are checked previous to use as a size. If the language permits, throw exceptions rather than using in-band errors.

Implementation — Error check the return values of all functions. Be aware of implicit casts made, and use unsigned variables for sizes if at all possible.

References

  • CWE page: https://cwe.mitre.org/data/definitions/196.html
  • CWE list: https://cwe.mitre.org/data/index.html