Skip to main content

pacioli-guard CVE-2026-107841

| EUVDEUVD-2026-95937 MEDIUM
Incorrect Authorization (CWE-863)
2026-10-09 security-advisories@github.com GHSA-3hj7-6vmj-h8v4
5.7
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Authenticate with consent-gated API Key
  2. Delivery
    Submit document under valid human-minted submit marker
  3. Exploit
    Nest cancel riding the enclosing act's consent
  4. Execution
    Reach Document.cancel() on different submitted document
  5. Impact
    Reverse target document's ledger effect

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
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

Exploitation requires an authenticated credential holding an API Key with Scope.require_consent (a consent-gated grant) and a valid, human-minted submit marker from an enclosing governed act to ride; the attacker submits a caller-controlled Sales Invoice or other supported document and nests a cancel targeting a different pre-existing submitted document. Limiting factors: principals that have no consent-gated grant are explicitly not affected; a legitimate human must first mint the submit marker (UI:R), the attacker must already possess valid API credentials (PR:L), and only pacioli-guard versions 0.9.6 through just before 0.10.0 are vulnerable - 0.10.0 fixes the marker's document and act binding.

Impact

This is a medium-severity (CVSS 5.7) authorization flaw (CWE-863) whose signals are internally consistent and point to a limited, non-urgent priority. The CVSS vector CVSS:3.1/AV:N/AC:L/PR:L/UI:R confirms a network-reachable issue but with two real brakes: the attacker needs a valid authenticated credential (PR:L - specifically an API Key with Scope.require_consent) and must ride a legitimately human-minted submit marker (UI:R), so exploitation cannot proceed against a target with no outstanding consent-gated grant. Impact is integrity-only (C:N/I:H/A:N): the attacker can cancel a pre-existing submitted document and reverse its ledger effect, but cannot read data or deny service. No EPSS score, KEV listing, or public exploit was provided, so there is no public exploit identified at time of analysis and no evidence of active exploitation; these absences are expected for an obscure product rather than reassuring. Net: a genuine authorization bypass worth patching for the small population that runs pacioli-guard with consent-gated grants, but not a widespread or wormable threat. The signals do not conflict - the moderate CVSS, the PR:L/UI:R preconditions, and the lack of exploitation telemetry all align on 'targeted, low-volume risk.'

Exploit ScenarioDerived

An insider or compromised-but-legitimate automation account holding an API Key with Scope.require_consent submits a caller-controlled Sales Invoice (or other supported DocType) under a valid human-approved submit marker, then nests a cancel operation inside that governed act. Because the consent gate does not verify that the marker authorizes cancellation, the nested call reaches Document.cancel() against a different, pre-existing submitted document and reverses its ledger entry. No public exploit code is known, but the attack requires no special tooling - only an existing consent-gated credential and an in-flight submit marker to ride.

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 09, 2026

pacioli-guard 0.9.6 fails to check that a consent marker actually authorizes a cancellation, so a nested Document.cancel() call can ride a valid human-minted submit marker belonging to an enclosing governed act and reverse the ledger effect of a different, caller-named pre-existing submitted document such as a Sales Invoice. The flaw is an incorrect-authorization defect (CWE-863) that bypasses the marker's document binding, act binding, single-use spend accounting, and denial audit, and it is reachable by an authenticated API-key credential holding Scope.require_consent (PR:L) only after a legitimate human has minted the enclosing submit marker (UI:R), which is why it rates a medium CVSS 5.7. Principals without a consent-gated grant are explicitly unaffected, and no public exploit has been identified at time of analysis - there is no CISA KEV listing for this CVE.

RemediationAI

Vendor-released patch: pacioli-guard 0.10.0 - upgrade to that version (release tag guard-v0.10.0) or later, which restores document and act binding on consent markers; the fix is carried in commit f3c7219f5dde6050bd7921e0ac55afd02771250c and described in advisory https://github.com/john-broadway/pacioli/security/advisories/GHSA-3hj7-6vmj-h8v4, which also documents the affected range and the 0.6.3-and-earlier allowlist defect. Until upgrading is possible, the most direct compensating control is to strip Scope.require_consent from API keys and refrain from issuing consent-gated grants to any principal that does not strictly need them, since principals without a consent-gated grant cannot trigger this path - the trade-off is that this disables the governed broker's consent workflow for those credentials, pushing the work back to human-executed operations in ERPNext. Restricting which callers may invoke the broker with caller-controlled document names (pinning the target document in the enclosing marker) also reduces exposure but requires custom enforcement outside the vulnerable gate. Because the flaw bypasses the denial audit, checking logs alone is insufficient: manually review submitted Sales Invoices and other supported DocTypes for unexpected cancellations and reversed general-ledger entries, and treat any such reversal as a security incident requiring re-submission or amendment of the affected document.

