Skip to content

ext/openssl: Fix server ALPN reading a freed session stream - #457

Closed
iliaal wants to merge 1 commit into
PHP-8.6from
fix/openssl-session-alpn-uaf
Closed

iliaal wants to merge 1 commit into
PHP-8.6from
fix/openssl-session-alpn-uaf

Conversation

@iliaal

@iliaal iliaal commented Nov 4, 2026 •

Copy link
Copy Markdown
Owner

Since b1242c3, a server stream seeded from a session stream shares the parent's SSL_CTX, whose ALPN select callback holds the parent's netstream data. Closing the parent before the child's handshake makes the callback read freed memory; if peer data refills the slot, the process segfaults.

Found reviewing php#25194. Reproduced on PHP-8.6 release and ASAN builds. 8.5 and older are unaffected; this needs to reach PHP-8.6.0 before GA.

@iliaal
iliaal force-pushed the fix/openssl-session-alpn-uaf branch from 09a6309 to 6a59238 Compare November 5, 2026 14:06
Since b1242c3 a server stream seeded from a session stream shares the
parent's SSL_CTX. Two callbacks on that context were registered with the
parent's stream as their argument: the ALPN select callback and, on Windows
without a CA file, the certificate verify callback. Closing the parent
before the child completed its handshake left them reading freed memory, and
the child silently negotiated no ALPN protocol. Look up the handshake's own
stream from the SSL ex_data, as verify_callback and the SNI callback do, and
give the child its own copy of the ALPN protocol list.
@iliaal
iliaal force-pushed the fix/openssl-session-alpn-uaf branch from 6a59238 to 34be2cf Compare November 5, 2026 15:00
@iliaal

iliaal commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

Submitted upstream as php#25211.

@iliaal iliaal closed this Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant