Skip to main content

Ajenti CVE-2026-79920

| EUVDEUVD-2026-84010 CRITICAL
Missing Authorization (CWE-862)
2026-09-21 GitHub_M
9.9
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with low-privileged account
  2. Delivery
    POST to /api/core/tasks/start with InstallPlugin task
  3. Exploit
    Bypass missing plugin-management authorization
  4. Execution
    Root task worker invokes pip on attacker-controlled package
  5. Persist
    Malicious package setup runs as root
  6. Impact
    Full host compromise

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a valid authenticated account on the Ajenti panel of ANY privilege level - the vulnerability is precisely that no plugin-management permission is enforced on the /api/core/tasks/start task API (InstallPlugin, UnInstallPlugin, UpgradeAll). Exploitation works against default configurations (the missing authorization is the default state prior to 2.2.16) and needs no user interaction. The only limiting factors are: the attacker must hold or obtain a low-privileged account, and the target must run a version below 2.2.16; the task worker must be running as root (its normal operating mode) for the pip invocation to yield root code execution.

Impact

This is a genuine top-priority vulnerability, not a high-CVSS-but-low-risk case. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H = 9.9) is well-justified: a network-reachable, low-complexity, no-user-interaction flaw that lets a low-privileged authenticated user reach root code execution with a scope change (breaking out of the app context to the host OS). The source-code evidence corroborates the root cause - the fix commit (3a8cbee3) introduces a PermissionProvider and @authorize decorators on tasks that previously had none, confirming CWE-862 missing authorization on InstallPlugin/UnInstallPlugin/UpgradeAll. The single mitigating factor is PR:L: an attacker needs some valid (even minimal) account on the panel, so this is not fully unauthenticated. No EPSS score, no CISA KEV listing, and no public exploit are present in the provided data, so predicted/active exploitation is unquantified - the severity here rests on impact and ease of exploitation rather than confirmed in-the-wild activity. Given a server admin panel is inherently a high-value target and the pip-as-root path yields trivial, reliable root RCE, defenders should treat this as urgent regardless of the missing EPSS/KEV signals.

Exploit ScenarioDerived

An attacker with any low-privileged Ajenti account (or a compromised limited account) sends a crafted POST to /api/core/tasks/start enqueuing an InstallPlugin task with an attacker-chosen package name/version. The task worker, running as root, invokes pip with that unvalidated spec, installing a malicious or attacker-controlled package whose setup code executes as root, yielding full host compromise. No public exploit is identified in the provided data, but the attack is straightforward given the documented API and root-level pip invocation.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 21, 2026

Authenticated users of the Ajenti server admin panel - at any privilege level - can achieve root-level code execution and full host compromise on installations below version 2.2.16 by invoking the task API endpoint /api/core/tasks/start, which enforces no plugin-management authorization before enqueuing InstallPlugin, UnInstallPlugin, or UpgradeAll tasks whose package specifications are built from unvalidated name and version fields and then executed by pip under root. The assessed vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, 9.9) confirms a network-reachable, low-privilege, no-interaction attack that escapes the panel's own security scope by gaining root on the underlying host, and exploitation works against default configurations since the missing permission check is the pre-2.2.16 default state. No public exploit code has been identified at time of analysis, and the flaw is not confirmed as actively exploited (no CISA KEV entry); nonetheless it is a genuine top-priority issue because a valid low-privileged account converts directly into root on the server.

RemediationAI

Upgrade Ajenti to version 2.2.16 or later - the vendor-released patch - which adds a PermissionProvider declaring plugins:install, plugins:uninstall, and plugins:upgrade (each defaulting to disabled) and applies @authorize decorators to the InstallPlugin, UnInstallPlugin, and UpgradeAll tasks so the task API can no longer be driven without explicit plugin-management rights; see https://github.com/ajenti/ajenti/security/advisories/GHSA-j8xf-5fw2-f99q and https://github.com/ajenti/ajenti/releases/tag/v2.2.16. Because the flaw is reachable by any authenticated account, first reduce the blast radius by auditing and removing dormant or unnecessary Ajenti accounts and resetting credentials for any user who could be low-privileged, then confirm that no non-administrative user has been granted the new plugin permissions after upgrading. If immediate upgrade is not possible, compensating controls include blocking or restricting network access to /api/core/tasks/start at a reverse proxy or firewall so that only trusted administrative source addresses can reach the task API (trade-off: it disables legitimate remote task submission and must be kept in sync with the fixed version), and removing or disabling the bundled plugins plugin so the dangerous task classes are not registered at all (trade-off: administrators lose the ability to install, uninstall, or upgrade plugins through the panel until the plugin is restored). A weaker but sometimes practical measure is to run the Ajenti task worker as an unprivileged service account rather than root, which downgrades the pip execution from root code execution to that account's privileges, but this breaks legitimate plugin installation paths that require root and should be treated as temporary containment rather than a fix.

Affected VersionsENISA

ajenti < 2.2.16

Affected Packages

