{"id":"CVE-2026-108262","kind":"vulnerability","aliases":["CVE-2026-108262"],"related":[],"title":"DDEV: crafted tar archive can write files outside extraction directory","description":"DDEV is an open-source tool for running local web development environments for PHP and Node.js. From 1.25.2 until 1.25.4, Untar in pkg/archive/archive.go validates an absolute tar symlink target after rebasing it beneath dest, but creates the symlink with the raw absolute Linkname. A crafted archive can therefore plant a host-absolute symlink and use a following regular-file entry to write outside the extraction directory. The flaw is reachable through remote add-on retrieval and database or file imports, and overwriting shell startup files, Git hooks, or cron entries can lead to code execution in the DDEV user's context. Unzip is not affected. This issue is fixed in version 1.25.4.","summary":"DDEV, a local web development tool, extracts tar archives in a way that lets a crafted archive plant an absolute symlink and then write files outside the extraction folder. An attacker who gets a developer to fetch an add-on or import a database or file can overwrite shell startup files, Git hooks or cron entries, leading to code execution as the DDEV user.","severity":"medium","cvss":6.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ddev","local-dev","node.js","package","php"],"not_affected_if":["trusted-imports-only","unzip-only"],"how_to_check":null,"fix":"- DDEV: move to `1.25.4`.","status":"open","published_at":"2026-11-06T19:17:06+00:00","first_seen_at":"2026-11-06T19:43:48+00:00","triaged_at":"2026-11-06T19:45:55+00:00","updated_at":"2026-11-06T19:45:55+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-06T19:45:55Z","model":"claude-haiku-5-5","output":{"fix":"- DDEV: move to `1.25.4`.","reach":"local","title":"DDEV: crafted tar archive can write files outside extraction directory","impact":"high","summary":"DDEV, a local web development tool, extracts tar archives in a way that lets a crafted archive plant an absolute symlink and then write files outside the extraction folder. An attacker who gets a developer to fetch an add-on or import a database or file can overwrite shell startup files, Git hooks or cron entries, leading to code execution as the DDEV user.","audience":"developers","category":"package","nicknames":[],"who_cares":["ddev","local-dev","php","node.js"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Attacker runs code as the developer's DDEV user via overwritten startup files","analyst_note":"","how_to_check":"- Run `ddev version` and check whether the DDEV version is between `1.25.2` and `1.25.3`.\n- Check whether the team uses remote add-on retrieval or database/file imports through DDEV.","plain_action":"","needs_analyst":false,"not_affected_if":["unzip-only","trusted-imports-only"],"who_is_affected":"Developers running DDEV from 1.25.2 up to but not including 1.25.4 are exposed, especially when they fetch remote add-ons or import database or file archives from untrusted sources. Unzip handling is not affected. Teams on older or newer releases, or who only use local trusted content, can skip it.","user_interaction":"yes","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000712,"input_tokens":4363,"output_tokens":552,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-108262':13A,16A '-2026':12A,15A '1.25.2':107C '1.25.4':109C,204C 'absolut':43B,115C,131C,142C 'add':63B,165C 'add-on':62B,164C 'affect':197C 'archiv':4A,32B,40B,135C 'attack':54B 'beneath':122C 'code':83B,186C 'context':193C 'craft':2A,39B,134C 'creat':125C 'cron':79B,181C 'cve':11A,14A 'databas':68B,169C 'ddev':1A,17B,24B,87B,89C,190C 'dest':123C 'dev':20B 'develop':28B,58B,100C 'directori':10A,157C 'entri':80B,151C,182C 'environ':101C 'execut':84B,187C 'extract':9A,30B,51B,156C 'fetch':60B 'file':7A,48B,70B,75B,150C,171C,177C 'fix':201C 'flaw':159C 'folder':52B 'follow':147C 'get':56B 'git':76B,178C 'hook':77B,179C 'host':141C 'host-absolut':140C 'import':66B,172C 'issu':199C 'lead':81B,184C 'let':37B 'linknam':132C 'local':19B,26B,98C 'local-dev':18B 'node.js':21B,105C 'open':93C 'open-sourc':92C 'outsid':8A,49B,154C 'overwrit':72B,174C 'packag':22B 'php':23B,103C 'pkg/archive/archive.go':112C 'plant':41B,138C 'raw':130C 'reachabl':161C 'rebas':120C 'regular':149C 'regular-fil':148C 'remot':163C 'retriev':167C 'run':97C 'shell':73B,175C 'sourc':94C 'startup':74B,176C 'symlink':44B,117C,127C,143C 'tar':3A,31B,116C 'target':118C 'therefor':137C 'tool':29B,95C 'untar':110C 'unzip':194C 'use':145C 'user':88B,191C 'valid':113C 'version':203C 'way':35B 'web':27B,99C 'write':6A,47B,153C","nicknames":[],"mitigations":[],"who_affected":"Developers running DDEV from 1.25.2 up to but not including 1.25.4 are exposed, especially when they fetch remote add-ons or import database or file archives from untrusted sources. Unzip handling is not affected. Teams on older or newer releases, or who only use local trusted content, can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["ddev","localdev","medium","nodejs","package","php"],"campaign_type":null,"search_a":"'-108262':13A,16A '-2026':12A,15A 'archiv':4A 'craft':2A 'cve':11A,14A 'ddev':1A 'directori':10A 'extract':9A 'file':7A 'outsid':8A 'tar':3A 'write':6A","search_b":"'absolut':43B 'add':63B 'add-on':62B 'archiv':32B,40B 'attack':54B 'code':83B 'craft':39B 'cron':79B 'databas':68B 'ddev':17B,24B,87B 'dev':20B 'develop':28B,58B 'entri':80B 'execut':84B 'extract':30B,51B 'fetch':60B 'file':48B,70B,75B 'folder':52B 'get':56B 'git':76B 'hook':77B 'import':66B 'lead':81B 'let':37B 'local':19B,26B 'local-dev':18B 'node.js':21B 'outsid':49B 'overwrit':72B 'packag':22B 'php':23B 'plant':41B 'shell':73B 'startup':74B 'symlink':44B 'tar':31B 'tool':29B 'user':88B 'way':35B 'web':27B 'write':47B","search_c":"'1.25.2':107C '1.25.4':109C,204C 'absolut':115C,131C,142C 'add':165C 'add-on':164C 'affect':197C 'archiv':135C 'beneath':122C 'code':186C 'context':193C 'craft':134C 'creat':125C 'cron':181C 'databas':169C 'ddev':89C,190C 'dest':123C 'develop':100C 'directori':157C 'entri':151C,182C 'environ':101C 'execut':187C 'extract':156C 'file':150C,171C,177C 'fix':201C 'flaw':159C 'follow':147C 'git':178C 'hook':179C 'host':141C 'host-absolut':140C 'import':172C 'issu':199C 'lead':184C 'linknam':132C 'local':98C 'node.js':105C 'open':93C 'open-sourc':92C 'outsid':154C 'overwrit':174C 'php':103C 'pkg/archive/archive.go':112C 'plant':138C 'raw':130C 'reachabl':161C 'rebas':120C 'regular':149C 'regular-fil':148C 'remot':163C 'retriev':167C 'run':97C 'shell':175C 'sourc':94C 'startup':176C 'symlink':117C,127C,143C 'tar':116C 'target':118C 'therefor':137C 'tool':95C 'untar':110C 'unzip':194C 'use':145C 'user':191C 'valid':113C 'version':203C 'web':99C 'write':153C","first_public_at":"2026-09-02T15:25:13+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-108262","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-108262","severity":null,"published_at":"2026-11-06T19:17:06+00:00","modified_at":"2026-11-06T19:17:06+00:00","first_seen_at":"2026-11-06T19:43:48+00:00","fetched_at":"2026-11-06T19:43:48+00:00","note":null}],"documents":[{"id":89334,"url":"https://github.com/ddev/ddev/security/advisories/GHSA-9hq4-hm3j-jmph","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-09-02T15:25:13+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}