CodeBreach maakt overnemen AWS GitHub-repositories mogelijk

CodeBreach maakt overnemen AWS GitHub-repositories mogelijk

Wiz heeft een kritieke kwetsbaarheid ontdekt in AWS CodeBuild die aanvallers toegang gaf tot kernrepositories van AWS, waaronder de veelgebruikte JavaScript SDK. De flaw, CodeBreach genoemd, maakte het mogelijk om via een regex-filter GitHub-credentials te stelen en volledige controle over repositories te krijgen.

De ontdekking kwam voort uit onderzoek naar een eerdere supply-chain-aanval op de Amazon Q VS Code-extensie. Wiz onderzocht daarop de AWS CodeBuild-configuraties van publieke repositories. Ze vonden vier actieve AWS-projecten met webhook-filters die builds triggerden op pull requests: de AWS SDK voor JavaScript, AWS Libcrypto, Amazon Corretto Crypto Provider en de Registry of Open Data op AWS.

In eerste instantie leek alles veilig. Alle vier projecten gebruikten een ACTOR_ID-filter om builds te beperken tot goedgekeurde maintainers. Maar de onderzoekers zagen dat de GitHub user IDs gescheiden waren met een pipe-karakter (|), wat in regex “OR” betekent. Dat detail bleek cruciaal.

Twee ontbrekende karakters met grote impact

Het probleem zat in het ontbreken van twee simpele karakters: de start (^) en eind ($) anchors in het regex-patroon. Zonder deze anchors zoekt een regex-engine niet naar een exacte match, maar naar een string die het patroon bevat. Elke GitHub user ID die een superstring was van een goedgekeurde ID kon dus het filter omzeilen.

GitHub kent sequentiële numerieke ID’s toe aan gebruikers. Accounts uit 2008 hebben 5-cijferige ID’s, recente accounts hebben 9-cijferige ID’s. Doordat GitHub dagelijks zo’n 200.000 nieuwe ID’s aanmaakt, ontstaat ongeveer elke vijf dagen een nieuwe, langere ID die een bestaande 6-cijferige maintainer-ID bevat. Wiz noemde dit een “eclipse”, het moment waarop een nieuw ID perfect een vertrouwd ID “overschaduwt”.

De race naar een target-ID winnen

Om een specifieke ID te claimen zodra deze beschikbaar kwam, moest Wiz veel GitHub-accounts tegelijk aanmaken. De standaard sign-up flow was beschermd met reCAPTCHA, dus dat werkte niet. De doorbraak kwam via GitHub Apps. Door apps te maken via de manifest flow konden ze bot-gebruikers genereren die wél pull requests kunnen openen.

Wiz bereidde 200 app-creatie-requests voor en verzamelde de bevestigings-URL’s. Ze gebruikten de GitHub Enterprise API om organisaties aan te maken als ID-sampling-tool, om te zien hoe dicht ze bij de target-ID kwamen. Op het exacte moment bezochten ze alle 200 URLs tegelijk, wat een golf van nieuwe bot-registraties triggerde. Ze slaagden erin user ID 226755743 te bemachtigen, die een vertrouwde maintainer-ID bevatte voor de aws/aws-sdk-js-v3 repository.

Van bypass naar admin-toegang

Met hun bot-gebruiker die het ACTOR_ID-filter kon omzeilen, maakten de onderzoekers een pull request voor de aws/aws-sdk-js-v3 repository. Ze voegden een legitieme bugfix toe, maar verstopten daarin een payload: een NPM-package-dependency die in de build-omgeving zou draaien en GitHub-credentials zou extraheren. De build werd getriggerd en binnen enkele momenten hadden ze de credentials van het aws-sdk-js-v3 CodeBuild-project.

De verkregen credentials waren een GitHub Classic Personal Access Token van de aws-sdk-js-automation-gebruiker. Deze gebruiker had volledige admin-rechten over de repository. Door de repo-scope van het token te misbruiken, die collaborators kan beheren, nodigden ze hun eigen GitHub-account uit als repository-administrator. Zo konden ze code pushen naar de main branch, pull requests goedkeuren en repository-secrets exfiltreren.

Enorme blast radius voor AWS Console

Dit controleniveau bood een duidelijk pad voor supply chain-aanvallen. De JavaScript SDK wordt wekelijks vrijgegeven op GitHub en NPM. Aanvallers hadden vlak voor een release malicious payloads kunnen injecteren. Volgens Wiz’s analyse bevat maar liefst 66 procent van cloud-omgevingen de JavaScript SDK – twee van de drie omgevingen draaien een instantie met het geïnstalleerde SDK.

Nog kritischer: de AWS Console zelf gebruikt het SDK en bundelt recente versies. Elke compromis in de JavaScript SDK had direct impact kunnen hebben op elk AWS-account wereldwijd.

Hetzelfde ACTOR_ID-filter-probleem was aanwezig in minstens drie andere AWS GitHub-repositories. Aanvallers hadden deze kunnen exploiteren voor de GitHub-credentials van drie extra accounts, waaronder een persoonlijk GitHub-account van een AWS-medewerker.

Wiz meldde de bevindingen aan AWS op 25 augustus 2025. AWS en Wiz kwamen samen om de bevindingen te bespreken. Op 27 augustus 2025 verankerde AWS de kwetsbare actor-ID-filters en revoceerde het personal access token van aws-sdk-js-automation. In september implementeerde AWS extra hardening om te voorkomen dat non-privileged builds toegang krijgen tot credentials via memory dumping.

AWS voerde een volledige audit uit van alle publieke build-omgevingen en CloudTrail-logs. Ze bevestigden dat geen andere partij de unanchored regex-kwetsbaarheid had misbruikt. AWS implementeerde ook een nieuwe Pull Request Comment Approval build gate binnen CodeBuild, die organisaties een simpele en veilige manier biedt om untrusted builds te voorkomen.

Tip: AWS introduceert AWS UI open source ontwerptool voor applicaties