Skip to content

Fix/gsa 503 acq - #15

Open
xiaopebaka wants to merge 10 commits into
nab138:mainfrom
xiaopebaka:fix/gsa-503-acq
Open

xiaopebaka wants to merge 10 commits into
nab138:mainfrom
xiaopebaka:fix/gsa-503-acq

Conversation

@xiaopebaka

Copy link
Copy Markdown

No description provided.

nab138 and others added 10 commits August 1, 2026 12:05
Apple's GrandSlam edge answers any request whose X-Mme-Client-Info names
com.apple.dt.Xcode with an HTML 503 page, before the request reaches the
backend at all. Signing in has been failing on the very first request since
around 2026-08-31.

Bisected against gsa.apple.com/grandslam/GsService2 with an init-shaped body,
three requests per row:

  <com.apple.AuthKit/1 (com.apple.dt.Xcode/25183.54.10)>  503 503 503
  <com.apple.AuthKit/1 (com.apple.dt.Xcode/26.0)>         503 503 503
  <com.apple.AuthKit/1 (com.apple.dt.Xcode)>              503 503 503
  <com.apple.AuthKit/1 (com.apple.dt.Xcodex/26.0)>        503 503 503
  <com.apple.AuthKit/1 (com.apple.foo/1.0)>               200 200 200
  <com.apple.AuthKit/1 (com.apple.akd/1.0)>               200 200 200
  <com.apple.AuthKit/1>                                   200 200 200

The match is on the com.apple.dt.Xcode prefix, not on the version and not on
the parentheses: appending a character to the identifier is still blocked,
while any other identifier is served. Dropping the trailing identifier is
enough, and the Xcode flow is still identified by X-Apple-App-Info and
X-Xcode-Version, neither of which is filtered.

X-Mme-Client-Info is only ever sent as a header - the copy in the anisette
client-provided data is commented out and AnisetteData::_device_description is
unused - so nothing else depends on this string.

Also make the failure legible if Apple does this again. plist_request checked
nothing before handing the body to the plist parser, so an HTML error page
surfaced as a parse error that named neither the status code nor the fact that
the response came from the edge rather than the backend. It now verifies the
status and Content-Type first and reports both plus a snippet of the body, and
retries 5xx responses five times with exponential backoff.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0194fngS3qeEqdSqR2JubDHE
Runs login plus the apptokens request without needing a device attached, and
takes a --provision mode that exercises anisette provisioning and the
GrandSlam requests it makes without needing any credentials at all.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0194fngS3qeEqdSqR2JubDHE
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.

2 participants