OESA-2026-3044

Source
https://www.openeuler.org/en/security/security-bulletins/detail/?id=openEuler-SA-2026-3044
Import Source
https://repo.openeuler.org/security/data/osv/OESA-2026-3044.json
JSON Data
https://api.osv.dev/v1/vulns/OESA-2026-3044
Upstream
Published
2026-07-19T03:48:58Z
Modified
2026-07-19T04:00:19.656965125Z
Summary
erlang security update
Details

Erlang is a general-purpose programming language and runtime environment. Erlang has built-in support for concurrency, distribution and fault tolerance. Erlang is used in several large telecommunication systems from Ericsson.

Security Fix(es):

Exposure of Sensitive Information to an Unauthorized Actor vulnerability in Erlang OTP ssh (ssh_sftpd module) allows File Discovery.

The SSHFXPREADLINK handler in sshsftpd sends the raw result of file:readlink/2 to the client without calling chrootfilename/2 to strip the backend root prefix. An authenticated SFTP client can create a symlink inside the chroot pointing to /; sshsftpd resolves the target to the absolute backend root and stores it on disk. Reading the symlink back via SSHFXPREADLINK returns that absolute path, for example /data/sftp, instead of the chrooted value /.

The information disclosed is the absolute filesystem path of the SFTP root directory and of any symlink targets within it. No file contents, credentials, or access to paths outside the root directory are obtainable through this issue alone.

This vulnerability is associated with program files lib/ssh/src/ssh_sftpd.erl.

This issue affects OTP from OTP 17.0 before 29.0.2, 28.5.0.2 and 27.3.4.13 corresponding to ssh from 3.0.1 before 6.0.1, 5.5.2.1 and 5.2.11.8.(CVE-2026-48855)

Sensitive Data Exposure vulnerability in Erlang OTP inets (httpc_response module) allows Retrieve Embedded Sensitive Data.

The httpc client forwards the Authorization and Proxy-Authorization request headers to redirect targets without checking whether the redirect crosses an origin boundary. httpcresponse:redirect/2 constructs the redirected request by updating only the host field of the header record; all other fields (including authorization and proxyauthorization) are copied verbatim. The redirect target host is never compared against the original host.

autoredirect defaults to true, so this affects all httpc callers that do not explicitly disable automatic redirects.

An attacker who controls a server that the victim contacts via httpc can issue a cross-origin 3xx redirect to a server they also control. The Authorization header (including Basic credentials derived from URL userinfo via httpcrequest:handleuser_info/2) is forwarded to the redirect target, allowing credential theft. The same applies to the Proxy-Authorization header.

This vulnerability is associated with program files lib/inets/src/httpclient/httpcresponse.erl.