Affected VersionsENISA

pacioli 0.9.6, < 0.10.0

Affected Packages

pypi pacioli-guard fix: 0.10.0
euvd pacioli_0_9_6 fix: 0.10.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in pypi, euvd

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

Technical ContextAI · show details

pacioli is a least-privilege governance layer and governed agent broker for ERPNext/Frappe; pacioli-guard is its document-layer consent gate, which brokers agent-initiated document actions so that a privileged operation (such as submitting a Sales Invoice DocType) only proceeds under a consent marker minted by a human principal. That marker is intended to be bound to a specific document and a specific act, to be single-use ("spend"), and to leave a denial audit trail when a request is refused. In the vulnerable range the gate evaluated nested operations in the context of an enclosing governed act: a credential with API Key Scope.require_consent could submit a caller-controlled document under a legitimate submit marker and then nest a cancel operation targeting a different, pre-existing submitted document. Because the gate never re-checked whether the enclosing marker authorized the cancellation act - or matched the target document identity - the nested call reached Frappe's Document.cancel(), the root-cause class being CWE-863 (Incorrect Authorization), specifically a confused-deputy style failure where an authorization decision for one resource/action is reused for another. The consequence is integrity-only (I:H) rather than confidentiality loss: the cancelled document's ledger/accounting effect is reversed without a marker of its own and without the expected denial record. The vulnerability is confined to the published 0.9.6 build; the referenced repository commit also updates SECURITY.md to declare 0.10.0 the supported, fixed release and notes that 0.9.0-0.9.5 were never published.

Know when Erpnext 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) PRIMARY 5.7 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:N
vuln.today AI 5.7 MEDIUM

API-reachable (AV:N) but needs a valid consent-scoped credential (PR:L) and a human-minted submit marker to ride (UI:R); impact is unauthorized cancellation reversing the ledger, so I:H with C:N/A:N.

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

1
Patch available
Oct 09, 2026 - 19:02 EUVD

DescriptionCVE.org

pacioli provides least-privilege governance and a governed agent broker for ERPNext. From version 0.9.6 until version 0.10.0, the pacioli-guard document-layer consent gate allows nested cancellation operations to ride any consent established by an enclosing governed act without checking whether the marker authorizes cancellation. A credential with API Key Scope.require_consent can submit a caller-controlled Sales Invoice or other supported document under a valid human-minted submit marker and reach Document.cancel() for a different pre-existing submitted document, bypassing the marker's document and act binding, single-use spend, and denial audit. The unauthorized cancellation can reverse the target document's ledger effect; principals without a consent-gated grant are not affected. This issue is fixed in version 0.10.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Rare
niche ERPNext governance broker, only four versions ever published
Threat Intel
1
1 source
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 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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

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

CVE-2025-67289 CRITICAL POC
9.6 Dec 22

Stored cross-site scripting leading to code execution in Frappe Framework 15.89.0 (and the ERPNext application built on

CVE-2018-3885 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2018-3884 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2018-3883 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2018-3882 HIGH POC
8.8 Sep 12

An exploitable SQL injection vulnerability exists in the authenticated part of ERPNext v10.1.6. Rated high severity (CVS

CVE-2025-66440 HIGH POC
8.8 Dec 15

Authenticated SQL injection in Frappe ERPNext through 15.89.0 allows low-privilege users to extract arbitrary database c

CVE-2025-66439 HIGH POC
8.8 Dec 15

SQL injection in Frappe ERPNext through 15.89.0 lets an authenticated attacker with a valid session and access to the Pa

CVE-2025-66438 HIGH POC
8.8 Dec 15

Authenticated attackers with permission to create or modify Print Format documents in Frappe ERPNext through 15.89.0 can

CVE-2025-66437 HIGH POC
8.8 Dec 15

Authenticated server-side template injection in Frappe ERPNext through 15.89.0 lets a user who can create or modify an A

CVE-2025-66434 HIGH POC
8.8 Dec 15

Authenticated server-side template injection in Frappe ERPNext through 15.89.0 allows users with privileges to configure

CVE-2020-6145 HIGH POC
8.8 Aug 10

An SQL injection vulnerability exists in the frappe.desk.reportview.get functionality of ERPNext 11.1.38. Rated high sev

CVE-2023-54345 HIGH POC
8.7 May 05

Frappe Framework ERPNext 13.4.0 contains a sandbox escape vulnerability in RestrictedPython that allows authenticated us

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