Gh Actions - Context Script Injections
Basiese Inligting
Let daarop dat daar sekere github-kontekste is waarvan die waardes beheer word deur die gebruiker wat die PR skep. As die github-aksie daardie data gebruik om iets uit te voer, kan dit lei tot arbitrêre koderingvoering. Hierdie kontekste eindig tipies met body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
,ref
, en title
. Byvoorbeeld (lys van hierdie writeup):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
Let daarop dat daar minder duidelike bronne van potensieel onbetroubare insette is, soos takname en e-posadresse, wat redelik buigsaam is in terme van hul toegelate inhoud. Byvoorbeeld, zzz";echo${IFS}"hello";#
sou 'n geldige taknaam wees en sou 'n moontlike aanvalsvektor vir 'n teikengit-opslag wees.
Voorbeeld van 'n skripsie-inspuitingsaanval
'n Skripsie-inspuitingsaanval kan direk binne 'n werkvloei se inline-skrips plaasvind. In die volgende voorbeeld gebruik 'n aksie 'n uitdrukking om die geldigheid van 'n pull request-titel te toets, maar voeg ook die risiko van skripsie-inspuiting by:
Voordat die skripsie uitgevoer word, word die uitdrukkings binne ${{ }}
geëvalueer en dan vervang met die resulterende waardes, wat dit kwesbaar maak vir skelmskripinjeksie.
Om bevele in hierdie werkstroom in te spuit, kan die aanvaller 'n trekversoek skep met 'n titel van a"; ls $GITHUB_WORKSPACE"
In hierdie voorbeeld word die "
karakter gebruik om die title=
"${{ github.event.pull_request.title }}"
verklaring te onderbreek, sodat die ls
bevel op die uitvoerder uitgevoer kan word.
Last updated