Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Samsung One UI Compiler/Optimizer Regression: Permission Checks Eliminated Across Proprietary System Services

Evidence of a systemic build-pipeline security failure, Samsung's one-sentence ticket closure, and later class-wide KnoxGuard hardening

Public research report — July 2026

This independent technical publication is based on released software, preserved research records, and vendor correspondence. Its central question is straightforward: why did Samsung close a report describing repeated elimination of privileged caller checks, then restore those checks across the exact reported KnoxGuard class without explaining the change?

Samsung said it could identify no specific vulnerability. The same KnoxGuard class later regained 33 authorization checks, while Samsung's own record contained two near-identically described KnoxGuardManager CVEs—one published before the report and one after its closure.

Required audit scope Samsung proprietary components processed through the same suspected pipeline
Observed device categories Phones and watches
Recorded runtime case KnoxGuard
Additional candidate domains Credential management, enterprise policy, VaultKeeper, RKP, power management
AOSP status Not implicated by the examined comparison samples
Root-cause assessment High confidence in a shared Samsung compilation/optimization defect; exact compiler pass not independently identified
Vendor outcome Compiler-focused report I-121208 closed without a method-specific explanation; permission checks later restored without notice in the exact reported KnoxGuard component
Related advisories Two Samsung KnoxGuardManager authorization CVEs were published in 2026 with nearly identical descriptions; neither identifies the affected methods

Executive Summary

This report documents a systemic permission-check removal pattern in Samsung One UI system software. Across unrelated Samsung proprietary services, expected caller-enforcement sites were released with ineffective Object.getClass() residues:

securityHelper.getClass();

An unused getClass() result does not enforce caller permissions. In the strongest runtime case, contemporaneous records show that a caller recorded as lacking the privileged KnoxGuard permission invoked isKGAllowDO() without the expected SecurityException and received a normal result.

This was not an isolated suspicious method. The same residue appeared in services responsible for credentials, enterprise administration, KnoxGuard, VaultKeeper, RKP, and other Samsung framework functions. I observed the broader pattern in One UI software taken from both phones and watches.

The distribution, consistency, and later firmware changes strongly indicate a Samsung-specific compiler, optimizer, or closely related build-transformation regression. The cross-service distribution and cross-build restoration make an isolated source-level explanation substantially less convincing; Samsung's internal source and build logs are required to identify the exact failing stage.

Samsung closed report I-121208 stating that it could not identify a specific vulnerability. A later firmware was then recorded as restoring Utils.checkCallerAndKgPermission(mContext) at the post-closure validated isKGAllowDO() entry point and throughout the reported KnoxGuardSeService class. The researcher received no technical explanation, remediation notice, or acknowledgement of that change.

The later restoration is security-relevant and directly aligned with the reported weakness. Released binaries do not establish Samsung's internal decision-making or prove that this report caused the patch. They establish something Samsung's closing response did not address: the permission-check removal pattern was reported, the ticket was closed, and the same enforcement mechanism identified in the reported component later reappeared at class-wide scale.

Samsung's 2026 bulletin makes that discrepancy more serious, not less. It contains two KnoxGuardManager improper-authorization CVEs, published in February and July with nearly identical public descriptions and remediation language. Neither advisory identifies a method, permission, Binder transaction, or exact code-level patch boundary. These entries confirm recurring authorization failures in the same component family, but their exceptionally coarse public descriptions leave the relationship to isKGAllowDO() unresolved.

Until Samsung identifies the affected build stage and publishes a complete audit boundary, the appropriate defensive assumption is that all Samsung proprietary One UI components processed by the same pipeline require review, rather than limiting investigation to one phone, one service, or one API.

Evidence sequence and official context

Stage Recorded evidence Security meaning
Reported I-121208 identified KnoxGuardSeService, its missing caller-enforcement pattern, and unlockScreen() as a concrete affected entry point Samsung received the component name, expected helper, and a security-relevant example
Closed Samsung: “we couldn't identify specific vulnerabilities” No named method or recurring binary transformation was technically explained
Post-closure validation isKGAllowDO() was recorded as completing for a caller lacking the expected privileged permission A second entry path in the reported class lacked the expected rejection
Restored DZF2 recorded Utils.checkCallerAndKgPermission(mContext) in the same method Explicit privileged caller enforcement reappeared
Class-wide change The same helper was recorded as reappearing throughout the class while the suspicious residues disappeared The reported component received comprehensive security-relevant hardening

Two Official KnoxGuard CVEs, One Unresolved Relationship