euvd ajenti fix: 2.2.16

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-862 (Missing Authorization): Ajenti's plugin subsystem (plugins/plugins/tasks.py) exposed InstallPlugin, UnInstallPlugin, and UpgradeAll task classes but never gated them behind a permission check, so the generic task dispatcher at /api/core/tasks/start would accept and enqueue them for any authenticated session regardless of role. InstallPlugin and UnInstallPlugin interpolate the caller-supplied name and version fields directly into a pip package specification, and the task worker executes pip with root privileges - its normal operating mode - meaning the panel's own privileged process performs attacker-influenced package resolution and installation of a remote package, yielding arbitrary code execution as root rather than merely a panel-level privilege escalation. The CVSS scope change (S:C) reflects that the compromise moves from the Ajenti web application into the host operating system, affecting all components on the machine. The upstream fix introduces a PermissionProvider in plugins/plugins/main.py declaring three new permissions (plugins:install, plugins:uninstall, plugins:upgrade, all defaulting to False) and decorates the task classes with @authorize('plugins:install'), @authorize('plugins:uninstall'), and @authorize('plugins:upgrade') in plugins/plugins/tasks.py, closing the missing-authorization gap at the task layer. Ajenti is a modular Linux & BSD server administration panel, so the affected attack surface is exactly its plugin-management API rather than any third-party library.

Know when Ajenti gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 9.9 CRITICAL
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 9.9 CRITICAL

Network API reachable, low complexity, needs only a low-privileged account (PR:L); missing authz lets pip run as root, breaking out of app scope (S:C) to full host compromise (C/I/A:H).

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Sep 21, 2026 - 18:02 EUVD
CVE Published
Sep 21, 2026 - 16:35 cve.org
CRITICAL 9.9

DescriptionCVE.org

Ajenti is a Linux & BSD modular server admin panel. Prior to version 2.2.16, any authenticated user can call /api/core/tasks/start to enqueue InstallPlugin, UnInstallPlugin, or UpgradeAll from plugins/plugins/tasks.py without plugin-management authorization. InstallPlugin and UnInstallPlugin construct a pip package specification from unvalidated name and version fields, and the task worker invokes pip while running as root. A low-privileged user can therefore select or manipulate a package installed with root privileges and can install, remove, or upgrade plugins without administrative permission, resulting in root code execution and full host compromise. This issue is fixed in version 2.2.16.

Technical POC Analysis

The flaw is CWE-862, Missing Authorization, in Ajenti's task execution path.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Any organization running Ajenti server admin panel below version 2.2.16 is exposed to a critical control failure that can turn a routine authenticated low-privilege account into full root control of the managed host. Because the panel often sits in a trusted management path, a compromise could cascade into broader infrastructure access, making this a top-priority exposure for security leadership until a vendor fix is available. No public exploit identified at time of analysis.

Business Impact: Severe
Compensating Controls

Restrict Ajenti management interface to trusted networks/VPN; enforce MFA and least privilege; block or monitor /api/core/tasks/start and plugin-management task creation; isolate Ajenti hosts; audit logs for InstallPlugin/UnInstallPlugin/UpgradeAll and root-level pip execution. No vendor-released patch identified at time of analysis.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Medium
popular open-source Linux/BSD server admin panel, but self-hosted niche
Social Media
2
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
Very High
Technical Impact
Total

Priority Score

50
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +50
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

More in Ajenti

View all
CVE-2018-1000082 HIGH POC
8.8 Mar 13

Ajenti version version 2 contains a Cross ite Request Forgery (CSRF) vulnerability in the command execution panel of the

CVE-2018-1000126 HIGH POC
7.5 Mar 13

Ajenti version 2 contains an Information Disclosure vulnerability in Line 176 of the code source that can result in user

CVE-2018-1000081 HIGH POC
7.5 Mar 13

Ajenti version version 2 contains a Input Validation vulnerability in ID string on Get-values POST request that can resu

CVE-2018-1000080 MEDIUM POC
6.5 Mar 13

Ajenti version version 2 contains a Insecure Permissions vulnerability in Plugins download that can result in The downlo

CVE-2018-18548 MEDIUM POC
6.1 Oct 24

ajenticp (aka Ajenti Docker control panel) for Ajenti through v1.2.23.13 has XSS via a filename that is mishandled in Fi

CVE-2026-27975 CRITICAL
9.8 Feb 26

Unauthenticated remote code execution in Ajenti server admin panel before 2.2.13. Unauthenticated users can gain full se

CVE-2026-40177 CRITICAL
9.3 Apr 10

Authentication bypass in Ajenti admin panel versions prior to 0.112 allows unauthenticated remote attackers to completel

CVE-2018-1000083 MEDIUM POC
5.3 Mar 13

Ajenti version version 2 contains a Improper Error Handling vulnerability in Login JSON request that can result in The r

CVE-2014-4301 MEDIUM POC
4.3 Jun 18

Multiple cross-site scripting (XSS) vulnerabilities in the respond_error function in routing.py in Eugene Pankov Ajenti

CVE-2014-2260 LOW POC
3.5 Apr 30

Cross-site scripting (XSS) vulnerability in plugins/main/content/js/ajenti.coffee in Eugene Pankov Ajenti 1.2.13 allows

CVE-2026-40178 MEDIUM
6.9 Apr 10

Remote authentication bypass in Ajenti prior to version 0.112 allows unauthenticated network attackers to circumvent two

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy