Skip to content
Heist/ feed
Back to feed
High

Convoy: Cross-Tenant Source IDOR Leaks Plaintext Message Broker Credentials

Type: advisorySources: OSV

Convoy is a cloud native webhooks gateway. Prior to 26.6.8, Convoy's GET /api/v1/projects/{projectID}/sources/{sourceID} endpoint authorizes access to the project in the URL, but Handler.GetSource calls sources.Service.FindSourceByID() and fetches the Source only by sourceID without confirming that its ProjectID matches the authorized project. An authenticated user or project-scoped API key holder can substitute another tenant's Source identifier and receive that Source's complete record, including unredacted AMQP, Kafka, SQS, or Google PubSub credentials. The list endpoint remains project-scoped; the single-item Source lookup is affected. This issue is fixed in version 26.6.8.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-81505
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 22:28 UTC · Revision 1

Source evidence

Convoy: Cross-Tenant Source IDOR Leaks Plaintext Message Broker Credentials

core-osv · Original source

Published 18 Sept 2026, 16:21 UTC

Convoy is a cloud native webhooks gateway. Prior to 26.6.8, Convoy's GET /api/v1/projects/{projectID}/sources/{sourceID} endpoint authorizes access to the project in the URL, but Handler.GetSource calls sources.Service.FindSourceByID() and fetches the Source only by sourceID without confirming that its ProjectID matches the authorized project. An authenticated user or project-scoped API key holder can substitute another tenant's Source identifier and receive that Source's complete record, including unredacted AMQP, Kafka, SQS, or Google PubSub credentials. The list endpoint remains project-scoped; the single-item Source lookup is affected. This issue is fixed in version 26.6.8.

osv:CVE-2026-81505
Complete source record
{
  "id": "1ec67251f2d4db508ec0e855e161ff24ba0de87f262a05bc86c5c104f1e5edb3",
  "url": "https://osv.dev/vulnerability/CVE-2026-81505",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Convoy: Cross-Tenant Source IDOR Leaks Plaintext Message Broker Credentials",
    "summary": "Convoy is a cloud native webhooks gateway. Prior to 26.6.8, Convoy's GET /api/v1/projects/{projectID}/sources/{sourceID} endpoint authorizes access to the project in the URL, but Handler.GetSource calls sources.Service.FindSourceByID() and fetches the Source only by sourceID without confirming that its ProjectID matches the authorized project. An authenticated user or project-scoped API key holder can substitute another tenant's Source identifier and receive that Source's complete record, including unredacted AMQP, Kafka, SQS, or Google PubSub credentials. The list endpoint remains project-scoped; the single-item Source lookup is affected. This issue is fixed in version 26.6.8.",
    "evidence": "osv:CVE-2026-81505",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-81505",
      "aliases": [
        "CVE-2026-81505",
        "GHSA-p5vg-v7mj-f6q4",
        "GO-2026-6523"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/frain-dev/convoy",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "dbf1db26e9274deb7a7818d63d02ffcb0311e169"
                },
                {
                  "fixed": "1cc67cd16fb1f8890cc83a3998d3f92dceb7fd06"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "26.6.8"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "1cc67cd16fb1f8890cc83a3998d3f92dceb7fd06"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "dbf1db26e9274deb7a7818d63d02ffcb0311e169"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v26.6.8"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v26.6.7",
            "v26.6.6",
            "v26.6.5",
            "v26.6.4",
            "v26.6.3",
            "v26.6.2",
            "v26.6.1",
            "v26.6.0",
            "release-cutoff-2026-06",
            "v25.9.2",
            "v26.3.7",
            "release-cutoff-2026-05",
            "release-cutoff-2026-04",
            "v26.3.6",
            "release-cutoff-2026-03",
            "v26.3.5",
            "v26.2.1",
            "v26.2.0",
            "v26.1.4",
            "v26.1.3",
            "v26.1.2",
            "v25.12.10",
            "v26.1.1",
            "v25.12.9",
            "v25.12.8",
            "v25.12.7",
            "v25.12.6",
            "v25.12.5",
            "v25.12.4",
            "v25.12.2",
            "v25.12.1",
            "v25.11.9",
            "v25.11.3",
            "v25.11.2",
            "v25.11.1",
            "v25.10.1-alpha.2",
            "v25.10.1-alpha.1",
            "v25.10.0-alpha.1",
            "v25.9.1",
            "v25.5.1-hotfix.1",
            "v25.2.2",
            "v25.2.1",
            "v25.1.1",
            "v24.11.3",
            "v24.11.2",
            "v24.11.1",
            "v24.9.2",
            "v24.9.1",
            "v24.8.2",
            "v24.8.1",
            "v24.1.4",
            "v24.6.1",
            "v24.5.1",
            "v24.4.1",
            "v24.1.5",
            "v24.1.3",
            "v24.1.2",
            "v24.1.1",
            "v23.11.1",
            "v23.10.1",
            "v23.9.2",
            "v23.09.1",
            "v23.08.2",
            "v23.08.1",
            "v23.06.3",
            "v23.06.2",
            "v23.06.1",
            "v23.05.5",
            "v23.05.4",
            "v23.05.3",
            "v23.05.2",
            "v23.05.1",
            "v0.9.2",
            "v0.9.1",
            "v0.9.0",
            "v0.9.0-rc.3",
            "v0.9.0-rc.2",
            "v0.9.0-rc.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-81505.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:23.956712855Z",
      "provider": "osv",
      "references": [
        "https://github.com/frain-dev/convoy/releases/tag/v26.6.8",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/81xxx/CVE-2026-81505.json",
        "https://github.com/frain-dev/convoy/security/advisories/GHSA-p5vg-v7mj-f6q4",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-81505",
        "https://github.com/frain-dev/convoy/commit/1cc67cd16fb1f8890cc83a3998d3f92dceb7fd06",
        "https://github.com/frain-dev/convoy/pull/2755"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-639"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/81xxx/CVE-2026-81505.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-81505",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 490550,
  "published_at": "2026-09-18T16:21:17.278+00:00"
}