Tijdens het onderzoek naar de kritiek kwetsbaarheid in OpenSSH die vorige week werd ontdekt, is er nog een soortgelijke kwetsbaarheid gevonden (CVE-2024-6409) die op afstand code-executie zonder authenticatie mogelijk maakt. Deze nieuwe kwetsbaarheid is niet zo ernstig als de vorige, omdat deze zich voordoet na privilege-verlies in een door de SSH-server aangestuurd subprocess. De kwetsbaarheid is aanwezig in de openssh-pakketten van de Red Hat Enterprise Linux 9-distributie, gebaseerd op de in 2021 uitgebrachte OpenSSH 8.7. Het probleem betreft ook de pakketten voor Fedora Linux 36 en 37, die gebaseerd zijn op de versies OpenSSH 8.7 en 8.8.
In wezen is de kwetsbaarheid vergelijkbaar met het vorige probleem en wordt ook veroorzaakt door een race-toestand in de SIGALRM onderbreker-handler, die ontstaat door het uitvoeren van functies die niet zijn ontworpen voor aanroepen in asynchrone modus vanuit signaalhandlers. De handler wordt geactiveerd wanneer de timeout, bepaald via de parameter LoginGraceTime, verstrijkt en verstoort de huidige code-uitvoering. Het gebruik van functies die niet zijn ontworpen voor asynchrone uitvoering in de onderbrekingshandler, waarbij dynamische geheugenallocatie wordt toegepast, zoals syslog(), kan leiden tot beschadiging van interne malloc-structuren wanneer SIGALRM wordt geactiveerd tijdens de uitvoering van specifieke code.
De nieuwe kwetsbaarheid verschilt doordat de race-toestand ontstaat door het aanroepen van de cleanup_exit() functie binnen de grace_alarm_handler() signaalhandler. In de hoofdcodebasis van OpenSSH kan deze functie worden gebruikt in asynchroon uitgevoerde code, maar in de pakketten voor RHEL 9 en Fedora is er een extra patch toegepast die in de cleanup_exit() functie een oproep toevoegt voor het genereren van audit-events, bedoeld voor gebruik in signaalhandlers.
Deze patch werd gebruikt in RHEL 9 en afgeleide distributies in de pakketten gebaseerd op OpenSSH 8.7p1. In de actuele versies van Fedora komt het probleem niet voor, omdat de distributie vanaf Fedora 38 is overgestapt op een nieuwere versie van OpenSSH zonder veranderingen in cleanup_exit(). In tegenstelling tot de vorige kwetsbaarheid is het niet mogelijk om de nieuwe kwestie te blokkeren met een workaround door het gebruik van de ā-eā optie in sshd die het loggen via syslog uitschakelt. Maar om de kwetsbaarheid te blokkeren, kan in sshd_config de parameter 'LoginGraceTime=0' worden ingesteld.
Bron: opennet.ru