Official record Samsung's public description Fixed in Public credit Relationship to this report
CVE-2026-20978 / SVE-2025-2226 Improper authorization in KnoxGuardManager allowed a local attacker to bypass application persistence configuration SMR Feb-2026 Release 1 Chen Jiang of vivo kM1rr0rs secLab Predates I-121208; no affected method is disclosed
CVE-2026-21044 / SVE-2026-1029 A second KnoxGuardManager issue described in effectively the same terms SMR Jul-2026 Release 1 Chen Jiang of vivo kM1rr0rs secLab Overlaps the recorded remediation window; no affected method is disclosed

Samsung's 2026 security bulletin gives these separately numbered vulnerabilities nearly identical descriptions, the same patch summary, the same CVSS 4.0 vector, and the same public credit. Reusing the same generic wording for two different CVEs makes the advisory text inadequate for identifying either vulnerability at method level.

CVE-2026-21044 materially overlaps this research in component, weakness class, attacker position, patch type, and release window. Its public impact is a persistence-configuration bypass with high integrity and low availability consequences. The retained isKGAllowDO() record supports a missing caller rejection and a normal boolean response; by itself, it does not establish modification of persistence state. The relationship is strong enough to demand an answer, but not specific enough to claim CVE identity.

Three explanations remain consistent with the public record:

  1. isKGAllowDO() was included in CVE-2026-21044 and was independently discovered;
  2. CVE-2026-21044 concerned another KnoxGuard entry point, while a class-wide enforcement change in the same release window also hardened isKGAllowDO(); or
  3. the February and July records represent repeated manifestations of a shared authorization defect.

Samsung possesses the source changes and SVE-to-method mapping required to distinguish these explanations. Its public advisories do not provide them. This report does not claim ownership of either CVE; it documents the unresolved overlap and asks Samsung to supply the method-level mapping absent from the public record.

Why the Compiler/Optimizer Explanation Is the Leading Conclusion

The security significance comes from the repeated context and the cross-build change.

1. The same residue crossed unrelated security domains

The pattern appeared beside security-helper objects in credential, enterprise, KnoxGuard, VaultKeeper, and RKP code. A common build mechanism explains this distribution better than a large number of independent developers making the same meaningless substitution.

2. The residue appeared where caller enforcement was expected

These were not merely arbitrary getClass() calls. The receiver was repeatedly a security or injector helper at Binder-facing methods where privileged caller permission enforcement was part of the intended design.

3. The later build restored the real helper at the same location

The recorded DZF2 implementation of isKGAllowDO() contained:

Utils.checkCallerAndKgPermission(mContext);

The earlier build was recorded with an unused Object.getClass() residue at that permission-enforcement point. This before/after relationship makes a harmless decompiler artifact a substantially weaker explanation.

4. The change was comprehensive in KnoxGuard but mixed elsewhere

Retained analysis notes record the KnoxGuard helper restored throughout the class and no suspicious class-level residues remaining. Credential management reportedly contained both restored checks and remaining residues. That shape is consistent with targeted hardening or staged remediation without a demonstrated platform-wide audit.

The exact implementation defect remains inaccessible without Samsung's build pipeline. That uncertainty concerns which internal build stage failed, not whether the released permission-enforcement behavior warrants a systemic investigation.

Scope: One UI Platform, Not One Device

The original report was filed from a Galaxy Z Fold 6 environment, but the research was not limited to that model. Comparable Samsung-specific residues were also observed while inspecting software from watches and other phone builds.

The scope should therefore be expressed as follows:

Potentially affected: Samsung proprietary One UI components compiled or transformed through the affected Samsung build pipeline, across device categories.

This does not mean every binary carrying One UI branding was individually tested. It means this is a product-family security regression requiring audit of every One UI binary produced through the affected Samsung pipeline. A compiler- or build-level defect cannot responsibly be bounded to the first device on which it was discovered. Samsung is the only party able to enumerate which products, branches, and build stages shared the affected transformation.

AOSP is not implicated

The recurring Samsung helper pattern was not observed in the examined AOSP comparisons, which retained their expected enforcement logic. No evidence in this research identifies an AOSP-wide compiler or Binder defect. The issue is localized by the available evidence to Samsung proprietary code or Samsung's processing of that code.

Technical Model

A security-relevant occurrence has the following structure:

external caller
    → Samsung Binder entry point
    → expected privileged access-control decision
    → ineffective helper residue instead of enforcement
    → privileged service logic
    → optional clearCallingIdentity() or lower trusted service

Not every getClass() is vulnerable. A candidate becomes an access-control flaw when:

  1. the method crosses a trust boundary;
  2. a privileged caller decision is expected;
  3. the released path does not enforce it;
  4. the caller lacks equivalent authority; and
  5. protected data or behavior is reached.

The recurring pattern matters because fixing only one method does not demonstrate that other instances produced by the same build mechanism were found.

AI-Assisted Discoverability Raises the Urgency

This failure pattern is unusually automation-friendly. A model-assisted audit does not need Samsung's source code to search released framework binaries for Binder-facing methods where a security-helper residue remains but no equivalent caller check is visible. General-purpose language models can help generate search rules, cluster repeated residues, compare builds, and prioritize high-value entry points for human review.

AI assistance does not prove exploitability and does not replace method-level validation. It does, however, collapse the time needed to turn a few suspicious examples into a cross-service audit strategy. What was once buried in a large proprietary framework can now be triaged at scale with widely available tools.

Obscurity is not a control. If an independent researcher can use general-purpose models to turn decompiled examples into a product-wide search pattern, Samsung should assume that hostile researchers can do the same—and that any remaining instances will be found faster than a manual, component-by-component patching strategy can contain them.

KnoxGuard Runtime Case

Intended boundary

Service: knoxguard_service
Interface: com.samsung.android.knoxguard.IKnoxGuardManager
Method: isKGAllowDO()
Permission: com.samsung.android.knoxguard.STATUS
Protection level recorded during analysis: signature|privileged
Expected helper: Utils.checkCallerAndKgPermission(mContext)

Recorded affected result

Contemporaneous research records contain:

[+] VULN CONFIRMED: isKGAllowDO = true

The call was recorded as completing without the expected SecurityException. The recovered historical source contains a direct Binder probe for isKGAllowDO().

This is a retained historical result, not a self-contained modern reproduction bundle; the missing artifacts are summarized under Evidence Limitations.

The historical transaction mapping is important:

  • transaction 41: isKGAllowDO()
  • transaction 42: isKGAllowADB()

An earlier Samsung comment reporting transaction 42 returning 1 concerned isKGAllowADB() under this mapping and is not used as the isKGAllowDO() proof.

Recorded June restoration

Retained DZF2 notes report:

KnoxGuardSeService Earlier build DZF2, SPL 2026-06-05
Utils.checkCallerAndKgPermission() 0 33
Suspicious Object.getClass() residues Multiple 0

The post-closure validated method was recorded as changing from the ineffective residue to the real privileged-permission helper. The original DZE1/DZF2 extraction workspace is no longer available, so these counts are presented as retained analysis records rather than newly regenerated measurements.

Broader Affected Surface

Area Recorded observation Evidence strength
KnoxGuard Missing expected rejection at isKGAllowDO(); later helper restoration Strongest runtime record plus retained cross-build notes
CredentialManagerService Numerous helper residues; later mixed restored/unrestored state Static pattern and supporting shell-path result
EnterpriseDeviceManager Residues at administration-related entry points Static candidates; destructive effects not confirmed
VaultKeeper / RKP Similar Samsung helper residues Static candidates
PowerManager Screen-off behavior recorded; later explicit DEVICE_POWER enforcement noted Caller prerequisites not sufficiently preserved
Attestation key path Residue followed by clearCallingIdentity() and deleteKey() Static candidate; deliberately not executed

Static identity-laundering candidate

The original submission preserved this released-bytecode excerpt:

5b4646: invoke-virtual {v10}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
5b464c: invoke-static {}, Landroid/os/Binder;->clearCallingIdentity()J
5b46de: invoke-static {v0}, LAttestationUtils;->deleteKey(Ljava/lang/String;)V

The destructive call was not executed and is not presented as confirmed key deletion. It illustrates why a confirmed missing check on such a path would be substantially more serious than the return value of the initial KnoxGuard validation.

Trust-Chain and Exploit-Composition Impact

Samsung framework services are privileged intermediaries between applications and enterprise, credential, hardware-backed, or trusted-execution operations. Lower layers often trust requests originating from system_server because the framework service is expected to validate the original caller.

If the external permission check disappears and the service then invokes clearCallingIdentity() or delegates using its own identity, the lower layer may receive a formally trusted request that originated from a caller lacking the required permission. SELinux, the kernel, or TrustZone may operate exactly as designed and still be unable to reconstruct the missing framework access-control decision.

This weakens the Android-to-Samsung trust chain even when the lower layers behave exactly as designed. A missing-permission-check primitive also need not be a complete exploit by itself. It can act as an attack-chain amplifier by removing the privileged entry condition normally required to reach credential, enterprise-management, device-control, and hardware-backed service logic:

  • access to protected device-security state;
  • invocation of a privileged confused-deputy service;
  • identity laundering through clearCallingIdentity();
  • manipulation of enterprise or credential state;
  • interaction with a separate entry-point, sandbox, or logic vulnerability.

The recurrence across high-value services increases the chance that one or more instances can be composed with other serious vulnerabilities. This is not a claim that EL2, EL3, or TrustZone itself was directly compromised, or that a specific end-to-end exploit chain was reproduced.

Samsung Response: A Closure Sentence Is Not a Technical Rebuttal

All portal times are UTC.

