Skip to content
Heist/ feed
Back to feed
Medium

Tunnelblick arbitrary file read via symlink following in tunnelblickd

Type: advisorySources: OSV

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 source

Published 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"
}