Am I affected?

This record states its affected versions in a form that can't be compared automatically.

11.0 and up affected
11.7.2 not affected
11.6.0.2 not affected
11.2.12.9 not affected
every other version: unknown

Description

Reliance on IP Address for Authentication vulnerability in Erlang/OTP ssl (inet_tls_dist module) allows unauthenticated bypass of the distribution-over-TLS LAN allowlist.

The inet_tls_dist:check_ip/1 function, which enforces a LAN allowlist for Erlang distribution over TLS, calls inet:sockname/1 instead of inet:peername/1 to obtain the peer's IP address. Because inet:sockname/1 returns the local socket address, both the local IP and the supposed peer IP resolve to the same value, causing the subnet mask comparison to always succeed regardless of the actual remote address. Any holder of a CA-signed TLS certificate can therefore bypass the LAN restriction and gain full Erlang distribution access to the node, including rpc:call/4 and code:load_binary/3.

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

This issue affects OTP from OTP 26.0 before OTP 29.0.2, OTP 28.5.0.2 and OTP 27.3.4.13, corresponding to ssl from 11.0 before 11.7.2, 11.6.0.2 and 11.2.12.9.

Weaknesses & attack patterns

Weakness

CWE-1025 · Comparison Using Wrong Factors in catalog → MITRE ↗
CWE-863 · Incorrect Authorization in catalog → MITRE ↗

Attack patterns

CAPEC-1 · Accessing Functionality Not Properly Constrained by ACLs MITRE ↗
CAPEC-115 · Authentication Bypass MITRE ↗

Affected — Erlang / ssl Repository ↗

11.0 and up affected
11.7.2 not affected
11.6.0.2 not affected
11.2.12.9 not affected
every other version: unknown
default status unknown
cpe cpe:2.3:a:erlang:erlang/otp:*:*:*:*:*:*:*:*
modules · source files · routines
modules inet_tls_dist
source files src/inet_tls_dist.erl
routines inet_tls_dist:check_ip/1

Affected — GitHub / erlang/otp Repository ↗

26.0 and up affected
29.0.2 not affected
28.5.0.2 not affected
27.3.4.13 not affected
7a08c55 < 0209a6d affected
every other version: unknown
default status unknown
cpe cpe:2.3:a:erlang:erlang/otp:*:*:*:*:*:*:*:*
modules · source files · routines
modules inet_tls_dist
source files lib/ssl/src/inet_tls_dist.erl
routines inet_tls_dist:check_ip/1

Workarounds

Implement a custom verify_fun SSL option that correctly checks the peer IP address using inet:peername/1 on the socket.

Configurations

The Erlang distribution must be configured to use TLS (inet_tls_dist) with the check_ip option enabled. The default Erlang distribution configuration does not use TLS and is not affected.

References

Credits

Lukas Backström Finder
Ingela Anderton Andin Remediation developer
Raimo Niskanen Remediation reviewer
Jakub Witczak Remediation reviewer

CVSS breakdown

CVSS:4.0/AV:A/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
« All CVEs