SFTPGo source-side file-pattern filter bypass during copy operations
### Summary File pattern filters (`denied_patterns` / `allowed_patterns`) were evaluated on the destination of a copy only. A user holding the copy permission could copy a file denied by the filters to a permitted name and then read it. A recursive directory copy reproduced the contents of a restricted directory under a path where the filters do not deny them, and the hide policy was affected in the same way: a file reported as missing by stat and by directory listings could still be copied. ### Details An authenticated user can read the contents of files that the file pattern filters are configured to deny them. Nothing else is bypassed: the home directory, the virtual folder layout and the per-directory permissions are all still enforced, and both ends of the copy are paths the account can already reach. No access to other accounts and no administrative capability.
- Products
- github.com/drakkan/sftpgo, github.com/drakkan/sftpgo/v2
- Affected versions
- Not specified
- Fixed versions
- 2.7.6
- CVEs
- CVE-2026-103028
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 31 Oct 2026, 08:45 UTC · Revision 1
Source evidence
SFTPGo source-side file-pattern filter bypass during copy operations
core-osv · Original sourcePublished 15 Oct 2026, 20:22 UTC
### Summary File pattern filters (`denied_patterns` / `allowed_patterns`) were evaluated on the destination of a copy only. A user holding the copy permission could copy a file denied by the filters to a permitted name and then read it. A recursive directory copy reproduced the contents of a restricted directory under a path where the filters do not deny them, and the hide policy was affected in the same way: a file reported as missing by stat and by directory listings could still be copied. ### Details An authenticated user can read the contents of files that the file pattern filters are configured to deny them. Nothing else is bypassed: the home directory, the virtual folder layout and the per-directory permissions are all still enforced, and both ends of the copy are paths the account can already reach. No access to other accounts and no administrative capability.
osv:GHSA-wwv9-g5x4-966q
github.com/drakkan/sftpgo/v2
Fixed versions: 2.7.6
Complete source record
{
"id": "8f574194558dca375ade4fe39266f336857cc3b085cf45f4dcad1d93a554e51b",
"url": "https://osv.dev/vulnerability/GHSA-wwv9-g5x4-966q",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "SFTPGo source-side file-pattern filter bypass during copy operations",
"summary": "### Summary File pattern filters (`denied_patterns` / `allowed_patterns`) were evaluated on the destination of a copy only. A user holding the copy permission could copy a file denied by the filters to a permitted name and then read it. A recursive directory copy reproduced the contents of a restricted directory under a path where the filters do not deny them, and the hide policy was affected in the same way: a file reported as missing by stat and by directory listings could still be copied. ### Details An authenticated user can read the contents of files that the file pattern filters are configured to deny them. Nothing else is bypassed: the home directory, the virtual folder layout and the per-directory permissions are all still enforced, and both ends of the copy are paths the account can already reach. No access to other accounts and no administrative capability.",
"evidence": "osv:GHSA-wwv9-g5x4-966q",
"products": [
{
"name": {
"value": "github.com/drakkan/sftpgo/v2",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.7.6",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
}
],
"severity": "medium",
"structured": {
"id": "GHSA-wwv9-g5x4-966q",
"aliases": [
"CVE-2026-103028",
"GHSA-wwv9-g5x4-966q",
"GO-2026-6802"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N"
}
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "2.5.0"
},
{
"fixed": "2.7.6"
}
]
}
],
"package": {
"name": "github.com/drakkan/sftpgo/v2",
"purl": "pkg:golang/github.com/drakkan/sftpgo/v2",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-wwv9-g5x4-966q/GHSA-wwv9-g5x4-966q.json",
"last_known_affected_version_range": "<= 2.7.5"
}
}
],
"modified": "2026-10-19T21:41:22.513452094Z",
"provider": "osv",
"references": [
"https://github.com/drakkan/sftpgo/security/advisories/GHSA-wwv9-g5x4-966q",
"https://nvd.nist.gov/vuln/detail/CVE-2026-103028",
"https://github.com/drakkan/sftpgo/commit/dc8886bc079094b4ac2338df683f358b7676b5eb",
"https://github.com/drakkan/sftpgo",
"https://github.com/drakkan/sftpgo/releases/tag/v2.7.6"
],
"provider_metadata": {
"cwe_ids": [
"CWE-863"
],
"severity": "MODERATE",
"github_reviewed": true,
"nvd_published_at": "2026-10-13T15:17:30Z",
"github_reviewed_at": "2026-10-15T20:22:10Z"
}
},
"related_cves": [
{
"value": "CVE-2026-103028",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 376807,
"published_at": "2026-10-15T20:22:10+00:00"
}SFTPGo source-side file-pattern filter bypass during copy operations in github.com/drakkan/sftpgo
core-osv · Original sourcePublished 19 Oct 2026, 21:08 UTC
SFTPGo source-side file-pattern filter bypass during copy operations in github.com/drakkan/sftpgo
osv:GO-2026-6802
github.com/drakkan/sftpgo
Fixed versions: Not specified
github.com/drakkan/sftpgo/v2
Fixed versions: 2.7.6
Complete source record
{
"id": "e765983b963916ceae96f2e491f53bdf01ceda8a501dc1e60a292f0907cfe8d0",
"url": "https://osv.dev/vulnerability/GO-2026-6802",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "SFTPGo source-side file-pattern filter bypass during copy operations in github.com/drakkan/sftpgo",
"summary": "SFTPGo source-side file-pattern filter bypass during copy operations in github.com/drakkan/sftpgo",
"evidence": "osv:GO-2026-6802",
"products": [
{
"name": {
"value": "github.com/drakkan/sftpgo",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
},
{
"name": {
"value": "github.com/drakkan/sftpgo/v2",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.7.6",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "GO-2026-6802",
"aliases": [
"CVE-2026-103028",
"GHSA-wwv9-g5x4-966q",
"GO-2026-6802"
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
}
]
}
],
"package": {
"name": "github.com/drakkan/sftpgo",
"purl": "pkg:golang/github.com/drakkan/sftpgo",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://vuln.go.dev/ID/GO-2026-6802.json"
},
"ecosystem_specific": {}
},
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "2.5.0"
},
{
"fixed": "2.7.6"
}
]
}
],
"package": {
"name": "github.com/drakkan/sftpgo/v2",
"purl": "pkg:golang/github.com/drakkan/sftpgo/v2",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://vuln.go.dev/ID/GO-2026-6802.json"
},
"ecosystem_specific": {}
}
],
"modified": "2026-10-19T21:31:38.309842766Z",
"provider": "osv",
"references": [
"https://github.com/drakkan/sftpgo/security/advisories/GHSA-wwv9-g5x4-966q",
"https://nvd.nist.gov/vuln/detail/CVE-2026-103028",
"https://github.com/drakkan/sftpgo/commit/dc8886bc079094b4ac2338df683f358b7676b5eb",
"https://github.com/drakkan/sftpgo/releases/tag/v2.7.6"
],
"provider_metadata": {
"url": "https://pkg.go.dev/vuln/GO-2026-6802",
"review_status": "UNREVIEWED"
}
},
"related_cves": [
{
"value": "CVE-2026-103028",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 376569,
"published_at": "2026-10-19T21:08:35+00:00"
}