CVE-2024-22363
High · 7.5CVSS
7.5
EPSS
0.8%
Published
Apr 5, 2024
CISA due date
—
Cloudanix analysis
A malicious spreadsheet file could make affected applications slow down or stop responding until the software component that reads those files is updated.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
SheetJS Community Edition versions before 0.20.2 contain a Regular Expression Denial of Service weakness. When vulnerable parsing logic processes attacker-controlled spreadsheet content or related input that triggers pathological regular-expression behavior, CPU usage can spike for an extended period, blocking the application thread or worker handling the file. In Node.js services this can stall the event loop; in browser or desktop contexts it can freeze the user interface or processing workflow. The flaw does not directly provide confidentiality or integrity impact, but it can cause high availability impact in applications that parse untrusted or semi-trusted spreadsheet files.
Why it matters to the business
Applications that allow users, partners, or automated integrations to upload or process spreadsheets may be disrupted by a small malicious input that consumes excessive processing resources. This can cause slow or unavailable import workflows, API timeouts, job queue backlogs, degraded service performance, and increased infrastructure costs from repeated retries or autoscaling. The vulnerability is not listed in CISA KEV and has low EPSS at the time of assessment, but the CVSS availability impact is high and the affected library is commonly embedded in downstream applications, so organizations should prioritize remediation where spreadsheet parsing is exposed to external or high-volume inputs.
How an attack unfolds
An attacker first identifies an application feature that uses SheetJS Community Edition to parse spreadsheet or workbook-like data, such as file upload, import, preview, data conversion, or automated ingestion. The attacker then submits a specially crafted file or payload designed to exercise the vulnerable regular expression in pre-0.20.2 versions. Because the matching operation has inefficient worst-case behavior, the parser spends excessive CPU time evaluating the input. If the application processes uploads synchronously or with limited worker capacity, one or more requests can monopolize processing resources, causing request timeouts, event-loop blocking, worker exhaustion, or service degradation. Repeating the request can turn the issue into a sustained denial-of-service condition. No public exploit maturity was provided and no named threat actors are currently associated with this issue in the input, so defenders should treat exploitation as opportunistic rather than campaign-specific unless local telemetry shows otherwise.
How to fix it
Upgrade SheetJS Community Edition to version 0.20.2 or later wherever it is used. For JavaScript/Node.js projects, update direct dependencies and lockfiles, then rebuild and redeploy all applications, containers, serverless functions, browser bundles, and downstream packages that include the vulnerable library. If immediate upgrade is not possible, reduce exposure by blocking untrusted spreadsheet parsing, enforcing strict file size and upload rate limits, processing files asynchronously in isolated worker processes with CPU/time limits, applying request throttling, and terminating parse jobs that exceed expected execution time. Ensure transitive copies are also updated because bundled or vendored versions may remain present even after the top-level dependency is changed.
How to confirm the fix worked
Confirm remediation by producing a software bill of materials or dependency inventory and verifying that no deployed artifact contains SheetJS Community Edition below 0.20.2. In Node.js projects, run dependency checks such as `npm ls xlsx`, inspect `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, and bundled application artifacts for vulnerable versions, and ensure the resolved package version is 0.20.2 or later. Validate that rebuilt containers and static bundles no longer include the old package. Functionally test spreadsheet upload/import paths with normal files to confirm no regressions, and use controlled performance testing to verify parsing operations are bounded by request timeout, worker timeout, and resource limits. Also confirm that rate limits, file size limits, and asynchronous job isolation are active for untrusted input paths.
Typical attack path
- Identify an externally reachable feature that accepts spreadsheet, workbook, CSV-like, or document-import input handled by SheetJS Community Edition.
- Confirm the target application performs server-side or client-side parsing using a vulnerable SheetJS version before 0.20.2.
- Create a malformed or adversarial spreadsheet-related payload that triggers worst-case regular-expression execution in the parser.
- Submit the payload through an upload, import, preview, conversion, or ingestion endpoint.
- Cause the application worker, browser thread, or Node.js event loop to consume excessive CPU and stop responding normally.
- Repeat submissions or parallelize requests to sustain service degradation, queue buildup, or application unavailability.
How to detect it
To assess whether this was already exploited, review telemetry from applications that parse spreadsheet files, especially upload, import, preview, conversion, reporting, and automated ingestion endpoints. Look for bursts of requests involving spreadsheet-like files followed by high CPU usage, event-loop lag, worker starvation, request timeouts, 5xx responses, job queue backlogs, or process restarts. Useful sources include web access logs, reverse proxy logs, application logs, upload service logs, background job queue logs, APM traces, container metrics, host CPU metrics, Node.js event-loop delay metrics, process supervisor logs, and crash/restart records. Focus on requests with unusually small or malformed files that consume disproportionate processing time, repeated submissions from the same source, and timing correlations between file parsing operations and service degradation. There are no universally reliable payload strings for this issue from the provided data, so detection should be behavior-based and tied to vulnerable version exposure plus abnormal resource consumption during SheetJS parsing.
What your security team should do
- Inventory all applications, services, browser bundles, containers, and automation jobs that use SheetJS Community Edition or the `xlsx` package.
- Prioritize upgrade to SheetJS Community Edition 0.20.2 or later for internet-facing upload/import workflows and systems that process files from partners, customers, or automated external feeds.
- Regenerate lockfiles, rebuild artifacts, and redeploy; do not rely only on changing a manifest if bundled or vendored copies remain.
- Add file upload controls: size limits, content-type validation, rate limiting, authentication where appropriate, and request/body timeouts.
- Run spreadsheet parsing in isolated workers or job queues with CPU, memory, and wall-clock execution limits rather than in the main web request path.
- Monitor for sustained CPU spikes, event-loop lag, request timeout bursts, and repeated upload/import failures that align with spreadsheet processing endpoints.
- Add dependency scanning or SBOM enforcement to CI/CD to prevent reintroduction of vulnerable SheetJS versions.
- Because this is not currently KEV-listed and EPSS is low, schedule broadly but expedite remediation for exposed parsing services where availability is critical.
The record
SheetJS Community Edition before 0.20.2 is vulnerable.to Regular Expression Denial of Service (ReDoS).
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | xlsx | 0 | No fix |
| npm | xlsx | 0 | 0.20.2 |
| Chainguard | sqlpad | 0 | 7.4.1-r3 |
| Chainguard | sqlpad-compat | 0 | 7.4.1-r3 |
| Wolfi | sqlpad | 0 | 7.4.1-r3 |
| Wolfi | sqlpad-compat | 0 | 7.4.1-r3 |
Related vulnerabilities
- CVE-2023-30533 SheetJS Community Edition before 0.19.3 allows Prototype Pollution via a crafted file. Also affects xlsx
- GHSA-f23m-r3pf-42rh lodash vulnerable to Prototype Pollution via array path bypass in `_.unset` and `_.omit` Also affects sqlpad
- CVE-2026-2950 Impact: Lodash versions 4.17.23 and earlier are vulnerable to prototype pollution in the… Also affects sqlpad
- CVE-2026-33750 The brace-expansion library generates arbitrary strings containing a common prefix and… Also affects sqlpad
- GHSA-f886-m6hf-6m8v brace-expansion: Zero-step sequence causes process hang and memory exhaustion Also affects sqlpad
- GHSA-6457-6jrx-69cr Sequelize v6 Vulnerable to SQL Injection via JSON Column Cast Type Also affects sqlpad
- GHSA-9ppj-qmqm-q256 node-tar Symlink Path Traversal via Drive-Relative Linkpath Also affects sqlpad
- CVE-2026-30951 Sequelize is a Node.js ORM tool. Also affects sqlpad