fix(security): reject dot segments and hide raw dependency-review identity - #1049
fix(security): reject dot segments and hide raw dependency-review identity#1049cursor[bot] wants to merge 6 commits into
Conversation
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]>
…pare Empty or non-hex base/head revisions and non-canonical repository names no longer reach curl. A forged HTTP 200 therefore cannot write supported=true. Executable regressions now record the exact compare argv and keep the pinned action ungated after a successful probe. Co-authored-by: Seongho Bae <[email protected]>
…ntity Close the remaining CWE-22 hole where owner/.. still matched owner/name, stop echoing untrusted revisions on identity rejection, and classify curl 000 as unavailable evidence before the pinned action. Co-authored-by: Seongho Bae <[email protected]>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
There was a problem hiding this comment.
Stale comment
Verdict
COMMENT on exact head
e4a7dffa4c4ee8cceb423504d0f01d8a803f7ddb.This is the integration vehicle for #810. It keeps the #1041/#1045 fail-closed probe, then rejects
./..repository segments that still matchowner/name, refuses named refs before curl, classifies curl000as unavailable, and stops echoing raw invalid identity. The.githubrepository name remains legal.Do not merge #897, #1033, #1041, #1042, #1044, #1045, or #1048. Keep #810 open until a protected-main public consumer run proves a non-200 cannot go green. Merge only after exact-current-head checks are terminal and clean and a qualifying counted non-author formal approval exists. Do not self-approve.
Sent by Cursor Automation: Fix Issues
There was a problem hiding this comment.
Verdict
COMMENT on exact head e4a7dffa4c4ee8cceb423504d0f01d8a803f7ddb.
This is the integration vehicle for #810. Automated review is not qualifying approval or merge authority. Do not treat this COMMENT as a counted approval, and do not self-approve.
What this head does
It keeps the #1041/#1045 fail-closed probe, then closes the remaining identity boundary:
- Rejects a complete owner or name segment that is
.or..before any compare request. - Keeps
ContextualWisdomLab/.githublegal. - Refuses named refs and other non-hex revisions before curl.
- Classifies curl
%{http_code}000as unavailable evidence. - Names the failure class and the operator next step on identity rejection; it does not echo the raw invalid revision or repository.
- Leaves the pinned action ungated after a successful probe.
supported=falseand the EgressWeave#66 skip warning are gone.
The dependency-review job stays contents: read and pull-requests: read. Local pytest tests/test_required_workflow_queue_contract.py tests/test_pr_governance_audit_contract.py recorded 78 passed.
Operator next step
- Wait until exact-current-head deterministic, security, dependency, and required workflows are terminal and clean on this SHA. Cancelled checks from the ready-for-review retrigger are not current-head evidence.
- Leave a counted non-author formal approval on this head only.
seonghobaeis already requested. - After merge, run the public consumer proof on ContextualWisdomLab/EgressWeave#76 before closing #810.
Do not merge #897, #1033, #1041, #1044, #1045, #1048, or draft #1050. Keep #821 draft.
Residual successor work
Do not rewrite this probe. After this head is on protected main:
- Pin
= "."segment equalities and the probe step's lack ofcontinue-on-errorin the YAML contract. - Pin the doctoring fail-closed sentences the same way other doctoring records are pinned.
- Move the Bearer token off curl argv.
- Do not widen this job token to write to make
comment-summary-in-prprettier.
Sent by Cursor Automation: Fix Issues
| assert '[ "${repository_owner}" = ".." ]' in support_probe | ||
| assert '[ "${repository_name}" = ".." ]' in support_probe |
There was a problem hiding this comment.
Successor contract, not a merge blocker: pin [ "${repository_owner}" = "." ] and [ "${repository_name}" = "." ] here as well. Executable tests already reject ContextualWisdomLab/. and ./.github, but a later YAML edit can drop the . equalities and still satisfy these .. string pins. After this head is on main, add those two asserts in the same function before opening another probe rewrite.
| )[0] | ||
| assert "continue-on-error: true" not in osv_job_header | ||
| assert "continue-on-error: true" not in trivy_job_header | ||
| assert "continue-on-error: true" not in dependency_job_header |
There was a problem hiding this comment.
Successor contract, not a merge blocker: this pins continue-on-error: true off the job header, not off the Check dependency review support step. A later continue-on-error: true on that probe would let the ungated action run after a failed identity or HTTP probe. After this head is on main, assert the extracted support-probe step text does not contain continue-on-error.


Purpose
Continue #1045. That head rejects empty and non-hex revisions and
owner/../path, butContextualWisdomLab/..still matchesowner/name, identity-rejection logs echo the raw revision and repository, and curl000is recorded as a numeric status.This is the single integration vehicle for the remaining identity boundary. Prefer this branch over #897, #1033, #1041, #1042, #1044, #1045, and #1048. 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.
Canary (do not treat as fixed until a post-merge consumer run)
ContextualWisdomLab/EgressWeave#66, Security Scan run 31108241013, job 92638903658 compared
10d0c51d...c038a950, received HTTP 403, skipped the pinned action, and still concluded success. Downstream: ContextualWisdomLab/EgressWeave#76.What changed
.or..before any compare request, while keeping the special.githubrepository name legal.%{http_code}000with any transport exit isunavailableevidence.Tests
Local
pytest tests/test_required_workflow_queue_contract.py tests/test_pr_review_autofix_nvidia_nim_contract.py tests/test_pr_governance_audit_contract.py tests/test_codeql_pr_workflow_contract.py tests/test_central_required_workflow_ruleset_audit.py tests/test_opencode_workflow_shell_syntax.py: 124 passed.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