CVE-2026-28907
Overview
Advisory: Apple Security Advisory
Impact:
Description: Processing maliciously crafted web content may prevent Content Security Policy from being enforced
Researchers: Cantina
| Attribute | Value |
|---|---|
| CVE | CVE-2026-28907 |
| Bugzilla | 308675 |
| Component | WebKit |
| Bug Class | CSP Bypass |
| Severity | medium |
| Commit | 5d910749e9023a7d… |
| Advisory | Apple Advisory |
Root Cause Analysis
CSP path matching did not percent-decode path segments before comparison, allowing %2F..%2F path traversal to bypass script-src path restrictions. Fix: pathMatches() now splits on /, then percent-decodes each segment individually before comparing.
Attack Path
1. Step 1
Attacker controls a script tag src with a path-restricted CSP.
2. Step 2
Attacker encodes path traversal as %2F..%2F in the URL path.
3. Step 3
CSP pathMatches() compares raw encoded segments, allowing mismatch.
4. Step 4
Browser loads script from unauthorized directory, bypassing path restriction.
5. Step 5
Arbitrary code execution via attacker-controlled script.
Files Changed
Source Files
Tools/MobileMiniBrowser/MobileMiniBrowserFramework/SceneDelegate.m
Patch Preview
diff --git a/Tools/MobileMiniBrowser/MobileMiniBrowserFramework/SceneDelegate.m b/Tools/MobileMiniBrowser/MobileMiniBrowserFramework/SceneDelegate.m
index 0fa324aaec3a..492142235cbf 100644
--- a/Tools/MobileMiniBrowser/MobileMiniBrowserFramework/SceneDelegate.m
+++ b/Tools/MobileMiniBrowser/MobileMiniBrowserFramework/SceneDelegate.m
@@ -42,8 +42,11 @@ - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session op
UIWindow *window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
self.window = window;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle bundleForClass:[SceneDelegate class]]];
WebViewController *viewController = (WebViewController *)[storyboard instantiateInitialViewController];
+#pragma clang diagnostic pop
window.rootViewController = viewController;
WKWebsiteDataStore *dataStore = viewController.dataStore;