Atlantis Security
Basic Information
Atlantis kimsingi inakusaidia kuendesha terraform kutoka kwa Pull Requests kutoka kwa seva yako ya git.
Local Lab
Tembelea 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) ya mtumiaji wako wa github
Tekeleza
./atlantis testdrive
na itaunda demo repo ambayo unaweza kutumia ku zungumza na atlantisUnaweza 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.
Katika hali yoyote, kutoka kwa mtazamo wa washambuliaji, akaunti ya Atlantis itakuwa moja ya ya kuvutia sana 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 itakuwa 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.
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 vile unavyofanya Terraform kwa ndani, Atlantis inahitaji akreditif za mtoa huduma wako maalum.
Ni juu yako jinsi unavyotoa 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 docs 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")
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.
Container ambapo Atlantis inafanya kazi itakuwa na uwezekano mkubwa ina 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 kuziweka wazi (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
ndizo 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
Thamani zinachaguliwa katika mpangilio huu:
Bendera
Mabadiliko ya Mazingira
Faili ya Usanidi
Kumbuka kwamba katika usanidi unaweza kupata thamani za kuvutia kama tokens na nywila.
Repos Configuration
Mifumo fulani 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:
Faili ya Repo
/atlantis.yml
. Faili hii inaweza kutumika kuainisha jinsi atlantis inavyopaswa kutenda kwa 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 Default
PR Protections
Atlantis inaruhusu kuashiria ikiwa unataka PR iwe imeidhinishwa
na mtu mwingine (hata kama hiyo haijawekwa katika ulinzi wa tawi) na/au iwe 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
.
Workflow
Katika usanidi wa repo (usanidi wa upande wa seva) unaweza kuainisha workflow mpya ya chaguo-msingi, 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.
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 iainishe workflow
ili kufuta workflow ambayo itatumika.
Hii itatoa RCE katika seva ya Atlantis kwa mtumiaji yeyote anayeweza kufikia repo hiyo.
Kuangalia Sera za Conftest
Atlantis inaunga mkono 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
Kuthibitisha sifa za rasilimali wakati wa kuunda
Kukamata kufutwa kwa rasilimali bila kukusudia
Kuzuia hatari za usalama (yaani, kufichua bandari salama kwa umma)
Unaweza kuangalia jinsi ya kuikamilisha katika nyaraka.
Amri za Atlantis
Katika nyaraka unaweza kupata chaguzi unazoweza kutumia kuendesha Atlantis:
Mashambulizi
Ikiwa wakati wa kutumia unakutana na kosa hili: Error: Error acquiring the state lock
Unaweza kulitatua kwa kukimbia:
Atlantis plan RCE - Mabadiliko ya usanidi katika PR mpya
Ikiwa una ruhusa ya kuandika juu ya hifadhi, utaweza kuunda tawi jipya na kuzalisha PR. Ikiwa unaweza kutelezesha atlantis plan
(au labda inatelezwa kiotomatiki) utaweza kufanya RCE ndani ya seva ya Atlantis.
Unaweza kufanya hivi kwa kufanya Atlantis ipakue chanzo cha data cha nje. Weka tu payload kama ifuatavyo katika faili ya main.tf
:
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 la terraform, unaweza kupakia rasilimali ya nje ambayo ina rev shell:
You can find the rev shell code in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
Katika rasilimali ya nje, tumia kipengele cha ref kuficha kodi ya rev shell ya terraform 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
You can dump secrets used by terraform running atlantis plan
(terraform plan
) by putting something like this in the terraform file:
Atlantis apply RCE - Mabadiliko ya usanidi katika PR mpya
Ikiwa una ruhusa ya kuandika juu ya hifadhi, utaweza kuunda tawi jipya na kuzalisha PR. Ikiwa unaweza kufanya atlantis apply
utaweza RCE ndani ya seva ya Atlantis.
Hata hivyo, kawaida utahitaji kupita baadhi ya ulinzi:
Inayoweza kuunganishwa: Ikiwa ulinzi huu umewekwa katika Atlantis, unaweza tu kufanya
atlantis apply
ikiwa PR inaweza kuunganishwa (hii inamaanisha kuwa ulinzi wa tawi unahitaji kupitishwa).Angalia kupita kwa ulinzi wa tawi
Imekubaliwa: Ikiwa ulinzi huu umewekwa katika Atlantis, mtumiaji mwingine lazima akubali PR kabla hujaweza kufanya
atlantis apply
Kwa kawaida unaweza kutumia token ya Gitbot kupita ulinzi huu
Kufanya terraform apply
kwenye faili ya Terraform yenye uharibifu na local-exec.
Unahitaji tu kuhakikisha kuwa payload kama hizi zinaishia kwenye faili ya main.tf
:
Fuata mapendekezo kutoka kwa mbinu ya awali ili kufanya 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 kitu kama:
Something you can pass are env variables which might be helpful to bypass some protections. Check terraform env vars in https://www.terraform.io/cli/config/environment-variables
Custom Workflow
Running malicious custom build commands specified in an atlantis.yaml
file. Atlantis uses the atlantis.yaml
file from the pull request branch, not of master
.
This possibility was mentioned in a previous section:
If the server side config flag allow_custom_workflows
is set to True, workflows can be specified in the atlantis.yaml
file of each repo. It's also potentially needed that allowed_overrides
specifies also workflow
to override the workflow that is going to be used.
This will basically give RCE in the Atlantis server to any user that can access that repo.
Kupita mipango/kinga za matumizi
Ikiwa bendera ya server side config allowed_overrides
ina apply_requirements
iliyowekwa, inawezekana kwa repo kubadilisha mipango/kinga za matumizi ili kuzipita.
PR Hijacking
Ikiwa mtu atatuma atlantis plan/apply
maoni kwenye ombi lako halali la kuvuta, itasababisha terraform kuendesha wakati hutaki.
Zaidi ya hayo, ikiwa huna mipangilio katika branch protection ya kuomba kuangalia upya kila PR wakati commit mpya inatolewa 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 siri ya webhook iliyotumika au ikiwa hakuna siri ya webhook inayotumika, unaweza kuita webhook ya Atlantis na kuitisha amri za atlantis moja kwa moja.
Bitbucket
Bitbucket Cloud haikubali siri za webhook. 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 wanaoweza 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 kadhaa ya kuvutia unapaswa kujaribu kusoma:
/home/atlantis/.git-credentials
Inashikilia akreditif za ufikiaji wa vcs/atlantis-data/atlantis.db
Inashikilia akreditif 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 terraformMfano: /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
Don't Use On Public Repos
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.
Don't Use --allow-fork-prs
--allow-fork-prs
Ikiwa unafanya kazi kwenye repo ya umma (ambayo haitashauriwa, angalia hapo juu) huwezi kuweka --allow-fork-prs
(inarejelea kuwa si kweli) kwa sababu mtu yeyote anaweza kufungua ombi la kuvuta kutoka kwa fork yao hadi repo yako.
--repo-allowlist
--repo-allowlist
Atlantis inahitaji uweze kutaja orodha ya ruhusa ya repos itakazokubali webhooks kutoka kupitia lippu 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 hatari bila pia kuweka siri ya webhook.
Lippu hii inahakikisha usakinishaji wako wa Atlantis haujatumika na repos usizodhibiti. Angalia atlantis server --help
kwa maelezo zaidi.
Protect Terraform Planning
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 akreditif 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 siri za Webhook zilizowekwa kupitia mazingira ya $ATLANTIS_GH_WEBHOOK_SECRET
/$ATLANTIS_GITLAB_WEBHOOK_SECRET
. Hata na lippu ya --repo-allowlist
iliyowekwa, bila siri ya webhook, washambuliaji wanaweza kufanya maombi kwa Atlantis wakijifanya kama repo ambayo imeorodheshwa. Siri za webhook zinahakikisha kwamba maombi ya webhook yanatoka kwa mtoa huduma wako wa VCS (GitHub au GitLab).
Ikiwa unatumia Azure DevOps, badala ya siri za webhook ongeza jina la mtumiaji wa msingi na nenosiri.
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 siri za webhook lakini trafiki yako iko juu ya HTTP basi siri za webhook zinaweza kuibiwa. Wezesha SSL/HTTPS kwa kutumia lippu za --ssl-cert-file
na --ssl-key-file
.
Enable Authentication on Atlantis Web Server
Inashauriwa sana kuwezesha uthibitisho katika huduma ya wavuti. Wezesha BasicAuth kwa kutumia --web-basic-auth=true
na weka jina la mtumiaji na nenosiri kwa kutumia lippu 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
Last updated