Skip to content

fix(security): preserve inherited body in outbound policy - #276

Closed
seonghobae wants to merge 5 commits into
mainfrom
fix/outbound-request-body-inheritance
Closed

fix(security): preserve inherited body in outbound policy#276
seonghobae wants to merge 5 commits into
mainfrom
fix/outbound-request-body-inheritance

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Purpose

Harden Noema's credential-egress request-shape policy so RequestInit.body: null or explicit undefined cannot be interpreted as clearing a body already present on an input Request. Fetch semantics inherit the source body in those cases, so policy evaluation must reject the effective body-bearing request.

Exact identities

  • protected/live base: 4573a6f7eaf904e19a6e3198c8cabcfd4be40c40
  • original RED head: 5699f83807c550f21c5d256218af9d8569b08cf1
  • current restacked GREEN head: a8658f034adfcc71c7e0af651f319dd651ed5603
  • branch: fix/outbound-request-body-inheritance

Defect and GREEN

The RED supplies a body-bearing source Request to the GitHub OIDC discovery endpoint, then overlays method: GET with body: null or explicit undefined. Both cases must return blocked-request-policy without invoking the injected raw fetch.

outboundBodyPresent() now treats only a non-null/non-undefined RequestInit.body as an explicit body and otherwise falls back to input.body. This matches effective Request construction and prevents policy authorization from diverging from the request actually sent. The stale compartment test that assumed body:null cleared an inherited body was corrected to the Fetch contract.

Restack and merge boundary

The branch is merged with protected main after #272, #266, and #275. Its current three-path diff is limited to src/outbound-fetch-policy.ts and two focused test files.

Historical exact-head evidence does not transfer to a8658f034adfcc71c7e0af651f319dd651ed5603. Application ci, reviewer-ci, protected-base-eligible Security Scan, and fresh review must complete successfully on this unchanged head before merge. Pending, queued, skipped, absent, neutral, failed, cancelled, stale, predecessor, status-only, model-only, or rate-limited evidence is non-passing.

No outbound allowlist expansion, request-shape relaxation, audit waiver, protection bypass, dependency change, version bump, release, or deployment claim.

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 65 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ec5375b2-e34a-48ba-ada5-a10ca2563725

📥 Commits

Reviewing files that changed from the base of the PR and between 4573a6f and a8658f0.

📒 Files selected for processing (3)
  • src/outbound-fetch-policy.ts
  • test/outbound-request-body-inheritance.test.ts
  • test/outbound-request-compartment.test.ts

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.

Preserve the reviewed three-path inherited-body security slice while integrating protected nanoid 3.3.18 remediation and Node 24 artifact-upload inventory without unrelated branch rewrites.
Carry the inherited-request-body security slice across the protected exchange media-type integration while preserving the reviewed three-path diff and non-destructive history.
@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 09:08

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Review exact current head a8658f034adfcc71c7e0af651f319dd651ed5603 against protected base 4573a6f7eaf904e19a6e3198c8cabcfd4be40c40. Verify effective Request body inheritance for null/undefined overrides, zero raw-fetch invocation on blocked shapes, and no outbound allowlist or method relaxation. Do not transfer conclusions from predecessor heads.

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 25 minutes and 36 seconds before sending another message.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant