Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify publicly exposed github-issue-bot endpoint
-
DeliverySend HTTP POST omitting X-Hub-Signature-256 header
-
ExploitInverted OR condition short-circuits HMAC check to success
-
ExecutionAttacker-controlled repository and issue fields parsed from body
-
PersistDeployment GITHUB_TOKEN authenticates to GitHub API
-
ImpactUnauthorized comment posted on target issue
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
|
| Exploitation Conditions | The github-issue-bot template must be deployed as a publicly accessible function endpoint with a GITHUB_TOKEN configured with write access to at least one GitHub repository. The sole triggering condition is omitting the X-Hub-Signature-256 HTTP header - no authentication, no special tooling, and no account is required. Exploitation is limited to deployments using appwrite/templates ≤ 1.1.2; other Appwrite templates or Appwrite core are not affected by this issue. The blast radius is bounded by the permissions of the configured GITHUB_TOKEN: a token restricted to a single repository limits the attacker's ability to post comments to that repository only. No user interaction is required. |
| Impact | The CVSS 5.8 with vector AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N is appropriate: the attack is trivially executable over the network without credentials or complexity, and the Scope:Changed metric reflects that the configured GITHUB_TOKEN is leveraged to affect GitHub repositories outside the vulnerable application boundary. Real-world risk is bounded by deployment prevalence and GITHUB_TOKEN permissions - if the token is scoped narrowly, the attacker can only post comments on repositories where it holds write access. No EPSS data was provided and the vulnerability is not listed in CISA KEV, indicating no confirmed widespread exploitation. However, the zero-barrier attack (omit one HTTP header, craft a JSON body) means any exposed deployment is trivially abusable. The 'Jwt Attack' tag in the source intelligence is a miscategorization - this is an HMAC webhook bypass, not a JWT flaw. Confidentiality impact is correctly rated None; the only real-world consequence is unauthorized GitHub comment posting, which carries reputational and social-engineering risk (e.g., posting malicious links under the bot's identity) rather than data exfiltration. |
| Exploit ScenarioDerived | An attacker sends an HTTP POST to the publicly accessible github-issue-bot function endpoint, omitting the X-Hub-Signature-256 header and supplying a JSON body with attacker-chosen 'repository', 'issue', and 'sender.login' fields. The inverted condition in verifyWebhook returns true, main.js continues to postComment, and the deployment's GITHUB_TOKEN posts an attacker-crafted comment to the specified GitHub issue. The attacker can repeat this against any repository accessible by the token, for example to post phishing links or impersonate bot activity on public issues. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 20, 2026
Webhook signature bypass in the appwrite/templates github-issue-bot (≤ 1.1.2) allows any unauthenticated network caller to invoke the bot's comment-posting functionality without a valid GitHub HMAC signature. An inverted boolean condition in verifyWebhook causes requests lacking the X-Hub-Signature-256 header to short-circuit to success, so the body is processed as if it were a legitimate GitHub event. With attacker-controlled repository, issue, and author fields passed directly to postComment, the deployment's GITHUB_TOKEN is used to post arbitrary comments on any accessible GitHub repository and issue. No public exploit code is identified at time of analysis.
RemediationAI
No vendor-released patched version is independently confirmed in the available data - the fix version must be verified by monitoring the upstream repository at https://github.com/appwrite/templates and the tracking issue at https://github.com/appwrite/templates/issues/350. The code fix requires inverting the verification logic so that an absent or non-string X-Hub-Signature-256 header causes verifyWebhook to return false (reject), not true; the corrected condition should be typeof signature === 'string' && (await verify(...)). As an immediate compensating control, restrict network ingress to the deployed github-issue-bot endpoint to GitHub's published webhook source IP ranges (available via the GitHub meta API at https://api.github.com/meta under the 'hooks' key) - this prevents arbitrary callers from reaching the vulnerable endpoint, though it does not fix the code defect. Additionally, audit the GITHUB_TOKEN in use: restrict it to the minimum required repository scope and rotate it if unauthorized comment activity is detected. Deployers who cannot apply network restrictions should consider disabling the github-issue-bot deployment until a patched release is confirmed.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw resides in verifyWebhook, implemented in both node/github-issue-bot/src/github.js and node-typescript/github-issue-bot/src/github.ts within the appwrite/templates repository (CPE: cpe:2.3:a:appwrite:templates:*:*:*:*:*:*:*:*). The expression typeof signature ! 'string' || (await verify(...)) inverts the intended guard: when the X-Hub-Signature-256 header is absent, typeof signature ! 'string' evaluates to true, short-circuiting the logical OR and returning true (success) before any HMAC check occurs. The correct intent requires rejecting absent or invalid signatures - achieved by separating the null-check as a rejection path or negating the condition. CWE-347 (Improper Verification of Cryptographic Signature) is the root cause class. The downstream handler main.js rejects requests only when verifyWebhook returns false, so the bypass is complete. The GITHUB_TOKEN scoped to the deployment is then exercised against the GitHub API using attacker-supplied repository and issue identifiers, with the issue author login interpolated from the request body into comment text.
Know when Templates gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
Network-reachable with no prerequisites; scope change because GITHUB_TOKEN affects external repositories; integrity limited to comment posting only.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
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.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-63579
GHSA-785c-v4m5-q4wg
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB