CVE-2026-48840: Exim 4.99.4: PROXY-protocol uninitialised-stack information disclosure

Heiko Schlittermann via Exim-announce <[email protected]> Fri, 29 May 2026 16:38:57 +0200
Newsgroups gmane.mail.exim.announce
Organization schlittermann -- internet & unix support
Message-ID <fxbuuizw5bvmsoafd2rn7ntruzq2yhw7fw3ptvbabxaguozgyv__6739.14588276006$1780066154$gmane$org@iwyrf7ed3kgq>
--===============8151679889183961965==
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="4ouo3nwmjaqjtwvw"
Content-Disposition: inline


--4ouo3nwmjaqjtwvw
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Subject: CVE-2026-48840: Exim 4.99.4: PROXY-protocol uninitialised-stack
 information disclosure
MIME-Version: 1.0

Dear Exim users,

The Exim maintainers are releasing a security fix for CVE-2026-48840.

Identifier:   EXIM-Security-2026-05-19.1 (CVE-2026-48840)
Type:         pre-authentication information disclosure
Component:    Exim
Affects:      4.88 (2017) through the current 4.99.3 release
Corrected in: Exim 4.99.4 (exim-4.99.4)
Credit:       Warisjeet Singh (sin99xx)

Vulnerability Details
---------------------

proxy_protocol() declares hdr as an uninitialised stack union.  For a
PROXYv2 frame, the only length guard is an upper bound: the frame size
must not exceed sizeof(hdr).  No lower bound is checked.

A frame with address family 0x21 (TCPv6) and len=3D0 sets the read size
to 16, causing the read loop to copy exactly 0 bytes into the union.
The TCPv6 dispatch arm then unconditionally calls:

  memmove(tmpaddr6.sin6_addr.s6_addr, hdr.v2.addr.ip6.src_addr, 16)

copying 16 uninitialised stack bytes into tmpip6, which inet_ntop
formats as an IPv6 address string.  That string is written to
sender_host_address and emitted in the SMTP greeting banner:

  250 hostname Hello probe [::68ef:38ad:ffff:0]

The same defect affects family 0x11 (TCPv4) with len < 12 (4 leaked
bytes instead of 16).

The leaked bytes track ASLR entropy across daemon restarts and are
confirmed to be live userspace VA pointers, making this an
ASLR-defeat primitive usable as a chain component.

Fix: add minimum-length checks per address family (12 bytes for
TCPv4/0x11, 36 bytes for TCPv6/0x21) before the union is accessed.
Frames that fail the check are rejected with proxyfail, consistent
with all other malformed-frame handling in the function.

Reported by Warisjeet Singh (sin99xx).  Tested on aarch64 Linux;
architecture-independent (only leaked content varies).


Affected Configurations
-----------------------

Exim compiled with SUPPORT_PROXY (default in Debian, Ubuntu,
RHEL/Fedora packages) and hosts_proxy set to a non-empty value.
The attacker's source IP must match hosts_proxy, or the attacker
must be able to reach the port that expects a PROXY header through
a host already in hosts_proxy.


Mitigations
-----------

- Narrow hosts_proxy to the exact load-balancer IPs (not a CIDR superset).
- Unset hosts_proxy entirely to disable PROXY-protocol parsing on the affec=
ted listener.

Resolution
----------

Upgrade to Exim 4.99.4.  The fix is on branch exim-4.99+fixes,
tag exim-4.99.4, signed by Heiko Schlittermann (HS12-RIPE) <hs@schlitterman=
n.de>,
key 0xDD98D92359DE9E3C2663F291697F0EDD68099F6F.

Downloads
---------

  https://ftp.exim.org/pub/exim/exim4/
  https://code.exim.org/exim/exim/releases

Advisory
--------

  https://www.exim.org/static/doc/security/EXIM-Security-2026-05-19.1/

Timeline
--------

  2026-05-19 12:35 UTC  Report received from Warisjeet Singh (sin99xx)
  2026-05-19 13:26 UTC  Acknowledgement sent to reporter
  2026-05-19 14:06 UTC  Root cause confirmed; fix drafted
  2026-05-25 13:30 UTC  CVE request submitted to Mitre via cveform.mitre.org
  2026-05-25 17:57 UTC  CVE-2026-48840 assigned by MITRE
  2026-05-26 00:41 UTC  Advance notice (distro-pre.txt) sent to distros@vs.=
openwall.org
  2026-05-26 00:47 UTC  Advance notice sent to [email protected].=
org
  2026-05-27 14:00 UTC  Fix branch and tag exim-4.99.4 pushed to exim-distr=
os
  2026-05-29 14:00 UTC  Public release

--=20
Heiko Schlittermann
On behalf of the Exim Maintainers

--4ouo3nwmjaqjtwvw
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE3ZjZI1nenjwmY/KRaX8O3WgJn28FAmoZpQAACgkQaX8O3WgJ
n29BXRAAg6mvXCwDl9OeGz+WUiacRiv8CB7VjMi9kQAE1llFPsffI8xUKGOUe+q6
A1ta1yMm9mi+LhffmbfONrjdJMACGhjREovdIoS+Hrl/OiTF20pb9UL8NLyT1a0P
fROWUAYHKPE3qpE3wyJPQt6JHMOI9Vsc0d8tP3yU2NR+C61QS0VhxjgUy44AaWk/
niNiepeWl81nztgRC+XP9WWvCBpWk7jFlDZJuTJ0rPlAX4bs7VO/B89uz0UVfDAn
SJAbzqKh6QLW80BiTThdwxMABEApqUkuKr0/qBn8dmrW/es30aKjebXXuiJyZPP4
CDW+328wnzUrmC6Lb1JdMdQcPT2GpqUhakEQCxC8czX4PtuZ3DFzoBmgt3xQLAnF
gkETDOprp++2cSDLWYIA9CQ5XAYjq1tI5q5bniPhBsPGy0ypJFURtRNagJ4YSeJx
aGE0DTuNBskjpc2NS8auwSSuC781abo8URqL5JEwhcRj/5o39FqPIIp2OIiEhgy1
kjX8IB3mK+5XRM+aNfgm5K8jcZ/OkAB7ToSF5/Zm96tSWe5T1Sa7+zigcM53cDF5
DjS0SJlSDUWahl8RHsW3MrQAaX/VKRvowrrftAyl5UzF3n13yFFJyeX8bE/bNT9e
4mohuhV8Bf9hBi2o/Un9smAbeKkIZ9RaCC/Uo1yP03mjw748U6w=
=Ett8
-----END PGP SIGNATURE-----

--4ouo3nwmjaqjtwvw--

--===============8151679889183961965==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


-- 
## subscription configuration (requires account):
##   https://lists.exim.org/mailman3/postorius/lists/exim-announce.lists.exim.org/
## unsubscribe (doesn't require an account):
##   [email protected]
## Exim details at https://www.exim.org/
## Please use the Wiki with this list - https://code.exim.org/exim/wiki/wiki

--===============8151679889183961965==--