Er zijn meerdere kritieke beveiligingsfouten onthuld in het open-source online code-uitvoeringssysteem van Judge0, die kunnen worden uitgebuit om code-uitvoering op het doelsysteem te verkrijgen.
De drie fouten, die allemaal van cruciaal belang zijn, stellen een “tegenstander met voldoende toegang in staat om een sandbox-ontsnapping uit te voeren en root-rechten op de hostmachine te verkrijgen”, aldus het Australische cyberbeveiligingsbedrijf Tanto Security in een vandaag gepubliceerd rapport.
Judge0 (uitgesproken als “judge zero”) wordt door de beheerders beschreven als een “robuust, schaalbaar en open-source online code-uitvoeringssysteem” dat kan worden gebruikt om applicaties te bouwen die online code-uitvoeringsfuncties vereisen, zoals beoordeling van kandidaten, e-learning en online code-editors en IDE's.
Volgens de website wordt de dienst gebruikt door onder meer 23 klanten, zoals AlgoDaily, CodeChum en PYnative. Het project is tot nu toe 412 keer geforkt op GitHub.

De gebreken, ontdekt en gerapporteerd door Daniel Cooper in maart 2024, staan hieronder opgesomd:
- CVE-2024-28185 (CVSS-score: 10,0) – De applicatie houdt geen rekening met symlinks die in de sandbox-map zijn geplaatst en die door een aanvaller kunnen worden gebruikt om naar willekeurige bestanden te schrijven en code-uitvoering buiten de sandbox te verkrijgen.
- CVE-2024-28189 (CVSS-score: 10.0) – Een patch-bypass voor CVE-2024-28185 die voortkomt uit het gebruik van de UNIX-opdracht chown op een niet-vertrouwd bestand in de sandbox. Een aanvaller kan hiervan misbruik maken door een symbolische link (symlink) te maken naar een bestand buiten de sandbox, waardoor de aanvaller willekeurige bestanden buiten de sandbox kan uitvoeren.
- CVE-2024-29021 (CVSS-score: 9,1) – De standaardconfiguratie van Judge0 maakt de service kwetsbaar voor een sandbox-ontsnapping via Server-Side Request Forgery (SSRF). Hierdoor kan een aanvaller met voldoende toegang tot de Judge0 API code zonder sandbox uitvoeren als root op de doelmachine.
Het probleem vindt zijn oorsprong in een Ruby-script genaamd “isolate_job.rb”, dat verantwoordelijk is voor het opzetten van de sandbox, het uitvoeren van de code en het opslaan van de resultaten van de uitvoering.
Concreet houdt het in dat er een symbolische link in de directory wordt gemaakt voordat een bash-script wordt opgezet om het programma uit te voeren op basis van de indieningstaal, zodat het schrijven naar een willekeurig bestand op het niet-sandbox-systeem mogelijk maakt.
Een bedreigingsacteur zou deze fout kunnen gebruiken om scripts op het systeem te overschrijven en ervoor te zorgen dat code wordt uitgevoerd buiten de sandbox en op de Docker-container waarop de indieningstaak wordt uitgevoerd.

Bovendien kan de aanvaller zijn bevoegdheden buiten de Docker-container escaleren, omdat deze wordt uitgevoerd met de bevoorrechte vlag zoals gespecificeerd in docker-compose.yml.
“Hierdoor kan de aanvaller het Linux-hostbestandssysteem aankoppelen en kan de aanvaller vervolgens bestanden schrijven (bijvoorbeeld een kwaadaardige cron-job) om toegang te krijgen tot het systeem”, aldus Herman Došilović van Judge0.
“Vanaf dit punt heeft de aanvaller volledige toegang tot het Judge0-systeem, inclusief de database, interne netwerken, de Judge0-webserver en alle andere applicaties die op de Linux-host draaien.”
CVE-2024-29021 heeft daarentegen te maken met een configuratie die communicatie mogelijk maakt met de PostgreSQL-database van Judge0 die beschikbaar is binnen het interne Docker-netwerk, waardoor de tegenstander de SSRF kan bewapenen om verbinding te maken met de database en het gegevenstype van relevante gegevens te wijzigen. kolommen en uiteindelijk commando-injectie krijgen.
Na verantwoordelijke openbaarmaking zijn de tekortkomingen verholpen in versie 1.13.1, uitgebracht op 18 april 2024. Gebruikers van Judge0 wordt geadviseerd om te updaten naar de nieuwste versie om potentiële bedreigingen te beperken.