Summary
Julep exposes an insecure direct object reference in its get_execution_details endpoint, allowing authenticated tenants to access other tenants' execution records.
By supplying arbitrary execution_id values, attackers can retrieve sensitive task inputs, outputs, metadata, and temporal task tokens belonging to different tenants.
Julep exposes an insecure direct object reference in its get_execution_details endpoint, allowing authenticated tenants to access other tenants' execution records.
By supplying arbitrary execution_id values, attackers can retrieve sensitive task inputs, outputs, metadata, and temporal task tokens belonging to different tenants.
Affected context
This vulnerability occurs in multi-tenant Julep deployments where the get_execution_details API is exposed to authenticated users.
The issue is present when the endpoint uses execution_id as the primary lookup key but does not enforce proper tenant scoping or ownership checks on the requested resource.
It is most relevant in environments where execution records contain sensitive task payloads, workflow metadata, and temporal tokens that may be reused to interact with background systems.
This vulnerability occurs in multi-tenant Julep deployments where the get_execution_details API is exposed to authenticated users.
The issue is present when the endpoint uses execution_id as the primary lookup key but does not enforce proper tenant scoping or ownership checks on the requested resource.
It is most relevant in environments where execution records contain sensitive task payloads, workflow metadata, and temporal tokens that may be reused to interact with background systems.
Exploit preconditions
- Attack surface: Julep HTTP API, specifically the get_execution_details endpoint
- Required access: Authenticated access as any tenant user capable of calling the endpoint
- Trigger point: Supplying an execution_id belonging to another tenant in the API request
- Why exploitation is possible: The endpoint authorizes based solely on user authentication and assumes the provided execution_id is valid for that tenant, without enforcing ownership or tenant-bound filters.
- Attack surface: Julep HTTP API, specifically the get_execution_details endpoint
- Required access: Authenticated access as any tenant user capable of calling the endpoint
- Trigger point: Supplying an execution_id belonging to another tenant in the API request
- Why exploitation is possible: The endpoint authorizes based solely on user authentication and assumes the provided execution_id is valid for that tenant, without enforcing ownership or tenant-bound filters.
Why this happens
The underlying bug is a classic insecure direct object reference (IDOR), mapped to CWE-639.
The application exposes a direct identifier (execution_id) for internal objects and relies on it for data retrieval, but fails to bind access control decisions to the resource's tenant or owner.
As a result, any authenticated user who can guess, enumerate, or intercept execution_id values can access records that should be confined to other tenants.
This reflects an authorization logic flaw where authentication is performed, but fine-grained, object-level authorization is missing or incorrectly implemented.
The underlying bug is a classic insecure direct object reference (IDOR), mapped to CWE-639.
The application exposes a direct identifier (execution_id) for internal objects and relies on it for data retrieval, but fails to bind access control decisions to the resource's tenant or owner.
As a result, any authenticated user who can guess, enumerate, or intercept execution_id values can access records that should be confined to other tenants.
This reflects an authorization logic flaw where authentication is performed, but fine-grained, object-level authorization is missing or incorrectly implemented.
Potential impact
- Unauthorized access to task inputs and outputs from other tenants
- Exposure of sensitive workflow metadata and business logic details
- Leakage of temporal task tokens that could be abused to interact with background systems
- Cross-tenant privacy violations and potential regulatory non-compliance
- Reconnaissance for further attacks based on observed execution behavior
- Unauthorized access to task inputs and outputs from other tenants
- Exposure of sensitive workflow metadata and business logic details
- Leakage of temporal task tokens that could be abused to interact with background systems
- Cross-tenant privacy violations and potential regulatory non-compliance
- Reconnaissance for further attacks based on observed execution behavior
General mitigation guidance
Effective mitigation focuses on enforcing robust, resource-level authorization rather than relying solely on user authentication.
Common defensive patterns include:
- Binding every execution record to a tenant or owner identifier and verifying this relationship on every read operation.
- Implementing centralized authorization checks that validate whether the caller is permitted to access the specific execution_id, not just any execution record.
- Avoiding the use of globally visible or easily enumerable identifiers; where possible, use opaque or random identifiers with sufficient entropy.
- Designing multi-tenant data access layers that always scope queries by tenant context, making cross-tenant access impossible by default.
- Applying least privilege to API roles, ensuring that only appropriately scoped users can access detailed execution data.
Effective mitigation focuses on enforcing robust, resource-level authorization rather than relying solely on user authentication.
Common defensive patterns include:
- Binding every execution record to a tenant or owner identifier and verifying this relationship on every read operation.
- Implementing centralized authorization checks that validate whether the caller is permitted to access the specific execution_id, not just any execution record.
- Avoiding the use of globally visible or easily enumerable identifiers; where possible, use opaque or random identifiers with sufficient entropy.
- Designing multi-tenant data access layers that always scope queries by tenant context, making cross-tenant access impossible by default.
- Applying least privilege to API roles, ensuring that only appropriately scoped users can access detailed execution data.
How teams detect issues like this
Detection typically relies on a combination of application security review, automated checks, and operational monitoring.
Useful approaches include:
- Static analysis or authorization linting rules that flag data access patterns lacking tenant or ownership filters.
- Code reviews that focus on multi-tenant boundaries, verifying that every query involving execution_id also enforces tenant scoping.
- Centralized authorization middleware or policy engines that log and audit access decisions for sensitive resources.
- Runtime monitoring and anomaly detection to identify unusual access patterns, such as a single tenant accessing large numbers of execution records across different ID ranges.
- Periodic security testing (including API-focused penetration tests) to probe endpoints for IDOR behavior with cross-tenant identifiers.
Detection typically relies on a combination of application security review, automated checks, and operational monitoring.
Useful approaches include:
- Static analysis or authorization linting rules that flag data access patterns lacking tenant or ownership filters.
- Code reviews that focus on multi-tenant boundaries, verifying that every query involving execution_id also enforces tenant scoping.
- Centralized authorization middleware or policy engines that log and audit access decisions for sensitive resources.
- Runtime monitoring and anomaly detection to identify unusual access patterns, such as a single tenant accessing large numbers of execution records across different ID ranges.
- Periodic security testing (including API-focused penetration tests) to probe endpoints for IDOR behavior with cross-tenant identifiers.
Sources
| Source | Link |
|---|---|
| github. | github.com/ |
| vulncheck. | vulncheck.com/ |

