25 kwetsbaarheden in RTOS Zephyr, inclusief kwetsbaarheden die worden uitgebuit via een ICMP-pakket

Onderzoekers van NCC Group gepubliceerd gratis projectauditresultaten Zephyr, ontwikkelen een real-time besturingssysteem (RTOS), gericht op het uitrusten van apparaten die voldoen aan het Internet of Things-concept (IoT, Internet of Things). Tijdens de audit kwam dit aan het licht 25 kwetsbaarheden in Zephyr en 1 kwetsbaarheid in MCUboot. Zephyr wordt ontwikkeld met medewerking van Intel-bedrijven.

In totaal werden 6 kwetsbaarheden geïdentificeerd in de netwerkstack, 4 in de kernel, 2 in de opdrachtshell, 5 in systeemaanroephandlers, 5 in het USB-subsysteem en 3 in het firmware-updatemechanisme. Twee problemen worden als kritiek beoordeeld, twee zijn hoog, 9 zijn matig, 9 zijn laag en 4 zijn ter overweging. Kritieke problemen beïnvloeden de IPv4-stack en de MQTT-parser, gevaarlijke problemen beïnvloeden de USB-massaopslag en USB DFU-stuurprogramma's. Op het moment dat de informatie openbaar werd gemaakt, waren er alleen oplossingen voorbereid voor de 15 gevaarlijkste kwetsbaarheden; problemen die leiden tot Denial of Service of die verband houden met fouten in aanvullende kernelbeschermingsmechanismen blijven niet gecorrigeerd.

Er is een op afstand exploiteerbare kwetsbaarheid geïdentificeerd in de IPv4-stack van het platform, die leidt tot geheugenbeschadiging bij het verwerken van op een bepaalde manier gewijzigde ICMP-pakketten. Een ander ernstig probleem werd gevonden in de MQTT-protocolparser, dat wordt veroorzaakt door een gebrek aan goede controle van de headerveldlengte en kan leiden tot uitvoering van code op afstand. Minder ernstige denial-of-service-problemen worden aangetroffen in de IPv6-stack en de implementatie van het CoAP-protocol.

Andere problemen kunnen lokaal worden uitgebuit om een ​​denial-of-service te veroorzaken of code op kernelniveau uit te voeren. De meeste van deze kwetsbaarheden houden verband met het gebrek aan goede controles van systeemaanroepargumenten, en kunnen ertoe leiden dat willekeurige delen van het kernelgeheugen worden geschreven en gelezen. De problemen strekken zich ook uit tot de verwerkingscode voor systeemoproepen zelf: het aanroepen van een negatief systeemoproepnummer resulteert in een overflow van gehele getallen. De kernel identificeerde ook problemen bij de implementatie van ASLR-bescherming (randomisatie van adresruimte) en het mechanisme voor het plaatsen van kanarietekens op de stapel, waardoor deze mechanismen ineffectief werden.

Veel problemen hebben betrekking op de USB-stack en individuele stuurprogramma's. Problemen met USB-massaopslag kunnen bijvoorbeeld een bufferoverflow veroorzaken en code uitvoeren op kernelniveau wanneer het apparaat is aangesloten op een USB-host die wordt beheerd door de aanvaller. Door een kwetsbaarheid in USB DFU, een driver voor het laden van nieuwe firmware via USB, kun je een aangepast firmware-image in de interne Flash van de microcontroller laden zonder gebruik te maken van encryptie en de veilige opstartmodus te omzeilen met verificatie van componenten met behulp van een digitale handtekening. Daarnaast werd de open bootloadercode bestudeerd MCUboot, waarin één goedaardige kwetsbaarheid werd gevonden,
wat kan leiden tot een bufferoverloop bij gebruik van het SMP-protocol (Simple Management Protocol) via de UART.

Bedenk dat in Zephyr slechts één globale gedeelde virtuele adresruimte (SASOS, Single Address Space Operating System) beschikbaar is voor alle processen. Applicatiespecifieke code wordt gecombineerd met een applicatiespecifieke kernel om een ​​monolithisch uitvoerbaar bestand te vormen dat kan worden geladen en uitgevoerd op specifieke hardware. Alle systeembronnen worden tijdens het compileren bepaald, waardoor de codegrootte wordt verkleind en de prestaties toenemen. Het systeemimage kan alleen die kernelfuncties bevatten die nodig zijn om de applicatie uit te voeren.

Het is opmerkelijk dat een van de belangrijkste voordelen van Zephyr genoemd ontwikkeling met veiligheid in het achterhoofd. Goedgekeurddat alle ontwikkelingsstadia verplichte fasen ondergaan om de veiligheid van de code te bevestigen: fuzzing-testen, statische analyse, penetratietesten, codebeoordeling, analyse van achterdeurimplementatie en dreigingsmodellering.

Bron: opennet.ru

Voeg een reactie