Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2024-43380

CVE-2024-43380: Floraison Fugit DoS Vulnerability

CVE-2024-43380 is a denial of service flaw in Floraison Fugit's natural parser that fails to handle excessive input lengths, causing threads to hang indefinitely. This article covers technical details, affected versions, and mitigation.

Published:

CVE-2024-43380 Overview

CVE-2024-43380 is a denial-of-service vulnerability in fugit, a Ruby gem providing time tools for the flor workflow engine and the floraison group. The flaw resides in the library's "natural" parser, which converts human-readable schedules such as every wednesday at 5pm into cron expressions like 0 17 * * 3. The parser accepts input of arbitrary length and continues attempting to parse it, blocking the calling thread without returning. Applications that pass unchecked user input to fugit are exposed to resource exhaustion. The maintainers released a fix in fugit version 1.11.1.

Critical Impact

A remote attacker can submit a crafted long string to any application that forwards user input to the fugit natural parser, hanging worker threads and exhausting CPU resources to produce a denial of service.

Affected Products

  • Floraison fugit Ruby gem versions prior to 1.11.1
  • Ruby applications consuming fugit for natural-language schedule parsing
  • Downstream projects such as flor and other floraison group components that pass user-supplied strings into Fugit.parse

Discovery Timeline

  • 2024-08-19 - CVE-2024-43380 published to the National Vulnerability Database
  • 2024-08-21 - Last updated in NVD database

Technical Details for CVE-2024-43380

Vulnerability Analysis

The vulnerability is an algorithmic complexity and resource consumption issue classified under [CWE-400]. The fugit natural-language parser is designed to interpret short scheduling phrases. When supplied with arbitrarily long input, the parser repeatedly iterates over tokens without enforcing an upper bound on input length or parsing time. The thread executing the parse call holds CPU resources indefinitely, preventing the application from servicing other requests. Web services that expose scheduling features to end users are the primary risk surface, because attackers can submit large payloads through forms, JSON fields, or API parameters that flow into Fugit.parse.

Root Cause

The root cause is missing input validation in the natural parser's entry point. The parser does not check the plausibility of the input length before beginning tokenization and grammar matching. Dependents that trust user input and forward it directly to fugit inherit this missing check. The upstream fix in commit ad2c1c9c737213d585fff0b51c927d178b2c05a5 introduces bounds enforcement so that overlong inputs are rejected promptly rather than processed to completion.

Attack Vector

The attack is unauthenticated and network-reachable. An adversary identifies an HTTP endpoint, message queue consumer, or job intake API that accepts a schedule string and submits a sufficiently long payload. The receiving worker invokes Fugit.parse on the attacker-controlled string, and the call does not return. Repeated submissions can occupy every available worker thread, denying service to legitimate users. No authentication, user interaction, or special privileges are required.

No public proof-of-concept code has been published. See the GitHub Security Advisory GHSA-2m96-52r3-2f3g and the GitHub Issue Discussion for technical details.

Detection Methods for CVE-2024-43380

Indicators of Compromise

  • Ruby worker processes consuming sustained high CPU while executing Fugit::Parser or Fugit.parse frames in stack traces.
  • HTTP request bodies or query parameters containing unusually long schedule strings submitted to endpoints that accept cron or natural-language schedules.
  • Application response times degrading or timing out on routes that handle schedule input, with no corresponding increase in legitimate traffic volume.

Detection Strategies

  • Audit application code for calls to Fugit.parse, Fugit::Nat.parse, and related entry points, and verify that input length is bounded before invocation.
  • Inspect dependency manifests (Gemfile.lock) for fugit versions below 1.11.1 across all Ruby services.
  • Enable request-duration logging on endpoints that process schedule strings and alert when individual requests exceed expected parsing latency.

Monitoring Recommendations

  • Monitor CPU utilization and thread saturation on Ruby application servers and background workers handling user-supplied scheduling input.
  • Log and aggregate request payload sizes for schedule-related endpoints to detect outliers consistent with denial-of-service probing.
  • Set per-request timeouts and track timeout occurrences as a leading indicator of parser-targeted abuse.

How to Mitigate CVE-2024-43380

Immediate Actions Required

  • Upgrade fugit to version 1.11.1 or later in all affected Ruby applications and rebuild deployment artifacts.
  • Enforce a hard maximum length on any user-supplied string passed to Fugit.parse or related natural-language parsing functions.
  • Wrap parser invocations in a request- or job-level timeout so that a hung parse call cannot indefinitely consume a worker.

Patch Information

The fix is delivered in fugit 1.11.1. The relevant upstream change is documented in commit ad2c1c9 and tracked in GitHub Issue #104. Update the dependency in your Gemfile, run bundle update fugit, and redeploy. Verify the installed version with bundle list | grep fugit.

Workarounds

  • Reject schedule input above a conservative length threshold (for example, 128 characters) at the controller or API gateway before it reaches the parser.
  • Execute parser calls inside Timeout.timeout blocks or dedicated worker processes with strict CPU and wall-clock limits.
  • Rate-limit endpoints that accept schedule strings to reduce the impact of repeated abusive submissions while patching is in progress.
bash
# Update fugit to the patched release
bundle update fugit
bundle list | grep fugit  # confirm version >= 1.11.1

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.