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 

@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

@seonghobae
seonghobae force-pushed the cursor/bc-f59729bf-862b-4dcf-bba2-73fdecc98207-5447 branch from 29a20ba to 0764397 Compare August 20, 2026 01:45
@seonghobae

Copy link
Copy Markdown
Contributor

Rebased the seven-commit dependency-review hardening series onto current origin/main c47bee5, retaining fail-closed availability, visibility, named-ref, and dot-component validation.

Current HEAD: 0764397

Validation on this HEAD:

  • pytest -q tests/test_required_workflow_queue_contract.py: 72 passed
  • actionlint, compileall, and git diff --check passed

@OpenCode review this exact HEAD after the rebase.

seonghobae and others added 7 commits August 20, 2026 13:58
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 <seonghobae@users.noreply.github.com>
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 <seonghobae@users.noreply.github.com>
…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 <seonghobae@users.noreply.github.com>
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 <seonghobae@users.noreply.github.com>
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 <seonghobae@users.noreply.github.com>
…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 <seonghobae@users.noreply.github.com>
@seonghobae
seonghobae force-pushed the cursor/bc-f59729bf-862b-4dcf-bba2-73fdecc98207-5447 branch from 0764397 to 948de32 Compare August 20, 2026 04:59
@seonghobae

Copy link
Copy Markdown
Contributor

@opencode-agent review exact current head 948de32 against protected base 2cce96f. Rebased the dependency-review fail-closed hardening onto current main; verified 72 queue/security contract tests, compileall, interrogate, security-scan actionlint, and diff --check. The prior preferred #1049 is closed, so this remains the open landing vehicle. Do not transfer predecessor review/check evidence.

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