OTTERDOG-WEBAPP · CVE-2026-123870 · Other
NO FIX YET · SEE WHAT TO DO
The otterdog webapp builds a format string from incoming GitHub webhook JSON and evaluates it with Python's eval(). When GITHUB_WEBHOOK_SECRET is unset or empty, the signature check is skipped, so an unauthenticated network client can execute arbitrary Python on the host.
first public Nov 9, 2026 · 2 sources
Could this affect your app?
Free first check from your website. Connect your repo for the full answer.
Teams that self-host the otterdog webapp (eclipse-csi/otterdog) and receive GitHub webhooks at it. It is exploitable when GITHUB_WEBHOOK_SECRET is unset or empty, which skips signature checking and lets an unauthenticated client reach eval() through the webhook's action field. The advisory says the PyPI otterdog package is not affected because the webapp is excluded from the wheel. Deployments with a non-empty secret, or without a network-reachable webhook endpoint, can skip it.
Not affected if endpoint-not-exposed, pypi-package-only, webhook-secret-set
Who cares github-webhooks, otterdog, python, self-hosted
The otterdog webapp evaluates a format-string built from the incoming GitHub webhook JSON body using Python's eval(). When the GITHUB_WEBHOOK_SECRET configuration value is unset or empty (the code default is None), the HMAC signature check is skipped entirely, allowing an unauthenticated network client to reach the eval() sink with attacker-controlled input and execute arbitrary Python on the webapp host.
This page as .md · .json · CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.
Are you affected?
Tell InfraStack what you run. It checks this one, and every next one, against your stack.
Ask from here. InfraStack checks the affected versions against your stack and answers in your inbox.
InfraStack checks the affected versions against your stack and answers in Slack, with the evidence and the fix.
1.3.3 as patched but also says no fix is on the default branch; no release containing the commit is confirmed