Skip to content

[Ruby]: Denial of Service due to the use of uncontrained integer/float  #823

@Sim4n6

Description

@Sim4n6

Query PR

github/codeql#16206

Language

Ruby

CVE(s) ID list

CWE

CWE-770: Allocation of Resources Without Limits or Throttling

Report

  1. Application-level Denial of Service due to unconstrained use of a user controlled value (integer/float) in the allocation of a resource without limitation.

  2. The source is a remote user controlled data, like /?days=31, through a vulnerable path this value without limitation reaches a ruby code that controls how many times a sync operation is repeated, like 1.upto(days) do // something. An exploit would be to issue /?days=9999999 to potentially cause an application-level denial of service remotely.

  3. I've studied the CVE-2022-23837 in sidekiq Denial of service. I have put focus on the fix commit sidekiq/sidekiq@7785ac1. I noticed the following:

dates = @start_date.downto(@start_date - @days_previous + 1).map { |date|
          date.strftime("%Y-%m-%d")
        }

The condition on the number of times the operation date.strftime() is executed can be reached by a remote user data days_previous.

  • I broadned the sink reach. The CVE fix considers limiting the pattern A.downto(B) but there are also A.upto(B) and A.times().

  • The for loop and unconditional loop appears to be of interest too, in a case like for i in 1..days.

  • There was an additional flow step added for a case like the use of default value: (days || 31).to_i.

  1. In case the incoming user data is limited, that is not a valid hit considered by the sanitizer underAValue.

  2. Other cases exist that could be considered as sanitizers A.between?(1,100) for instance.

Are you planning to discuss this vulnerability submission publicly? (Blog Post, social networks, etc).

  • Yes
  • No

Blog post link

Metadata

Metadata

Assignees

No one assigned

    Labels

    All For OneSubmissions to the All for One, One for All bounty

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions