A lockpick that only works on one obscure brand of mailbox and only when the mailman is whistling
Documenso is an open-source, self-hosted alternative to DocuSign for e-signing contracts. CVE-2026-13543 is an improper authentication flaw (CWE-287) affecting all releases through 2.11.0. The vendor description is intentionally thin — the CVSS vector tells the real story: network-reachable (AV:N), no privileges (PR:N), no user interaction (UI:N), but high attack complexity (AC:H) and only low impact on confidentiality, integrity, and availability. That points to an edge-case auth path — likely a token-handling, session-binding, or signer-link verification weakness — that leaks or partially manipulates a single signing session rather than handing over the whole tenant.
The vendor's MEDIUM/5.6 rating is fair to slightly generous. AC:H plus three Low impact ratings is the textbook profile of a contestable, race-condition-flavored auth bug — not a credential bypass. We're nudging the score down to 4.5 because Documenso's enterprise install base is small, prod deployments are almost always behind SSO/VPN, and there is no public PoC or exploitation chatter as of disclosure day.
3 steps from start to impact.
Locate a reachable Documenso instance
/signin route. Most enterprise installs are behind a corporate IdP or VPN gateway, so the candidate pool is small SaaS-style hobby and SMB deployments.- Documenso ≤ 2.11.0 reachable over HTTP(S)
- No upstream auth proxy (Cloudflare Access, Tailscale, etc.)
- Enterprise tenants almost universally front Documenso with Okta/Azure AD or place it on a private network
- Shodan exposure population for Documenso is in the low hundreds globally
services.http.response.html_title: "Documenso" enumerates exposed instances; no specific scanner check yet.Trigger the high-complexity auth path
AC:H indicates the attacker must win a race, predict a value, or manipulate a transient state — typical patterns include token reuse across signing sessions, IDOR on a signer link, or signature verification bypass during webhook replay. The attacker crafts repeated requests against the affected endpoint until the precondition lands.- Knowledge of a valid document/signer ID or guessable token format
- Ability to send high-volume crafted requests
- High-complexity exploitation generally requires bespoke scripting and reliable timing — not opportunistic
- WAFs with anomaly-rate rules will flag the burst traffic
/api/signing/* or /api/v1/documents/* endpoints is the cleanest signal.Partial compromise of a signing session
S:U — the attacker stays within the Documenso authentication context and does not pivot to host or DB.- Step 2 succeeded
- No code execution, no credential theft, no admin takeover documented
- Audit log entries for the affected document remain visible to the legitimate owner
The supporting signals.
| In-the-wild exploitation | None observed. Not in CISA KEV; no GreyNoise tag as of 2026-06-29. |
|---|---|
| Public PoC | None published. No GitHub PoC repo, no Metasploit module, no writeup on Twitter/X or Mastodon infosec circles. |
| EPSS | Pre-scoring window — expect <0.5% given AC:H, low impact, and niche deployment footprint. |
| KEV status | Not listed. |
| CVSS vector | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L — network reach offset by high complexity; only Low impact across CIA. |
| Affected versions | Documenso ≤ 2.11.0 (all prior releases per vendor advisory wording). |
| Fixed version | Patched release expected in the 2.11.x or 2.12.0 line — confirm via Documenso GitHub releases before deploying. |
| Exposure / population | Shodan/Censys show a low-hundreds internet-exposed footprint globally; vast majority of enterprise installs are behind SSO/VPN. |
| Disclosure date | 2026-06-29 (today). |
| Reporter | Not publicly attributed in the initial advisory; likely community-reported via Documenso's GitHub Security Advisory channel. |
noisgate verdict.
The single most decisive factor is bounded blast radius — S:U plus Low/Low/Low CIA means a successful exploit leaks fragments of one signing session, not the tenant, host, or document store. Documenso is not a high-value-role component in the noisgate catalog (not an IdP, hypervisor, CA, PAM, backup, or kernel agent), so there is no role multiplier forcing a floor above MEDIUM.
Why this verdict
- High attack complexity (
AC:H) — exploitation requires winning a race or predicting state, not a one-shot curl, so opportunistic mass exploitation is unlikely. - Low impact across CIA — vendor explicitly scores
C:L/I:L/A:L, capping realistic damage at one signing session, not the tenant or host. - Narrow exposure population — Documenso enterprise installs are overwhelmingly behind SSO or private network; internet-facing footprint is in the low hundreds globally.
- Role multiplier: Documenso is a document-signing application — not in the high-value-role catalog (no IdP, hypervisor, CA, PAM, backup, or kernel agent characteristics). Worst plausible role outcome: leakage of signed legal documents from one tenant — serious for the affected business, but not fleet-scale.
- No KEV, no PoC, no chatter — disclosure-day baseline with zero exploitation evidence keeps the urgency dial low.
Why not higher?
HIGH would require either fleet-scale blast radius or active exploitation. Neither exists: the bug is bounded to a single signing session (S:U + Low impacts) and there is no PoC, KEV listing, or telemetry of in-the-wild use. Documenso does not occupy a high-value role that forces a HIGH floor.
Why not lower?
LOW would understate the regulatory and contractual sensitivity of e-signed documents. A confidentiality leak from a signing flow can expose contract terms, signer identity, or legal positioning — material harm even at C:L. The network-reachable, no-auth-required precondition also means the bug is probeable from the public internet wherever the instance is exposed, which keeps it above pure backlog hygiene.
What to do — in priority order.
- Front Documenso with an authenticating reverse proxy — Put Cloudflare Access, Tailscale, Pomerium, or oauth2-proxy in front of
/api/*and/signinso unauthenticated network reach is impossible. This neutralizes theAV:N+PR:Npreconditions entirely. MEDIUM verdict carries no mitigation SLA — fold this into the 365-day remediation window or do it now if you happen to have an exposed instance. - Rate-limit and alert on signing endpoints — The
AC:Hexploit profile means an attacker must hammer the endpoint to win the race. A 10 req/sec per-IP cap on/api/signing/*and an alert at 100 req/min raises exploitation cost to near-zero return. Deploy alongside the patch. - Audit recent signing-flow telemetry — Pull the last 90 days of Documenso audit logs and correlate signing events against expected signer source IPs. Anomalies here are your only retroactive detection if the bug was exploited pre-disclosure.
- Subscribe to Documenso's GitHub Security Advisories — The vendor publishes via GHSA; subscribing gives you the fixed-version tag the moment it ships so you can close the remediation loop.
- WAF signature rules — there is no public PoC pattern yet to write a signature against; only behavioral/rate rules help.
- EDR on the host — the exploit is application-layer and produces no on-disk artifacts; host-based detection is blind here.
- MFA on user accounts — the affected path is
PR:N(no authentication required), so MFA on logged-in users does nothing.
Crowdsourced verification payload.
Run on the Documenso host (or any host with curl that can reach the instance) as any user. Invoke with the base URL of your deployment, e.g. ./check_documenso.sh https://sign.corp.example.com. No privileges required beyond network reach.
#!/usr/bin/env bash
# CVE-2026-13543 — Documenso ≤ 2.11.0 improper authentication check
# Usage: ./check_documenso.sh <base_url>
# Exit: 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN
set -u
BASE="${1:-}"
if [ -z "$BASE" ]; then
echo "UNKNOWN: usage $0 <base_url>" >&2
exit 2
fi
# Documenso exposes build metadata at /api/health or surfaces version in the
# footer / og:meta tags. Try the API endpoint first, fall back to HTML scrape.
VER=$(curl -fsSL --max-time 10 "$BASE/api/health" 2>/dev/null \
| grep -oE '"version"[[:space:]]*:[[:space:]]*"[^"]+"' \
| head -1 \
| sed -E 's/.*"([^"]+)"$/\1/')
if [ -z "$VER" ]; then
VER=$(curl -fsSL --max-time 10 "$BASE/" 2>/dev/null \
| grep -oE 'documenso[/-]v?[0-9]+\.[0-9]+\.[0-9]+' \
| head -1 \
| grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
fi
if [ -z "$VER" ]; then
echo "UNKNOWN: could not determine Documenso version at $BASE"
exit 2
fi
# semver compare against 2.11.0
IFS=. read -r MA MI PA <<< "$VER"
if [ "$MA" -lt 2 ] || { [ "$MA" -eq 2 ] && [ "$MI" -lt 11 ]; } || { [ "$MA" -eq 2 ] && [ "$MI" -eq 11 ] && [ "$PA" -le 0 ]; }; then
echo "VULNERABLE: Documenso $VER ≤ 2.11.0 — CVE-2026-13543 applies"
exit 1
fi
echo "PATCHED: Documenso $VER > 2.11.0"
exit 0
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.