{"id":"CVE-2026-43637","kind":"vulnerability","aliases":["CVE-2026-43637","GHSA-rrh3-cwwj-g5mg"],"related":[],"title":"Cornac: Path Traversal via _extract_archive() in download.py","description":"Cornac before 2.6.0 contains a path traversal (Tar Slip) vulnerability that allows attackers to write arbitrary files outside the intended cache directory by supplying a crafted TAR archive containing ../ sequences, absolute paths, or symlink/hardlink entries to the _extract_archive() function in cornac/utils/download.py. Attackers can trigger this vulnerability through the built-in dataset loaders, which automatically download and extract archives, causing archive.extractall() to write files to arbitrary locations on the filesystem accessible to the running process.","summary":"Cornac's dataset downloader extracts TAR archives without checking paths, so a malicious archive can write files anywhere the running process can write. An attacker who controls a downloaded archive can overwrite arbitrary files on the machine running Cornac.","severity":"critical","cvss":9.1,"epss":0.00662,"exploited":false,"exploited_at":null,"products":[{"name":"cornac","fixed":["2.6.0"],"affected":"< 2.6.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["cornac","cwe-22","data-science","package","python"],"not_affected_if":["cornac-2.6.0-or-later","no-dataset-loaders"],"how_to_check":"- Run `pip show cornac` and check whether the version is below `2.6.0`.\n- Search the project for calls to `_extract_archive` or the built-in dataset loaders, which download and extract archives.","fix":"- Upgrade `cornac` (PyPI) to `2.6.0`.","status":"open","published_at":"2026-07-15T15:33:06+00:00","first_seen_at":"2026-11-09T21:50:41+00:00","triaged_at":"2026-11-09T21:51:52+00:00","updated_at":"2026-11-09T21:51:52+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-09T21:51:52Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `cornac` (PyPI) to `2.6.0`.","reach":"network","title":"Cornac: crafted TAR archive writes files outside the cache directory","impact":"high","summary":"Cornac's dataset downloader extracts TAR archives without checking paths, so a malicious archive can write files anywhere the running process can write. An attacker who controls a downloaded archive can overwrite arbitrary files on the machine running Cornac.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","cornac","data-science"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"Attacker overwrites arbitrary files writable by the process","analyst_note":"","how_to_check":"- Run `pip show cornac` and check whether the version is below `2.6.0`.\n- Search the project for calls to `_extract_archive` or the built-in dataset loaders, which download and extract archives.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["cornac-2.6.0-or-later","no-dataset-loaders"],"who_is_affected":"Any application that imports cornac and uses its built-in dataset loaders, which download and extract TAR archives into the cache directory. The exposure depends on whether the archive source is trusted; scripts that only use locally bundled data or already-patched versions can skip it.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"critical"},"cost_usd":0.000726,"input_tokens":4720,"output_tokens":507,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2026':10A,18A '-22':23B '-43637':11A,19A '2.6.0':70C 'absolut':98C 'access':139C 'allow':79C 'anywher':46B 'arbitrari':61B,83C,134C 'archiv':6A,35B,42B,58B,95C,106C,127C 'archive.extractall':129C 'attack':53B,80C,110C 'automat':123C 'built':118C 'built-in':117C 'cach':88C 'caus':128C 'check':37B 'contain':71C,96C 'control':55B 'cornac':1A,20A,21B,29B,67B,68C 'cornac/utils/download.py':109C 'craft':93C 'cve':9A,17A 'cwe':22B 'cwwj':15A 'data':25B 'data-sci':24B 'dataset':31B,120C 'directori':89C 'download':32B,57B,124C 'download.py':8A 'entri':102C 'extract':5A,33B,105C,126C 'file':45B,62B,84C,132C 'filesystem':138C 'function':107C 'g5mg':16A 'ghsa':13A 'ghsa-rrh3-cwwj-g5mg':12A 'intend':87C 'loader':121C 'locat':135C 'machin':65B 'malici':41B 'outsid':85C 'overwrit':60B 'packag':27B 'path':2A,38B,73C,99C 'process':49B,143C 'python':28B 'rrh3':14A 'run':48B,66B,142C 'scienc':26B 'sequenc':97C 'slip':76C 'suppli':91C 'symlink/hardlink':101C 'tar':34B,75C,94C 'travers':3A,74C 'trigger':112C 'via':4A 'vulner':77C,114C 'without':36B 'write':44B,51B,82C,131C","nicknames":[],"mitigations":[],"who_affected":"Any application that imports cornac and uses its built-in dataset loaders, which download and extract TAR archives into the cache directory. The exposure depends on whether the archive source is trusted; scripts that only use locally bundled data or already-patched versions can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["cornac"],"ptokens":["cornac"],"labels":["cornac","critical","cwe22","datascience","package","pypi","python"],"campaign_type":null,"search_a":"'-2026':10A,18A '-43637':11A,19A 'archiv':6A 'cornac':1A,20A 'cve':9A,17A 'cwwj':15A 'download.py':8A 'extract':5A 'g5mg':16A 'ghsa':13A 'ghsa-rrh3-cwwj-g5mg':12A 'path':2A 'rrh3':14A 'travers':3A 'via':4A","search_b":"'-22':23B 'anywher':46B 'arbitrari':61B 'archiv':35B,42B,58B 'attack':53B 'check':37B 'control':55B 'cornac':21B,29B,67B 'cwe':22B 'data':25B 'data-sci':24B 'dataset':31B 'download':32B,57B 'extract':33B 'file':45B,62B 'machin':65B 'malici':41B 'overwrit':60B 'packag':27B 'path':38B 'process':49B 'python':28B 'run':48B,66B 'scienc':26B 'tar':34B 'without':36B 'write':44B,51B","search_c":"'2.6.0':70C 'absolut':98C 'access':139C 'allow':79C 'arbitrari':83C,134C 'archiv':95C,106C,127C 'archive.extractall':129C 'attack':80C,110C 'automat':123C 'built':118C 'built-in':117C 'cach':88C 'caus':128C 'contain':71C,96C 'cornac':68C 'cornac/utils/download.py':109C 'craft':93C 'dataset':120C 'directori':89C 'download':124C 'entri':102C 'extract':105C,126C 'file':84C,132C 'filesystem':138C 'function':107C 'intend':87C 'loader':121C 'locat':135C 'outsid':85C 'path':73C,99C 'process':143C 'run':142C 'sequenc':97C 'slip':76C 'suppli':91C 'symlink/hardlink':101C 'tar':75C,94C 'travers':74C 'trigger':112C 'vulner':77C,114C 'write':82C,131C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-07-15T15:33:06+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-rrh3-cwwj-g5mg","url":"https://github.com/advisories/GHSA-rrh3-cwwj-g5mg","severity":"high","published_at":"2026-07-15T15:33:06+00:00","modified_at":"2026-11-09T21:46:37+00:00","first_seen_at":"2026-11-09T21:50:41+00:00","fetched_at":"2026-11-09T21:56:00+00:00","note":null}],"documents":[{"id":110152,"url":"https://github.com/PreferredAI/cornac/pull/709","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":110153,"url":"https://github.com/PreferredAI/cornac/commit/8a50be72c11569b6747c6b96d6e31a0a1962f1a8","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":110154,"url":"https://github.com/PreferredAI/cornac/releases/tag/v2.6.0","title":"Release: github.com","kind":"release","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release: github.com"}],"disclosures":[],"exploit_sources":[{"type":"epss","score":0.00662,"url":"https://api.first.org/data/v1/epss?cve=CVE-2026-43637"}],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}