---
id: CVE-2026-72861
title: >-
  The github-issue-bot templates in appwrite/templates verify the GitHub webhook
  signature with an inverted condition
summary: >-
  The github-issue-bot templates in appwrite/templates verify the GitHub webhook
  signature with an inverted condition. verifyWebhook in
  node/github-issue-bot/src/github.js and in
  node-typescript/github-issue-bot/src/github.ts returns "type…
severity: medium
cvss: 5.8
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N'
cwe:
  - CWE-347
vendor: appwrite
product: templates
affected:
  - templates <= 1.1.2
published: '2026-08-20'
updated: '2026-09-24'
sourceUpdated: '2026-09-24T20:43:32.537'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-72861'
references:
  - url: 'https://github.com/appwrite/templates'
    label: disclosure@vulncheck.com
  - url: >-
      https://github.com/appwrite/templates/blob/1.1.2/node-typescript/github-issue-bot/src/github.ts
    label: disclosure@vulncheck.com
  - url: >-
      https://github.com/appwrite/templates/blob/1.1.2/node/github-issue-bot/src/github.js
    label: disclosure@vulncheck.com
  - url: >-
      https://github.com/appwrite/templates/blob/1.1.2/node/github-issue-bot/src/main.js
    label: disclosure@vulncheck.com
  - url: 'https://github.com/appwrite/templates/issues/350'
    label: disclosure@vulncheck.com
  - url: >-
      https://www.vulncheck.com/advisories/appwrite-templates-github-issue-bot-skips-webhook-signature-verification-when-the-x-hub-signature-256-header-is-absent
    label: disclosure@vulncheck.com
tags:
  - nvd
  - cve.org
epss: 0.00269
epssPercentile: 0.17052
ssvc:
  exploitation: none
  automatable: 'yes'
  technicalImpact: partial
  timestamp: '2026-08-21T21:33:32.540767Z'
ingestedAt: '2026-09-24T15:45:56.710Z'
---

## Overview

The github-issue-bot templates in appwrite/templates verify the GitHub webhook signature with an inverted condition. verifyWebhook in node/github-issue-bot/src/github.js and in node-typescript/github-issue-bot/src/github.ts returns "typeof signature !== 'string' || (await verify(...))", so when the X-Hub-Signature-256 header is absent the first operand is true, the logical OR short-circuits, and the function reports success without performing any HMAC verification. main.js rejects a request only when verifyWebhook returns false, so an unauthenticated request carrying no signature passes the check. Processing then continues to postComment, which takes the repository and issue objects directly from the request body, letting the caller direct the deployed function to post a comment on a repository and issue of their choosing using the configured GITHUB_TOKEN, with the issue author login from the body interpolated into the comment text.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
