Tunnelblick arbitrary file read via symlink following in tunnelblickd
Tunnelblick is an open source graphic user interface for OpenVPN on macOS. In versions 3.3beta26 through 9.0beta01, any local user can read arbitrary root-owned files by exploiting a symlink following vulnerability in tunnelblick-helper, reachable through the world-accessible tunnelblickd Unix socket. The socket is configured with mode 0666, allowing any local user to connect. No authorization check is performed on the connecting client. The tunnelblick-helper process constructs a path to config.ovpn inside a user-controlled .tblk directory and reads it as root without symlink validation. An attacker can create a .tblk configuration with a symlinked config.ovpn pointing to any file and request tunnelblickd to read it. This issue has been fixed in versions 9.0beta02.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-31893
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 10:52 UTC · Revision 1
Source evidence
Tunnelblick arbitrary file read via symlink following in tunnelblickd
core-osv · Original sourcePublished 5 May 2026, 18:55 UTC
Tunnelblick is an open source graphic user interface for OpenVPN on macOS. In versions 3.3beta26 through 9.0beta01, any local user can read arbitrary root-owned files by exploiting a symlink following vulnerability in tunnelblick-helper, reachable through the world-accessible tunnelblickd Unix socket. The socket is configured with mode 0666, allowing any local user to connect. No authorization check is performed on the connecting client. The tunnelblick-helper process constructs a path to config.ovpn inside a user-controlled .tblk directory and reads it as root without symlink validation. An attacker can create a .tblk configuration with a symlinked config.ovpn pointing to any file and request tunnelblickd to read it. This issue has been fixed in versions 9.0beta02.
osv:CVE-2026-31893
Complete source record
{
"id": "569c8e5e0aa6bd483f6f8f24935f01f7f8187691c4dc28b177c1a9c92f9f071d",
"url": "https://osv.dev/vulnerability/CVE-2026-31893",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Tunnelblick arbitrary file read via symlink following in tunnelblickd",
"summary": "Tunnelblick is an open source graphic user interface for OpenVPN on macOS. In versions 3.3beta26 through 9.0beta01, any local user can read arbitrary root-owned files by exploiting a symlink following vulnerability in tunnelblick-helper, reachable through the world-accessible tunnelblickd Unix socket. The socket is configured with mode 0666, allowing any local user to connect. No authorization check is performed on the connecting client. The tunnelblick-helper process constructs a path to config.ovpn inside a user-controlled .tblk directory and reads it as root without symlink validation. An attacker can create a .tblk configuration with a symlinked config.ovpn pointing to any file and request tunnelblickd to read it. This issue has been fixed in versions 9.0beta02.",
"evidence": "osv:CVE-2026-31893",
"products": [],
"severity": "medium",
"structured": {
"id": "CVE-2026-31893",
"aliases": [
"CVE-2026-31893",
"GHSA-927j-vcjf-hq69"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/tunnelblick/tunnelblick",
"type": "GIT",
"events": [
{
"introduced": "553e3e99f73ad93620a37c87408c5d0838964310"
},
{
"fixed": "ba7d57c175c61caceb7faa66ca0bcc4d69ce0c77"
},
{
"introduced": "238dd15970955abe6f1b00208729ae2f9dd9c0e8"
},
{
"fixed": "035668b12ec19bfb1685cdb871f377314eb9255d"
}
],
"database_specific": {
"extracted_events": [
{
"cpe": "cpe:2.3:a:tunnelblick:tunnelblick:*:*:*:*:*:*:*:*",
"range": [
{
"introduced": "3.5.3"
},
{
"fixed": "8.0.1"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:tunnelblick:tunnelblick:8.1:beta01:*:*:*:*:*:*",
"range": [
{
"introduced": "8.1-beta01"
},
{
"last_affected": "8.1-beta01"
}
],
"source": "CPE_STRING"
},
{
"cpe": "cpe:2.3:a:tunnelblick:tunnelblick:8.1:beta02:*:*:*:*:*:*",
"range": [
{
"introduced": "8.1-beta02"
},
{
"last_affected": "8.1-beta02"
}
],
"source": "CPE_STRING"
},
{
"cpe": "cpe:2.3:a:tunnelblick:tunnelblick:8.1:beta03:*:*:*:*:*:*",
"range": [
{
"introduced": "8.1-beta03"
},
{
"last_affected": "8.1-beta03"
}
],
"source": "CPE_STRING"
},
{
"cpe": "cpe:2.3:a:tunnelblick:tunnelblick:9.0:beta01:*:*:*:*:*:*",
"range": [
{
"introduced": "9.0-beta01"
},
{
"last_affected": "9.0-beta01"
}
],
"source": "CPE_STRING"
},
{
"range": [
{
"fixed": "035668b12ec19bfb1685cdb871f377314eb9255d"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v9.0beta02"
}
]
}
}
],
"versions": [
"8.1-beta01",
"8.1-beta02",
"8.1-beta03",
"9.0-beta01",
"v9.0beta01",
"v8.1beta03",
"v8.1beta02",
"v8.1beta01"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-31893.json"
}
}
],
"modified": "2026-10-28T02:30:28.001528203Z",
"provider": "osv",
"references": [
"https://github.com/Tunnelblick/Tunnelblick/releases/tag/v9.0beta02",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31893.json",
"https://github.com/Tunnelblick/Tunnelblick/security/advisories/GHSA-927j-vcjf-hq69",
"https://nvd.nist.gov/vuln/detail/CVE-2026-31893"
],
"provider_metadata": {
"cwe_ids": [
"CWE-61"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31893.json"
}
},
"related_cves": [
{
"value": "CVE-2026-31893",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 494680,
"published_at": "2026-05-05T18:55:41.737+00:00"
}