Skip to content
Heist/ feed
Back to feed
Medium

Vikunja: Project duplication bypasses write-permission check on the target parent project

Type: advisorySources: OSV

Vikunja is an open-source self-hosted task management platform. From 0.21.0 until 2.4.0, the project duplication operation in pkg/models/project_duplicate.go allows an authenticated user who can read a source project to place its duplicate beneath an arbitrary target parent project. ProjectDuplicate.CanCreate calls parent.CanCreate on an unhydrated Project containing only the body supplied parent_project_id instead of calling parent.CanWrite, so the target parent write-permission check is skipped. The ordinary project creation path enforces that permission, but PUT /api/v1/projects/{project}/duplicate does not, allowing attacker-owned content to be injected into another user or team project hierarchy. This issue is fixed in version 2.4.0.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-54766
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 08:35 UTC · Revision 1

Source evidence

Vikunja: Project duplication bypasses write-permission check on the target parent project

core-osv · Original source

Published 28 Aug 2026, 16:36 UTC

Vikunja is an open-source self-hosted task management platform. From 0.21.0 until 2.4.0, the project duplication operation in pkg/models/project_duplicate.go allows an authenticated user who can read a source project to place its duplicate beneath an arbitrary target parent project. ProjectDuplicate.CanCreate calls parent.CanCreate on an unhydrated Project containing only the body supplied parent_project_id instead of calling parent.CanWrite, so the target parent write-permission check is skipped. The ordinary project creation path enforces that permission, but PUT /api/v1/projects/{project}/duplicate does not, allowing attacker-owned content to be injected into another user or team project hierarchy. This issue is fixed in version 2.4.0.

osv:CVE-2026-54766
Complete source record
{
  "id": "6d49edaf6a85d3e01e9a7a77689b2be09e68093f1d0a15b875fe92b9716523af",
  "url": "https://osv.dev/vulnerability/CVE-2026-54766",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Vikunja: Project duplication bypasses write-permission check on the target parent project",
    "summary": "Vikunja is an open-source self-hosted task management platform. From 0.21.0 until 2.4.0, the project duplication operation in pkg/models/project_duplicate.go allows an authenticated user who can read a source project to place its duplicate beneath an arbitrary target parent project. ProjectDuplicate.CanCreate calls parent.CanCreate on an unhydrated Project containing only the body supplied parent_project_id instead of calling parent.CanWrite, so the target parent write-permission check is skipped. The ordinary project creation path enforces that permission, but PUT /api/v1/projects/{project}/duplicate does not, allowing attacker-owned content to be injected into another user or team project hierarchy. This issue is fixed in version 2.4.0.",
    "evidence": "osv:CVE-2026-54766",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-54766",
      "aliases": [
        "CVE-2026-54766",
        "GHSA-f27p-pw2p-9pr4",
        "GO-2026-6311"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/go-vikunja/vikunja",
              "type": "GIT",
              "events": [
                {
                  "introduced": "e5cd4897d6be52c5bacb39a4ddae322921bfc0ee"
                },
                {
                  "fixed": "907850feae3866ae9b16ea1c7b84a4d77273415a"
                },
                {
                  "fixed": "d911caaa11c748c3abc6b98b3189afea2677bcb0"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0.21.0"
                      },
                      {
                        "fixed": "2.4.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "d911caaa11c748c3abc6b98b3189afea2677bcb0"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "907850feae3866ae9b16ea1c7b84a4d77273415a"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v2.4.0"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v2.3.0",
            "v2.2.2",
            "v2.2.1",
            "v2.2.0",
            "v2.1.0",
            "v2.0.0",
            "v1.1.0",
            "v1.0.0",
            "v1.0.0-rc4",
            "v1.0.0-rc3",
            "v1.0.0-rc2",
            "v1.0.0-rc1",
            "v1.0.0-rc0",
            "v0.24.1",
            "v0.23.0",
            "v0.22.1",
            "v0.22.0",
            "v0.21.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-54766.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:27.449634563Z",
      "provider": "osv",
      "references": [
        "https://github.com/go-vikunja/vikunja/releases/tag/v2.4.0",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54766.json",
        "https://github.com/go-vikunja/vikunja/security/advisories/GHSA-f27p-pw2p-9pr4",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-54766",
        "https://github.com/go-vikunja/vikunja/commit/d911caaa11c748c3abc6b98b3189afea2677bcb0",
        "https://github.com/go-vikunja/vikunja/pull/3239"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-285",
          "CWE-863"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54766.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-54766",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 493866,
  "published_at": "2026-08-28T16:36:57.857+00:00"
}