Environment: Sandbox + Production (reproduced on both)
Cardinal OrgUnitId (from logs): 55ef3f7cf723aa431c99e180
Sample Cardinal ReferenceId: 0_a7328358-5c08-48fc-b16d-922cf7814c1f
Summary
After upgrading braintree-web from 3.117.1 → 3.138.0, iOS Safari tabs crash (WebKit content process terminated) during the 3‑D Secure
step when verifying a new credit card. The crash occurs at the VCDI (Visa Cardholder Device Intelligence) device‑fingerprint iframe
(secure-devicefp.visa.com, sandbox/CTE: secure-devicefp-cte.visa.com). This profiler is new in the Songbird version delivered by 3.138
and did not run on 3.117.1, which never crashed.
Environment / versions
- braintree-web: 3.138.0 (regression introduced somewhere after 3.117.1; note 3.121.0 "Retrieve Cardinal Songbird script URL and
integrity hash from the gateway configuration").
- 3DS integration: threeDSecure.create({ version: 2 }), hosted fields, verifyCard.
- Device: iPhone, Mobile Safari, iOS 26.5 (crash is iOS‑Safari‑specific; Chrome/desktop unaffected).
- Merchant page sends Permissions-Policy: payment=* on the top‑level document.
Steps to reproduce
- On an iPhone (Safari/Chrome), at the first time (recommended every time try in incognito with new session) go to checkout and enter a new credit card with 3D secure support.
- Submit to trigger 3‑D Secure (verifyCard), which starts Cardinal Songbird device profiling.
- Songbird runs two profilers: CardinalData (succeeds) and VCDI (loads the secure-devicefp iframe).
- The Safari tab crashes/reloads at the VCDI iframe; the user never completes payment.
Expected vs actual
- Expected: 3‑D Secure device profiling completes and the challenge/verification proceeds without terminating the browser tab.
- Actual: The VCDI iframe fails the payment permission policy, times out, and the iOS Safari tab is killed. The last console output
before the crash is the secure-devicefp(-cte).visa.com iframe.
Console evidence (verbatim, Safari Web Inspector)
Primary profiler succeeds:
CardinalDataCollection - Fingerprinter completed, creating data object taking [168]ms
CardinalDataCollection - SaveBrowserData completed [380]ms after starting profiling
Profiling - Profiling completed. Final results: [{"DataSource":"CardinalData","Status":true,"ElapsedTime":380}]
Profiling - Fingerprinting completed.
VCDI iframe is sandboxed, then fails and times out (immediately before the tab crash):
VcdiProfiling - VCDI iframe: applied allow attribute (Flag A)
VcdiProfiling - VCDI iframe: applied sandbox attribute (Flag B)
[Error] Permission policy 'Payment' check failed for document with origin 'https://secure-devicefp-cte.visa.com'.
VcdiProfiling - VCDI profiling timed out.
What we already tried (and why it isn't enough)
- We set Permissions-Policy: payment=* (which missing in your documentation) on the top‑level checkout document. This fixed the primary CardinalData profiler (now completes
in ~380 ms instead of the previous 4 s Base.DF: Device profiling did not complete in [4000]ms timeout).
- It does not fix VCDI, because Songbird creates the VCDI iframe with a sandbox attribute (log "Flag B"). A sandboxed iframe cannot
use the Payment API via a top‑level Permissions-Policy alone — it also requires the allow-payment-request sandbox token on the iframe
element. That iframe and its sandbox/allow attributes are generated by Cardinal Songbird, not by the merchant, so we cannot grant the
permission from our side.
Analysis
- CardinalData already returns a successful device‑data result, so VCDI appears redundant for our integration — yet it runs, fails the
payment‑permission check, times out, and crashes iOS Safari.
- The braintree-web threeDSecure.create() API exposes only cardinalSDKConfig (logging, timeout, maxRequestRetries, payment) — there is
no client option to disable VCDI / device fingerprinting, so we cannot turn it off from the SDK.
What we're asking
Any one of these would resolve it; please advise which is possible:
- Disable VCDI (Visa Cardholder Device Intelligence) for our Cardinal org unit 55ef3f7cf723aa431c99e180, since CardinalData already
provides device data. (Preferred — zero merchant‑side risk.)
- Fix the VCDI iframe Songbird generates so the sandboxed iframe includes allow-payment-request (and/or allow="payment") so it
doesn't fail the payment permission and time out.
- Investigate why the VCDI iframe crashes the iOS Safari (WebKit) content process rather than failing gracefully.
- If none of the above, provide a client‑side threeDSecure.create() option to disable VCDI.
Business impact
iOS‑Safari mobile shoppers cannot complete new‑card checkout (tab crashes at 3DS). We measured roughly a 15–25 percentage‑point drop
in mobile‑Safari checkout payment‑step completion coinciding with the 3.138 rollout.
Environment: Sandbox + Production (reproduced on both)
Cardinal OrgUnitId (from logs): 55ef3f7cf723aa431c99e180
Sample Cardinal ReferenceId: 0_a7328358-5c08-48fc-b16d-922cf7814c1f
Summary
After upgrading braintree-web from 3.117.1 → 3.138.0, iOS Safari tabs crash (WebKit content process terminated) during the 3‑D Secure
step when verifying a new credit card. The crash occurs at the VCDI (Visa Cardholder Device Intelligence) device‑fingerprint iframe
(secure-devicefp.visa.com, sandbox/CTE: secure-devicefp-cte.visa.com). This profiler is new in the Songbird version delivered by 3.138
and did not run on 3.117.1, which never crashed.
Environment / versions
integrity hash from the gateway configuration").
Steps to reproduce
Expected vs actual
before the crash is the secure-devicefp(-cte).visa.com iframe.
Console evidence (verbatim, Safari Web Inspector)
Primary profiler succeeds:
CardinalDataCollection - Fingerprinter completed, creating data object taking [168]ms
CardinalDataCollection - SaveBrowserData completed [380]ms after starting profiling
Profiling - Profiling completed. Final results: [{"DataSource":"CardinalData","Status":true,"ElapsedTime":380}]
Profiling - Fingerprinting completed.
VCDI iframe is sandboxed, then fails and times out (immediately before the tab crash):
VcdiProfiling - VCDI iframe: applied allow attribute (Flag A)
VcdiProfiling - VCDI iframe: applied sandbox attribute (Flag B)
[Error] Permission policy 'Payment' check failed for document with origin 'https://secure-devicefp-cte.visa.com'.
VcdiProfiling - VCDI profiling timed out.
What we already tried (and why it isn't enough)
in ~380 ms instead of the previous 4 s Base.DF: Device profiling did not complete in [4000]ms timeout).
use the Payment API via a top‑level Permissions-Policy alone — it also requires the allow-payment-request sandbox token on the iframe
element. That iframe and its sandbox/allow attributes are generated by Cardinal Songbird, not by the merchant, so we cannot grant the
permission from our side.
Analysis
payment‑permission check, times out, and crashes iOS Safari.
no client option to disable VCDI / device fingerprinting, so we cannot turn it off from the SDK.
What we're asking
Any one of these would resolve it; please advise which is possible:
provides device data. (Preferred — zero merchant‑side risk.)
doesn't fail the payment permission and time out.
Business impact
iOS‑Safari mobile shoppers cannot complete new‑card checkout (tab crashes at 3DS). We measured roughly a 15–25 percentage‑point drop
in mobile‑Safari checkout payment‑step completion coinciding with the 3.138 rollout.