← Back to CVE Explorer

CVE-2026-43977

Full vulnerability record from the local CVENow database.

Description

wger is a free, open-source workout and fitness manager. In versions prior to 2.6, any authenticated user can read another user's private workout session notes, exercise history, and training statistics by calling the /logs/ and /stats/ actions on a routine they do not own. The vulnerability exists in RoutineViewSet (wger/manager/api/views.py). The view defines two custom actions /logs/ and /stats/ that are intended to return data for the requesting user's own training history within a routine. However, the underlying permission check (RoutinePermission.has_object_permission) grants read access to any authenticated user when the routine has is_template=True, regardless of ownership. When the /logs/ or /stats/ actions are invoked against a routine the attacker does not own, they return the owner's private workout history, not the attacker's. This issue has been fixed in version 2.6.

Severity
HIGH
CVSS score
7.5 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-07-16 23:16:16.167000
Last modified
2026-10-24 20:10:00.137000
View original CVE JSON
{
  "id": "CVE-2026-43977",
  "sourceIdentifier": "[email protected]",
  "published": "2026-07-16T23:16:16.167",
  "lastModified": "2026-10-24T20:10:00.137",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "wger is a free, open-source workout and fitness manager. In versions prior to 2.6, any authenticated user can read another user's private workout session notes, exercise history, and training statistics by calling the /logs/ and /stats/ actions on a routine they do not own. The vulnerability exists in RoutineViewSet (wger/manager/api/views.py). The view defines two custom actions /logs/ and /stats/ that are intended to return data for the requesting user's own training history within a routine. However, the underlying permission check (RoutinePermission.has_object_permission) grants read access to any authenticated user when the routine has is_template=True, regardless of ownership. When the /logs/ or /stats/ actions are invoked against a routine the attacker does not own, they return the owner's private workout history, not the attacker's. This issue has been fixed in version 2.6."
    },
    {
      "lang": "es",
      "value": "wger es un gestor de entrenamientos y fitness gratuito y de código abierto. En versiones anteriores a la 2.6, cualquier usuario autenticado puede leer las notas privadas de la sesión de entrenamiento de otro usuario, el historial de ejercicios y las estadísticas de entrenamiento llamando a las acciones /logs/ y /stats/ en una rutina que no les pertenece. La vulnerabilidad existe en RoutineViewSet (wger/manager/api/views.py). La vista define dos acciones personalizadas /logs/ y /stats/ que están destinadas a devolver datos para el historial de entrenamiento del propio usuario solicitante dentro de una rutina. Sin embargo, la comprobación de permisos subyacente (RoutinePermission.has_object_permission) otorga acceso de lectura a cualquier usuario autenticado cuando la rutina tiene is_template=True, independientemente de la propiedad. Cuando se invocan las acciones /logs/ o /stats/ contra una rutina que el atacante no posee, devuelven el historial de entrenamiento privado del propietario, no el del atacante. Este problema se ha solucionado en la versión 2.6."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "wger-project",
          "product": "wger",
          "versions": [
            {
              "version": "< 2.6",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
          "baseScore": 7.5,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "NONE",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 3.6
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-07-17T13:14:26.159335Z",
          "id": "CVE-2026-43977",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-639"
        },
        {
          "lang": "en",
          "value": "CWE-863"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/wger-project/wger/security/advisories/GHSA-cj9g-27ph-4cgv",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/wger-project/wger/security/advisories/GHSA-cj9g-27ph-4cgv",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}