Skip to main content

Jorani EUVDEUVD-2026-98933

| CVE-2026-110100 MEDIUM
Missing Authorization (CWE-862)
2026-10-13 disclosure@vulncheck.com GHSA-67px-h38p-mh8v
5.3
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

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

  1. Access
    Log in as any authenticated user
  2. Exploit
    POST contract id and internal/attacker URL to Contracts::import
  3. Execution
    Server fetches URL via get_headers()/fopen()
  4. Impact
    Overwrite arbitrary contract calendars and reach internal hosts

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 an authenticated Jorani session - any valid low-privilege user account suffices (PR:L), with no administrative role needed. The flaw exists in default installations of Jorani before 1.0.4 because the Contracts import handler lacks the isAllowed('adddayoff_contract') permission check that v1.0.4 adds; no non-default configuration is required to trigger it. No user interaction is needed (UI:N) and it is reachable over the network (AV:N). Limiting factors for defenders: the attacker must first obtain valid credentials, the SSRF is semi-blind (the code only proceeds on an HTTP 200 and imports ICS content rather than returning raw responses), and impact is bounded to calendar/day-off data integrity plus internal host reachability - not code execution or availability loss.

Impact

The input CVSS 4.0 base score is 5.3 (Medium) with vector AV:N/AC:L/AT:N/PR:L/UI:N and limited confidentiality and integrity impact (VC:L/VI:L, no availability). This is a genuine but moderate-priority issue rather than a critical one: exploitation requires a valid authenticated account (PR:L), and the primary impact is overwriting non-working-day calendars (integrity) plus a blind/limited SSRF primitive (get_headers() and fopen() against internal hosts). No EPSS score is provided in the input, the CVE is NOT listed in CISA KEV, and no public exploit code is referenced (the GitHub links are the patch commit, release, and issue tracker, not a POC), so there is no public exploit identified at time of analysis. The signals are internally consistent - a low-complexity, network-reachable but authentication-gated flaw - with no high-severity amplifiers (no active-exploitation or automatable evidence). One conflict to flag: the input Tag 'Authentication Bypass' is inaccurate because the advisory, description, and CWE-862 (Missing Authorization) all require an already-authenticated user; this is an authorization (privilege/IDOR-style) flaw plus SSRF, not an authentication bypass. The SSRF against internal infrastructure is the most security-relevant capability and could matter more in environments with sensitive internal services, but overall real-world risk is tempered by the authentication requirement and limited niche deployment.

Exploit ScenarioDerived

An attacker with any low-privilege authenticated Jorani account sends a crafted POST to the Contracts import endpoint supplying an arbitrary contract id and an attacker-controlled or internal URL. Because versions before 1.0.4 omit the isAllowed('adddayoff_contract') authorization check, the server validates and fetches that URL via get_headers()/fopen(), letting the attacker overwrite day-off calendars on contracts they do not own and probe internal-only hosts (SSRF). No public exploit code is referenced, but the low attack complexity and patch diff make reproduction straightforward.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 13, 2026

Missing authorization in Jorani's Contracts::import() handler lets any authenticated user, including a low-privilege one, submit a contract id plus an arbitrary URL over POST to import days off into any contract, overwriting its non-working-day calendar and driving server-side requests into internal networks. The flaw is present in default installations of Jorani before 1.0.4, where the import action lacks the isAllowed('adddayoff_contract') permission check that v1.0.4 introduces, so no non-default configuration is required. Exploitation requires a valid Jorani session and is network-reachable with no user interaction (CVSS 4.0 base 5.3 Medium; assessed CVSS 3.1 AV:N/AC:L/PR:L/UI:N with limited confidentiality and integrity impact); no public exploit code identified at time of analysis.

RemediationAI

Vendor-released patch: upgrade Jorani to 1.0.4 or later, which adds the isAllowed('adddayoff_contract') check before the import logic and returns HTTP 403 for unauthorized callers; alternatively apply upstream commit 59c403224401824489ec662934f71c90d27f614c if a full upgrade is not immediately possible (see https://github.com/jorani/jorani/releases/tag/v1.0.4 and the VulnCheck advisory at https://www.vulncheck.com/advisories/jorani-before-1.0.4-missing-authorization-and-ssrf-via-contracts-import). Where patching must be deferred, remove the adddayoff_contract permission from all non-administrative roles so the import path is unavailable to ordinary users, accepting that HR staff who legitimately maintain contract calendars will lose that function until the upgrade lands. Because the import handler performs server-initiated fetches of an attacker-chosen URL, enforce egress filtering on the web server so it cannot reach loopback, RFC1918/link-local ranges, or cloud instance-metadata endpoints (169.254.169.254), and require outbound HTTP to pass through an allow-listing proxy; the trade-off is that legitimate imports of ICS feeds from external providers must be explicitly allow-listed, and internal feeds will break. Also ensure credentials are not shared and monitor Jorani logs for repeated POSTs to the contracts import endpoint with unusual or internal-looking URL values, since the semi-blind SSRF can only be reliably detected through such request patterns and anomalous day-off changes.

Affected VersionsENISA

Jorani 0 <1.0.4

Affected Packages

euvd jorani fix: 1.0.4

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

Jorani is a PHP leave and overtime management application built on CodeIgniter, with the vulnerable handler in legacy/application/controllers/Contracts.php (the pre-1.0.4 code path around lines 358-375). The import routine accepts an attacker-controlled 'url' POST parameter, validates it only with filter_var($url, FILTER_VALIDATE_URL), and then passes it to PHP's get_headers() and the ICS import path (which opens the resource with fopen-like semantics), so loopback addresses, RFC1918 ranges, and cloud metadata endpoints all pass validation and are fetched by the server. This is CWE-862 (Missing Authorization): the action performs a privileged state-changing operation (writing days off into an arbitrary contract) without verifying the caller holds the adddayoff_contract permission, which is exactly what the v1.0.4 fix adds alongside a 403 Forbidden response. The SSRF is semi-blind, since the code only proceeds when the remote host answers HTTP 200 and the response body is consumed by the ICS parser rather than returned to the attacker, so internal reachability is inferred through success/failure and side effects rather than raw response readback. The same upstream commit (59c403224401824489ec662934f71c90d27f614c) also tightens authorization in Extra, Leaves, and Delegations controllers, indicating a cluster of related missing-authorization defects rather than an isolated one.

Know when the next one hits your stack

  • 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 (vulncheck) PRIMARY 5.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.4 MEDIUM

Network-reachable (AV:N), low complexity (AC:L), but requires any authenticated account (PR:L, missing authorization); SSRF yields limited C and calendar overwrite yields limited I, no availability impact.

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

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 13, 2026 - 18:19 EUVD

DescriptionCVE.org

Jorani before 1.0.4 contains a missing authorization vulnerability in Contracts::import() that allows any authenticated user to import days off into any contract from an arbitrary URL. Attackers can submit a contract id and URL via POST to overwrite non-working-day calendars and abuse get_headers() and fopen() for server-side request forgery against internal hosts.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
niche open-source PHP leave/HR management app, limited enterprise footprint
Data Quality
5 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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