/

CVE-2026-58255

Severity:

HIGH RISK

(8.8)

Improper Privilege Management (CWE-269) in Cronicle

CVE-2026-58255

Deferred

Vulnerability type

Category:

Improper Privilege Management

CWE:

CWE-269, CWE-862, CWE-915

Impact:

Privilege Escalation and Unauthorized Code Execution

Severity:

HIGH RISK

(8.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Cronicle contains an authorization and privilege-management weakness that lets certain non-administrator users or scoped API keys inject process identity fields into scheduled events. On installations where the daemon runs with elevated privileges, this may allow jobs to execute as unintended users, potentially including root.

Cronicle contains an authorization and privilege-management weakness that lets certain non-administrator users or scoped API keys inject process identity fields into scheduled events. On installations where the daemon runs with elevated privileges, this may allow jobs to execute as unintended users, potentially including root.

Affected context

The issue affects Cronicle deployments where:

  • A non-administrator user or scoped API key has both create_events and run_events privileges.
  • Events are created or updated through the /api/app/create_event or /api/app/update_event APIs.
  • The event-processing logic accepts unrecognized top-level uid or gid fields.
  • The Cronicle daemon or job runner has greater operating-system privileges than the requesting user.

Risk is highest when jobs are launched by a root-owned daemon and the selected plugin does not replace the event-supplied identity.

The issue affects Cronicle deployments where:

  • A non-administrator user or scoped API key has both create_events and run_events privileges.
  • Events are created or updated through the /api/app/create_event or /api/app/update_event APIs.
  • The event-processing logic accepts unrecognized top-level uid or gid fields.
  • The Cronicle daemon or job runner has greater operating-system privileges than the requesting user.

Risk is highest when jobs are launched by a root-owned daemon and the selected plugin does not replace the event-supplied identity.

Exploit preconditions

  • Attack surface: Cronicle event creation and update APIs.
  • Required access: An authenticated non-administrator account or scoped API key with create_events and run_events privileges.
  • Trigger point: Job launch after an event containing attacker-controlled uid or gid values is stored.
  • Why exploitation is possible: Event validation partially checks supported fields but silently retains unknown fields, and job construction propagates them into child-process execution when the selected plugin does not define its own identity.
  • Attack surface: Cronicle event creation and update APIs.
  • Required access: An authenticated non-administrator account or scoped API key with create_events and run_events privileges.
  • Trigger point: Job launch after an event containing attacker-controlled uid or gid values is stored.
  • Why exploitation is possible: Event validation partially checks supported fields but silently retains unknown fields, and job construction propagates them into child-process execution when the selected plugin does not define its own identity.

Why this happens

The underlying bug combines incomplete input allow-listing with insufficient privilege enforcement. The event validator treats an optional-parameter check as though it were a complete schema, allowing unknown identity fields to be stored without rejection. Later, the job launcher copies event properties into the runtime job, allowing attacker-controlled uid and gid values to influence process identity. This maps primarily to CWE-269, Improper Privilege Management, and is also related to CWE-862, Missing Authorization, and CWE-915, Improperly Controlled Modification of Dynamically-Managed Code Elements.

The underlying bug combines incomplete input allow-listing with insufficient privilege enforcement. The event validator treats an optional-parameter check as though it were a complete schema, allowing unknown identity fields to be stored without rejection. Later, the job launcher copies event properties into the runtime job, allowing attacker-controlled uid and gid values to influence process identity. This maps primarily to CWE-269, Improper Privilege Management, and is also related to CWE-862, Missing Authorization, and CWE-915, Improperly Controlled Modification of Dynamically-Managed Code Elements.

Potential impact

  • A low-privileged user could run scheduled jobs under another operating-system identity.
  • Jobs could execute with root-level privileges where the Cronicle daemon runs as root.
  • Attackers may read, modify, or delete files accessible to the selected identity.
  • The affected host could be used for persistence, lateral movement, or further compromise.
  • Security boundaries between Cronicle users and operating-system accounts could be bypassed.
  • A low-privileged user could run scheduled jobs under another operating-system identity.
  • Jobs could execute with root-level privileges where the Cronicle daemon runs as root.
  • Attackers may read, modify, or delete files accessible to the selected identity.
  • The affected host could be used for persistence, lateral movement, or further compromise.
  • Security boundaries between Cronicle users and operating-system accounts could be bypassed.

General mitigation guidance

Mitigation should focus on enforcing privilege boundaries at both the API and process-launch layers.

Common defensive patterns include:

  • Rejecting unknown event fields with strict, complete schemas rather than silently preserving them.
  • Treating uid and gid as protected server-controlled properties.
  • Authorizing run-as-user behavior independently from event creation and execution permissions.
  • Allowing identity changes only through an explicit, administrator-controlled policy.
  • Running scheduler services and worker processes with the lowest practical operating-system privileges.
  • Applying allow-listed execution identities and validating that requested identities are permitted for the caller.
  • Ensuring every supported plugin enforces the same identity and authorization rules.

Mitigation should focus on enforcing privilege boundaries at both the API and process-launch layers.

Common defensive patterns include:

  • Rejecting unknown event fields with strict, complete schemas rather than silently preserving them.
  • Treating uid and gid as protected server-controlled properties.
  • Authorizing run-as-user behavior independently from event creation and execution permissions.
  • Allowing identity changes only through an explicit, administrator-controlled policy.
  • Running scheduler services and worker processes with the lowest practical operating-system privileges.
  • Applying allow-listed execution identities and validating that requested identities are permitted for the caller.
  • Ensuring every supported plugin enforces the same identity and authorization rules.

How teams detect issues like this

Detection approaches can include:

  • Static analysis for partial allow-lists that preserve unknown request properties.
  • Code review of event-to-job object copying and process-spawn identity handling.
  • API and schema tests that submit unexpected top-level fields and verify rejection.
  • Policy checks for non-administrative permissions that combine event creation with execution.
  • Runtime monitoring for jobs launched under identities inconsistent with the requesting account or event policy.
  • Audit logging of requested, authorized, and effective operating-system identities.

Automated code review and API security testing tools may help identify incomplete validation and authorization gaps.

Detection approaches can include:

  • Static analysis for partial allow-lists that preserve unknown request properties.
  • Code review of event-to-job object copying and process-spawn identity handling.
  • API and schema tests that submit unexpected top-level fields and verify rejection.
  • Policy checks for non-administrative permissions that combine event creation with execution.
  • Runtime monitoring for jobs launched under identities inconsistent with the requesting account or event policy.
  • Audit logging of requested, authorized, and effective operating-system identities.

Automated code review and API security testing tools may help identify incomplete validation and authorization gaps.

Sources

SourceLink
github.comgithub.com/jhuckaby/Cronicle/commit/f3d3550d0f3fe89bab52d3788f0db1dd10860df2
github.comgithub.com/jhuckaby/Cronicle/releases/tag/v0.9.121
github.comgithub.com/jhuckaby/Cronicle/security/advisories/GHSA-9xpg-9w3g-mpwj

Frequently asked

questions

A non-administrator Cronicle user or scoped API key may be able to exploit it when the key has both create_events and run_events privileges and the deployment allows the resulting job to inherit elevated process identity.

No. The relevant attack surface is the authenticated event creation or update API. The attacker still needs suitable Cronicle permissions.

Use strict schemas that reject unknown fields, keep process identity server-controlled, and enforce an explicit authorization policy for every run-as-user operation.

Separate event-management permissions from identity-selection permissions, apply least privilege to the scheduler daemon, test authorization boundaries, and monitor effective process identities against approved policy.

A non-administrator Cronicle user or scoped API key may be able to exploit it when the key has both create_events and run_events privileges and the deployment allows the resulting job to inherit elevated process identity.

No. The relevant attack surface is the authenticated event creation or update API. The attacker still needs suitable Cronicle permissions.

Use strict schemas that reject unknown fields, keep process identity server-controlled, and enforce an explicit authorization policy for every run-as-user operation.

Separate event-management permissions from identity-selection permissions, apply least privilege to the scheduler daemon, test authorization boundaries, and monitor effective process identities against approved policy.

Find out what's already
exploitable in your codebase.