Skip to content

CNV-91916:[CNV-4.22] Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS - #2797

Open
UdayYendva wants to merge 1 commit into
RedHatQE:v4.22from
UdayYendva:v4.22
Open

CNV-91916:[CNV-4.22] Starlette: request.form() limits silently ignored for application/x-www-form-urlencoded enable DoS#2797
UdayYendva wants to merge 1 commit into
RedHatQE:v4.22from
UdayYendva:v4.22

Conversation

@UdayYendva

Copy link
Copy Markdown
What this PR does / why we need it:

Since the project is using the starlette package as a transitive dependency(openshift-python-wrapper → fastmcp → mcp → starlette), it is affected byCVE-2026-54283 (GHSA-82w8-qh3p-5jfq). This vulnerability allows Denial of Service unbounded resource allocation in request.form() for URL-encoded requests (CVSS 7.5). This PR bumps starlette to >= 1.3.1 which
contains the fix.

Which issue(s) this PR fixes:

CVE-2026-54283 — starlette request.form() silently ignores configured limits (max_fields, max_part_size) for application/x-www-form-urlencoded requests, allowing field count and field size attacks.

Special notes for reviewer:

The dependency is transitive (4 levels deep) and only the lock file needs updating. No direct code changes are required. Practical risk is low since this is a test framework, but bumping resolves the vulnerability in dependency scanners.

jira-ticket:

https://redhat.atlassian.net/browse/CNV-91916

Signed-off-by: Uday Yendava <uyendava@uyendava-thinkpadp1gen4i.punetw6.csb>
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e095be04-74a8-449e-a1d1-ee16ce65d051

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@redhat-qe-bot

Copy link
Copy Markdown
Contributor

Report bugs in Issues

Welcome! 🎉

This pull request will be automatically processed with the following features:

🔄 Automatic Actions

  • Reviewer Assignment: Reviewers are automatically assigned based on the OWNERS file in the repository root
  • Size Labeling: PR size labels (XS, S, M, L, XL, XXL) are automatically applied based on changes
  • Issue Creation: Disabled for this repository
  • Branch Labeling: Branch-specific labels are applied to track the target branch
  • Auto-verification: Auto-verified users have their PRs automatically marked as verified
  • Labels: All label categories are enabled (default configuration)

📋 Available Commands

PR Status Management

  • /wip - Mark PR as work in progress (adds WIP: prefix to title)
  • /wip cancel - Remove work in progress status
  • /hold - Block PR merging (PR author or approvers)
  • /hold cancel - Unblock PR merging (PR author or approvers)
  • /verified - Mark PR as verified
  • /verified cancel - Remove verification status
  • /reprocess - Trigger complete PR workflow reprocessing (useful if webhook failed or configuration changed)
  • /regenerate-welcome - Regenerate this welcome message
  • /security-override - Set security check runs to pass (maintainers only)
  • /security-override cancel - Re-run security checks

Review & Approval

  • /lgtm - Approve changes (looks good to me)
  • /approve - Approve PR (approvers only)
  • /automerge - Enable automatic merging when all requirements are met (maintainers and approvers only)
  • /assign-reviewers - Assign reviewers based on OWNERS file
  • /assign-reviewer @username - Assign specific reviewer
  • /check-can-merge - Check if PR meets merge requirements

Testing & Validation

  • /retest tox - Run Python test suite with tox
  • /retest python-module-install - Test Python package installation
  • /retest conventional-title - Validate commit message format
  • /retest all - Run all available tests

Cherry-pick Operations

  • /cherry-pick <branch> - Schedule cherry-pick to target branch when PR is merged
    • Multiple branches: /cherry-pick branch1 branch2 branch3
  • /cherry-pick-retry <branch> - Retry a failed cherry-pick (merged PRs only)

Branch Management

  • /rebase - Rebase this PR branch onto its base branch

Label Management

  • /<label-name> - Add a label to the PR
  • /<label-name> cancel - Remove a label from the PR

✅ Merge Requirements

This PR will be automatically approved when the following conditions are met:

  1. Approval: /approve from at least one approver
  2. Status Checks: All required status checks must pass
  3. No Blockers: No wip, hold, has-conflicts labels and PR must be mergeable (no conflicts)
  4. Verified: PR must be marked as verified

📊 Review Process

Approvers and Reviewers

Approvers:

  • myakove
  • rnetser

Reviewers:

  • myakove
  • rnetser
Available Labels
  • hold
  • verified
  • wip
  • lgtm
  • approve
  • automerge
AI Features
  • Conventional Title: Mode: fix (cursor/cursor-grok-4.6-high)
  • Cherry-Pick Conflict Resolution: Enabled (cursor/cursor-grok-4.6-high)
Security Checks
  • Suspicious Path Detection: Monitors paths: .claude/, .vscode/, .cursor/, .devcontainer/, .pi/, .github/workflows/, .github/actions/
  • Committer Identity Check: Verifies last committer matches PR author
  • Mandatory: Security checks block merge (use /security-override to bypass — maintainers only)

💡 Tips

  • WIP Status: Use /wip when your PR is not ready for review
  • Verification: The verified label is removed on new commits unless the push is detected as a clean rebase
  • Cherry-picking: Cherry-pick labels are processed when the PR is merged
  • Permission Levels: Some commands require approver permissions
  • Auto-verified Users: Certain users have automatic verification and merge privileges

For more information, please refer to the project documentation or contact the maintainers.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Bump transitive Starlette to remediate form parsing DoS

🐞 Bug fix ⚙️ Configuration changes 🕐 Less than 10 minutes

Grey Divider

AI Description

• Upgrades locked Starlette from 1.3.1 to 1.6.0 for CVE-2026-54283 remediation.
• Refreshes generated dependency markers and artifacts while preserving reproducible installations.
Diagram

graph TD
  A["Test Framework"] -->|depends on| B["OpenShift Wrapper"] -->|depends on| C["FastMCP"] -->|depends on| D["MCP"] -->|resolves| E["Starlette 1.6.0"] -->|enforces| F["Form Limits"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Add an explicit Starlette floor
  • ➕ Prevents future lock regeneration from selecting a vulnerable release
  • ➕ Makes the security requirement visible in the project manifest
  • ➖ Promotes a transitive package into project-level dependency policy
  • ➖ May create constraint conflicts with upstream MCP packages
2. Upgrade the nearest parent dependency
  • ➕ Lets upstream packages define and validate the compatible Starlette range
  • ➕ Can incorporate related fixes across the dependency chain
  • ➖ Expands the compatibility and regression surface
  • ➖ May introduce unrelated lockfile churn on the maintenance branch

Recommendation: Keep the focused lockfile bump for the v4.22 maintenance branch because it minimizes regression risk while resolving the scanner finding. Add an explicit lower-bound constraint only if future lock regeneration is allowed to select vulnerable Starlette versions.

Files changed (1) +29 / -29

Other (1) +29 / -29
uv.lockLock Starlette 1.6.0 and refresh resolution metadata +29/-29

Lock Starlette 1.6.0 and refresh resolution metadata

• Updates Starlette from 1.3.1 to 1.6.0 with new source and wheel hashes to remediate the URL-encoded form parsing denial-of-service issue. The regenerated lockfile also normalizes Python-version markers for aiofile, IPython, and related transitive dependencies.

uv.lock

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Published installs remain vulnerable 🐞 Bug ⛨ Security
Description
Changing only uv.lock protects locked checkout environments, but published installs use
pyproject.toml, where only fastmcp>=2.10.4 is declared and no requirement enforces a fixed
Starlette version. Consequently, the documented pip-installed MCP server can retain or resolve a
vulnerable Starlette version that satisfies the transitive dependencies, leaving the CVE remediation
unenforced for users.
Code

uv.lock[2546]

+version = "1.6.0"
Relevance

●● Moderate

Published-install enforcement is a valid security concern, but no close accepted/rejected precedent
establishes whether this team requires direct constraints for transitive fixes.

PR-#2459
PR-#2420

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The changed line only updates the lock entry (uv.lock:2545-2554). The distributable metadata
declares fastmcp>=2.10.4 without Starlette (pyproject.toml:87-103, mirrored in
uv.lock:1477-1489), while the project ships an openshift-mcp-server entry point
(pyproject.toml:127-129) whose implementation imports and initializes FastMCP
(mcp_server/server.py:18-36); repository documentation explicitly tells users to install the
published package with pip (mcp_server/README.md:20-20).

uv.lock[2545-2554]
pyproject.toml[87-103]
pyproject.toml[127-129]
mcp_server/server.py[18-36]
mcp_server/README.md[20-20]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The CVE fix exists only in `uv.lock`, which is not part of dependency resolution when users install the published package. Add an explicit project requirement that enforces the minimum fixed Starlette version, then regenerate the lock file.

## Issue Context
The repository publishes an MCP entry point backed by FastMCP and documents installation from the package index. Its package metadata currently declares FastMCP but no Starlette security floor.

## Fix Focus Areas
- pyproject.toml[87-103]
- uv.lock[1477-1490]
- uv.lock[2545-2554]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
⚠️ Tickets: not configured — ticket URL found in PR but could not be fetched — check ticket provider credentials
✅ Compliance rules (platform): 18 rules
Review mode: ⚖️ Balanced: This is a security-motivated transitive dependency update with runtime and compatibility implications, so it warrants a careful single-pass review rather than a lockfile-only skip or lite pass.

Grey Divider

Tip of the day
💡 Did you know, you can start a comment with 'qodo' or '@qodo' to chat about any finding

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread uv.lock
[[package]]
name = "starlette"
version = "1.3.1"
version = "1.6.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Published installs remain vulnerable 🐞 Bug ⛨ Security

Changing only uv.lock protects locked checkout environments, but published installs use
pyproject.toml, where only fastmcp>=2.10.4 is declared and no requirement enforces a fixed
Starlette version. Consequently, the documented pip-installed MCP server can retain or resolve a
vulnerable Starlette version that satisfies the transitive dependencies, leaving the CVE remediation
unenforced for users.
Agent Prompt
## Issue description
The CVE fix exists only in `uv.lock`, which is not part of dependency resolution when users install the published package. Add an explicit project requirement that enforces the minimum fixed Starlette version, then regenerate the lock file.

## Issue Context
The repository publishes an MCP entry point backed by FastMCP and documents installation from the package index. Its package metadata currently declares FastMCP but no Starlette security floor.

## Fix Focus Areas
- pyproject.toml[87-103]
- uv.lock[1477-1490]
- uv.lock[2545-2554]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants