Kritieke Apache HTTP/2-fout (CVE-2026-23918) maakt DoS en potentiële RCE mogelijk

De Apache Software Foundation (ASF) heeft beveiligingsupdates uitgebracht om verschillende beveiligingsproblemen in de HTTP-server aan te pakken, waaronder een ernstige kwetsbaarheid die mogelijk kan leiden tot uitvoering van externe code (RCE).

De kwetsbaarheid, bijgehouden als CVE-2026-23918 (CVSS-score: 8,8), is beschreven als een geval van “dubbel gratis en mogelijk RCE” in de verwerking van het HTTP/2-protocol. Dit probleem treft Apache HTTP Server 2.4.66 en is verholpen in versie 2.4.67.

Mede-oprichter van Striga.ai Bartlomiej Dmitruk en ISEC.pl-onderzoeker Stanislaw Strzalkowski zijn gecrediteerd voor het ontdekken en rapporteren van de kwetsbaarheid.

Toen hij voor commentaar werd benaderd, vertelde Dmitruk via e-mail aan The Hacker News dat de ernst van CVE-2026-23918 van cruciaal belang is, omdat het kan worden uitgebuit om denial-of-service (DoS) en RCE te bereiken. Aanvullende details over de kwetsbaarheid vindt u hieronder:

CVE-2026-23918 is een double-free in Apache httpd 2.4.66 mod_http2, specifiek in het stream-opschoonpad van h2_mplx.c. De bug treedt op wanneer een client een HTTP/2 HEADERS-frame verzendt, onmiddellijk gevolgd door RST_STREAM met een foutcode die niet nul is, op dezelfde stream, voordat de multiplexer de stream heeft geregistreerd.

Twee nghttp2-callbacks worden vervolgens achter elkaar geactiveerd, on_frame_recv_cb voor de RST en on_stream_close_cb voor de afsluiting, en beide roepen uiteindelijk h2_mplx_c1_client_rst -> m_stream_cleanup aan, die dezelfde h2_stream-aanwijzer twee keer naar de spurge-opruimarray duwt. Wanneer c1_purge_streams later spurge herhaalt en bij elke invoer h2_stream_destroy -> apr_pool_destroy aanroept, raakt de tweede aanroep geheugen dat al is vrijgemaakt.

De DoS, voegde Dmitruk eraan toe, is triviaal en werkt op elke standaardimplementatie met mod_http2 en een multi-threaded MPM, terwijl het RCE-pad een Apache Portable Runtime (APR) vereist met de mmap-allocator, wat de standaard is op van Debian afgeleide systemen en op de officiële httpd Docker-image. Dmitruk legde verder uit –

De eerste is denial-of-service, wat triviaal is: één TCP-verbinding, twee frames, geen authenticatie, geen speciale headers, geen specifieke URL, en de worker crasht. Apache respawnt het, maar elk verzoek aan de gecrashte werker wordt verwijderd, en het patroon kan in stand blijven zolang de aanvaller blijft verzenden.

Het tweede resultaat is het uitvoeren van code op afstand, en we hebben een werkend proof of concept gebouwd op x86_64. De keten plaatst een nep-h2_stream-structuur op het vrijgekomen virtuele adres via mmap-hergebruik, wijst de poolopruimfunctie naar system() en gebruikt het scorebordgeheugen van Apache als een stabiele container voor de nep-structuren en de commandoreeks.

Het scorebord staat gedurende de levensduur van de server op een vast adres, zelfs bij ASLR, wat het RCE-pad praktisch maakt. De gebruikelijke kanttekeningen zijn van toepassing: praktische exploitatie vereist een informatielek voor system() en de scorebord-offsets, en de heap-spray is probabilistisch, maar in laboratoriumomstandigheden landt de uitvoering binnen enkele minuten.

Dmitruk wees er ook op dat de MPM-voorvork niet door de fout wordt getroffen. De onderzoeker waarschuwde echter dat het aanvalsoppervlak groot is, omdat mod_http2 in standaardbuilds wordt geleverd en HTTP/2 breed wordt ingeschakeld in productie-implementaties. In het licht van de ernst van de fout wordt gebruikers geadviseerd om de nieuwste oplossingen toe te passen voor optimale bescherming.

Thijs Van der Does