Bypass voor aftakkingsbescherming
Sluit de hoofdleiding af voordat iemand er met kracht overheen duwt.
Wat is Bypass voor aftakkingsbescherming?
Een standaardbranch zonder bescherming accepteert alles wat ernaar wordt gepusht. Iedereen met push-toegang kan zich rechtstreeks engageren voor main of force-push over zijn geschiedenis. Review- en statuscontroles werken alleen als er iets doorheen dwingt. U gaat rechtstreeks naar de hoofdpagina met de inloggegevens van een phished-bijdrager, forceert vervolgens de geschiedenis en ziet hoe CI wordt overgeslagen. U voegt branch-bescherming toe: vereist een pull-verzoek, reviewers, het passeren van controles en geen force-pushs, met de instelling include-administrators ingeschakeld, omdat een regel waar geprivilegieerde accounts omheen kunnen stappen geen controle is.
Wat je leert in Bypass voor aftakkingsbescherming
- Herken wat een onbeveiligde standaardvertakking toestaat: directe pushes en force-pushs die de geschiedenis herschrijven en pull-requestreviews en CI-statuscontroles omzeilen
- Traceren hoe één gecompromitteerd bijdrageraccount niet-beoordeelde code rechtstreeks naar productie kan pushen wanneer deze wordt samengevoegd met de standaard automatische implementatie van vertakkingen
- Begrijp waarom een force-push naar een gedeelde branch gevaarlijk is, omdat het de geschiedenis herschrijft die anderen hebben beoordeeld en erop voortbouwde en commits zonder record kan wissen
- Pas vertakkingsbeschermingsregels toe die een pull-verzoek vereisen, vereiste revisoren en het passeren van statuscontroles en die force-pushs op de standaardvertakking blokkeren
- Schakel de optie include-administrators in, zodat de regel niet kan worden omzeild door bevoorrechte accounts, waardoor de controle voor iedereen afdwingbaar wordt
Bypass voor aftakkingsbescherming — Trainingsstappen
-
Een gestolen contribuantenstoel
Vandaag richt Bob zich op Riftwell, een logistiek softwarebedrijf. Hij heeft de inloggegevens van een bijdrager voor de dispatch-api-repository gephapt en wil dat zijn eigen code in productie wordt uitgevoerd, zonder dat één persoon deze eerst heeft beoordeeld. Hij begint met het openen van de repository waar het gestolen account naartoe kan pushen.
-
Niets bewaakt de hoofdleiding
Het statusbord van de repository vertelt Bob alles wat hij nodig heeft. De standaardvertakking is hoofd, de vertakkingsbescherming luidt 'geen', en elke push naar hoofd wordt rechtstreeks in productie genomen. Zonder regels voor de branch kan hij er rechtstreeks naartoe gaan en de geschiedenis ervan forceren, en alles wat schepen op eigen kracht in productie brengt.
-
Kloon de repository
Bob kloont de repository lokaal met het gestolen account, zodat hij de geschiedenis ervan kan herschrijven en zijn wijziging kan opbouwen voordat hij deze terugzet naar de hoofdmap.
-
Terugspoelen voorbij de audittoezegging
De meest recent beoordeelde commit voor de belangrijkste toegevoegde auditregistratie aan de authenticatieservice, precies het record dat de wijziging zou markeren die Bob op het punt staat door te voeren. Dus begint hij met het terugdraaien van zijn lokale hoofdcommit, waarbij hij de commit voor het vastleggen van audits volledig laat vallen. Op een beschermde branch zou dit onmogelijk zijn. Hier is het een enkele opdracht.
-
Force-duw over de hoofdleiding
Bob duwt zijn teruggespoelde geschiedenis met geweld rechtstreeks naar de hoofdlijn. Omdat de branch geen bescherming heeft, accepteert de server deze en de beoordeelde commit voor het vastleggen van audits is verdwenen uit de gedeelde branch, alsof deze nooit is samengevoegd. Alle anderen die de leiding nemen, zullen die commit nu ook stilletjes verliezen. Dat is wat een force-push naar een gedeelde branch doet: het herschrijft de geschiedenis die andere mensen al hebben beoordeeld en waarop is voortgebouwd.
-
Open de verificatie-middleware
Nu voegt Bob zijn eigen code toe. Hij opent de authenticatie-middleware, het bestand waar elk verzoek aan de verzend-API doorheen gaat, en leest het schoon voordat het wordt aangeraakt.
-
Plant de bypass
Bob voegt een kort blok toe aan de bovenkant van de middleware. Het leest als een compatibiliteitsshim voor een verouderd relais, maar elk verzoek met één vaste headerwaarde wordt doorgestuurd als beheerder, zonder token en zonder handtekeningcontrole. Een achterdeur naar elke route die de dienst beschermt, vermomd als onschadelijk loodgieterswerk.
-
In het volle zicht begraven
Het toegevoegde blok bevindt zich tussen de gewone middleware en leest als iets dat een backend-ingenieur zou kunnen schrijven. Niets eraan ziet er in één oogopslag alarmerend uit, en dat is precies waarom het een snelle recensie zou overleven, als er ooit een recensie zou plaatsvinden.
-
Verbind je met de belangrijkste
Bob voert de wijziging rechtstreeks door op Main met een bericht over een relaistime-out, zonder enige vermelding van authenticatie. Er is geen branch en geen pull-request; de commit zit al op de standaard branch in zijn kloon.
-
Direct door naar productie
Bob pusht de commit rechtstreeks naar main. Er is geen pull-verzoek om te openen, geen reviewer om het goed te keuren en geen statuscontrole om te slagen. Het branch accepteert het, en omdat hij samenvoegt met de hoofdautomatische implementatie, is zijn achterdeur enkele seconden later live in productie.
Dekking van beveiligingsframeworks
CWE
- CWE-285 Improper Authorization
- CWE-862 Missing Authorization
MITRE ATT&CK
- T1195.002 Supply Chain Compromise: Compromise Software Supply Chain
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security