SHA256
docs: record verified native preview and unfinished PWA parity
Replace current wrapper claims with native architecture/security/build evidence, preserve historical documents, track all thirty pages and explicit release gates, correct brand attribution and provide the twelve-section delivery report without claiming completion. Native signing remains paused and Apple application/device validation outstanding.
This commit is contained in:
1 parent
1433e1670a
commit
40a7962307
20 files changed
+813
-277
No files matched your search
+31
-42
@@ -1,47 +1,36 @@
|
||||
# Security review record
|
||||
# Native security review record
|
||||
|
||||
This is an engineering review, not an independent penetration test or certification.
|
||||
This is an engineering checklist, not an independent audit or release approval.
|
||||
The wrapper review is retained separately as
|
||||
[historical evidence](legacy-wrapper-security-review.md).
|
||||
|
||||
Addressed during implementation:
|
||||
## Implemented controls to exercise
|
||||
|
||||
- Canonical, HTTPS-only origin/port comparison; credential, fragment, query,
|
||||
subpath, scheme, lookalike-host and TLS-downgrade regression cases.
|
||||
- A main-frame POST can bypass Android's usual navigation callback. The request
|
||||
interception gate now rejects **all** cross-origin requests, not only subresources.
|
||||
The emulator regression was observed failing when the main-frame guard was
|
||||
deliberately removed, then rerun with the fix restored.
|
||||
- TLS failures cancel by default. Native download redirects are refused before
|
||||
cookies can be replayed to another origin. Bootstrap requests use neither
|
||||
cookies nor automatic redirects and have bounded metadata reads/timeouts.
|
||||
- Files use explicit system selection/content URIs; no filesystem or storage
|
||||
permission is granted to web content. Blob exports have no native JS bridge.
|
||||
- Complete Android browsing-data deletion uses WebStorageCompat, with OS app
|
||||
reset for engines without that capability. WebStorage.deleteAllData alone was
|
||||
insufficient for service-worker CacheStorage/IndexedDB and is not relied upon.
|
||||
- iOS server erase replaces the WKWebView, not only its URL, eliminating old
|
||||
history/back-forward contexts as well as persistent website data.
|
||||
- iOS metadata uses typed decoding, rejecting numeric values masquerading as booleans.
|
||||
- Native picker results are bound to the browsing generation/request. Android
|
||||
rejects stale upload/download selections, revokes camera URI grants, and clears
|
||||
capture cache on erasure. iOS ignores export-cancellation callbacks from an old
|
||||
download. Apple-specific callback regressions have not run without Xcode.
|
||||
- KGP was upgraded after OSV identified CVE-2026-53914 in the original build tool.
|
||||
The final OSV scan found no listed advisories across 213 locked/direct Maven
|
||||
coordinates and build plugins. Rescan after resolution/lock updates.
|
||||
- The inspected release APK is not debuggable, rejects cleartext, disables backup
|
||||
and trusts system CAs only. AndroidX's exported profile installer receiver is
|
||||
protected by the system DUMP permission; app providers are not exported.
|
||||
- Origin-bound HTTPS API transports, no redirects, no production test-CA bypass.
|
||||
- Server-owned session and CSRF semantics, no persistent password storage.
|
||||
- Origin-bound AES-GCM/AndroidKeyStore cookies; iOS Keychain protected
|
||||
WhenUnlockedThisDeviceOnly with a private ephemeral URLSession jar.
|
||||
- Bounded JSON reads, deadlines and no offline/ambiguous-write retry queue.
|
||||
- Native permission-aware controls, destructive-action confirmation and server
|
||||
validation; partial update payloads preserve fields the native editor cannot edit.
|
||||
- No WebView/WKWebView in either shipping source tree. Legacy tests do not prove
|
||||
this client's behavior; explicit native tests and source invariants are required.
|
||||
|
||||
Release gates still requiring evidence:
|
||||
## Remaining gates
|
||||
|
||||
- Actual Xcode typecheck, simulator, archive, physical-device and accessibility review.
|
||||
- End-to-end IdP flows, especially providers that prohibit embedded agents; no
|
||||
browser-to-native session transfer is supported by the current upstream protocol.
|
||||
- iOS unknown-length download disk-pressure behavior; a post-download size check
|
||||
is not a streaming quota. Verify file picker/camera cancellation on real devices.
|
||||
- Android file-picker/camera/rotation while a picker is outstanding; cancellation
|
||||
on process death intentionally loses the selection, never silently retries it.
|
||||
- Offline sign-out/account switching, stale-worker updates and server erasure on
|
||||
current WebView/WKWebView versions. Upstream tests are not native device proof.
|
||||
- Reverify final signed release manifests, signing, store ownership, private vulnerability contact
|
||||
and applicable privacy disclosures. No claim that all vulnerabilities are absent.
|
||||
1. Run Apple SDK typechecking, simulator/XCTest/UI and device checks; portable
|
||||
Foundation transport compilation is not SwiftUI/Security.framework validation.
|
||||
2. Review persistent-cookie expiry/removal, TLS failures, redirects, CSRF refresh,
|
||||
expired sessions, background/recreation and stale-response isolation on devices.
|
||||
3. Review migrations from the prototype: browser sessions are never imported and
|
||||
OS website data may remain until app-data reset/reinstall.
|
||||
4. Complete missing auth/provider protocols and permission/role scenarios before
|
||||
claiming native authentication parity, particularly SSO-only deployments.
|
||||
5. Implement/review files, notifications, offline storage and additional modules
|
||||
as actual native capabilities; do not restore the wrapper as a shortcut.
|
||||
6. Independently review the new UI/state/transport code, actual signed artifacts,
|
||||
accessibility, supported OS matrix and runner trust before distribution.
|
||||
|
||||
The owner-authorized signing configuration exists privately but its workflow
|
||||
changes are intentionally parked. A signed incomplete client is not a completed
|
||||
native product. Refer to [native parity](native-parity.md) before release work.
|
||||
Reference in new issue
Block a user