{"id":"CVE-2026-109118","kind":"vulnerability","aliases":["CVE-2026-109118"],"related":[],"title":"rdiffweb: path check lets authenticated users reach sibling directories","description":"Improper path containment check in ikus060 rdiffweb 7.1.1 allows an authenticated user to cause the browse, restore, history and delete operations to resolve to a path outside the repository being operated on, via a percent-encoded traversal sequence (%2e%2e) in the request path, because the containment check uses a string prefix comparison (startswith) instead of a filesystem path boundary check. The target must be a sibling path whose name begins with the repository path, and the user already hold permissions on it; the issue can mislead a user into operating on, or deleting, data other than the repository displayed","summary":"rdiffweb 7.1.1 checks repository paths with a plain string prefix comparison, so a percent-encoded traversal sequence can point browse, restore, history and delete operations at a sibling path whose name starts with the repository path. An authenticated user with rights on one repository can act on data outside it, including deleting it.","severity":"medium","cvss":4.6,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","python","rdiffweb","self-hosted"],"not_affected_if":["auth-required","single-user"],"how_to_check":"- Check the installed rdiffweb version with `rdiffweb --version` or `pip show rdiffweb`; affected version is `7.1.1`\n- Confirm whether users with access to one repository also have access to sibling directories whose names share its prefix","fix":"- Upgrade rdiffweb past `7.1.1`; the fixed version is unknown from the sources\n- Until patched, limit user accounts to trusted users and restrict repository directory names so no repository name is a prefix of another","status":"open","published_at":"2026-10-16T11:17:00+00:00","first_seen_at":"2026-10-23T21:57:12+00:00","triaged_at":"2026-10-25T04:35:37+00:00","updated_at":"2026-10-25T04:35:37+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T04:35:37Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade rdiffweb past `7.1.1`; the fixed version is unknown from the sources\n- Until patched, limit user accounts to trusted users and restrict repository directory names so no repository name is a prefix of another","reach":"internet","title":"rdiffweb: path check lets authenticated users reach sibling directories","impact":"medium","summary":"rdiffweb 7.1.1 checks repository paths with a plain string prefix comparison, so a percent-encoded traversal sequence can point browse, restore, history and delete operations at a sibling path whose name starts with the repository path. An authenticated user with rights on one repository can act on data outside it, including deleting it.","category":"package","nicknames":[],"who_cares":["rdiffweb","self-hosted","python"],"confidence":0.6,"needs_auth":"yes","worst_case":"authenticated user deletes or restores data outside their repository","analyst_note":"Find the fixed rdiffweb version and the upstream advisory or commit to confirm affected versions and the exact sibling-path condition.","how_to_check":"- Check the installed rdiffweb version with `rdiffweb --version` or `pip show rdiffweb`; affected version is `7.1.1`\n- Confirm whether users with access to one repository also have access to sibling directories whose names share its prefix","needs_analyst":true,"not_affected_if":["single-user","auth-required"],"who_is_affected":"Deployments of rdiffweb 7.1.1 with multiple user accounts that hold permissions on repositories where some repository directory names begin with the same string as another path on the server. A single-user instance or one where every user is trusted to act on all repositories is at much lower risk. unknown whether other versions are affected.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000653,"input_tokens":3413,"output_tokens":623,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-109118':12A,15A '-2026':11A,14A '2e':114C,115C '7.1.1':23B,82C 'act':68B 'allow':83C 'alreadi':154C 'authent':5A,60B,85C 'begin':146C 'boundari':135C 'brows':42B,90C 'caus':88C 'check':3A,24B,78C,123C,136C 'comparison':32B,128C 'contain':77C,122C 'cve':10A,13A 'data':70B,170C 'delet':46B,74B,94C,169C 'directori':9A 'display':175C 'encod':37B,111C 'filesystem':133C 'histori':44B,92C 'hold':155C 'host':21B 'ikus060':80C 'improp':75C 'includ':73B 'instead':130C 'issu':160C 'let':4A 'mislead':162C 'must':139C 'name':53B,145C 'one':65B 'oper':47B,95C,105C,166C 'outsid':71B,101C 'packag':16B 'path':2A,26B,51B,58B,76C,100C,119C,134C,143C,150C 'percent':36B,110C 'percent-encod':35B,109C 'permiss':156C 'plain':29B 'point':41B 'prefix':31B,127C 'python':17B 'rdiffweb':1A,18B,22B,81C 'reach':7A 'repositori':25B,57B,66B,103C,149C,174C 'request':118C 'resolv':97C 'restor':43B,91C 'right':63B 'self':20B 'self-host':19B 'sequenc':39B,113C 'sibl':8A,50B,142C 'start':54B 'startswith':129C 'string':30B,126C 'target':138C 'travers':38B,112C 'use':124C 'user':6A,61B,86C,153C,164C 'via':107C 'whose':52B,144C","nicknames":[],"mitigations":[],"who_affected":"Deployments of rdiffweb 7.1.1 with multiple user accounts that hold permissions on repositories where some repository directory names begin with the same string as another path on the server. A single-user instance or one where every user is trusted to act on all repositories is at much lower risk. unknown whether other versions are affected.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-16T11:17:00+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:L","cvss_by":"cve@gitlab.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-109118","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109118","severity":null,"published_at":"2026-10-16T11:17:00+00:00","modified_at":"2026-10-16T20:04:29+00:00","first_seen_at":"2026-10-23T21:57:12+00:00","fetched_at":"2026-10-23T22:28:55+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}