kitty — security advisory
Kitty is a cross-platform GPU based terminal. In versions 0.47.0 and 0.47.1, `kitten dnd` can allow a malicious remote drag-and-drop source to overwrite or truncate arbitrary files writable by the local kitty user. Remote `text/uri-list` drops are staged in a temporary directory, but on case-sensitive filesystems duplicate remote basenames are not de-duplicated. An attacker can first create a staged symlink and then send a same-name regular-file entry. The regular-file write uses `utils.CreateAt()` / `openat(O_RDWR|O_CREAT|O_TRUNC)` without `O_NOFOLLOW`, so it follows the attacker-created symlink and writes outside the staging directory before final overwrite confirmation runs. This appears related in class to the file-transfer symlink advisory, but it is a different bug: it affects `kitten dnd` remote drag-and-drop staging, uses different vulnerable code (`kittens/dnd/drop.go` and `tools/utils/file_at_fd.go`), and reproduces on commit `4aa4a5c0567a92553a8c20a88a4352da637fca5d`, after the file-transfer `O_NOFOLLOW` fix. Version 0.47.2 patches the issue.
- Products
- kitty
- Affected versions
- 0.41.1-2, 0.42.1-1, 0.42.2-1, 0.43.1-1, 0.44.0-1, 0.45.0-1, 0.45.0-2, 0.46.1-1, 0.46.2-1, 0.47.0-1, 0.47.0-2, 0.47.0-3
- Fixed versions
- 0.47.3-1
- CVEs
- CVE-2026-54056
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 12:17 UTC · Revision 2
Source evidence
Kitty is a cross-platform GPU based terminal. In versions 0.47.0 and 0.47.1, `kitten dnd` can allow a malicious remote drag-and-drop source to overwrite or truncate arbitrary files writable by the local kitty user. Remote `text/uri-list` drops are staged in a temporary directory, but on case-sensitive filesystems duplicate remote basenames are not de-duplicated. An attacker can first create a staged symlink and then send a same-name regular-file entry. The regular-file write uses `utils.CreateAt()` / `openat(O_RDWR|O_CREAT|O_TRUNC)` without `O_NOFOLLOW`, so it follows the attacker-created symlink and writes outside the staging directory before final overwrite confirmation runs. This appears related in class to the file-transfer symlink advisory, but it is a different bug: it affects `kitten dnd` remote drag-and-drop staging, uses different vulnerable code (`kittens/dnd/drop.go` and `tools/utils/file_at_fd.go`), and reproduces on commit `4aa4a5c0567a92553a8c20a88a4352da637fca5d`, after the file-transfer `O_NOFOLLOW` fix. Version 0.47.2 patches the issue.
osv:DEBIAN-CVE-2026-54056
kitty
Fixed versions: 0.47.3-1
Complete source record
{
"id": "fb2586734325b56f45080d03e1ee9c739c1a5af0f44f36f2a6717578bedbaecf",
"url": "https://osv.dev/vulnerability/DEBIAN-CVE-2026-54056",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "DEBIAN-CVE-2026-54056",
"summary": "Kitty is a cross-platform GPU based terminal. In versions 0.47.0 and 0.47.1, `kitten dnd` can allow a malicious remote drag-and-drop source to overwrite or truncate arbitrary files writable by the local kitty user. Remote `text/uri-list` drops are staged in a temporary directory, but on case-sensitive filesystems duplicate remote basenames are not de-duplicated. An attacker can first create a staged symlink and then send a same-name regular-file entry. The regular-file write uses `utils.CreateAt()` / `openat(O_RDWR|O_CREAT|O_TRUNC)` without `O_NOFOLLOW`, so it follows the attacker-created symlink and writes outside the staging directory before final overwrite confirmation runs. This appears related in class to the file-transfer symlink advisory, but it is a different bug: it affects `kitten dnd` remote drag-and-drop staging, uses different vulnerable code (`kittens/dnd/drop.go` and `tools/utils/file_at_fd.go`), and reproduces on commit `4aa4a5c0567a92553a8c20a88a4352da637fca5d`, after the file-transfer `O_NOFOLLOW` fix. Version 0.47.2 patches the issue.",
"evidence": "osv:DEBIAN-CVE-2026-54056",
"products": [
{
"name": {
"value": "kitty",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "0.47.3-1",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "0.41.1-2",
"evidence": "/affected/0/versions"
},
{
"value": "0.42.1-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.42.2-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.43.1-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.44.0-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.45.0-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.45.0-2",
"evidence": "/affected/0/versions"
},
{
"value": "0.46.1-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.46.2-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.47.0-1",
"evidence": "/affected/0/versions"
},
{
"value": "0.47.0-2",
"evidence": "/affected/0/versions"
},
{
"value": "0.47.0-3",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "high",
"structured": {
"id": "DEBIAN-CVE-2026-54056",
"aliases": [
"DEBIAN-CVE-2026-54056"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:L"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "0.47.3-1"
}
]
}
],
"package": {
"name": "kitty",
"purl": "pkg:deb/debian/kitty?arch=source&distro=forky",
"ecosystem": "Debian:14"
},
"versions": [
"0.41.1-2",
"0.42.1-1",
"0.42.2-1",
"0.43.1-1",
"0.44.0-1",
"0.45.0-1",
"0.45.0-2",
"0.46.1-1",
"0.46.2-1",
"0.47.0-1",
"0.47.0-2",
"0.47.0-3"
],
"database_specific": {
"source": "https://storage.googleapis.com/debian-osv/debian-cve-osv/DEBIAN-CVE-2026-54056.json"
},
"ecosystem_specific": {
"urgency": "not yet assigned"
}
}
],
"modified": "2026-10-26T11:47:28.731560103Z",
"provider": "osv",
"upstream": [
"CVE-2026-54056"
],
"references": [
"https://security-tracker.debian.org/tracker/CVE-2026-54056"
]
},
"related_cves": [
{
"value": "CVE-2026-54056",
"evidence": "/upstream"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 450785,
"published_at": "2026-06-12T21:16:24.463+00:00"
}