Skip to content

fix(security): reject dot path components before dependency-review compare - #1050

Draft
cursor[bot] wants to merge 7 commits into
mainfrom
cursor/bc-f59729bf-862b-4dcf-bba2-73fdecc98207-5447
Draft

fix(security): reject dot path components before dependency-review compare#1050
cursor[bot] wants to merge 7 commits into
mainfrom
cursor/bc-f59729bf-862b-4dcf-bba2-73fdecc98207-5447

Conversation

@cursor

@cursor cursor Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Purpose

Continue #1048. Named-ref rejection and the single-slash owner/name regex are necessary, but ../.github and ContextualWisdomLab/.. still match that regex. RFC 3986 remove-dot-segments would collapse /repos/../.github/... into /.github/... (Berners-Lee et al., 2005). A synthetic HTTP 200 would then write supported=true against a different compare URL.

Prefer this branch over #897, #1033, #1041, #1042, #1044, #1045, and #1048 for integration. Keep #821 draft. Do not close #810 until a protected-main public consumer run proves a non-200 or failed-transfer comparison cannot produce a green Dependency Review gate.

What changed

  • After the owner/name shape check, reject an owner or name that is exactly . or .. before any compare request.
  • Keep ContextualWisdomLab/.github legal: the organization special repository is a name, not a path-segment sentinel.
  • Executable regressions cover ../.github, ContextualWisdomLab/.., ContextualWisdomLab/., and ./.github, and prove the .github product repository still reaches compare.
  • Doctoring cites RFC 3986 and CWE-22 so operators replace the event repository identity instead of retrying a dotted path component.

Acceptance

Merge only after exact-current-head deterministic, security, dependency, and required workflows are terminal and clean, current automated review has no valid unresolved finding, and a qualifying counted non-author formal approval exists.

Automated review is not qualifying approval or merge authority.

Operator next step

  1. Mark this pull request ready if it opens as draft, then wait for exact-current-head required checks.
  2. Leave a counted non-author formal approval only after those checks are terminal and clean.
  3. Keep security: make central dependency-review unavailability fail closed #810 open until an EgressWeave (or other protected-main public consumer) canary proves a non-200 cannot green Dependency Review.
  4. Do not merge fix(security): fail closed on unavailable dependency review #897, fix(security): record visibility on dependency-review fail-closed #1033, fix(security): fail closed when dependency-review compare is unavailable #1041, fix(security): fail closed on unavailable dependency review #1042, fix(security): treat curl 000 as unavailable dependency-review evidence #1044, fix(security): reject malformed dependency-review identity before compare #1045, or fix(security): reject named refs before dependency-review compare #1048 once this head is the integration vehicle.
Open in Web View Automation 

seonghobae and others added 7 commits August 17, 2026 00:19
Replay unique #897 source onto current origin/main. Skip shared
ARCHITECTURE/CLAUDE trees. Treat non-200 or failed transport as
unavailable evidence rather than a clean skip.
Close the remaining #810 diagnostic gap:
allowlist public/private/internal/unknown visibility in probe
diagnostics, execute 403/404/empty/malformed regressions, and stop
making the pinned action independently skippable after a successful
probe.

Co-authored-by: Seongho Bae <[email protected]>
Add executable regressions for the EgressWeave #66 canary (HTTP 403
skip-was-success), a bare transport failure, and curl exit 18 with a
printed 200. Record exact SHAs and allowlisted visibility without
leaking the probe token.

Co-authored-by: Seongho Bae <[email protected]>
…arness

Invoke the extracted support probe with an absolute bash path and keep
the fake curl first on PATH so isolated executable regressions can run
without calling the real binary.

Co-authored-by: Seongho Bae <[email protected]>
Classify curl's no-status 000 write-out as unavailable instead of a
three-digit HTTP code, and lock private/internal visibility plus raw
visibility non-leakage with executable regressions.

Co-authored-by: Seongho Bae <[email protected]>
GitHub's compare API resolves named revisions to moving HEADs.
Require exact 40- or 64-character hexadecimal object IDs and an
owner/name repository identity before any compare request.

Co-authored-by: Seongho Bae <[email protected]>
…mpare

A single-slash owner/name whose owner or name is . or .. still matched
the previous identity regex, so ../.github and ContextualWisdomLab/..
could reach curl. RFC 3986 remove-dot-segments would collapse those
into a different compare URL. The organization .github repository
remains a legal name.

Related to #810. Prefer this branch over #1042 and #1048 for
integration. Do not close #810 until an EgressWeave canary proves a
non-200 cannot green the job.

Co-authored-by: Seongho Bae <[email protected]>

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Verdict

COMMENT on exact head 29a20baa.

This branch rejects ./.. path components and keeps ContextualWisdomLab/.github legal. A concurrent integration vehicle already lands the same slice with tighter identity-rejection diagnostics (curl exit uncalled, no raw invalid revision or repository echo).

Operator next step

  1. Prefer #1049 (e4a7dffa) for integration.
  2. Keep this pull request draft. Do not merge it.
  3. Keep #810 open until a protected-main public consumer run proves a non-200 cannot green Dependency Review.
  4. Wait only for exact-current-head required checks and a counted non-author formal approval on #1049.

View PR

Open in Web View Automation 

Sent by Cursor Automation: Fix Issues

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.

security: make central dependency-review unavailability fail closed

2 participants