Time Event
2026-05-22 15:55 Report I-121208 submitted
2026-05-22 23:02 Additional affected services and methods submitted
2026-05-26 06:12 Samsung stated that an analyst had been assigned
2026-06-01 21:18 Bytecode excerpts, exploratory results, lock-state photograph, and code.zip submitted
2026-06-01 22:29 Researcher corrected the unproven TX6/TX11 lockout attribution
2026-06-02 05:52 Samsung closed the report

Samsung's closing response was:

After triaging this ticket, we couldn't identify specific vulnerabilities based on your description and attachments.

Samsung had the affected class name, the expected enforcement helper, multiple released-bytecode locations, and a concrete hypothesis explaining the repeated transformation. Its closing response addressed none of them. It did not explain a single residue, describe the intended security boundary, classify the submission as a duplicate, or say that KnoxGuard authorization work was already planned. A categorical closing sentence is not a method-level security analysis.

The original submission was imperfect and included a lockout attribution that the researcher promptly corrected. That does not explain why Samsung's response contained no technical treatment of the named KnoxGuard class—or why the next retained comparison recorded 33 restored caller checks in that class.

The recorded class-wide change was not cosmetic. It was security-relevant enforcement hardening in the component Samsung had been asked to investigate. The released evidence does not prove that I-121208 caused the patch; it exposes an unresolved discrepancy between Samsung's closing position and the enforcement changes that followed.

CERT/CC VINCE Record

The issue was submitted to CERT/CC on 2026-06-02. CERT/CC requested clearer attacker impact and a reproducible PoC; the post-closure KnoxGuard result and CredentialManagerService observation were supplied. CERT/CC stated that it could not assign a CVE without a demonstrated bypass of expected KnoxGuard functionality. I withdrew the report on 2026-06-19 to pursue independent publication. CERT/CC did not validate or disprove the compiler-root-cause assessment.

Claim Boundaries

The record supports a recurring Samsung-specific permission-enforcement residue, a retained record of a KnoxGuard caller-rejection failure, cross-device-category observations, later class-wide restoration of the KnoxGuard helper, and a high-confidence shared build-transformation explanation requiring a product-family audit.

It does not establish that every residue or every One UI binary was vulnerable; destructive outcomes, root access, or direct TrustZone compromise; identity with either published KnoxGuard CVE; ownership of those CVEs; Samsung's private intent; or a completed end-to-end exploit chain.

Evidence Limitations

  • The original DZE1/DZF2 extraction workspace, ordinary-application package, complete console output, and permission/SELinux record were lost during a computer migration.
  • Some cross-build counts survive only in contemporaneous AI-assisted analysis logs, and the full phone/watch build inventory was not preserved.
  • KnoxGuard has the strongest retained runtime record; most additional service instances remain static candidates rather than completed impact demonstrations.

These losses limit independent reproduction of the historical builds. They do not erase the preserved Samsung and VINCE records, recovered probe source, bytecode excerpts, or the recorded cross-build enforcement change.

Recommendations

Samsung should:

  1. treat all proprietary One UI components built through the affected pipeline as in-scope until audited;
  2. identify and remove the build stage responsible for the transformation, then publish the affected product and build boundary;
  3. audit security-helper residues against source-level enforcement calls and released DEX output;
  4. test privileged Binder interfaces from ordinary application identities, including paths that clear or replace the original caller identity;
  5. add release-gating tests for every production optimization profile; and
  6. publish the method-level scope of CVE-2026-20978 and CVE-2026-21044, state whether isKGAllowDO() was included, and explain whether the shared build-stage defect has been removed.

Repository Evidence

  • evidence/manifest.md records SHA-256 hashes of recovered historical artifacts.
  • legacy-code/KgAllowDoHistoricalProbe.java preserves the read-only isKGAllowDO() Binder call from the historical KnoxGuard probe in a reduced, reviewable form.
  • legacy-code/README.md documents the provenance and limits of the reduced source.
  • State-changing, fuzzing, compiled, signed, and third-party artifacts are excluded. The recovered archive is incomplete and firmware-specific, so it is not presented as a self-contained modern exploit package.

Conclusion

The available evidence cannot assign a private Samsung patch to a particular external report. The retained record supports that the authorization problem was real and that KnoxGuard received class-wide enforcement changes, while Samsung's public records do not explain the relationship. A closure sentence is not a technical rebuttal, generic CVE wording is not method-level disclosure, and unexplained component-wide enforcement hardening is not evidence that the suspected systemic risk was removed.

Samsung should answer three concrete questions: which methods belong to CVE-2026-20978 and CVE-2026-21044, whether isKGAllowDO() was included in either patch, and whether the suspected shared build-stage mechanism behind the wider One UI pattern has been identified and eliminated.

About

Technical report on a systemic Samsung One UI compiler/optimizer regression that eliminated permission checks across proprietary system services.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages