Adversarial Files DAV credential creation can outlive fresh owner authority #1382

Open
opened 2026-10-07 16:43:10 +00:00 by kayg · 2 comments
Owner

Found during merge33b (#1122), head 5382ca7a1, combined release server built at parent 4f3273473. After a slow tag/Task/DAV round, dav_webdav_probes() creates a Files-scoped app password with the owner installation bearer. The function refreshes the owner assertion before revoke in finally, but does not refresh before creation. The server correctly requires fresh authority for that security write (DESIGN §21 / #867).

Live output:

DAV Files credential setup: expected 200, got 403 b'{"code":"forbidden","message":"Access denied"}'

The preceding tag storm completed 100/100; a later assertion refresh was followed by slow Task and DAV probes. The fixture can outlive the fresh-auth window before the credential call. Keep the 200 setup expectation and the exact cross-protocol/revocation denials; refresh through the existing helper immediately before the privileged create, then run the existing focused ADVERSARIAL_DAV_ONLY probe. No server authorization relaxation is appropriate. I retained the expectation and report the skipped Files DAV checks on #1122.

Found during merge33b (#1122), head 5382ca7a1, combined release server built at parent 4f3273473. After a slow tag/Task/DAV round, dav_webdav_probes() creates a Files-scoped app password with the owner installation bearer. The function refreshes the owner assertion before revoke in finally, but does not refresh before creation. The server correctly requires fresh authority for that security write (DESIGN §21 / #867). Live output: ``` DAV Files credential setup: expected 200, got 403 b'{"code":"forbidden","message":"Access denied"}' ``` The preceding tag storm completed 100/100; a later assertion refresh was followed by slow Task and DAV probes. The fixture can outlive the fresh-auth window before the credential call. Keep the 200 setup expectation and the exact cross-protocol/revocation denials; refresh through the existing helper immediately before the privileged create, then run the existing focused ADVERSARIAL_DAV_ONLY probe. No server authorization relaxation is appropriate. I retained the expectation and report the skipped Files DAV checks on #1122.
Author
Owner

#1382 fixture fix committed as 3d0c88200. Refresh the existing owner assertion immediately before Files DAV App Password creation, and retain the existing refresh before revoke. All authorization assertions remain unchanged.

The focused real-server retry completed with exit 0. Verbatim evidence:

owner installation and browser session assertions refreshed
DAV 100-href Apple multiget: 18045 request bytes, 100 responses, 1.216s
DAV early rejection follow-up: 413
DAV #471 case 2: PASS (previous=True, two areas=False)
DAV #471 case 3: PASS (previous=False, two areas=False)
DAV #471 case 4: PASS (previous=True, two areas=True)
WebDAV scripted probes passed
owner installation and browser session assertions refreshed

The bounded combined round finished with findings filed as #1381 and #1383. The Rust gate also found a non-timeout Shared Notes 403 instead of 101; filed as #1386. Keep its assertion. No Rust source was changed in merge33b. Continue the remaining compiled workspace test binaries after Cargo stopped on this failure.

#1382 fixture fix committed as 3d0c88200. Refresh the existing owner assertion immediately before Files DAV App Password creation, and retain the existing refresh before revoke. All authorization assertions remain unchanged. The focused real-server retry completed with exit 0. Verbatim evidence: ``` owner installation and browser session assertions refreshed DAV 100-href Apple multiget: 18045 request bytes, 100 responses, 1.216s DAV early rejection follow-up: 413 DAV #471 case 2: PASS (previous=True, two areas=False) DAV #471 case 3: PASS (previous=False, two areas=False) DAV #471 case 4: PASS (previous=True, two areas=True) WebDAV scripted probes passed owner installation and browser session assertions refreshed ``` The bounded combined round finished with findings filed as #1381 and #1383. The Rust gate also found a non-timeout Shared Notes 403 instead of 101; filed as #1386. Keep its assertion. No Rust source was changed in merge33b. Continue the remaining compiled workspace test binaries after Cargo stopped on this failure.
Author
Owner

Additional journaldup6 / #1295 evidence, head 3d602f8a1.

The focused journalrace runner also runs reliability_1202.mjs before its selected section. probeHideProtocols at line 398 fails while creating its fresh DAV fixture credential:

AssertionError: fresh DAV fixture credential
403 !== 200
actual: 403,
expected: 200,
at probeHideProtocols (tests/adversarial/reliability_1202.mjs:398:2)

The preceding fixture logs report passkey login and 30/30 login requests; other setup phases timed out. This matches the fixture lifetime risk tracked here. No credential value is printed. I kept the test expectation and server authorization unchanged. Local log: artifacts/journaldup6-journalrace-classified.log.

Additional journaldup6 / #1295 evidence, head `3d602f8a1`. The focused journalrace runner also runs `reliability_1202.mjs` before its selected section. `probeHideProtocols` at line 398 fails while creating its fresh DAV fixture credential: ``` AssertionError: fresh DAV fixture credential 403 !== 200 actual: 403, expected: 200, at probeHideProtocols (tests/adversarial/reliability_1202.mjs:398:2) ``` The preceding fixture logs report passkey login and `30/30` login requests; other setup phases timed out. This matches the fixture lifetime risk tracked here. No credential value is printed. I kept the test expectation and server authorization unchanged. Local log: `artifacts/journaldup6-journalrace-classified.log`.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-v0#1382
No description provided.