Description
Server-Side Request Forgery (SSRF) vulnerability in Erlang/OTP ftp (ftp_internal module) allows FTP bounce attacks and SSRF via an unvalidated PASV response IP address.
The ftp_internal:handle_ctrl_result/2 PASV handler (mode=passive, ipfamily=inet, ftp_extension=false) extracts the IP address from the server's 227 response and passes it directly to gen_tcp:connect/4 without validating it against the control connection peer address. The adjacent EPSV handlers correctly call peername(CSock) to derive the IP from the control connection, but the PASV handler does not. A malicious or compromised FTP server can redirect the client's data connection to an arbitrary internal host and port. On read operations (ftp:ls/1,2, ftp:nlist/1,2, ftp:recv/2,3), data from the redirected target is returned to the caller. On write operations (ftp:send/2,3, ftp:append/2,3), file content is sent to the redirected target. This enables SSRF against internal hosts, cloud metadata endpoints, and FTP bounce attacks against third-party hosts.
The vulnerable path is the default configuration (mode=passive, ipfamily=inet, ftp_extension=false). RFC 2577 section 3 explicitly recommends validating the PASV response IP against the control connection peer.
The ftp application is deprecated and scheduled for removal in OTP-30.
This vulnerability is associated with program files lib/inets/src/ftp/ftp_internal.erl (inets 5.10.4 through 6.5, OTP 17.4 through 20.3) and lib/ftp/src/ftp_internal.erl (ftp 1.0 and later, OTP 21.0 and later).
This issue affects OTP from OTP 17.4 before OTP 27.3.4.13, OTP 28.5.0.2, and OTP 29.0.2, corresponding to inets from 5.10.4 before 7.0, and ftp from 1.0 before 1.2.3.1, 1.2.4.1, and 1.2.6.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Erlang | OTP | 17.4, 5.10.4 – < 7.0, 1.0 | 7.0 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | erlang | 1:29.0.2+dfsg-1 | — |
| Debian 13 | erlang | 1:27.3.4.1+dfsg-1+deb13u3 | — |
| Debian 12 | erlang | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 26.04 LTS | erlang | 1:27.3.4.6+dfsg-1ubuntu0.2 | USN-8901-1 |
| Ubuntu 25.10 | erlang | No fix yet | — |
| Ubuntu 24.04 LTS | erlang | 1:25.3.2.8+dfsg-1ubuntu4.8 | USN-8901-1 |
| Ubuntu 22.04 LTS | erlang | 1:24.2.1+dfsg-1ubuntu0.8 | USN-8901-1 |
Show 4 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Pro 20.04 LTS | erlang | 1:22.2.7+dfsg-1ubuntu0.5+esm3 | USN-8901-1 |
| Ubuntu Pro 18.04 LTS | erlang | 1:20.2.2+dfsg-1ubuntu2+esm4 | USN-8901-1 |
| Ubuntu Pro 16.04 LTS | erlang | 1:18.3-dfsg-1ubuntu3.1+esm4 | USN-8901-1 |
| Ubuntu Pro 14.04 LTS | erlang | 1:16.b.3-dfsg-1ubuntu2.2+esm3 | USN-8901-1 |
Red Hat
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Red Hat Hardened Images 1 | erlang27 +38 | 27.3.4.17-1.hum1 | RHSA-2026:63160 |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP7 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLES 15 SP7 | erlang26 | 26.2.1-150300.7.28.1 | SUSE-SU-2026:3579-1 |
| SLES 15 SP6 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLES 15 SP6 | erlang26 | 26.2.1-150300.7.28.1 | SUSE-SU-2026:3579-1 |
| SLES 15 SP5 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLES 15 SP4 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
Show 5 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES for SAP 15 SP6 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLES for SAP 15 SP6 | erlang26 | 26.2.1-150300.7.28.1 | SUSE-SU-2026:3579-1 |
| SLES for SAP 15 SP5 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLES for SAP 15 SP4 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLE HPC 15 SP5 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
| SLE HPC 15 SP4 | erlang | 23.3.4.19-150300.3.39.1 | SUSE-SU-2026:3645-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Tumbleweed | erlang | 28.5.0.4-1.1 | openSUSE-SU-2026:11559-1 |
| openSUSE Tumbleweed | erlang27 | 27.1.3-3.1 | openSUSE-SU-2026:11560-1 |
Azure Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Azure Linux 3 | erlang | 26.2.5.21-2 | — |
Advisories 7
- RHSA-2026:63160 Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update Red Hat Security Advisories (RHSA) · Oct 20, 2026
- USN-8901-1 erlang vulnerabilities Ubuntu Security Notices (USN) · Oct 8, 2026
- WID-SEC-2026-1887 Erlang/OTP: Mehrere Schwachstellen BSI CERT-Bund (WID) · Sep 28, 2026
- openSUSE-SU-2026:11559-1 erlang-28.5.0.4-1.1 on GA media SUSE / openSUSE Security Updates · Aug 21, 2026
- openSUSE-SU-2026:11560-1 erlang27-27.1.3-3.1 on GA media SUSE / openSUSE Security Updates · Aug 21, 2026
- SUSE-SU-2026:3645-1 Security update for erlang SUSE / openSUSE Security Updates · Aug 21, 2026
- SUSE-SU-2026:3579-1 Security update for erlang26 SUSE / openSUSE Security Updates · Aug 12, 2026
References
- FTP Client PASV Response IP not Validated Against Control Peer, Enabling SSRF and FTP Bounce Attacks vendor-advisory related
- EEF CNA record for CVE-2026-48858 related
- OSV record EEF-CVE-2026-48858 related
- Erlang/OTP version ordering
- Introducing commit be95772 in erlang/otp related
- Fix commit 521bcfa in erlang/otp patch
- Fix commit 2691a80 in erlang/otp patch