☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Vikunja logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N 🐛 CWE-200
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-91980

CVE-2026-91980 Vulnerability in Vikunja
📅 PUBLISHED: 2026-09-15 00:00 UTC 🔄 UPDATED: 2026-09-22 09:08 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.27%
👁️
0.27% probability
6.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1213
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Germany License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 4.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
4.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-91980 is an improper authorization / information disclosure flaw (CWE-200) in Vikunja, an open-source task and project management platform, affecting all versions before 2.6.0. The application fails to validate team-level access control when teams are attached to projects, allowing any authenticated user to supply arbitrary team IDs to the project teams endpoint and retrieve complete team rosters — including member names and administrator flags — for teams they do not belong to. Operational impact is limited to confidentiality (CVSS 4.3, C:L), but the leaked organizational structure and privileged-user mapping is high-value reconnaissance material for follow-on social engineering and privilege-escalation attacks.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

The vulnerability resides in the access-control logic that governs the relationship between projects and teams in Vikunja's data model. Vikunja organizes work into projects, and access to a project can be delegated to teams; each team carries a roster of members, and individual membership records indicate whether a given user holds an administrative role within that team. The project-teams association endpoint is intended to be reachable only by users who already have legitimate rights over the affected project.

Per the NVD description, the pre-2.6.0 implementation "fails to validate team access when attaching teams to projects." In practical terms, when an authenticated user submits a request to attach a team to a project, the server does not verify that the caller is authorized to reference — or attach — the specific team ID supplied. Because team IDs are numeric/sequential identifiers that are trivially enumerable, this missing authorization check functions as an object-level authorization (IDOR-style) weakness layered on top of a broken function-level access control. The consequence is twofold:

  1. Enumeration of all teams. By iterating candidate team IDs through the project-teams attachment flow, an attacker can determine which team IDs exist and are valid.
  2. Disclosure of team membership. When a valid team ID is successfully attached, the response surfaces the team's roster, which the description explicitly states includes member names and admin flags.

The CVSS vector confirms the profile: AV:N (remotely reachable), AC:L (no special conditions), PR:L (a low-privileged authenticated account is sufficient), UI:N (no victim interaction), S:U (impact confined to the vulnerable component's security authority), C:L (limited confidentiality impact — structured metadata, not credentials or full record content), and no integrity or availability impact. The EPSS score of 0.00271 (~19.4th percentile) indicates that while the flaw is trivially exploitable by a motivated insider or authenticated tenant, there is currently no observed mass-exploitation activity, consistent with the absence of a public PoC (POC_STATUS: None) and no Nuclei template.

No public exploit code exists. The mechanism is nevertheless straightforward to reason about at the vulnerability-class level: authenticated request → attacker-controlled team identifier → missing ownership/authorization check → unauthorized data returned in the response body.

Exploitation Scenarios

Because no public PoC exists (POC_STATUS: None), the following chain is inferred strictly from the vulnerability class (broken object-level authorization / information disclosure) and the NVD description. No function names, parameters, or endpoints beyond those stated in the description are asserted.

  1. Reconnaissance / target identification. The attacker obtains any valid low-privileged account on the Vikunja instance (self-registration if enabled, a compromised account, or a legitimate contractor account). They identify a target project they can reach and observe that team identifiers are simple, predictable numeric values.

  2. Triggering the flaw class. The attacker issues requests to the project teams endpoint, attaching arbitrary team IDs rather than only teams they belong to. The server fails the missing authorization check — it "fails to validate team access when attaching teams to projects" — and accepts the attacker-supplied team ID.

  3. Payload / execution method (class level). The "payload" is the manipulated team identifier itself. By iterating candidate IDs, the attacker enumerates all teams. For each valid team ID, the response discloses the complete team roster including member names and admin flags.

  4. Post-exploitation impact. The attacker compiles a directory of teams, their members, and which members are administrators. There is no write, deletion, or code-execution primitive described — the impact is purely disclosure. However, the harvested roster enables targeted phishing/social engineering of named individuals, identification of high-value administrator accounts for credential-stuffing or password-spraying, and mapping of the org chart to plan lateral movement. Because the flaw is read-only and low-noise, it can be repeated over time to track membership changes.

Impact Assessment

The CVSS 3.1 base score is 4.3 (Medium), vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N. Interpretation of subscores:

  • Confidentiality (C:L): Limited — leaked data is organizational metadata (team names, member names, admin flags), not credentials or full content of projects or tasks.
  • Integrity (I:N) / Availability (A:N): No impact described; the flaw does not modify or destroy data.
  • Scope (S:U): Impact stays within the Vikunja authorization boundary.
  • Privileges Required (PR:L): Any authenticated user qualifies; unauthenticated attackers cannot exploit it directly.

Blast radius: Every Vikunja deployment below 2.6.0 that hosts more than one team and permits authenticated user access. Multi-tenant or externally exposed instances are at highest risk because any single low-privileged account can enumerate the entire tenant's team structure.

Business impact: Direct impact is reputational and reconnaissance-oriented rather than disruptive. In regulated environments, disclosure of employee names and role assignments may itself constitute a privacy/access-control incident. The leaked administrator mapping materially lowers the cost of subsequent targeted attacks, making this a classic "low-severity, high-leverage" information-disclosure bug that security teams should not dismiss purely on CVSS.

Detection Guidance

Sigma Rule

title: Vikunja Team Access Control Bypass - Project Team Attachment Enumeration
id: 8f2c1a44-9091-4e7a-b6d2-7a1c5e3f9198
status: experimental
description: Detects authenticated requests that attach arbitrary/non-owned team IDs to projects in Vikunja (CVE-2026-91980), indicating team enumeration and roster disclosure.
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2026-91980
author: valtersit.com
date: 2026-01-01
logsource:
  category: webserver
  product: vikunja
detection:
  selection_endpoint:
    cs-uri-stem|contains:
      - '/projects/'
    cs-uri-stem|endswith:
      - '/teams'
  selection_method:
    cs-method: 'POST'
  selection_team_param:
    cs-uri-query|contains: 'team_id'
  condition: selection_endpoint and selection_method and selection_team_param
fields:
  - c-ip
  - cs-username
  - cs-uri-stem
  - cs-uri-query
falsepositives:
  - Legitimate project administrators attaching teams they own
level: medium
tags:
  - attack.t1213
  - cve.2026-91980

YARA Rule

rule CVE_2026_91980_Vikunja_TeamEnumeration
{
    meta:
        description = "Detects Vikunja API traffic indicating team enumeration via arbitrary team ID attachment (CVE-2026-91980)"
        author = "valtersit.com"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-91980"
        date = "2026-01-01"
        cve = "CVE-2026-91980"

    strings:
        $ep1 = "/teams" ascii nocase
        $ep2 = "team_id" ascii nocase
        $proj = "/projects/" ascii nocase
        $member = "members" ascii nocase
        $admin = "admin" ascii nocase

    condition:
        $ep1 and $ep2 and $proj and any of ($member, $admin)
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-91980 Vikunja Team Access Control Bypass - Project Team Attachment Enumeration"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/projects/"; http.uri; content:"/teams"; http.uri; content:"team_id"; reference:cve,CVE-2026-91980; reference:url,https://nvd.nist.gov/vuln/detail/CVE-2026-91980; classtype:attempted-recon; sid:99091980; rev:1;)

Elastic Detection

sequence by user.name with maxspan=5m
  [http where http.request.method == "POST" and
     wildcard(http.request.path, "/projects/*/teams")]
  [http where http.request.method == "POST" and
     wildcard(http.request.path, "/projects/*/teams") and
     wildcard(http.request.body, "*team_id*")]

Splunk SPL Query

index=web OR index=proxy sourcetype=access_combined
| search method=POST uri_path="*/projects/*/teams*" uri_query="*team_id*"
| stats count min(_time) as first_seen max(_time) as last_seen
        values(uri_query) as queries by src_ip, user
| where count > 5
| sort - count

Wazuh OSSEC Rule

<group name="vikunja,web,cve-2026-91980,">
  <rule id="919800" level="10">
    <decoded_as>json</decoded_as>
    <field name="http.method">POST</field>
    <field name="http.path" type="pcre2">/projects/[^/]+/teams</field>
    <field name="http.path" type="pcre2">team_id</field>
    <description>CVE-2026-91980: Vikunja team access control bypass - arbitrary team ID attached to project; possible roster enumeration/disclosure.</description>
    <mitre>
      <id>T1213</id>
    </mitre>
    <group>attack,access_control_disclosure,</group>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence: 2/4 — CLAIMED. A single source (OSV) claims the issue is addressed in Vikunja 2.6.0, and OSV lists the affected package as unfixed for the queried range. This fix has not been independently confirmed, and no official vendor advisory text is available, so treat the version as the best-available indicator rather than a verified remediation target.

1) Immediate mitigations (until the fix is verified):

  • Restrict creation of new accounts; disable open self-registration so the attacker population is limited to vetted users.
  • Do not expose the Vikunja instance directly to the internet; place it behind an authenticated reverse proxy or VPN.
  • Apply rate limiting and anomaly alerting on the project-teams endpoint to slow ID enumeration and create detection signal.
  • Apply least-privilege team/project membership so that even leaked rosters reveal minimal information.
  • Deploy the detection rules above and alert on repeated team-attachment attempts with varying team IDs.

2) Patch / upgrade steps:

  • Upgrade to Vikunja 2.6.0 or later, but first confirm the fix against the project's official release notes/changelog, since the patch is only single-sourced (OSV) here.
  • After upgrading, re-run the enumeration attempt in a test environment to verify that unauthorized team IDs are rejected.
  • Rotate any credentials for accounts whose admin status may have been disclosed if a compromise is suspected.

3) Long-term hardening:

  • Enforce server-side object-level and function-level authorization on every endpoint, validating that the caller owns or has rights to every referenced object ID — never trusting client-supplied IDs.
  • Adopt a centralized authorization middleware pattern to prevent recurring IDOR/broken-access-control classes.
  • Use non-enumerable identifiers (e.g., UUIDs) for teams and projects as defense in depth.
  • Add automated authorization regression tests to CI/CD for team and project endpoints.
  • Continuously monitor Vikunja release channels and OSV for updates to this advisory.

References

Exploitation evidence: No public PoC, no Nuclei template, and no exploit code were identified. EPSS of 0.00271 (~19.4th percentile) indicates low near-term exploitation likelihood. No CISA KEV listing and no known threat-actor campaigns are associated with CVE-2026-91980 at the time of writing. The absence of observed exploitation does not reduce the value of this disclosure to a motivated authenticated attacker, given its low complexity and reconnaissance value.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-91980/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.