Contract: INBUXA production OAuth findings; C-5 also turns anonymous client registration off

This commit is contained in:
2026-09-18 12:31:07 -07:00
parent 0ed540f43a
commit 559bb3d1a6
+26 -7
View File
@@ -82,8 +82,12 @@ Each has an ID, and tests name the IDs they check.
### Sign-in ### Sign-in
- **C-5.** INBUXA requires client registration: `requireClientRegistration` - **C-5.** INBUXA requires client registration: `requireClientRegistration`
defaults to **true**. This is a deliberate difference from upstream (see defaults to **true**, and `anonymousClientRegistration` to **false**, since
"Security note"). anonymous dynamic registration would otherwise let anyone register a client
with their own redirect URI and sidestep the requirement. Both are
deliberate differences from upstream (see "Security note"). An operator who
wants open dynamic registration for third-party apps can turn it back on;
C-9's consent page still names every non-first-party client.
- **C-6.** Two first-party clients are registered as `x:OAuthClient` whenever - **C-6.** Two first-party clients are registered as `x:OAuthClient` whenever
`x:FrontEnds` is set or changed: `x:FrontEnds` is set or changed:
- **`inbuxa-admin`**: a public client (no secret), authorization code with - **`inbuxa-admin`**: a public client (no secret), authorization code with
@@ -208,11 +212,26 @@ INBUXA closes this with C-5 (registration required), C-9 (consent naming the
redirect host), C-15 (token endpoint not callable from arbitrary pages) and redirect host), C-15 (token endpoint not callable from arbitrary pages) and
C-18 (no admin scope for anything but `inbuxa-admin`). C-18 (no admin scope for anything but `inbuxa-admin`).
INBUXA's production server runs upstream Stalwart Enterprise today. Whether **Checked on INBUXA's production server (upstream Stalwart Enterprise
`requireClientRegistration` is on there hasn't been checked. It needs an 0.16.22), 2026-09-18, read-only:**
admin to read `x:OidcProvider`. Turning it on would break any client that uses
OAuth without registering, so check which clients INBUXA's users sign in with - `requireClientRegistration: false` and `anonymousClientRegistration: true`.
before changing it. So the gap is open, and turning registration on **alone wouldn't close it**:
anyone can dynamically register a client with their own redirect URI without
signing in, then run the same phishing flow with a "registered" client. C-5
therefore also needs anonymous registration **off** by default, and C-9's
consent page covers dynamically registered clients too.
- No `x:OAuthClient` is registered, and no dynamic registrations appear in the
server log for September 618.
- The same log shows no sign of OAuth sign-ins by mail clients (no
`OAUTHBEARER` or `XOAUTH2`). Sign-ins over those 12 days: IMAP 606, HTTPS
208, submission 102. Of the HTTPS ones, 102 came from ihasmail's host (Basic
auth), 26 were test probes, and 80 were two accounts' own devices. The log
doesn't record the sign-in method, so this is strong circumstantial evidence,
not proof.
- The one client that very likely depends on the open setting is Stalwart's
own web interface (`/admin`, `/account`), which signs in as the unregistered
client `stalwart-webui`.
## Acceptance tests ## Acceptance tests