<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sun, 11 Oct 2026 22:46:05 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-107841</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-107841</link>
      <description>&lt;p&gt;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&amp;#39;s document and act binding, single-use spend, and denial audit. The unauthorized cancellation can reverse the target document&amp;#39;s ledger effect; principals without a consent-gated grant are not affected. This issue is fixed in version 0.10.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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&amp;#39;s document and act binding, single-use spend, and denial audit. The unauthorized cancellation can reverse the target document&amp;#39;s ledger effect; principals without a consent-gated grant are not affected. This issue is fixed in version 0.10.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-107841</guid>
    </item>
    <item>
      <title>GHSA-3hj7-6vmj-h8v4 — pacioli: A submit consent marker licensed cancellation of caller-named pre-existing documents</title>
      <link>https://db.gcve.eu/vuln/ghsa-3hj7-6vmj-h8v4</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pacioli-guard&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;`pacioli-guard`&amp;#39;s document-layer consent gate requires a human-minted, single-use, document-bound and **act-bound** marker before a credential carrying `API Key Scope.require_consent` may submit or cancel a document. Because ERPNext performs further document writes as a consequence of a governed act, nested acts are allowed to &amp;#34;ride&amp;#34; the consent established by the enclosing act instead of needing a marker of their own.&lt;/p&gt;
&lt;p&gt;The ride predicate returned `true` for **every** cancel, regardless of which act the enclosing marker authorised. Riding never reaches `consent_verdict`, which is where the marker-to-act binding is enforced. The result: any `Document.cancel()` performed inside an act that had established consent reached `docstatus = 2` with no marker, no act-binding check, no single-use spend, and **no denial audit row**.&lt;/p&gt;
&lt;p&gt;This is reachable with the exact grant an operator is documented to give the broker, and the cancelled document&amp;#39;s identity is caller-controlled:&lt;/p&gt;
&lt;p&gt;- `Sales Invoice.on_submit` (`sales_invoice.py:507`) calls `process_asset_depreciation()` unconditionally, reaching `depreciate_asset_on_sale` (`:1508-1516`).
- That iterates the invoice&amp;#39;s item rows and calls `frappe.get_doc(&amp;#34;Asset&amp;#34;, d.asset)`. `Sales Invoice Item.asset` is a plain writable `Link` with no `read_only` and no `fetch_from`, so the caller supplies it in the request body. The validation that would constrain it sits behind `if d.is_fixed_asset:` (`:428-429`), a server-set field.
- The chain…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pacioli-guard&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;`pacioli-guard`&amp;#39;s document-layer consent gate requires a human-minted, single-use, document-bound and **act-bound** marker before a credential carrying `API Key Scope.require_consent` may submit or cancel a document. Because ERPNext performs further document writes as a consequence of a governed act, nested acts are allowed to &amp;#34;ride&amp;#34; the consent established by the enclosing act instead of needing a marker of their own.&lt;/p&gt;
&lt;p&gt;The ride predicate returned `true` for **every** cancel, regardless of which act the enclosing marker authorised. Riding never reaches `consent_verdict`, which is where the marker-to-act binding is enforced. The result: any `Document.cancel()` performed inside an act that had established consent reached `docstatus = 2` with no marker, no act-binding check, no single-use spend, and **no denial audit row**.&lt;/p&gt;
&lt;p&gt;This is reachable with the exact grant an operator is documented to give the broker, and the cancelled document&amp;#39;s identity is caller-controlled:&lt;/p&gt;
&lt;p&gt;- `Sales Invoice.on_submit` (`sales_invoice.py:507`) calls `process_asset_depreciation()` unconditionally, reaching `depreciate_asset_on_sale` (`:1508-1516`).
- That iterates the invoice&amp;#39;s item rows and calls `frappe.get_doc(&amp;#34;Asset&amp;#34;, d.asset)`. `Sales Invoice Item.asset` is a plain writable `Link` with no `read_only` and no `fetch_from`, so the caller supplies it in the request body. The validation that would constrain it sits behind `if d.is_fixed_asset:` (`:428-429`), a server-set field.
- The chain…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-3hj7-6vmj-h8v4</guid>
    </item>
  </channel>
</rss>
