Skip to content

Latest commit

 

History

History
39 lines (32 loc) · 3.72 KB

File metadata and controls

39 lines (32 loc) · 3.72 KB

Attack Surface Analysis for tencent/rapidjson

  • Description: Attackers craft specially designed JSON payloads to consume excessive resources (CPU, memory) during parsing.
  • RapidJSON Contribution: RapidJSON's parser, while optimized, is still susceptible to resource exhaustion if presented with overly complex or deeply nested structures or extremely long strings. This is a direct consequence of how RapidJSON parses input.
  • Example: A JSON document with thousands of nested arrays: [[[[[[[[...]]]]]]]]]. Or, a very long string: {"key": "a" * 1000000}.
  • Impact: Application becomes unresponsive, leading to denial of service.
  • Risk Severity: High (potentially Critical if easily triggered and no resource limits are in place).
  • Mitigation Strategies:
    • Resource Limits: Configure RapidJSON's kParseMaxDepthFlag to limit nesting depth. Implement application-level limits on input size and string lengths before parsing (although this is a pre-emptive measure, the core vulnerability is in RapidJSON's handling of complex input).
    • Schema Validation: Use a JSON Schema validator to enforce structural constraints before passing data to RapidJSON (again, pre-emptive, but helps).
    • Timeouts: Implement timeouts for parsing operations.
  • Description: Incorrect use of the kParseInsituFlag, which modifies the input buffer in place, leads to memory corruption.
  • RapidJSON Contribution: kParseInsituFlag is inherently risky because it's a feature of RapidJSON that directly modifies the provided buffer. The vulnerability is a direct consequence of using this specific RapidJSON feature.
  • Example: Parsing a JSON string in a read-only buffer, or parsing a string that expands when parsed (e.g., due to escaped characters), or freeing the buffer before RapidJSON is finished with it.
  • Impact: Buffer overflows (if the parsed JSON is larger than the original), use-after-free errors (if the buffer is deallocated prematurely), leading to crashes or potentially arbitrary code execution.
  • Risk Severity: Critical.
  • Mitigation Strategies:
    • Avoid kParseInsituFlag: This is the best mitigation. Use the default parsing mode.
    • If Necessary, Extreme Caution: If kParseInsituFlag must be used:
      • Ensure the input buffer is writable and large enough.
      • Carefully manage the buffer's lifetime.
      • Thoroughly test and review.
  • Description: Application is not checking errors returned by RapidJSON.
  • RapidJSON Contribution: RapidJSON is returning error codes and information about parsing errors that are being ignored. This is a direct misuse of the RapidJSON API.
  • Example: Calling Parse() method and not checking HasParseError() or not checking result of other methods.
  • Impact: Processing of incomplete or malformed JSON, leading to unexpected behavior, crashes, or security vulnerabilities.
  • Risk Severity: High.
  • Mitigation Strategies:
    • Check Errors: Always check the return values and error codes from RapidJSON functions (e.g., HasParseError(), GetParseError(), GetErrorOffset()).
    • Error Handling: Implement robust error handling to gracefully handle parsing failures (e.g., logging the error, rejecting the input, returning an error response).