Repository navigation
Conversation
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — This focused bug fix changes production link-proof JWT timestamps by deriving them from relay-issued challenge claims, directly affecting authentication and relay acceptance. The clock-skew regressions are well targeted, but the authentication timestamp policy warrants human review. You can add or adjust custom eligibility rules. Learn more. |
feb60e7 to
4ad5a93
Compare
|
Taking over this one as maintainer for batch ssh-relay-remote-04. I will merge main into the original branch, rebuild the proof timestamp change with separate tests and implementation, and run independent adversarial reviews. Verification will cover clocks ahead and behind with the actual cloud-link service and relay verification where available. Authentication policy approval and unverified native/hosted flows will remain explicit. This will remain unmerged. |
Link proofs were dated with the host clock, so a host running ahead issued a proof from the relay's future and one running behind issued an expired proof. The proof now takes its `iat` from the relay challenge and expires 300 seconds later, falling back to host time when the challenge timestamp is unusable. The relay still verifies and consumes the challenge. Rebased onto main as one commit; the regression tests now provide the authenticated principal that linkProof requires since pingdotgg#19271. Co-authored-by: shivamhwp <shivamhwp@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
04d0d52 to
72fc073
Compare
T3 Connect link proofs were dated with the host clock, so a host ten minutes ahead issued a proof from the relay's future and a host ten minutes behind issued an expired one (#19034).
The shared HTTP/CLI signer (
makeCloudLinkProof) now takesiatfrom the relay challenge and setsexp300 seconds later. A missing, non-numeric, non-positive or unsafe challengeiatfalls back to host time. The server only borrows the timestamp: the relay still verifies the embedded challenge's signature, age, issuer, audience, user and capabilities, and consumes both nonces, so a forged challenge gains nothing.Verification at
72fc0738ac(one commit on05b697f6a2):CloudLink.lifecycle.test.tsrun the real CloudLink service with the clock 600 s ahead and 600 s behind, then verify the proof with the shared relay verifier at relay time. With the fix reverted they fail (iatin the future / proof expired); with it they pass. Both CloudLink suites: 38 passing.Not verified: CLI reconciliation, relay HTTP/session auth and the full linking flow end to end, a deployed relay, real tunnel provisioning, and native or desktop clients. An isolated runtime run of the signer, relay token verifier and EnvironmentLinker passed at the earlier head
04d0d5296a(transcript); it was not rerun at this head. This is a server-only change with no visual surface.Human gate: this changes how signed link proofs are dated, and Macroscope's approvability verdict asks for a maintainer to approve that timestamp policy.
Original author: @shivamhwp; rebuilt by @juliusmarminge; rebased onto main by Claude Opus 5.5 in T3 Code.
🤖 Generated with Claude Code