<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-23T23:11:47.422845+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/fkie_cve-2026-81505</id>
    <title>fkie_cve-2026-81505</title>
    <updated>2026-10-23T23:11:47.448960+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>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.</p>
      </div>
    </content>
    <link href="https://db.gcve.eu/vuln/fkie_cve-2026-81505"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-p5vg-v7mj-f6q4</id>
    <title>GHSA-p5vg-v7mj-f6q4 — Convoy: Cross-Tenant Source IDOR Leaks Plaintext Message Broker Credentials</title>
    <updated>2026-10-23T23:11:47.449046+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Go: github.com/frain-dev/convoy</p>
<p>## Summary
frain-dev/convoy (all versions up to and including v26.6.2, no patch
available) lets any authenticated caller who is authorized on at least one
project read ANY OTHER project's "Source" record by ID via
GET /api/v1/projects/{projectID}/sources/{sourceID} -- regardless of whether
that Source actually belongs to the project named in the URL. The response
includes the Source's full PubSub broker configuration in plaintext
(AMQP/Kafka/SQS/Google credentials), with no redaction.</p>
<p>## Details
`Handler.GetSource` (api/handlers/source.go) resolves the caller's
authorization against the {projectID} in the URL via retrieveProject(), then
calls `sources.Service.FindSourceByID(ctx, project.UID, sourceID)`
(internal/sources/impl.go). That function accepts a projectID parameter but
never uses it:</p>
<p>func (s *Service) FindSourceByID(ctx context.Context, projectID, id string) (*datastore.Source, error) {
        row, err := s.repo.FetchSourceByID(ctx, common.StringToPgText(id))
        ...
    }</p>
<p>The underlying SQL query (internal/sources/repo/queries.sql,
`fetchSourceByID`) has no project_id predicate at all:</p>
<p>SELECT ... FROM convoy.sources AS s
    LEFT JOIN convoy.source_verifiers sv ON s.source_verifier_id = sv.id
    WHERE s.id = $1 AND s.deleted_at IS NULL</p>
<p>So the {projectID} in the URL only gates "is the caller authorized to view
*a* project" -- it never re-validates that the fetched Source actually
belongs to that project. `LoadSourcesPaged` (the list endpoint) does…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-p5vg-v7mj-f6q4"/>
  </entry>
</feed>
