Operaatio toteutettiin noin kello 11.36–17.48 UTC, mikä viittaa erittäin automatisoituun järjestelmään, joka oli suunniteltu vaarantamaan suuria määriä repositorioita nopeasti ennen kuin ylläpitäjät ehtivät huomata muutokset.
Kampanja nojasi automaatioon ja sosiaaliseen naamiointiin saadakseen haitalliset committi näyttämään normaalilta CI-huollolta.
Hyökkääjät loivat kertakäyttöisiä GitHub-tilejä, joilla oli satunnaistetut käyttäjänimet ja väärennetyt automaatioidentiteetit, kuten:
Nämä identiteetit saivat committi näyttämään tulevan rutiininomaisesta automaatiojärjestelmästä eikä ihmishyökkääjältä.
Commitien tekijätiedot ja viestit muotoiltiin näyttämään uskottavilta — ne muistuttivat usein rutiininomaisia työnkulun päivityksiä tai CI-konfiguraation hienosäätöjä. Tämä auttoi commiteja sulautumaan normaaliin kehitystoimintaan ja viivästytti epäilyksiä.
Kampanja kohdistui repositorioihin, joissa haaransuojaussäännöt olivat heikkoja tai puuttuivat kokonaan. Ilman pakollisia pull request -tarkastuksia tai rajoituksia sille, kuka voi muokata työnkulkuja, hyökkääjät pystyivät työntämään työnkulkumuutoksia suoraan repositorion oletushaaraan.
Jokainen haitallinen commit lisäsi GitHub Actions -työnkulkutiedoston, joka sisälsi Base64-koodatun Bash-haittakoodin. Kun CI-putki suoritettiin, skripti käynnistyi GitHub Actions -suorittimen sisällä ja alkoi kerätä tunnistetietoja.
Tämä suunnittelu tarkoitti, että hyökkäys pysyi usein piilossa, kunnes seuraava CI-ajo käynnisti työnkulun.
Työnkulkuihin upotettu Base64-koodattu skripti oli suunniteltu keräämään arkaluonteisia tietoja CI-ympäristöstä ja lähettämään ne hyökkääjän hallitsemaan infrastruktuuriin.
Raportoituja kohteita olivat:
Haittakoodi keräsi ympäristömuuttujia, järjestelmätietoja ja CI-suorittimelle näkyviä salaisuuksia ennen kuin lähetti ne komento- ja hallintapalvelimelle.
Koska CI-putket sisältävät usein käyttöönoton tunnistetietoja, rakennusympäristön vaarantuminen voi avata reittejä pilvi-infrastruktuuriin, pakettirekistereihin ja tuotantokäyttöönottoihin.
Yksi Megalodon-haittakoodin päätavoitteista oli GitHub Actions OIDC -tokenit.
Nykyaikaiset CI/CD-putket käyttävät usein OpenID Connect (OIDC) -federaatiota todentaakseen pilvipalveluntarjoajille ilman pitkäaikaisten tunnistetietojen tallentamista. Sen sijaan työnkulku pyytää lyhytikäistä identiteettitokenia, jonka pilvipalveluntarjoajat vaihtavat väliaikaisiksi käyttöoikeustunnuksiksi.
Tämä lähestymistapa parantaa turvallisuutta poistamalla staattiset API-avaimet tai palvelutilin tunnistetiedot. Se tuo kuitenkin uuden riskin: jos hyökkääjä onnistuu varastamaan tokenin putken suorituksen aikana, hän voi tilapäisesti esiintyä CI-työn identiteetillä.
Koska pilvi-identiteettijärjestelmät luottavat näihin tokeneihin, varastettu token voidaan mahdollisesti vaihtaa väliaikaisiksi pilvikäyttöoikeuksiksi, joilla on samat oikeudet kuin käyttöönottoputkella.
Tämä tarkoittaa, että vaarantunut CI-työnkulku voi johtaa:
Vaikka OIDC-tokenit vanhenevat nopeasti, niihin liitetyt oikeudet voivat silti tehdä lyhytaikaisesta pääsystä erittäin arvokasta hyökkääjille.
Megalodon-kampanja osoittaa toimitusketjuhyökkäysten siirtymisen sovelluskoodin muokkaamisesta automaatioinfrastruktuurin vaarantamiseen.
Kohdistamalla CI-työnkulkuihin lähdekoodin sijaan hyökkääjät voivat:
Koska tuhannet repositoriot luottavat CI-putkiin, joilla on laajat tunnistetiedot, yksi työnkulun muutos voi paljastaa salaisuuksia monissa alijärjestelmissä.
Samaan aikaan GitHub paljasti erillisen tietoturvapoikkeaman, joka koski myrkytettyä Visual Studio Code -laajennusta, joka oli asennettu työntekijän laitteelle. Haitallinen laajennus mahdollisti hyökkääjien pääsyn noin 3 800 sisäiseen GitHub-repositorioon ennen kuin vuoto saatiin hallintaan.
Tämä vuoto jäljitettiin vaarantuneeseen kehittäjäympäristöön, ja siinä kerättiin tunnistetietoja troijalaisen laajennuksen kautta, joka oli levitetty VS Code -markkinapaikalla.
Jotkin tietoturvaraportit huomauttavat yhtäläisyyksistä ajoituksessa ja taktiikoissa tämän tapahtuman ja muiden kehittäjätyökaluihin kohdistuneiden toimitusketjuhyökkäysten välillä. Julkiset todisteet eivät kuitenkaan ole vahvistaneet, että sisäinen GitHub-vuoto olisi suoraan mahdollistanut Megalodon-kampanjan.
Toistaiseksi nämä kaksi tapahtumaa on parasta ymmärtää erillisinä mutta samanaikaisina toimitusketjun tietoturvatapahtumina, jotka vaikuttavat kehittäjäekosysteemiin.
Megalodon osoittaa, kuinka nopeasti automaatio voi skaalata toimitusketjuhyökkäyksen tuhansiin repositorioihin. Yhdistämällä tekaistut botit, automatisoidut committi ja myrkytetyt CI-työnkulut hyökkääjät muuttivat rutiininomaisen rakennusinfrastruktuurin tunnistetietojen keruujärjestelmäksi.
Tapaus vahvisti useita puolustusprioriteetteja ohjelmistotiimeille:
Koska kehitysputket hallitsevat yhä enemmän pilvikäyttöönottoja ja tuotantoinfrastruktuuria, CI/CD-työnkulkujen turvallisuudesta on tullut kriittinen osa ohjelmistotoimitusketjun puolustusta.