This issue affects OTP from 17.0 before 29.0.2, 28.5.0.2 and 27.3.4.13 corresponding to inets from 5.10 before 9.7.1, 9.6.2.2 and 9.3.2.6.(CVE-2026-48856)

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 ftpinternal:handlectrlresult/2 PASV handler (mode=passive, ipfamily=inet, ftpextension=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/ftpinternal.erl (inets 5.10.4 through 6.5, OTP 17.4 through 20.3) and lib/ftp/src/ftpinternal.erl (ftp 1.0 and later, OTP 21.0 and later).

This issue affects OTP from OTP 17.4 before 29.0.2, 28.5.0.2 and 27.3.4.13 corresponding to inets from 5.10.4 before 7.0 and ftp from 1.0 before 1.2.6, 1.2.4.1 and 1.2.3.1.(CVE-2026-48858)

Stack-based Buffer Overflow vulnerability in Erlang OTP erts (inet_drv) allows an unauthenticated remote attacker to crash the BEAM VM by sending a crafted SCTP ERROR chunk.

The sctpparseerrorchunk function in erts/emulator/drivers/common/inetdrv.c parses SCTP ERROR chunks and writes cause codes into a fixed-size stack-allocated ErlDrvTermData spec[] array without checking bounds. A remote attacker who has established an SCTP association to a listening port can send a single crafted SCTP ERROR chunk containing enough cause codes to overflow the stack buffer, crashing the VM. The attacker can only write 16-bit values interleaved with a fixed tag, so the overflow does not provide a controlled return address, limiting exploitation to Denial of Service.

A crafted SCTP ERROR chunk may also leak bits and pieces of Erlang VM memory into the received error packet observed by the Erlang process. Such data is already readable by the user running the Erlang VM, so the disclosure scope is limited.

This issue affects OTP from OTP 17.0 before 27.3.4.13, 28.5.0.2 and 29.0.2, corresponding to erts from 6.0 before 15.2.7.9, 16.4.0.2 and 17.0.2.(CVE-2026-49759)

Stack-based Buffer Overflow vulnerability in Erlang OTP (erl_interface) allows Stack-based Buffer Overflow.

This vulnerability is associated with program file lib/erlinterface/src/misc/eiprintterm.c and program routine eisprint_term.

The C function eisprint_term uses an internal 2000-character stack buffer to format terms. When called with an encoded Erlang term containing a very large integer (encoded representation exceeding 2000 characters), the buffer overflows. The overflow bytes are restricted to the ASCII values of 0-9 and A-F, which limits exploitation to Denial of Service.

The companion function eiprintterm, which prints directly to a FILE instead of a memory buffer, does not contain this bug.

This issue affects OTP from OTP 17.0 before 27.3.4.13, 28.5.0.2 and 29.0.2, corresponding to erl_interface from 3.7.16 before 5.5.2.1, 5.7.0.1 and 5.8.1.(CVE-2026-49760)

Observable Response Discrepancy vulnerability in Erlang OTP ssh (ssh_sftpd module) allows an authenticated SFTP user to enumerate the existence of files and directories outside the configured root directory.

The SSHFXPREALPATH handler in sshsftpd calls relatefilename/3 with Canonicalize=false, unlike every other SFTP operation handler. This allows .. components in the requested path to bypass the iswithinroot/2 check without being resolved. The un-canonicalized path then enters resolvesymlinks/2, which walks up the directory tree above the configured root and issues read_link() syscalls on arbitrary filesystem paths.

An authenticated SFTP client can exploit this by sending a REALPATH request with a crafted traversal path. The server response differs depending on whether the target path exists on the host filesystem (SSHFXPNAME when the path resolves successfully, SSHFXNOSUCHFILE when it does not). This creates a path-existence oracle that an attacker can use to enumerate the filesystem structure outside the configured root, including the existence of sensitive files, directories, and mount points.

The vulnerability leaks only the existence of paths. No file contents, credentials, or write access are obtainable through this issue alone. The information gained may assist further attacks when combined with other vulnerabilities.

This vulnerability is associated with program files lib/ssh/src/sshsftpd.erl and program routine sshsftpd:handle_op/4.

This issue affects OTP from OTP 17.0 until OTP 29.0.3, 28.5.0.3, and 27.3.4.14 corresponding to ssh from 3.0.1 until 6.0.2, 5.5.2.2, and 5.2.11.9.(CVE-2026-53422)

Loop with Unreachable Exit Condition ('Infinite Loop') vulnerability in Erlang OTP ssh (ssh_sftpd module) allows an authenticated SFTP user to render an SFTP channel permanently unresponsive.

The handledata/4 function in sshsftpd contains a catch-all clause that accepts channel data of any type. When channel data with a non-zero type code (SSHMSGCHANNELEXTENDEDDATA) arrives with an empty pending buffer and a payload at or below the SFTP packet size limit, the clause tail-calls itself with identical arguments, creating an infinite loop.

The SFTP protocol operates exclusively on normal channel data (type 0). Extended data (non-zero type) is meaningless for SFTP and is never sent by conforming clients. However, the SSH protocol permits any channel participant to send extended data on an open channel, so an authenticated SFTP client can trigger the loop by sending SSHMSGCHANNELEXTENDEDDATA with any datatypecode and any non-empty payload at or below the size limit.

The targeted ssh_sftpd process enters an infinite tail-recursive loop. It never processes another message, its message queue grows without bound, and it can only be stopped by killing the process. BEAM's reduction-based scheduler preemption continues to function, so other processes on the node are not starved, but each stuck channel process consumes its full CPU time share continuously and accumulates unbounded message queue memory. Opening many channels amplifies the CPU and memory impact.

Erlang/OTP SSH configurations using the default max_channels setting (infinity) allow an authenticated user to open unlimited channels per connection, amplifying the attack without requiring multiple TCP connections or authentications.

No file contents, credentials, or write access are obtainable through this issue. The impact is limited to denial of service on targeted SFTP channels, with secondary CPU degradation and memory growth.

This vulnerability is associated with program file lib/ssh/src/sshsftpd.erl and program routine sshsftpd:handle_data/4.

This issue affects OTP from OTP 17.0 until OTP 29.0.3, 28.5.0.3, and 27.3.4.14 corresponding to ssh from 3.0.1 until 6.0.2, 5.5.2.2, and 5.2.11.9.(CVE-2026-54886)

Use of Default Cryptographic Key vulnerability in Erlang/OTP ssl (DTLS server) allows predictable DTLS cookie computation during the startup window, enabling source address verification bypass.

On DTLS server startup, dtlsserverconnection:initialhello/3 initializes previouscookiesecret to the empty binary (<<>>) instead of a random value. Because HMAC with an empty key is deterministic, anyone who observes the plaintext ClientHello can compute dtlshandshake:cookie(<<>>, IP, Port, Hello) and forge a valid DTLS cookie before the first rotation of the cookie secret. The DTLS cookie (RFC 6347 ยง4.2.1) is a denial-of-service mitigation that prevents spoofed source IPs from forcing the server to allocate state and perform expensive cryptographic operations; it is not an authentication mechanism. During the window from server startup until the first secret rotation (0 to 15 seconds), an attacker who can observe the plaintext ClientHello can bypass the source address verification, enabling DTLS handshake amplification with spoofed source addresses.

This vulnerability is associated with program file lib/ssl/src/dtlsserverconnection.erl and program routine dtlsserverconnection:initial_hello/3.

This issue affects OTP from OTP 20.0 before 29.0.3, 28.5.0.3 and 27.3.4.14 corresponding to ssl from 8.2 before 11.7.3, 11.6.0.3 and 11.2.12.10.(CVE-2026-54887)

Improper Enforcement of Message Integrity During Transmission in a Communication Channel vulnerability in Erlang/OTP ssl (tlsgenconnection module) allows a network-positioned attacker to inject unauthenticated plaintext that the TLS client application later treats as authenticated server data.

The function tlsgenconnection:handleprotocolrecord/3 rejects APPLICATIONDATA records that arrive in pre-handshake states when the TLS endpoint acts as a server, but does not apply the same check when the endpoint acts as a client. A network-positioned attacker can send plaintext APPLICATIONDATA records to the client during the handshake. The records are buffered and, once the handshake completes successfully, delivered to the application as if they were authenticated post-handshake data. The attacker cannot observe the client's response or steer the connection, so the impact is limited to blind injection of unauthenticated bytes. The injection window is wider for TLS versions prior to TLS 1.3 than for TLS 1.3.

This vulnerability is associated with program file lib/ssl/src/tlsgenconnection.erl.

This issue affects OTP from OTP 17.0 before 29.0.3, 28.5.0.3 and 27.3.4.14 corresponding to ssl from 5.3.4 before 11.7.3, 11.6.0.3 and 11.2.12.10. TLS 1.3 is affected starting with OTP 22.0, when TLS 1.3 support was added.(CVE-2026-54891)

Time-of-check Time-of-use (TOCTOU) race condition vulnerability in Erlang/OTP ssl (dtlspacketdemux module) allows an unauthenticated remote attacker to crash all active DTLS sessions on a listener.

A DTLS server listener uses a single shared dtlspacketdemux genserver process to route incoming UDP datagrams to the correct connection handler. When a DTLS client reconnects rapidly from the same source address and port (sending multiple ClientHello messages in quick succession), a race condition in the demux's internal gbtrees key-value store causes a {key_exists, {old, Client}} crash, terminating the demux process. Because the demux is shared across all DTLS associations on that listener, its crash immediately kills every active DTLS session, not just the attacker's.

The attack is pre-authentication: the attacker only needs to send UDP datagrams containing valid ClientHello messages from the same source IP and port before the intermediate DOWN monitor message is processed by the gen_server. No credentials, no completed handshake, and no special configuration are required, and the crash can be repeated indefinitely to create a persistent denial of service for all clients of that listener.

This vulnerability is associated with program file lib/ssl/src/dtlspacketdemux.erl.

This issue affects OTP from OTP 25.3 before 29.0.3, 28.5.0.3, and 27.3.4.14 corresponding to ssl from 10.9 before 11.7.3, 11.6.0.3, and 11.2.12.10.(CVE-2026-55950)

The Erlang/OTP ssl application does not validate that the PSK identity list and binder list carried in a TLS 1.3 ClientHello pre-shared key extension have equal length before passing them to the session ticket handler. In tlshandshake13:handlepresharedkey/3, an OfferedPreSharedKeys record with a mismatched number of identities and binders is forwarded directly to tlsserversession_ticket:use/4, which crashes the session ticket handler process.

An unauthenticated remote attacker can send a single crafted ClientHello to a TLS 1.3 server with session tickets enabled (stateful or stateless mode) and permanently disrupt session ticket handling on that listener. New TLS 1.3 handshakes complete but subsequently crash when the server attempts to issue a session ticket, effectively making TLS 1.3 unusable on the affected listener until the ssl application is restarted. TLS 1.2 connections are not affected.

This issue affects OTP from 22.2 before 29.0.3, 28.5.0.3 and 27.3.4.14 corresponding to ssl from 9.5 before 11.7.3, 11.6.0.3 and 11.2.12.10.(CVE-2026-55952)

Database specific
{
    "severity": "High"
}
References

Affected packages

openEuler:24.03-LTS-SP1 / erlang

Package

Name
erlang
Purl
pkg:rpm/openEuler/erlang&distro=openEuler-24.03-LTS-SP1

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
25.3.2.6-18.oe2403sp1

Ecosystem specific

{
    "aarch64": [
        "erlang-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-asn1-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-common_test-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-compiler-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-crypto-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-debugger-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-debuginfo-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-debugsource-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-dialyzer-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-diameter-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-edoc-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-eldap-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-erl_docgen-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-erl_interface-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-erts-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-et-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-eunit-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-examples-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-ftp-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-inets-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-jinterface-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-kernel-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-megaco-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-mnesia-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-observer-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-odbc-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-os_mon-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-parsetools-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-public_key-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-reltool-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-runtime_tools-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-sasl-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-snmp-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-src-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-ssh-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-ssl-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-stdlib-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-syntax_tools-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-tftp-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-tools-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-wx-25.3.2.6-18.oe2403sp1.aarch64.rpm",
        "erlang-xmerl-25.3.2.6-18.oe2403sp1.aarch64.rpm"
    ],
    "src": [
        "erlang-25.3.2.6-18.oe2403sp1.src.rpm"
    ],
    "x86_64": [
        "erlang-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-asn1-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-common_test-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-compiler-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-crypto-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-debugger-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-debuginfo-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-debugsource-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-dialyzer-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-diameter-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-edoc-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-eldap-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-erl_docgen-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-erl_interface-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-erts-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-et-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-eunit-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-examples-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-ftp-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-inets-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-jinterface-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-kernel-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-megaco-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-mnesia-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-observer-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-odbc-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-os_mon-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-parsetools-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-public_key-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-reltool-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-runtime_tools-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-sasl-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-snmp-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-src-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-ssh-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-ssl-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-stdlib-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-syntax_tools-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-tftp-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-tools-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-wx-25.3.2.6-18.oe2403sp1.x86_64.rpm",
        "erlang-xmerl-25.3.2.6-18.oe2403sp1.x86_64.rpm"
    ]
}

Database specific

source
"https://repo.openeuler.org/security/data/osv/OESA-2026-3044.json"