Repository navigation
Allowlist sf16-fe-tos-sg.i18n-pglstatp.com for Swift binary targets - #316
Merged
Merged
Conversation
Swift update jobs that depend on the Pangle iOS SDK can no longer parse their manifest since egress enforcement was enabled. bytedance/AdsGlobalPackage declares its PAGAdSDK and TikTokBusinessSDK binaryTargets on this host, so SwiftPM fails to resolve the package graph and no Swift PRs are opened. The host is Pangle's anonymous SDK CDN referenced from the vendor's own public Package.swift, with no redirect, so it is added as an exact entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v-robaiken
approved these changes
Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What are you trying to accomplish?
Hosted Dependabot
swiftversion updates fail withproxy-egress-enforcefor any repo that depends on the Pangle iOS SDK through SwiftPM, for example via Google's Pangle mediation adapter. The adapter depends on bytedance/AdsGlobalPackage. Its Package.swift declares thePAGAdSDKandTikTokBusinessSDKSwiftPMbinaryTargets onhttps://sf16-fe-tos-sg.i18n-pglstatp.com/..., and the proxy returns 403 for that host:SwiftPM resolves the whole package graph while Dependabot parses the manifest, so the job fails in
Dependabot::Swift::FileParserand no Swift update PRs are opened at all. Ignoring the dependency independabot.ymldoes not help.The host is Pangle's (ByteDance) SDK CDN. It is referenced from the vendor's own public
Package.swiftand serves the artifacts anonymously, so there is no credential to declare underregistries:.This PR adds
sf16-fe-tos-sg.i18n-pglstatp.comas an exact host toecosystem_default_domains.swift.Fixes #315
Anything you want to highlight for special attention from reviewers?
One exact entry is enough. Probing the artifact path from the failing job with
--max-redirs 0returns206with an emptyredirect_url, and an anonymousHEADreturns200 application/zip. The host is a CNAME to Akamai (sf16-fe-tos-sg.i18n-pglstatp.com.edgesuite.net→a1818.mm2.akamai.net), and every address it resolves to is public.Ownership evidence. Certificate Transparency logs show the certificate is a DigiCert RapidSSL DV wildcard for
*.i18n-pglstatp.com, so it carries no organisation name. As withsdk.karte.io, the evidence comes from the vendor's own manifests:bytedance/AdsGlobalPackageto this host.8.2.1-release.1,8.3.0-release.8).X-Tos-Request-Id,x-tt-trace-id,X-TT-LOGID).About the path-style
/obj/<bucket>/layout. The bucket name is in the path, which is the shape the allowlist skill flags for multi-tenant hosts. I think the exact entry is still safe because the hostname belongs to ByteDance's own Pangle static domain (i18n-pglstatp.com), not to a public object-storage endpoint that arbitrary customers can publish to. The buckets reachable through it are therefore ByteDance-controlled. If you'd prefer a different shape, I'm happy to change it.Exact, deliberately. The certificate is a wildcard over
*.i18n-pglstatp.com, so the parent namespace stays closed and only the one CDN host named in the manifest is added.swiftis not an anchor/alias member, so no aliased ecosystem needs the same edit. Precedents for this section: #290 / #298 (sdk.karte.io) and #304 / #305 (prelude-public.s3.amazonaws.com).How will you know you've accomplished your goal?
Reproduction (proxy
4f831d2, 2026-10-14): under enforcement, both thePAGAdSDKandTikTokBusinessSDKrequests return403and the Swift job fails:Other binary targets in the same job (
dl.google.com, GitHub release assets,sdk.karte.io) download successfully.Coverage in
TestEgressAllowlist_PublicVendorRegistriesAllowed:https://evil.sf16-fe-tos-sg.i18n-pglstatp.com/payload. I confirmed it bites by temporarily changing the entry to.sf16-fe-tos-sg.i18n-pglstatp.com. The test failed withmust stay blocked: https://evil.sf16-fe-tos-sg.i18n-pglstatp.com/payload, and I then reverted the change.https://attacker.i18n-pglstatp.com/payloadandhttps://i18n-pglstatp.com/payload. Changing the entry to.i18n-pglstatp.commakes all three negative probes fail.Ran locally with Go 1.27.2:
go build ./...,go test ./internal/handlers/ -run TestEgress -count=1,gofmt -l internal/handlers/(empty output) andgo test -race -shuffle=on -count=2 ./...(all packages pass). The Docker daemon wasn't available, so I didn't runscript/testitself, and that box is left unticked.Checklist
🤖 Generated with Claude Code