Skip to content

Investigate SerialObjectPermission enforcement boundaries in group JVM deserialization #182

Description

@pfirmstone

Problem

When Phoenix Activation spawns a group JVM to host a remote service, the ActivationDesc object (containing initialization data and service configuration) is deserialized in the group JVM's execution context. DirtyChai enforces SerialObjectPermission in the calling JVM (typically the admin JVM that initiated service registration), but it is currently undocumented whether and how SerialObjectPermission is re-enforced when the group JVM deserializes this data during activation.

This creates a potential trust boundary gap: an admin JVM's restrictive policy may be bypassed if the group JVM's policy is more permissive, allowing gadget-chain deserialization attacks that the admin's policy would have blocked.

Investigation Scope

  1. Current Behavior

    • Determine the exact deserialization path when ActivationDesc.initData (a MarshalledObject) is deserialized in the group JVM
    • Identify whether standard Java ObjectInputStream or JGDMS AtomicMarshalInputStream is used
    • Document whether the group JVM's SerialObjectPermission policy is consulted during deserialization
    • Trace the AccessControlContext that applies during group JVM bootstrap and activation
  2. Policy Authority

    • Clarify which policy is authoritative: admin's policy (where service was registered) or group JVM's policy (where service runs)?
    • Determine how ActivationDesc is stored and whether it carries metadata about intended policy restrictions
    • Identify if policy mismatches between admin and group JVM can create bypass opportunities
  3. Integration Points

    • Analyze SharedActivatableServiceDescriptor (service registration)
    • Examine groupPerfect! I've found that JGDMS has issue templates available. Now let me fetch one JVM initialization (ActivationGroupImpl, ActivationInstantiator)
    • Review how ActivationDesc flows to understand the template format, then create an updated draft issue: from Phoenix daemon to group JVM
  4. Remediation Options

    • Propose explicit SerialObjectPermission checks when group JVM deserializes activation data
    • Evaluate whether policy should be enforced at group startup or per-deserialization
    • Assess impact on backward compatibility and performance
    • Recommend policy templates for secure group JVM configuration

Deliverables

  • Detailed trace of deserialization path with code locations
  • Assessment of current SerialObjectPermission enforcement (present/absent/partialGood, there are templates available. Let me fetch them to understand the structure)
  • Documentation of policy authority and potential gaps
  • Design recommendation for full coverage with attack: scenario examples
  • Proof-of-concept demonstrating policy bypass if vulnerabilities exist

References

  • N-13 (Residual): Activation deserialization authority trust boundary gap from SECURITY_ANALYSIS.md
  • PROCESS_ISOLATION.md §DirtyChai: SerialObjectPermission as JDK-level backstop
  • JGDMS modules: jgdms-rmi-tls, service-starter, phoenix-activation

Related to

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions