In de toolset voor het starten van geïsoleerde containers runc, gebruikt in Docker en Kubernetes, is een kwetsbaarheid CVE-2024-21626 ontdekt, die toegang tot het bestandssysteem van de hostomgeving vanuit een geïsoleerde container mogelijk maakt. Tijdens de aanval kan een aanvaller bepaalde uitvoerbare bestanden in de hostomgeving overschrijven en zo hun code buiten de container uitvoeren. In de runtime crun en youki, die runc gebruiken, evenals in LXC, doet het probleem zich niet voor. De kwetsbaarheid is verholpen in de release runc 1.1.12.
Bij het gebruik van de tools Docker of Kubernetes kan een aanval worden uitgevoerd door een speciaal ontworpen containerafbeelding voor te bereiden, waarna, bij installatie en uitvoering, vanuit de container toegang kan worden verkregen tot het externe bestandssysteem. Bij gebruik van Docker is er een mogelijkheid tot exploitatie via een speciaal ontworpen Dockerfile. De kwetsbaarheid kan ook worden benut wanneer processen in de container worden uitgevoerd met het commando 'runc exec' door de werkdirectory aan de namespace van de hostomgeving te binden.
De kwetsbaarheid wordt veroorzaakt door een lek van interne bestandsdescriptoren. Vóór de uitvoering van code binnen de container wordt in runc alle bestandsdescriptoren gesloten met behulp van de flag O_CLOEXEC. Echter, na de latere uitvoering van de functie setcwd() blijft er een open bestandsdescriptor, verwijzend naar de werkdirectory, dat toegankelijk blijft na de lancering van de container. Er zijn verschillende basisaanvallen voorgesteld op de hostomgeving waarbij gebruik wordt gemaakt van de overgebleven bestandsdescriptor.
Bijvoorbeeld, een aanvaller kan in de containerafbeelding de parameter process.cwd specificeren, verwijzend naar '/proc/self/fd/7/', wat leidt tot binding aan het proces pid1 in de container met de werkdirectory die zich in de mount namespace van de hostomgeving bevindt. Zo kan in de containerafbeelding de uitvoering van '/proc/self/fd/7/../../../bin/bash' worden ingesteld en door middel van het uitvoeren van een shell-script de inhoud van '/proc/self/exe' worden overschreven, die naar de hostcopy van /bin/bash verwijst.
Een andere aanvalsmethode stelt een aanvaller die binnen een container is opgesloten in staat om toegang te krijgen tot de hostomgeving, als er in die container verhoogde processen worden uitgevoerd met behulp van het commando "runc exec" met de optie "—cwd". De aanvaller kan het pad van het uit te voeren proces wijzigen naar een symbolische link die verwijst naar "\/proc\/self\/fd\/7\/" en zo "\/proc\/$exec_pid\/cwd" openen voor toegang tot het bestandssysteem aan de hostzijde. De aanvaller kan ook de uitvoerbare bestanden aan de hostzijde herschrijven door een uitvoerbaar bestand uit de hostomgeving te starten ("\/proc\/self\/fd\/7\/..\/..\/..\/bin\/bash") en daarna het bestand "\/proc\/$pid\/exe" te herschrijven, dat verwijst naar het gestart bestand.
Bovendien zijn er nog vijf kwetsbaarheden in de Docker-toolkitcomponenten ontdekt:
- CVE-2024-23651 — een raceconditie in het BuildKit-pakket dat in Docker wordt gebruikt om broncode om te zetten in bouwartefacten. De kwetsbaarheid wordt veroorzaakt door het gebruik van een gemeenschappelijk montagedeel met cache in parallel uitgevoerde bouwfasen ("—mount=type=cache,source=") dat, wanneer een speciaal aangepaste Dockerfile wordt verwerkt in BuildKit, toegang verleent tot bestanden in de hostomgeving vanuit de bouwcontainer. De kwetsbaarheid is opgelost in BuildKit 0.12.5.
- CVE-2024-23652 — een fout bij het verwijderen van lege bestanden die zijn gemaakt voor het montagedeel bij het gebruik van de optie "—mount", waardoor het mogelijk is om een bestand buiten de container te verwijderen bij het verwerken van een speciaal aangepaste Dockerfile. De kwetsbaarheid is opgelost in BuildKit 0.12.5.
- CVE-2024-23653 — een fout in de API-implementatie in BuildKit die het mogelijk maakt om een container met verhoogde rechten uit te voeren, ongeacht de instellingen van security.insecure. De kwetsbaarheid is opgelost in BuildKit 0.12.5.
- CVE-2024-23650 — een kwaadaardige client of frontend van BuildKit kan leiden tot een crash van de achtergrondprocessen van BuildKit. De kwetsbaarheid is opgelost in BuildKit 0.12.5.
- CVE-2024-24557 — de mogelijkheid van cachevervalsing in Moby, de component voor het bouwen van gespecialiseerde containerisolatiesystemen. Bij het verwerken van een speciaal aangepaste containerafbeelding kan men gegevens in de cache plaatsen die kunnen worden gebruikt in latere bouwfasen. De kwetsbaarheid is opgelost in Moby 25.0.2 en 24.0.9.
Bron: opennet.ru
