{
  "affected": [
    {
      "ranges": [
        {
          "database_specific": {
            "versions": [
              {
                "introduced": "2026.1.0-latest"
              },
              {
                "fixed": "2026.1.2"
              }
            ]
          },
          "events": [
            {
              "introduced": "322d3c0ac6a8f133b3f82875e9dbbe310f638c1b"
            },
            {
              "fixed": "808b2ac23d8ff421563b40203091026732471c60"
            }
          ],
          "repo": "https://github.com/discourse/discourse",
          "type": "GIT"
        },
        {
          "database_specific": {
            "versions": [
              {
                "introduced": "2026.2.0-latest"
              },
              {
                "fixed": "2026.2.1"
              }
            ]
          },
          "events": [
            {
              "introduced": "f7cec86997edc21d6074ceb7666f7e2e6e1b1fdf"
            },
            {
              "fixed": "f38464e46df1b8c51f7d60826502476908d6bb2b"
            }
          ],
          "repo": "https://github.com/discourse/discourse",
          "type": "GIT"
        },
        {
          "database_specific": {
            "versions": [
              {
                "introduced": "0"
              },
              {
                "last_affected": "= 2026.3.0-latest.1"
              }
            ]
          },
          "events": [
            {
              "introduced": "0"
            },
            {
              "last_affected": "d02b29668fc9c5647c0b1e2cefed2967e7647838"
            }
          ],
          "repo": "https://github.com/discourse/discourse",
          "type": "GIT"
        }
      ]
    }
  ],
  "aliases": [
    "GHSA-fgxm-prjv-g823"
  ],
  "database_specific": {
    "cna_assigner": "GitHub_M",
    "cwe_ids": [
      "CWE-20",
      "CWE-863"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31805.json"
  },
  "details": "Discourse is an open-source discussion platform. Prior to versions 2026.3.0-latest.1, 2026.2.1, and 2026.1.2, an authorization bypass in the poll plugin allowed authenticated users to vote on, remove votes from, or toggle the open/closed status of polls they did not have access to. By passing post_id as an array (e.g. post_id[]=\u0026post_id[]=), the authorization check resolves to the accessible post while the poll lookup resolves to a different post's poll. This affects the vote, remove_vote, and toggle_status endpoints in DiscoursePoll::PollsController. Versions 2026.3.0-latest.1, 2026.2.1, and 2026.1.2 contain a patch.",
  "id": "CVE-2026-31805",
  "modified": "2026-04-01T23:09:22.279117397Z",
  "published": "2026-03-20T03:07:14.755Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31805.json"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/discourse/discourse/security/advisories/GHSA-fgxm-prjv-g823"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-31805"
    },
    {
      "type": "FIX",
      "url": "https://github.com/discourse/discourse/commit/1a6b3cdd8939053f485a60a6ea004a40878392c4"
    }
  ],
  "schema_version": "1.7.3",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Discourse has a poll authorization bypass via post_id array parameter"
}