Commit Graph
14 Commits
Author SHA1 Message Date
Enginex0andGKI Builder 7c4df3e237 Cap interceptable binder payload size at 256KB
Prevents thread starvation from flood attacks targeting the
binder interceptor with oversized payloads.
2026-02-06 21:10:59 +01:00
Enginex0andGKI Builder 1ac08411be Revert "Add X.509 certificate extensions for RFC 5280 compliance"
This reverts commit a11a5e41a2.
2026-02-06 21:10:59 +01:00
Enginex0andGKI Builder a11a5e41a2 Add X.509 certificate extensions for RFC 5280 compliance
- BasicConstraints: CA=false (critical)
- SubjectKeyIdentifier via SHA-1 hash
- AuthorityKeyIdentifier linked to issuer cert
2026-02-06 00:47:32 +01:00
Enginex0andGKI Builder c367aa5efc Add file-level locking to prevent race conditions in key persistence
Per-key ReentrantLock prevents concurrent writes to same key file
2026-02-06 00:31:53 +01:00
Enginex0andGKI Builder 88781ff31d Delegate key re-persistence to GeneratedKeyPersistence layer
Remove duplicate rePersistKeyIfNeeded, use centralized implementation
2026-02-06 00:24:50 +01:00
Enginex0andGKI Builder 409fb5fcc3 Reject oversized aliases to prevent binder buffer exhaustion
MAX_ALIAS_LENGTH (256KB) with 4x safety margin for transaction overhead
2026-02-06 00:24:50 +01:00
Enginex0andGKI Builder 0cf8f70544 fix(pki): strip HTML comments from PEM blocks before parsing
Some upstream keybox sources inject HTML comments inside PEM
certificate blocks. BouncyCastle's PEMParser chokes on these
non-base64 lines, silently failing to load the keybox.

Filter lines starting with <!-- in trimLines() before the content
reaches the PEM parser.
2026-02-06 00:16:07 +01:00
Enginex0andGKI Builder 7ecea09ec6 fix(app): add global uncaught exception handler for clean restart
Individual thread crashes silently kill the thread without bringing
down the process. The half-dead process stays alive but broken, and
the service.sh restart loop never fires.

Install a default uncaught exception handler that logs the error and
calls exitProcess(0), triggering the restart loop for full recovery.
2026-02-06 00:16:07 +01:00
Enginex0andGKI Builder 887c5fc666 fix(config): prevent FileObserver NPE on config file deletion
When a config file is deleted, the event handler sets file=null but
then force-unwraps it with file!! in the when block, crashing the
FileObserver thread. All subsequent config change notifications are
silently lost.

Replace force-unwrap with safe call, log a warning on deletion.
2026-02-06 00:16:07 +01:00
Enginex0andGKI Builder ce0ca18d98 Preserve generated keys across keybox rotation
Only invalidate patched cert chains when keybox changes.
Generated key material is independent and survives rotation.
2026-02-06 00:07:46 +01:00
Enginex0andGKI Builder fa28e9fc71 Integrate key persistence with interceptors
Save keys on generation, restore on daemon startup, delete on cleanup.
Re-persist when cert chain updates via updateSubcomponents.
2026-02-06 00:07:46 +01:00
Enginex0andGKI Builder c3822197b1 Add generated key persistence layer
Persist GENERATE-mode keys to disk so they survive daemon restarts.
Binary format with version header, atomic write via tmp+rename.
2026-02-06 00:07:46 +01:00
Enginex0andGKI Builder f276806096 fix(native): block attestation leak when interceptor service is dead
When the Java interceptor process dies, callback->transact() returns
DEAD_OBJECT but the code fell through to the real keystore, exposing
genuine TEE state to requesting apps.

Add pingBinder() liveness check on pre-transact failure. If the
interceptor is confirmed dead, return DEAD_OBJECT to the caller
instead of forwarding to real hardware. Apps see a transient service
error rather than the actual device attestation state.
2026-02-05 23:57:40 +01:00
Enginex0 9aa4a33c5e Add fork-based supervisor daemon for instant restart 2026-02-05 23:57:24 +01:00