{"id":"CVE-2026-77059","kind":"vulnerability","aliases":["CVE-2026-77059"],"related":[],"title":"boneIO Black: race in sudoers file write enables local root escalation","description":"boneIO Black contains a TOCTOU race condition in the create_timedatectl_sudoers_file() function in boneio/webui/routes/timezone_sudoers.py. The function writes sudoers rules to a predictable temporary file, validates them, then installs them with root privileges. A local attacker can exploit the race window between validation and installation to substitute malicious content, or use the predictable filename for symlink attacks, resulting in arbitrary sudoers rule injection and local privilege escalation to root.\n\nThis issue was fixed in version 1.6.0.","summary":"boneIO Black writes sudoers rules to a predictable temporary file, validates them, then installs them as root, leaving a race window. A local user can swap the content or use a symlink on that filename to inject arbitrary sudoers rules and become root.","severity":"high","cvss":8.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["boneio","infrastructure","linux","raspberry-pi","self-hosted"],"not_affected_if":["fixed-version-1.6.0-or-later"],"how_to_check":"- Check the installed boneIO Black version; the sources say it is fixed in `1.6.0`.\n- Check whether `boneio/webui/routes/timezone_sudoers.py` exists and contains `create_timedatectl_sudoers_file()`, which the sources name as the affected function.","fix":"- Upgrade boneIO Black to `1.6.0` or later.","status":"open","published_at":"2026-10-26T15:16:43+00:00","first_seen_at":"2026-10-26T16:02:26+00:00","triaged_at":"2026-10-26T16:03:33+00:00","updated_at":"2026-10-26T16:03:33+00:00","category":"infrastructure","confidence":0.6,"triage":{"at":"2026-10-26T16:03:33Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade boneIO Black to `1.6.0` or later.","reach":"local","title":"boneIO Black: race in sudoers file write enables local root escalation","impact":"high","summary":"boneIO Black writes sudoers rules to a predictable temporary file, validates them, then installs them as root, leaving a race window. A local user can swap the content or use a symlink on that filename to inject arbitrary sudoers rules and become root.","category":"infrastructure","nicknames":[],"who_cares":["boneio","self-hosted","raspberry-pi","linux"],"confidence":0.6,"needs_auth":"yes","worst_case":"A local user gains root and can run any command on the device.","analyst_note":"Confirm from the NVD entry or the upstream fix commit whether the vulnerable code path is reachable from the web UI or only from local shell access, and whether a workaround exists before 1.6.0.","how_to_check":"- Check the installed boneIO Black version; the sources say it is fixed in `1.6.0`.\n- Check whether `boneio/webui/routes/timezone_sudoers.py` exists and contains `create_timedatectl_sudoers_file()`, which the sources name as the affected function.","needs_analyst":true,"not_affected_if":["fixed-version-1.6.0-or-later"],"who_is_affected":"Any boneIO Black installation with a version before `1.6.0` that exposes the affected timezone route is exposed to a local attacker with a shell on the device. Hosts where only trusted administrators log in have a much smaller risk. The sources do not say whether the web UI route must be reached for the race to be triggered.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000636,"input_tokens":3397,"output_tokens":593,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-77059':14A,17A '1.6.0':146C 'arbitrari':64B,130C 'attack':106C,127C 'becom':68B 'black':2A,28B,71C 'boneio':1A,18B,27B,70C 'boneio/webui/routes/timezone_sudoers.py':85C 'condit':76C 'contain':72C 'content':54B,119C 'creat':79C 'cve':12A,15A 'enabl':8A 'escal':11A,137C 'exploit':108C 'file':6A,36B,82C,95C 'filenam':61B,124C 'fix':143C 'function':83C,87C 'host':26B 'infrastructur':19B 'inject':63B,133C 'instal':40B,99C,115C 'issu':141C 'leav':44B 'linux':20B 'local':9A,49B,105C,135C 'malici':118C 'pi':23B 'predict':34B,93C,123C 'privileg':103C,136C 'race':3A,46B,75C,110C 'raspberri':22B 'raspberry-pi':21B 'result':128C 'root':10A,43B,69B,102C,139C 'rule':31B,66B,90C,132C 'self':25B 'self-host':24B 'substitut':117C 'sudoer':5A,30B,65B,81C,89C,131C 'swap':52B 'symlink':58B,126C 'temporari':35B,94C 'timedatectl':80C 'toctou':74C 'use':56B,121C 'user':50B 'valid':37B,96C,113C 'version':145C 'window':47B,111C 'write':7A,29B,88C","nicknames":[],"mitigations":[],"who_affected":"Any boneIO Black installation with a version before `1.6.0` that exposes the affected timezone route is exposed to a local attacker with a shell on the device. Hosts where only trusted administrators log in have a much smaller risk. The sources do not say whether the web UI route must be reached for the race to be triggered.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T15:16:43+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:L/AC:L/AT:P/PR:L/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","cvss_by":"cvd@cert.pl","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-77059","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77059","severity":null,"published_at":"2026-10-26T15:16:43+00:00","modified_at":"2026-10-26T15:16:43+00:00","first_seen_at":"2026-10-26T16:02:26+00:00","fetched_at":"2026-10-26T16:02:26+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"}