Update dependency @fedify/fedify to v1.9.2 [SECURITY]#1488
Update dependency @fedify/fedify to v1.9.2 [SECURITY]#1488renovate[bot] wants to merge 1 commit intomainfrom
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
3bc5a8f to
1c75102
Compare
1c75102 to
6f0259f
Compare
b302806 to
919a06e
Compare
919a06e to
7365f58
Compare
There was a problem hiding this comment.
Pull request overview
This PR updates the @fedify/fedify package from version 1.9.1 to 1.9.2 to address a critical Regular Expression Denial of Service (ReDoS) vulnerability (CVE-2025-68475) in the document loader's HTML parsing. The vulnerability could allow an attacker-controlled federated server to block the Node.js event loop with a small malicious HTML payload, causing a Denial of Service. This is particularly important for this repository as lookupObject is used extensively throughout the codebase for fetching ActivityPub objects from remote servers.
Changes:
- Updated
@fedify/fedifydependency from 1.9.1 to 1.9.2 to fix the ReDoS vulnerability
Reviewed changes
Copilot reviewed 1 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| package.json | Updated @fedify/fedify dependency version from 1.9.1 to 1.9.2 |
| yarn.lock | Updated lockfile entries for @fedify/fedify with new version, resolved URL, and integrity hash |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Codex Review: Didn't find any major issues. You're on a roll. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
7365f58 to
c58fede
Compare
c58fede to
88a0bcd
Compare
This PR contains the following updates:
1.9.1→1.9.2GitHub Vulnerability Alerts
CVE-2025-68475
Hi Fedify team! 👋
Thank you for your work on Fedify—it's a fantastic library for building federated applications. While reviewing the codebase, I discovered a Regular Expression Denial of Service (ReDoS) vulnerability that I'd like to report. I hope this helps improve the project's security.
Summary
A Regular Expression Denial of Service (ReDoS) vulnerability exists in Fedify's document loader. The HTML parsing regex at
packages/fedify/src/runtime/docloader.ts:259contains nested quantifiers that cause catastrophic backtracking when processing maliciously crafted HTML responses.An attacker-controlled federated server can respond with a small (~170 bytes) malicious HTML payload that blocks the victim's Node.js event loop for 14+ seconds, causing a Denial of Service.
Details
Vulnerable Code
The vulnerability is located in
packages/fedify/src/runtime/docloader.ts, lines 258-264:Root Cause Analysis
The regex has nested quantifiers with alternation, which is a classic ReDoS pattern:
((\s+...)+)- one or more groups of attributes("[^"]*"|'[^']*'|[^\s>]+)- multiple ways to match attribute valuesWhen the regex fails to match (e.g., an incomplete HTML tag), the regex engine backtracks exponentially through all possible ways the nested pattern could have matched.
Attack Vector
lookupObject("https://attacker.com/@​user")to fetch an actor profileContent-Type: text/htmllookupObject()→documentLoader()→getRemoteDocument()→ HTML parsing (lines 258-287)response.text()reads the entire body without size limitsWhy This Is Exploitable
response.text()without Content-Length validationAbortSignalis optional and not enforcedPoC
Quick Reproduction (Node.js)
You can verify this vulnerability with the following standalone script:
Expected Output
Time approximately quadruples every 2 additional repetitions, demonstrating O(2^n) complexity.
Full Docker-Based PoC
For a complete demonstration, here are the Docker files to run the PoC in an isolated environment:
Dockerfile
exploit.js (Full Version)
run_poc.sh
Running the Docker PoC
# Save the above files, then: chmod +x run_poc.sh ./run_poc.shImpact
Who Is Affected?
lookupObject(),getDocumentLoader(), or the built-in document loader to fetch content from external URLsSeverity Assessment
Real-World Scenario
@attacker@evil.comlookupObject()Recommended Fix
Option 1: Use a Proper HTML Parser (Recommended)
Replace regex-based HTML parsing with a DOM parser that doesn't suffer from backtracking issues:
Option 2: Add Response Size Limits
If regex must be used, at minimum add size limits:
Option 3: Refactor the Regex
If the regex approach is preferred, use atomic grouping or possessive quantifiers (where supported), or restructure to avoid nested quantifiers:
Resources
Thank you for taking the time to review this report. I'm happy to provide any additional information or help test a fix. Please let me know if you have any questions!
Release Notes
fedify-dev/fedify (@fedify/fedify)
v1.9.2Compare Source
Released on December 20, 2025.
@fedify/fedify
the document loader's HTML parsing. An attacker-controlled server could
respond with a malicious HTML payload that blocked the event loop.
[CVE-2025-68475]
@fedify/sqlite
SyntaxError: Identifier 'Temporal' has already been declarederrorthat occurred when using
SqliteKvStoreon Node.js or Bun. The errorwas caused by duplicate
Temporalimports during the build process.[#487]
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - Between 07:00 AM and 04:59 PM, only on Monday, Tuesday, Wednesday, and Thursday ( * 7-16 * * 1,2,3,4 ) (UTC).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Never, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.