← Back to CVE Explorer

CVE-2026-72903

Full vulnerability record from the local CVENow database.

Description

Tabby (formerly Terminus) is a highly configurable terminal emulator. Prior to 1.0.235, a malicious SFTP server can return a backslash traversal filename through entry.name. In tabby-ssh/src/session/sftp.ts, SFTPSession.readdir() and _makeFile() use POSIX path processing that preserves the backslashes as ordinary filename characters. In tabby-ssh/src/components/sftpPanel.component.ts, downloadFolderRecursive() propagates item.name into the local relative path. In tabby-electron/src/services/platform.service.ts, ElectronDirectoryDownload.createFile() passes that path to Windows-native path.join(), and in tabby-electron/src/sftpContextMenu.ts, EditSFTPContextMenu.edit() passes item.name to path.join() for the temporary edit path. Windows interprets the preserved backslashes and parent-directory components as traversal, allowing attacker-controlled content to be created or overwritten outside the selected download directory or temporary edit directory. This issue is fixed in version 1.0.235.

Severity
HIGH
CVSS score
8.1 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-08-10 21:17:24.980000
Last modified
2026-10-24 15:10:00.190000
View original CVE JSON
{
  "id": "CVE-2026-72903",
  "sourceIdentifier": "[email protected]",
  "published": "2026-08-10T21:17:24.980",
  "lastModified": "2026-10-24T15:10:00.190",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Tabby (formerly Terminus) is a highly configurable terminal emulator. Prior to 1.0.235, a malicious SFTP server can return a backslash traversal filename through entry.name. In tabby-ssh/src/session/sftp.ts, SFTPSession.readdir() and _makeFile() use POSIX path processing that preserves the backslashes as ordinary filename characters. In tabby-ssh/src/components/sftpPanel.component.ts, downloadFolderRecursive() propagates item.name into the local relative path. In tabby-electron/src/services/platform.service.ts, ElectronDirectoryDownload.createFile() passes that path to Windows-native path.join(), and in tabby-electron/src/sftpContextMenu.ts, EditSFTPContextMenu.edit() passes item.name to path.join() for the temporary edit path. Windows interprets the preserved backslashes and parent-directory components as traversal, allowing attacker-controlled content to be created or overwritten outside the selected download directory or temporary edit directory. This issue is fixed in version 1.0.235."
    },
    {
      "lang": "es",
      "value": "Tabby (anteriormente Terminus) es un emulador de terminal altamente configurable. Antes de la versión 1.0.235, un servidor SFTP malicioso puede devolver un nombre de archivo de recorrido de barra invertida a través de entry.name. En tabby-ssh/src/session/sftp.ts, SFTPSession.readdir() y _makeFile() utilizan procesamiento de rutas POSIX que conserva las barras invertidas como caracteres de nombre de archivo ordinarios. En tabby-ssh/src/components/sftpPanel.component.ts, downloadFolderRecursive() propaga item.name en la ruta relativa local. En tabby-electron/src/services/platform.service.ts, ElectronDirectoryDownload.createFile() pasa esa ruta a path.join() nativo de Windows, y en tabby-electron/src/sftpContextMenu.ts, EditSFTPContextMenu.edit() pasa item.name a path.join() para la ruta de edición temporal. Windows interpreta las barras invertidas conservadas y los componentes de directorio padre como recorrido, permitiendo que contenido controlado por el atacante sea creado o sobrescrito fuera del directorio de descarga seleccionado o del directorio de edición temporal. Este problema está solucionado en la versión 1.0.235."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "Eugeny",
          "product": "tabby",
          "versions": [
            {
              "version": "< 1.0.235",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H",
          "baseScore": 8.1,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "REQUIRED",
          "scope": "UNCHANGED",
          "confidentialityImpact": "NONE",
          "integrityImpact": "HIGH",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 5.2
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-11T14:56:00.867455Z",
          "id": "CVE-2026-72903",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-22"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/Eugeny/tabby/commit/3a4a41431a61d41dd51d4119e60cad9bf13c3399",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/Eugeny/tabby/releases/tag/v1.0.235",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/Eugeny/tabby/security/advisories/GHSA-59p9-8gwf-v9v7",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/Eugeny/tabby/security/advisories/GHSA-59p9-8gwf-v9v7",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}