{"id":"CVE-2026-121545","kind":"vulnerability","aliases":["CVE-2026-121545"],"related":[],"title":"Dreeve: forged Strava webhook events can delete imported activities","description":"Dreeve before 5.8.0 contains a missing authentication vulnerability in StravaWebhookRequestHandler::handleEvent that allows unauthenticated attackers to forge Strava webhook events without signature, verify-token or owner_id checks. Attackers can send forged delete events with a known public Strava activity id to the webhook URL, causing permanent deletion of imported activities and their streams.","summary":"Dreeve before 5.8.0 accepts Strava webhook events without checking the signature, verify token, or owner id. An unauthenticated attacker can send forged delete events for a known public Strava activity id and permanently remove imported activities and their streams.","severity":"medium","cvss":6.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["dreeve","package","php","self-hosted","strava"],"not_affected_if":["version-5.8.0-or-later","webhook-not-exposed"],"how_to_check":"- Check the installed Dreeve version against `5.8.0`\n- Look for the `StravaWebhookRequestHandler` class and confirm whether `handleEvent` verifies a signature, verify token, or owner_id","fix":"- Dreeve: move to `5.8.0` or later","status":"open","published_at":"2026-11-03T16:17:26+00:00","first_seen_at":"2026-11-03T16:21:43+00:00","triaged_at":"2026-11-03T16:23:58+00:00","updated_at":"2026-11-03T16:23:58+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-03T16:23:58Z","model":"claude-haiku-5-5","output":{"fix":"- Dreeve: move to `5.8.0` or later","reach":"internet","title":"Dreeve: forged Strava webhook events can delete imported activities","impact":"medium","summary":"Dreeve before 5.8.0 accepts Strava webhook events without checking the signature, verify token, or owner id. An unauthenticated attacker can send forged delete events for a known public Strava activity id and permanently remove imported activities and their streams.","audience":"businesses","category":"package","nicknames":[],"who_cares":["dreeve","strava","self-hosted","php"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Imported activities and their streams are permanently deleted by forged events","analyst_note":"","how_to_check":"- Check the installed Dreeve version against `5.8.0`\n- Look for the `StravaWebhookRequestHandler` class and confirm whether `handleEvent` verifies a signature, verify token, or owner_id\n- unknown whether other checks apply","plain_action":"","needs_analyst":false,"not_affected_if":["version-5.8.0-or-later","webhook-not-exposed"],"who_is_affected":"Teams running Dreeve with the Strava webhook endpoint exposed to the internet are affected. Deployments that do not expose the Strava webhook URL, or that run a version at or above 5.8.0, can skip it. unknown whether the sources list other preconditions.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000685,"input_tokens":4201,"output_tokens":530,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-121545':12A,15A '-2026':11A,14A '5.8.0':25B,64C 'accept':26B 'activ':9A,52B,58B,102C,113C 'allow':74C 'attack':41B,76C,91C 'authent':68C 'caus':108C 'check':31B,90C 'contain':65C 'cve':10A,13A 'delet':7A,45B,95C,110C 'dreev':1A,16B,23B,62C 'event':5A,29B,46B,81C,96C 'forg':2A,44B,78C,94C 'handleev':72C 'host':21B 'id':38B,53B,89C,103C 'import':8A,57B,112C 'known':49B,99C 'miss':67C 'owner':37B,88C 'packag':17B 'perman':55B,109C 'php':18B 'public':50B,100C 'remov':56B 'self':20B 'self-host':19B 'send':43B,93C 'signatur':33B,83C 'strava':3A,22B,27B,51B,79C,101C 'stravawebhookrequesthandl':71C 'stream':61B,116C 'token':35B,86C 'unauthent':40B,75C 'url':107C 'verifi':34B,85C 'verify-token':84C 'vulner':69C 'webhook':4A,28B,80C,106C 'without':30B,82C","nicknames":[],"mitigations":[],"who_affected":"Teams running Dreeve with the Strava webhook endpoint exposed to the internet are affected. Deployments that do not expose the Strava webhook URL, or that run a version at or above 5.8.0, can skip it. unknown whether the sources list other preconditions.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["dreeve","medium","package","php","selfhosted","strava"],"campaign_type":null,"first_public_at":"2026-11-03T16:17:26+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N/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","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-121545","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-121545","severity":null,"published_at":"2026-11-03T16:17:26+00:00","modified_at":"2026-11-03T16:17:26+00:00","first_seen_at":"2026-11-03T16:21:43+00:00","fetched_at":"2026-11-03T16:21:43+00:00","note":null}],"documents":[{"id":58826,"url":"https://github.com/dreeveapp/dreeve/commit/1e88f7664a95ecbffd299195f4730a60fcd3181a","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":58827,"url":"https://www.vulncheck.com/advisories/dreeve-before-5.8.0-missing-authentication-in-strava-webhook-post-handler","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}