Relative Path Traversal vulnerability in Erlang OTP (stdlib zip module) allows writing files outside the intended extraction directory via a crafted zip archive.
zip:unzip/1,2 and zip:extract/1,2 validate entry paths using zip:checkdirlevel/2, which tracks directory depth as a running integer counter: .. decrements it, normal path components increment it. The caller rejects only paths where the final counter value is less than zero. A path such as ../x/y causes the counter to go negative mid-traversal then recover to zero, passing validation while resolving to a location outside the extraction directory when joined with the current working directory via add_cwd.
This vulnerability is associated with program file lib/stdlib/src/zip.erl.
This issue affects OTP from OTP 27.1 before OTP 29.0.4, OTP 28.5.0.4 and OTP 27.3.4.15, corresponding to stdlib from 6.1 before 8.0.3, 7.3.0.1 and 6.2.2.4.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47078.json",
"cwe_ids": [
"CWE-23"
],
"cna_assigner": "EEF",
"unresolved_ranges": [
{
"source": "AFFECTED_FIELD",
"extracted_events": [
{
"introduced": "6.1"
},
{
"fixed": "*"
},
{
"introduced": "27.1"
},
{
"fixed": "*"
},
{
"introduced": "8d537f51a4262d24f3395c4148323eaca9facbbd"
},
{
"fixed": "8a933c9c7835b06776d31d17b79b7336627d887a"
}
]
}
]
}{
"source": [
"CPE_FIELD",
"REFERENCES"
],
"extracted_events": [
{
"introduced": "27.1"
},
{
"fixed": "27.3.4.15"
},
{
"introduced": "28.0"
},
{
"fixed": "28.5.0.4"
},
{
"introduced": "29.0"
},
{
"fixed": "29.0.4"
}
]
}